diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 2df88d55f..000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,150 +0,0 @@ -version: 2 -jobs: - - nose-2.7: - docker: - - image: python:2.7 - steps: - - checkout - - run: pip install -r requirements.txt - - run: make test - - nose-3.4: - docker: - - image: python:3.4 - steps: - - checkout - - run: pip install -r requirements.txt - - run: make test - - nose-3.5: - docker: - - image: python:3.5 - steps: - - checkout - - run: pip install -r requirements.txt - - run: make test - - nose-3.6: - docker: - - image: python:3.6 - steps: - - checkout - - run: pip install -r requirements.txt - - run: make test - - nose: - docker: - - image: python - steps: - - checkout - - run: pip install -r requirements.txt - - run: make test - - install-2.7: - docker: - - image: python:2.7 - steps: - - checkout - - run: python setup.py install - - run: mackup --help - - install-3.4: - docker: - - image: python:3.4 - steps: - - checkout - - run: python setup.py install - - run: mackup --help - - install-3.5: - docker: - - image: python:3.5 - steps: - - checkout - - run: python setup.py install - - run: mackup --help - - install-3.6: - docker: - - image: python:3.6 - steps: - - checkout - - run: python setup.py install - - run: mackup --help - - install: - docker: - - image: python - steps: - - checkout - - run: python setup.py install - - run: mackup --help - - flake8-2.7: - docker: - - image: python:2.7 - steps: - - checkout - - run: pip install flake8 - - run: flake8 - - flake8-3.4: - docker: - - image: python:3.4 - steps: - - checkout - - run: pip install flake8 - - run: flake8 - - flake8-3.5: - docker: - - image: python:3.5 - steps: - - checkout - - run: pip install flake8 - - run: flake8 - - flake8-3.6: - docker: - - image: python:3.6 - steps: - - checkout - - run: pip install flake8 - - run: flake8 - - flake8: - docker: - - image: python - steps: - - checkout - - run: pip install flake8 - - run: flake8 - - mdl: - docker: - - image: rsrchboy/mdl - steps: - - checkout - - run: mdl . - -workflows: - version: 2 - mackup: - jobs: - - nose-2.7 - - nose-3.4 - - nose-3.5 - - nose-3.6 - - nose - - install-2.7 - - install-3.4 - - install-3.5 - - install-3.6 - - install - - flake8-2.7 - - flake8-3.4 - - flake8-3.5 - - flake8-3.6 - - flake8 - - mdl diff --git a/CONTRIBUTING.md b/.github/CONTRIBUTING.md similarity index 60% rename from CONTRIBUTING.md rename to .github/CONTRIBUTING.md index 82ec8a596..a347a9a0d 100644 --- a/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -5,14 +5,19 @@ You can: - Add or improve the support of an application (Check the [TODO][TODO] and [TOFIX][TOFIX] tasks and pick one) - Improve the Mackup codebase +- You can triage issues which may include reproducing bug reports or asking for + vital information, such as version numbers or reproduction instructions. If + you would like to start triaging issues, one easy way to get started is to + [subscribe to mackup on CodeTriage](https://www.codetriage.com/lra/mackup). + [![Open Source Helpers][CODETRIAGE-IMG]][CODETRIAGE] To speed up Pull Request (PR) approval and merger into Mackup, please follow these guidelines: - Keep one application supported per PR - Add the application to the list of supported applications in - [README.md](README.md) -- Add your change to the WIP section of the [CHANGELOG.md](CHANGELOG.md) + [README.md][README.md] +- Add your change to the WIP section of the [CHANGELOG.md][CHANGELOG.md] - Sync configurations should follow the following principles: - Syncing should not break the application, and PRs should be tested - Syncing should not break any syncing functionality internal to the @@ -27,3 +32,7 @@ Thank you for your contribution! [TODO]: https://github.com/lra/mackup/labels/TODO [TOFIX]: https://github.com/lra/mackup/labels/TOFIX +[CODETRIAGE]: https://www.codetriage.com/lra/mackup +[CODETRIAGE-IMG]: https://www.codetriage.com/lra/mackup/badges/users.svg +[README.md]: https://github.com/lra/mackup/blob/master/README.md +[CHANGELOG.md]: https://github.com/lra/mackup/blob/master/CHANGELOG.md diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..4486f9791 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +custom: ['https://tippin.me/@_LR_'] diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..21d33b5c7 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,22 @@ +### All submissions + +* [ ] I have followed the [Contributing Guidelines](https://github.com/lra/mackup/blob/master/.github/CONTRIBUTING.md) +* [ ] I have checked to ensure there aren't other open [Pull Requests](https://github.com/lra/mackup/pulls) for the same update/change + +### Adding/updating Application X Support + +* [ ] This PR is only for one application +* [ ] It has been added to the list of supported applications in the [README](https://github.com/lra/mackup/blob/master/README.md) +* [ ] Changes have been added to the WIP section of the [CHANGELOG](https://github.com/lra/mackup/blob/master/CHANGELOG.md) +* [ ] Syncing does not break the application +* [ ] Syncing does not compete with any syncing functionality internal to the application +* [ ] The configuration syncs the minimal set of data +* [ ] No file specific to the local workstation is synced +* [ ] No sensitive data is synced + +### Improving the Mackup codebase + +* [ ] My submission passes the [tests](https://github.com/lra/mackup/tree/master/tests) +* [ ] I have linted the code locally prior to submission +* [ ] I have written new tests as applicable +* [ ] I have added an explanation of what the changes do diff --git a/.github/workflows/install.yaml b/.github/workflows/install.yaml new file mode 100644 index 000000000..c1ed045d9 --- /dev/null +++ b/.github/workflows/install.yaml @@ -0,0 +1,40 @@ +name: Test installs +on: + push: + branches: + - master + pull_request: + +jobs: + + install-on-linux: + strategy: + matrix: + os: + - "ubuntu-20.04" + - "ubuntu-22.04" + python-version: + - "3.8" + - "3.9" + - "3.10" + - "3.11" + - "3.12" + runs-on: ${{ matrix.os }} + container: python:${{ matrix.python-version }} + steps: + - uses: actions/checkout@v4 + - run: pip install . + - run: mackup --help + + install-on-macos: + strategy: + matrix: + os: + - macos-11 + - macos-12 + - macos-13 + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + - run: pip install . + - run: mackup --help diff --git a/.github/workflows/linelint.yaml b/.github/workflows/linelint.yaml new file mode 100644 index 000000000..0061ea910 --- /dev/null +++ b/.github/workflows/linelint.yaml @@ -0,0 +1,19 @@ +# Make sure that all text files end with a newline character. +# Configure your editor to end every file with a newline character. +# See +name: linelint +on: + push: + branches: + - master + pull_request: + +jobs: + linelint: + runs-on: ubuntu-latest + name: Check if all files end with a newline character + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Linelint + uses: fernandrone/linelint@master diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml new file mode 100644 index 000000000..a4180836a --- /dev/null +++ b/.github/workflows/lint.yaml @@ -0,0 +1,16 @@ +name: Lint Python +on: + push: + branches: + - master + pull_request: + +jobs: + + black: + runs-on: ubuntu-latest + container: python + steps: + - run: pip install black + - uses: actions/checkout@v4 + - run: black --check --target-version py310 . diff --git a/.github/workflows/markdown.yaml b/.github/workflows/markdown.yaml new file mode 100644 index 000000000..8f73aca67 --- /dev/null +++ b/.github/workflows/markdown.yaml @@ -0,0 +1,17 @@ +name: Lint Markdown +on: + push: + branches: + - master + pull_request: + +jobs: + + mdl: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: articulate/actions-markdownlint@v1 + with: + config: .markdownlint.yaml + ignore: 'tests/' diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 000000000..e28679e76 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,34 @@ +name: Run tests +on: + push: + branches: + - master + pull_request: + +jobs: + + nose-2_7: + runs-on: ubuntu-latest + container: python:2.7 + steps: + - run: pip install docopt six nose + - uses: actions/checkout@v4 + - run: nosetests --with-coverage --cover-tests --cover-inclusive --cover-branches --cover-package=mackup + + nose: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: + - "3.8" + - "3.9" + - "3.10" + - "3.11" + # - "3.12" # Installing numpy (1.24.4): Failed + container: python:${{ matrix.python-version }} + steps: + - run: echo "${HOME}/.local/bin" >> $GITHUB_PATH + - run: pip install pipx + - run: pipx install poetry + - uses: actions/checkout@v4 + - run: make test diff --git a/.linelint.yml b/.linelint.yml new file mode 100644 index 000000000..83277987c --- /dev/null +++ b/.linelint.yml @@ -0,0 +1,19 @@ +# 'true' will fix files +autofix: false + +# list of paths to ignore, uses gitignore syntaxes (executes before any rule) +ignore: + - tests/fixtures/Library/Application Support/Box/Box Sync/sync_root_folder.txt + - tests/fixtures/Library/Mobile Documents/com~apple~CloudDocs/_blank_.md + +rules: + # checks if file ends in a newline character + end-of-file: + # set to true to enable this rule + enable: true + + # set to true to disable autofix (if enabled globally) + disable-autofix: true + + # if true also checks if file ends in a single newline character + single-new-line: true diff --git a/.markdownlint.yaml b/.markdownlint.yaml new file mode 100644 index 000000000..40598550b --- /dev/null +++ b/.markdownlint.yaml @@ -0,0 +1,2 @@ +MD004: + style: "dash" diff --git a/.mdl_style.rb b/.mdl_style.rb new file mode 100644 index 000000000..87660f6eb --- /dev/null +++ b/.mdl_style.rb @@ -0,0 +1,4 @@ +all +rule 'MD007', :indent => 2 +rule 'MD029', :style => :ordered +exclude_rule 'MD041' diff --git a/.mdlrc b/.mdlrc new file mode 100644 index 000000000..8f1aa6109 --- /dev/null +++ b/.mdlrc @@ -0,0 +1 @@ +style './.mdl_style.rb' diff --git a/CHANGELOG.md b/CHANGELOG.md index 2065e8b7a..7e43acc16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,12 +2,334 @@ ## WIP +- Add support for Trizen (via @cilenco) +- Added support for Sqitch (via @ra1fee) +- Updated support for GeekTool (via @yuchen-lea) +- Remve support for Apple Preview, problematic on macOS 14.1 +- Added support for Subler (via @EpicKris) +- Added support for SpamSieve (via @michaelgrossklos) +- Added support for Robo 3T (via @captnswing) +- Remove support for Copy engine as the service has been discontinued (via @sonnyp) + +## Mackup 0.8.39 + +- Updated support for Factorio (via @jpuris) +- Added support for Zed (via @sethherr) +- Updated support for IntelliJIdea version 2023.1 and 2023.2 +- Updated support for CLion version 2023.1 and 2023.2 +- Updated support for DataGrip version 2023.1 and 2023.2 +- Updated support for GoLand version 2023.1 and 2023.2 +- Updated support for PhpStorm version 2023.1 and 2023.2 +- Updated support for PyCharm version 2023.1 and 2023.2 +- Updated support for RubyMine version 2023.1 and 2023.2 +- Updated support for WebStorm version 2023.1 and 2023.2 +- Removed support for kindaVim (via @godbout) +- Removed support for Wooshy (via @godbout) +- Removed support for Scrolla (via @godbout) +- fix: Deprecated SafeConfigParser resolved +- bugfix: added Brewfile + +## Mackup 0.8.38 + +- Build and release with poetry + +## Mackup 0.8.37 + +- Added support for macOS Preview (via @iloveitaly) +- Fixed support for Bat (via @grigorii-horos) +- Added support for Rust (via @grigorii-horos) +- Added support for Termux (via @grigorii-horos) +- Added support for Stats (via @iloveitaly) +- Fixed support for LunarVim 1.2 (via @secsaba) +- Fixed support for Base (via @iloveitaly) +- Added support for ActivityWatch (via @YiGeon) +- Added support for dozer (via @iloveitaly) +- Added support for Zoom (via @iloveitaly) +- Fixed support for LunarVim (via @YiGeon) +- Updated support for Caffeine (via @joshmedeski) +- Added support for PrusaSlicer (via @visika) +- Added support for Logseq (via @visika) +- Updated support for iTerm2 (via @LucasLarson) +- Added support for SwitchHosts (via @zxjlm) +- Added support for Warp (via @drallas) +- Added support for Wooshy (via @godbout) +- Added support for Scrolla (via @godbout) +- Updated support for Amethyst (via @max-sixty) +- Added support for Elgato StreamDeck (via @fharper) +- Added support for ni (via @wxh16144) +- Added support for TablePlus Favorites (via @pesonn) +- Added support for asdf .default-npm-packages +- Updated poetry config location (via @syphar) +- Updated support for vim (via @iarchean) +- Updated support for Maven: include settings-security.xml (via @stevenodb) +- Added support for GoLand 2019.2 (via @carlossg) + +## Mackup 0.8.36 + +- Added support for LunarVim (via @YiGeon) +- Added support for Airflow (via @Evertt) +- Updated support for yabai (via @Liu233w) +- Updated suport for skhd (via @jonasdiemer) +- Added support for Sizzy (via @driftingly) + +## Mackup 0.8.35 + +- Updated support for iTerm2 (via @michielgerritsen) +- Added support for NSLogger (via @lavareX) +- Added support for Fork (via @lavareX) +- Updated support for Proxymann Setapp version (via @JanC) +- Added support for Btop (via @Mersid) +- Updated support for Nushell (via @maradude) +- Updated support for CleanShot (via @timfee) +- Added backwards-compatibility support for Espanso (via @joshmedeski) + +## Mackup 0.8.34 + +- Updated support for Bash it (via @jacopkane) +- Added support for Remote Desktop Manager (via @jpmat296) +- Fixed support for asciinema (via @revolter) +- Added support for Mumu (via @fharper) +- Updated support for fasd (via @doubleloop) +- Updated support for lazygit (via @joshmedeski) +- Added support for Nova (via @guillaumealgis) +- Added support for Oracle Cloud Infrastructure CLI (via @Djelibeybi) +- Added support for PicGo (via @SSBun) +- Added support for Flameshot (via @joshmedeski) +- Added support for Planner (via @spawnedc) +- Fixed support for k9s (via @gamussa) +- Added support for act (via @fharper) +- Added support for notion-enhancer (via @fharper) +- Added support for GitFox (via @L3K0V) +- Updated support for Bartender through SetApp (via @dbhagen) +- Updated support for Xonsh (via @wy-z) +- Added support for TablePlus history (via @annuh) +- Added support for xbar (via @dnicolson) +- Added support for Beyond Compare (via @mgraham) +- Added support for kindaVim (via @godbout) + +## Mackup 0.8.33 + +- Added support for Lightroom Classic (via @treee111) +- Fixed support for Hocus Focus (via @jrolfs) +- Added support for KeePassXC (via @harens) +- Fixed support for poetry (via @ameyuuno) +- Added support for npm package npmrc (via @jdvivar) +- Added support for rubiTrack 5 (via @otherguy) +- Updated support for Fisher (via @kidonng) +- Added support for Qv2ray (via @kidonng) +- Added support for Neofetch (via @kidonng) +- Added support for PsySH (via @nesk) +- Added support for polybar(via @jneo8) +- Added support for Tiles (via @damianoamatruda) +- Added support for Flake8 (via @hongqn) +- Fixed support for HandBrake (via @damianoamatruda) +- Added support for Loopback (via @damianoamatruda) +- Added support for IDA Pro (via @damianoamatruda) +- Added support for MuteSpotifyAds (via @damianoamatruda) +- Added support for Ghidra (via @damianoamatruda) +- Added support for Logitech Options (via @damianoamatruda) +- Added support for OBS (via @damianoamatruda) +- Update uninstall prompt for accuracy (via @soneji) +- Added support for Proxyman (via @NghiaTranUIT) +- Updated support for IntelliJIdea version 2021.1 (via @steffenmalisi) +- Added support for Sublime Text 4 (via @TCattd) +- Added support for Contexts (via @antoni-k) +- Added support for Swish (via @antoni-k) +- Added support for AltTab (via @aiotter) +- Added support for Goku (via @thebengeu) +- Added support for Akamai CLI (via @anirudhbagri) +- Added support for FastScripts (via @darrenbkl) +- Added support for Affinity Designer (via @EpicKris) +- Added support for Affinity Photo (via @EpicKris) +- Added support for Affinity Publisher (via @EpicKris) +- Added support for MTMR (via @dec0dOS) +- Added support for Rocket (via @revolter) +- Updated support for BetterTouchTool (via @grapswiz) +- Updated support for k9s (via @dfang) +- Added support for Mendeley Desktop (via @aiotter) +- Added support for CleanShot, Mosaic, Eagle and Nuget (via @ye4241) + +## Mackup 0.8.32 + +- Fixed an issue due to a duplicate entry in the intellijidea config +- Added support for Visual Studio for Mac version 8 (via @Qythyx) + +## Mackup 0.8.31 + +- Fixed an issue due to a duplicate entry in the webstorm config + +## Mackup 0.8.30 + +- Added support for SpaceVim (via @ionlights) +- Added support for clashX (via @awkj) +- Added support for Brave (via @cbenv) +- Added support for Nushell (via @leesiongchan) +- Updated support for Clipy (via @jclerc) +- Added support for aerc (via @Crocmagnon) +- Added support for espanso (via @maxandersen) +- Added support for lazygit (via @joshmedeski) +- Added support for WebStorm versions 2019.4, 2020.2, 2020.3, 2020.4 (via @bdcarr) +- Added support for rbenv (via @dfang) +- Added support for draft (via @dfang) +- Added support for lf (via @joshmedeski) +- Added support for Beets (via @publicarray) +- Added support for Krew (via @exherb) +- Added support for Homebrew (via @exherb) +- Added support for PyCharm versions 2020.2, 2020.3, 2020.4 (via @ameyuuno) +- Added support for Netlify (via @pgilad) +- Added support for K9s (via @tareksamni) +- Added support for Powerlevel10k (via @tareksamni) +- Updated support for aria2 (via @hongqn) +- Update support for IntelliJ (via @scooby) +- Added support for zoxide (via @kidonng) +- Added support for Raycast (via @janniks) + +## Mackup 0.8.29 + +- Added support for waybar (via @mk-atlassian) +- Added support for mako (via @mk-atlassian) +- Added support for Swaywm (via @mk-atlassian) +- Added support for termite (via @mk-atlassian) +- Added support for Calibre (via @ttuygun @bodak) +- Added support for Poetry (via @ryoppippi) +- Added support for Music (via @dnicolson) +- Added support for Kaggle (via @ryoppippi) +- Added support for SBT 1.0 (via @austek) +- Added support for FiloSottile/mkcert (via @paxperscientiam) +- Added support for Finicky (via @ryoppippi) +- Added support for GoodSync (via @cereallarceny) +- Added support for mitmproxy (via @etiennelb) +- Added support for Hocus Focus (via @jrolfs) +- Added support for TripMode (via @ttuygun) +- Added support for Starship (via @callummr) +- Added support for Joplin (via @geekrainy) +- Added support for iStat Menus 6 and unified config files (via @lumaxis) +- Added the `--root` command line option +- Removed support for Sketch +- Added support for PyCharm 2020.1 (via @ameyuuno) +- Added support for Powerline (via @ho-oto) +- Added support for Yarn (via @dhb52) +- Add support for Quitter (via @guillaumealgis) + +## Mackup 0.8.28 + +- Added support for Bat (via @joshmedeski) +- Added support for newer versions of WebStorm +- Updated support for Marta to capture new config files in 0.6.1 (via @petrbouchal) +- Added support for Rectangle (via @arvindch) +- Added support for BitBar (via @dnicolson) +- Added support for JS Beautifier (via @dnicolson) +- Added support for ripgrep (via @dnicolson) +- Added support for Bump (via @dnicolson) +- Added support for rclone (via @dnicolson) +- Added support for NoSQLBooster for MongoDB (via @ivan-ha) +- Updated support for RStudio, config stored in JSON as of v1.3.776 (via @petrbouchal) +- Vulnerability fix +- Removed support for Python 3.5 +- Removed support for the Box storage +- Fix: suppress errors when handling symlinks (via @doubleloop) +- Migrated all config files to the XDG format +- Add support for Python 3.8 + +## Mackup 0.8.27 + +- Added support for SpaceLauncher (via @joshmedeski) +- Added support for Dejal Time Out +- Add support for PhpStorm 2019.2 +- Migrated build system to pipenv +- Replaced flake8 with black to enforce code formatting +- Add support for proselint (via @paxperscienitam) +- Add support for ToothFairy scripts (via @dnicolson) +- Add support for TablePlus (via @alekseyp) +- Add support for Startupizer2 (via @narze) +- Added support for pnpm (@via paxperscientiam) +- Added partial support for Gimp (via @paxperscientiam) + +## Mackup 0.8.26 + +- Hotfix, Mackup could not run in most scenarios + +## Mackup 0.8.25 + +- Add support for yabai (via @mbdmbd) +- Improve support for Little Snitch (via @lorenzofanchi) +- Improve support for Photoshop CC 2019 (via @lorenzofanchi) +- Add support for ColorSlurp (via @lorenzofanchi) +- Add support for Secure Pipes (via @lorenzofanchi) +- Add support for Xee (via @lorenzofanchi) +- Add support for 2Do (via @lorenzofanchi) +- Add support for Shifty (via @lorenzofanchi) +- Add support for Pock (via @lorenzofanchi) +- Add support for Multitouch (via @lorenzofanchi) +- Add support for Magnet (via @lorenzofanchi) +- Added support for git ignore file +- Added default ignore file for eslint +- Improve support for Vim, add .vim/spell folder +- Add support for mycli +- Add support for PixelSnap 2 (via @dnicolson) +- Add support for PDFjam (via @paxperscientiam) + +## Mackup 0.8.24 + +- Prevent users to use Mackup's storage directory to store their files. +- Fix a few broken application support. + +## Mackup 0.8.23 + +- Improve support for Vim, add .vim/after directory +- Remove problematic com.macromates.textmate.plist file for TextMate (via @egze) +- Add support for rofi (via @pat-s) +- Add support for deepin-dde-file-manager (via @sUyMur) +- Add support for Deepin-dde-dock (via @sUyMur) +- Add support for deepin-terminal (via @sUyMur) +- Add support for grsync (via @sUyMur) +- Add support for ulauncher (via @sUyMur) +- Add support for Tilix (via @pat-s) +- Improve support for TextMate (via @egze) +- Add support for Storyist 3 writing software (via @mutantant) +- Add support for WordGrinder (via @mutantant) +- Fix support for Adobe Illustrator CC2019 (v23) +- remove `bundle` directory from vim config (via @cocobear) +- Add support for Sublime Merge (via @krupenja) +- Add support for Marta (via @krupenja) +- Add support for Goldendict (via @krupenja) +- Add support for IINA (via @krupenja) +- Improve support for fish (via @whtsky) +- Improve support for weget (via @paxperscientiam) +- Add support for zabbix-cli (via @dzogrim) +- Add support for ForkLift 3 (via @lukeaskew) +- Add support for eqMac2 (via @lukeaskew) +- Add support for Fisher (via @nashirox) +- Add support for PhpStorm 2018.3 (via @baijunyao) +- Add support for Focus (via @atipugin) +- Add support for Choosy (via @markchitty) +- Update support for Microsoft Remote Desktop 10 +- Add support for PhpStorm 2019.1 (via @baijunyao) +- Add support for IntelijIdea2019.1 (via @utegental) + +## Mackup 0.8.22 + +- Add support for DataGrip 2017.3, 2018.1, 2018.2, 2018.3 (via @utegental) +- Add support for Volt (via @mrymtsk) +- Add support for alternative config path for Alacritty (via @foray1010) +- Add support for WebStorm 2018.3 (via @KrzysztofKarol) +- Removed support for BBEdit +- Add support for IntelliJIDEA 2018.3 (via @nysos3) +- Add support for GoLand 2018.3 (via @rayrutjes) +- Fix an issue for users without a `~/.config/` folder. + +## Mackup 0.8.21 + +- Update support for i3 (@KyleWJohnston) - Add support for bc (via @paxperscientiam) - Add support for Google clasp (via @paxperscientiam) - Add support for hstr (via @paxperscientiam) - Add support for b-ryan/powerline-shell (via @paxperscientiam) - Add support for kovidgoyal/kitty (via @foray1010) -- Remove support for Copy engine as the service has been discontinued (via @sonnyp) +- Add support for PhpStorm 2018.2 (via @j13k) +- Add support for Oh My Tmux (via @solarknight) +- Fix support for Karabiner Elements (via @mrymtsk) +- Add support for IntelliJIdea2018.3 (via @utegental) ## Mackup 0.8.20 @@ -22,6 +344,7 @@ - Add support for xonsh (via @kmcm0) - Add support for Alacritty - Add support for WebStorm 2017.1, 2017.2, 2017.3, 2018.1, 2018.2 (via @KrzysztofKarol) +- Add support for Adobe Illustrator CC2019 (v23) ## Mackup 0.8.19 @@ -89,6 +412,7 @@ - Add support for DaisyDisk (via @cafferata) - Add support for MySQLWorkbench (via @cafferata) - Add support for Openbox (via @jpfarcy) +- Change OS X to macOS to match OS name change (via @samdoran) ## Mackup 0.8.16 @@ -274,7 +598,7 @@ - Added support of WebStorm 10 (via @morphinewan) - Added support of Gnome SSH Tunnel Manager (via @skyrocknroll) - Added support for Hammerspoon (via @jkaan) -- Added support for Bitchx (via @troywilson_) +- Added support for Bitchx (via @troywilson\_) - Added support for EditorConfig (via @chadluo) - Add com.agilebits.onepassword4.plist in 1Password (via @amatos) - Added support for Versions (via @amatos) @@ -584,7 +908,7 @@ - Added support for Ack (via @adamlogic) - Added support for Stata and SelfControl (via @kfinlay) - Added support for LaTeXiT (via @twsh) -- Do not link ~/Library/* files on GNU/Linux, should fix #104 +- Do not link ~/Library/\* files on GNU/Linux, should fix #104 ## Mackup 0.5 diff --git a/INSTALL.md b/INSTALL.md index 23dd83af5..7ca9edb90 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -3,7 +3,7 @@ There are 2 ways to run mackup 1. Install it with Homebrew (OSX only) -1. Install it with PIP (OSX and GNU/Linux) +2. Install it with PIP (OSX and GNU/Linux) ## Install @@ -17,6 +17,21 @@ brew install mackup mackup -h ``` +### With Homebrew (OSX only) master branch for latest updates + +Want to install latest master releases instead of waiting on homebrew package version? + +[Homebrew reference](https://docs.brew.sh/Manpage#install-options-formulacask) + +```bash +# Install master +brew install --HEAD +# Check if are using the master or stale package +brew switch mackup + +mackup -h +``` + ### With Python's PIP ```bash diff --git a/Makefile b/Makefile index 09f13bb3b..979fbba7a 100644 --- a/Makefile +++ b/Makefile @@ -1,21 +1,20 @@ -develop: - python setup.py develop - -undevelop: - python setup.py develop --uninstall - lint: # Install mdl with "gem install mdl" mdl . - flake8 test: - nosetests --with-coverage --cover-tests --cover-inclusive --cover-branches --cover-package=mackup + poetry install --with dev + poetry run nosetests --with-coverage --cover-branches --cover-package=mackup clean: + rm -rf __pycache__ + rm -rf mackup/__pycache__ + rm -rf tests/__pycache__ rm -rf dist/ - rm -rf Mackup.egg-info/ release: clean - python setup.py sdist - twine upload dist/* + poetry build + poetry publish + +black: + black --target-version py310 . diff --git a/README.md b/README.md index d2de976e6..be6103bba 100644 --- a/README.md +++ b/README.md @@ -2,28 +2,36 @@ Keep your application settings in sync. -[![Circle CI](https://circleci.com/gh/lra/mackup.svg?style=shield)](https://circleci.com/gh/lra/mackup) +[![Status](https://github.com/lra/mackup/workflows/Mackup/badge.svg)](https://github.com/lra/mackup/actions) +[![snapcraft](https://snapcraft.io/mackup/badge.svg)](https://snapcraft.io/mackup) ## Table of content -- [Quickstart](#quickstart) -- [Usage](#usage) -- [What does it do](#what-does-it-do) -- [Bullsh\*t, what does it really do to my files](#bullsht-what-does-it-really-do-to-my-files) -- [Supported Storages](#supported-storages) -- [Supported Applications](#supported-applications) -- [Can you support application X](#can-you-support-application-x) -- [Why did you do this](#why-did-you-do-this) -- [What platforms are supported](#what-platforms-are-supported) -- [What's up with the weird name](#whats-up-with-the-weird-name) -- [Where can I find more information](#where-can-i-find-more-information) +- [Mackup](#mackup) + - [Table of content](#table-of-content) + - [Quickstart](#quickstart) + - [Usage](#usage) + - [What does it do](#what-does-it-do) + - [Bullsh\*t, what does it really do to my files](#bullsht-what-does-it-really-do-to-my-files) + - [Backup](#backup) + - [Restore](#restore) + - [Uninstall](#uninstall) + - [Supported Storages](#supported-storages) + - [Unsupported Storages](#unsupported-storages) + - [Supported Applications](#supported-applications) + - [Can you support application X](#can-you-support-application-x) + - [Personalization \& configuration](#personalization--configuration) + - [Why did you do this](#why-did-you-do-this) + - [What platforms are supported](#what-platforms-are-supported) + - [What's up with the weird name](#whats-up-with-the-weird-name) + - [Where can I find more information](#where-can-i-find-more-information) ## Quickstart If you have [Dropbox](https://www.dropbox.com) installed and want to use it to save your config files, that's super easy. -On OS X, if you want an easy install, you can install +On macOS, if you want an easy install, you can install [Homebrew](http://brew.sh/) and do: ```bash @@ -34,7 +42,7 @@ brew install mackup mackup backup ``` -If not running OS X, or you don't like Homebrew, you can use [pip](https://pip.pypa.io/en/stable/). +If not running macOS, or you don't like Homebrew, you can use [pip](https://pip.pypa.io/en/stable/). > Note: The below command will check if a previous version of Mackup > is already installed on your system. @@ -48,6 +56,12 @@ pip install --upgrade mackup mackup backup ``` +> On **Ubuntu**, pip will install to the current user's home +> directory rather than system-wide. Because of this, when +> installing pip on **Ubuntu** you will need to run `pip install` +> with the `--system` flag as well (on other platforms this is not +> needed) + You're all set and constantly backed up from now on. Next, on any new workstation, do: @@ -109,8 +123,8 @@ folder, in the `.gitconfig` file. If you have Dropbox, these things happen when you launch `mackup backup`: 1. `cp ~/.gitconfig ~/Dropbox/Mackup/.gitconfig` -1. `rm ~/.gitconfig` -1. `ln -s ~/Dropbox/Mackup/.gitconfig ~/.gitconfig` +2. `rm ~/.gitconfig` +3. `ln -s ~/Dropbox/Mackup/.gitconfig ~/.gitconfig` Now your `git` config is always backed up and up to date on all your workstations. @@ -142,28 +156,43 @@ in it stay put, so that any other computer also running Mackup is unaffected. - [Dropbox](https://www.dropbox.com/) - [Google Drive](https://drive.google.com/) - [iCloud](http://www.apple.com/icloud/) -- [Box](https://www.box.com) - Anything able to sync a folder (e.g. [Git](http://git-scm.com/)) See the [README](doc/README.md) file in the doc directory for more info. +## Unsupported Storages + +- [Box](https://www.box.com): No longer supported as it ignores dotfiles, see + . + ## Supported Applications - [1Password 4](https://agilebits.com/onepassword) +- [2Do](http://www.2doapp.com/) - [Ack](http://beyondgrep.com/) +- [act](https://github.com/nektos/act) - [Adium](https://adium.im/) - [Adobe Camera Raw](http://www.adobe.com/products/photoshop/extend.html) - [Adobe Illustrator CC](https://www.adobe.com/products/illustrator.html) - [Adobe Photoshop CC](http://www.adobe.com/products/photoshop.html) - [Adobe Photoshop Lightroom CC](https://www.adobe.com/products/photoshop-lightroom.html) +- [Adobe Photoshop Lightroom Classic](https://www.adobe.com/de/products/photoshop-lightroom-classic.html) +- [aerc](https://aerc-mail.org/) +- [Affinity Designer](https://affinity.serif.com/designer) +- [Affinity Photo](https://affinity.serif.com/photo) +- [Affinity Publisher](https://affinity.serif.com/publisher) +- [Airflow](https://airflowapp.com/) - [Airmail](http://airmailapp.com/) +- [Akamai-CLI](https://developer.akamai.com/cli) - [Alacritty](https://github.com/jwilm/alacritty) +- [AltTab](https://alt-tab-macos.netlify.app/) - [Amethyst](https://ianyh.com/amethyst/) - [Ancient Domains of Mystery](http://www.adom.de/home/index.html) - [Android Studio](https://developer.android.com/sdk/) - [Ansible](http://www.ansible.com/) - [AppCleaner](http://freemacsoft.net/appcleaner/) - [AppCode](http://www.jetbrains.com/objc/) +- [Apple Music](https://www.apple.com/apple-music/) - [Apptivate](http://www.apptivateapp.com/) - [Arara](https://github.com/cereda/arara) - [aria2c](http://aria2.sourceforge.net/) @@ -179,25 +208,34 @@ See the [README](doc/README.md) file in the doc directory for more info. - [Autokey](https://code.google.com/p/autokey/) - [Awareness](http://iamfutureproof.com/tools/awareness/) - [AWS Command Line Interface](https://aws.amazon.com/cli/) +- [ActivityWatch](http://activitywatch.net/) - [Bartender](http://www.macbartender.com/) - [Bash it](https://github.com/Bash-it/bash-it) - [Bash](http://www.gnu.org/software/bash/) -- [BBEdit](http://www.barebones.com/products/bbedit/) +- [Base](https://menial.co.uk/base/) +- [Bat](https://github.com/sharkdp/bat) - [Bc](https://www.gnu.org/software/bc/) - [Beatport Pro](https://www.beatport.com/desktop) +- [Beets](http://beets.io/) - [BetterSnapTool](http://www.boastr.net/) - [BetterTouchTool](http://www.boastr.net/) +- [Beyond Compare](https://scootersoftware.com/) - [BibDesk](http://bibdesk.sourceforge.net/) - [Billings Pro Server Admin](https://www.marketcircle.com/billingspro/download/billingspro-server/) +- [BitBar](https://getbitbar.com/) - [Bitchx](http://www.bitchx.org/) - [Blackfire](https://blackfire.io/) - [Blender](https://blender.org/) - [Boto](https://github.com/boto/boto) - [Boxer](http://boxerapp.com) - [Brackets](http://brackets.io/) +- [Brave](https://brave.com/) +- [Btop](https://github.com/aristocratos/btop) +- [Bump](https://github.com/fabiospampinato/bump) - [Bundler](http://bundler.io) - [Byobu](http://byobu.co/) - [Caffeine](http://lightheadsw.com/caffeine/) +- [Calibre](https://calibre-ebook.com/) - [Capture One](http://www.phaseone.com/Imaging-Software/Capture-One.aspx) - [Cartographica](https://www.macgis.com/) - [Cerebro](https://cerebroapp.com/) @@ -205,9 +243,12 @@ See the [README](doc/README.md) file in the doc directory for more info. - [Cheat](https://github.com/chrisallenlane/cheat) - [Chef](https://www.chef.io/chef/) - [Chicken](http://sourceforge.net/projects/chicken/) +- [Choosy](https://www.choosyosx.com/) - [chunkwm](https://github.com/koekeishiya/chunkwm) - [Cider](https://github.com/msanders/cider) +- [ClashX](https://github.com/yichengchen/clashX) - [Clasp](https://github.com/google/clasp) +- [CleanShot](https://cleanshot.com/) - [Clementine](https://www.clementine-player.org/) - [CLion](https://www.jetbrains.com/clion/) - [ClipMenu](http://www.clipmenu.com/) @@ -216,11 +257,13 @@ See the [README](doc/README.md) file in the doc directory for more info. - [Coda 2](http://panic.com/coda/) - [Colloquy](http://colloquy.info/) - [ColorSchemer Studio 2](http://www.colorschemer.com/osx_info.php) +- [ColorSlurp](http://colorslurp.com/) - [ColorSync](https://en.wikipedia.org/wiki/ColorSync) - [Composer](https://getcomposer.org/) - [Concentrate](http://www.getconcentrating.com/) - [Conky](https://github.com/brndnmtthws/conky) - [Consular](https://github.com/achiu/consular) +- [Contexts](https://contexts.co) - [ControlPlane](http://www.controlplaneapp.com/) - [CopyQ](https://github.com/hluk/CopyQ) - [CoRD](http://cord.sourceforge.net/) @@ -229,10 +272,14 @@ See the [README](doc/README.md) file in the doc directory for more info. - [cVim](https://github.com/1995eaton/chromium-vim) - [Cyberduck](https://cyberduck.io/) - [DaisyDisk](https://daisydiskapp.com) +- [DataGrip](https://www.jetbrains.com/datagrip/) - [Dash](https://kapeli.com/dash) - [Day-O](http://www.shauninman.com/archive/2011/10/20/day_o_mac_menu_bar_clock) - [DbVisualizer](https://www.dbvis.com/) - [Deal Alert](http://dealalertapp.com/) +- [Deepin-dde-dock](https://github.com/linuxdeepin/dde-dock) +- [Deepin-dde-file-manager](https://www.deepin.org/en/original/dde-file-manager/) +- [Deepin-Terminal](https://github.com/linuxdeepin/deepin-terminal) - [Default Folder X](http://www.stclairsoft.com/DefaultFolderX/) - [Devil's Pie 2](http://www.gusnan.se/devilspie2/) - [Devil's Pie]() @@ -240,54 +287,74 @@ See the [README](doc/README.md) file in the doc directory for more info. - [Divvy](http://mizage.com/divvy/) - [Docker](https://www.docker.com/) - [Dolphin](https://dolphin-emu.org/) +- [Doom Emacs](https://github.com/hlissner/doom-emacs) - [Double Commander](http://doublecmd.sourceforge.net/) - [Doxie](http://www.getdoxie.com/) +- [Dozer](https://github.com/Mortennn/Dozer) +- [Draft](https://draft.sh/) - [Droplr](https://droplr.com/) - [Dropzone 3](https://aptonic.com/dropzone3/) - [Drush](http://www.drush.org/) +- [Eagle (ogdesign)](https://eagle.cool/) - [EditorConfig](http://editorconfig.org/) - [Electrum](https://electrum.org/#home) +- [Elgato StreamDeck](https://www.elgato.com/en/welcome-to-stream-deck) - [Emacs](http://www.gnu.org/software/emacs/) - [Enjoyable](https://yukkurigames.com/enjoyable/) - [Environmental Station Alpha](http://www.hempuli.com/esa/) +- [eqMac2](https://bitgapp.com/eqmac/) - [ESLint](https://eslint.org/) +- [espanso](https://espanso.org) - [Exercism](http://exercism.io/) - [ExpanDrive](http://www.expandrive.com/) - [Factorio](https://www.factorio.com) - [Fantastical](http://flexibits.com/fantastical) - [fasd](https://github.com/clvv/fasd) - [fastlane](https://fastlane.tools) +- [FastScripts](https://redsweater.com/fastscripts/) - [Feeds](http://www.feedsapp.com/) - [FileZilla](https://filezilla-project.org/) -- [Fish](http://ridiculousfish.com/shell/) -- [Fisherman](http://fisherman.sh/) +- [Finicky](https://github.com/johnste/finicky) +- [Fish](http://fishshell.com/) +- [Fisher](https://github.com/jorgebucaran/fisher) +- [Flake8](https://flake8.pycqa.org/) +- [Flameshot](https://flameshot.org) - [FlexGet](http://flexget.com/) - [Flux](https://justgetflux.com/) +- [Focus](https://heyfocus.com) - [Fontconfig](https://www.freedesktop.org/wiki/Software/fontconfig/) - [FontExplorer X](http://www.fontexplorerx.com/) - [Forge](http://www.slightlymagic.net/wiki/Forge) -- [ForkLift 2](http://www.binarynights.com/forklift/) +- [Fork](https://git-fork.com/) +- [ForkLift](http://www.binarynights.com/forklift/) - [Franz](https://meetfranz.com) - [Gas Mask](https://github.com/2ndalpha/gasmask/) - [gdb](https://www.gnu.org/software/gdb/) - [Gear Player](https://www.gearmusicplayer.com/) - [GeekTool](http://projects.tynsoe.org/en/geektool/) - [GHCi](https://wiki.haskell.org/GHC/GHCi) +- [Ghidra](https://ghidra-sre.org) - [Ghostwriter](https://wereturtle.github.io/ghostwriter/) -- [Git Hooks](https://github.com/icefox/git-hooks) +- [Gimp](https://www.gimp.org/) +- [Git Hooks](https://github.com/git-hooks/git-hooks) - [Git](http://git-scm.com/) - [Gitbox](http://gitboxapp.com/) +- [GitFox](https://www.gitfox.app) - [GitKraken](https://www.gitkraken.com) - [GitUp](http://gitup.co/) - [Gmail Notifr](http://ashchan.com/projects/gmail-notifr) - [GMVault](http://gmvault.org/) - [Gnome SSH Tunnel Manager](http://sourceforge.net/projects/gstm/) -- [GnuPG](https://www.gnupg.org/) (NOTE: includes private keys) +- [GnuPG](https://www.gnupg.org/) - [Go2Shell](http://zipzapmac.com/Go2Shell) +- [Goku](https://github.com/yqrashawn/GokuRakuJoudo) - [GoLand](https://www.jetbrains.com/go/) +- [Goldendict](http://goldendict.org/) +- [GoodSync](https://goodsync.com/) - [GoShare](https://github.com/dictget/goshare) - [Gradle](http://gradle.org) - [GrandTotal 3](http://www.mediaatelier.com/GrandTotal4/) +- [grsync](http://www.opbyte.it/grsync/) - [Hammerspoon](http://www.hammerspoon.org/) - [HandBrake](https://handbrake.fr/) - [Hands Off!](http://www.oneperiodic.com/products/handsoff/) @@ -296,7 +363,9 @@ See the [README](doc/README.md) file in the doc directory for more info. - [Heroku](https://www.heroku.com/) - [HexChat](https://hexchat.github.io/) - [Hexels](http://hexraystudios.com/hexels/) +- [Hocus Focus](http://hocusfoc.us/) - [Homebridge](https://github.com/nfarina/homebridge) +- [Homebrew](https://brew.sh) - [Houdini](http://uglyapps.co.uk/houdini/) - [Hstr](https://github.com/dvorka/hstr) - [Htop](http://htop.sourceforge.net/) @@ -307,29 +376,36 @@ See the [README](doc/README.md) file in the doc directory for more info. - [HyperSwitch](https://bahoom.com/hyperswitch) - [i2cssh](https://github.com/wouterdebie/i2cssh) - [i3](https://i3wm.org/) -- [i3wm](http://i3wm.org/) +- [IDA Pro](https://www.hex-rays.com/products/ida/) - [IdeaVim](https://github.com/JetBrains/ideavim) +- [IINA](https://iina.io) - [Inkscape](https://inkscape.org/) - [Insomnia](https://insomnia.rest/) - [IntelliJIDEA](http://www.jetbrains.com/idea/) - [IPython](http://ipython.org/) - [Irssi](http://www.irssi.org/) -- [iStat Menus 5](https://bjango.com/mac/istatmenus/) +- [iStat Menus](https://bjango.com/mac/istatmenus/) - [Itsycal](https://github.com/sfsam/Itsycal) - [iTerm2](https://www.iterm2.com/) - [iTermocil](https://github.com/TomAnthony/itermocil) +- [iTunes Scripts](https://www.apple.com/) - [Janus](https://github.com/carlhuda/janus) - [Jitouch](http://www.jitouch.com/) -- [jrnl](http://maebert.github.io/jrnl/) +- [Joplin](https://joplinapp.org/) +- [jrnl](https://jrnl.sh) +- [JS Beautifier](https://github.com/beautify-web/js-beautify) - [JSHint](http://jshint.com/) - [Julia](http://julialang.org) - [Jumpcut](http://jumpcut.sourceforge.net/) - [Jupyter](http://jupyter.org/) +- [k9s](https://k9scli.io/) +- [Kaggle](https://kaggle.com/) - [Kaleidoscope](http://www.kaleidoscopeapp.com/) - [Karabiner Elements](https://github.com/tekezo/Karabiner-Elements) - [Karabiner](https://pqrs.org/osx/karabiner/) - [Kdenlive](https://kdenlive.org/) - [KeePassX](http://www.keepassx.org/) +- [KeePassXC](https://keepassxc.org/) - [KeepingYouAwake](https://github.com/newmarcel/KeepingYouAwake) - [Keka](http://www.kekaosx.com/en/) - [Keybase](https://keybase.io/) @@ -338,11 +414,14 @@ See the [README](doc/README.md) file in the doc directory for more info. - [KeyRemap4MacBook](https://pqrs.org/osx/karabiner/) - [Khd](https://github.com/koekeishiya/khd/) - [kitty](https://sw.kovidgoyal.net/kitty/) +- [Krew](https://github.com/kubernetes-sigs/krew) - [Kubectl](https://kubernetes.io/docs/reference/kubectl/overview/) - [Kwm](https://koekeishiya.github.io/kwm/) - [LaTeXiT](http://www.chachatelier.fr/latexit/latexit-home.php?lang=en) - [LaunchBar](https://www.obdev.at/products/launchbar/index.html) +- [lazygit](https://github.com/jesseduffield/lazygit) - [Ledger](http://ledger-cli.org) +- [lf](https://github.com/gokcehan/lf) - [LibreOffice](https://www.libreoffice.org/) - [Liftoff](https://github.com/thoughtbot/liftoff) - [Light Table](http://lighttable.com/) @@ -350,36 +429,53 @@ See the [README](doc/README.md) file in the doc directory for more info. - [Liquid Prompt](https://github.com/nojhan/liquidprompt) - [LittleSnitch](http://www.obdev.at/products/littlesnitch/) - [Livestreamer](http://livestreamer.tanuki.se/) +- [Logitech Options](https://www.logitech.com/en-us/product/options) +- [Logseq](https://logseq.com/) - [Lollypop](https://gnumdk.github.io/lollypop-web/) +- [Loopback](https://rogueamoeba.com/loopback/) - [Luftrausers](http://luftrausers.com) +- [LunarVim](https://www.lunarvim.org/) - [MacDive](http://www.mac-dive.com/) - [MacDown](http://macdown.uranusjr.com/) - [MacOSX](http://www.apple.com/osx/) - [MacVim](https://github.com/macvim-dev/macvim) - [Magic Launch](https://www.oneperiodic.com/products/magiclaunch/) - [MagicPrefs](http://magicprefs.com/) +- [Magnet](https://magnet.crowdcafe.com/) - [Maid](https://github.com/benjaminoakes/maid/) +- [Mail](https://support.apple.com/guide/mail/welcome/mac) - [Mailmate](http://freron.com/) - [Mailplane](http://mailplaneapp.com/) +- [mako](https://wayland.emersion.fr/mako/) - [Marked 2](http://marked2app.com) +- [Marta](https://marta.yanex.org/) - [MATLAB](http://www.mathworks.com/products/matlab/) - [Maven](http://maven.apache.org) - [Max](http://sbooth.org/Max/) +- [Mendeley Desktop](https://www.mendeley.com) - [MenuMeters](http://www.ragingmenace.com/software/menumeters/) - [Mercurial](https://www.mercurial-scm.org/) - [MercuryMover](http://www.heliumfoot.com/mercurymover/) - [Messages](http://www.apple.com/osx/apps/#messages) - [Micro](https://github.com/zyedidia/micro) - [Microsoft Azure CLI](https://github.com/Azure/azure-xplat-cli) -- [Microsoft Remote Desktop](https://itunes.apple.com/us/app/microsoft-remote-desktop/id715768417?mt=12&ls=1) +- [Microsoft Remote Desktop](https://itunes.apple.com/us/app/microsoft-remote-desktop-10/id1295203466) +- [mitmproxy](https://mitmproxy.org/) +- [mkcert](https://github.com/FiloSottile/mkcert) - [MonoDevelop](http://www.monodevelop.com) - [Moom](http://manytricks.com/moom/) +- [Mosaic](https://lightpillar.com/mosaic.html) - [Mou](http://25.io/mou/) - [mpd](http://www.musicpd.org) - [MPlayerX](http://mplayerx.org) - [MPS Youtube](https://github.com/mps-youtube/mps-youtube) - [MPV](https://mpv.io/) +- [MTMR](https://github.com/Toxblh/MTMR) +- [Multitouch](https://multitouch.app/) +- [Mumu](https://getmumu.com) - [MusicBrainz Picard](https://picard.musicbrainz.org/) +- [MuteSpotifyAds](https://github.com/simonmeusel/MuteSpotifyAds) +- [mycli](https://www.mycli.net/) - [myrepos](https://github.com/joeyh/myrepos) - [MySQL Workbench](https://www.mysql.com/products/workbench/) - [MySQL](http://www.mysql.com/) @@ -387,70 +483,108 @@ See the [README](doc/README.md) file in the doc directory for more info. - [Nano](http://www.nano-editor.org/) - [Navicat](http://navicat.com/) - [ncmpcpp](http://rybczak.net/ncmpcpp/) +- [Neofetch](https://github.com/dylanaraps/neofetch) - [neovim](https://github.com/neovim/neovim) - [Nethack](http://www.nethack.org) +- [Netlify](https://www.netlify.com/) - [newsbeuter](http://newsbeuter.org/) - [ngrok](https://ngrok.com/) +- [ni](https://github.com/antfu/ni/) - [Nomacs](http://nomacs.org/) +- [NoSQLBooster for MongoDB](https://www.nosqlbooster.com/) +- [notion-enhancer](https://notion-enhancer.github.io/) +- [Nova](https://www.nova.app/) - [npm](https://www.npmjs.com/) +- [npmrc](https://github.com/deoxxa/npmrc/) +- [NSLogger](https://github.com/fpillet/NSLogger) +- [nuget](https://www.nuget.org/) +- [Nushell](https://www.nushell.sh/) - [nvALT](http://brettterpstra.com/projects/nvalt/) - [nvpy](https://github.com/cpbotha/nvpy) +- [OBS](https://obsproject.com) - [Oh My Fish](https://github.com/bpinto/oh-my-fish) -- [Oh My Zsh](https://github.com/robbyrussell/oh-my-zsh) +- [Oh My Tmux](https://github.com/gpakosz/.tmux) - [OmniFocus](https://www.omnigroup.com/omnifocus/) - [OmniGraffle](https://www.omnigroup.com/omnigraffle/) - [Openbox](http://openbox.org) - [OpenEmu](http://openemu.org) - [OpenSSH](http://www.openssh.com/) +- [Oracle Cloud Infrastructure CLI](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/cliconcepts.htm) - [Paintbrush](http://paintbrush.sourceforge.net/) - [Pandoc](http://pandoc.org) - [Pass](http://www.passwordstore.org/) - [Pastebot](http://tapbots.com/software/pastebot/) - [Path Finder](http://www.cocoatech.com/pathfinder/) +- [PDFjam](https://warwick.ac.uk/fac/sci/statistics/staff/academic-research/firth/software/pdfjam/) - [Pear](http://pear.php.net/) - [Pentadactyl](http://5digits.org/pentadactyl/) - [Perl](https://www.perl.org/) - [Phoenix](https://github.com/kasper/phoenix) - [PhoneView](https://www.ecamm.com/mac/phoneview/) - [PhpStorm](http://www.jetbrains.com/phpstorm/) +- [PicGo](https://github.com/Molunerfinn/PicGo) - [Pidgin](https://www.pidgin.im) - [PIP](http://www.pip-installer.org/) - [PixelSnap](https://getpixelsnap.com/) +- [PixelSnap 2](https://getpixelsnap.com/) +- [Planner](https://useplanner.com/) +- [Pnpm](https://pnpm.js.org/) +- [Pock](https://pock.pigigaldi.com) - [Poedit](http://poedit.net/) +- [Poetry](https://python-poetry.org) - [PokerStars](https://www.pokerstars.com/) +- [Polybar](https://polybar.github.io/) - [PopClip](http://pilotmoon.com/popclip/) - [Popcorn-Time](https://popcorntime.io/) - [PostgreSQL](http://www.postgresql.org/) - [Postico](https://eggerapps.at/postico/) - [Pow](http://pow.cx/) +- [Powerlevel10k](https://github.com/romkatv/powerlevel10k) +- [Powerline](https://github.com/powerline/powerline) - [Powerline-shell](https://github.com/b-ryan/powerline-shell) - [Prezto](https://github.com/sorin-ionescu/prezto) - [Processing](https://processing.org/) +- [Proselint](https://github.com/amperser/proselint) - [ProxyChains NG](http://sourceforge.net/projects/proxychains-ng/) - [ProxyChains](http://proxychains.sourceforge.net) +- [Proxyman](https://proxyman.io) +- [PrusaSlicer](https://www.prusa3d.com/prusaslicer/) +- [PsySH](https://psysh.org/) - [Punto Switcher](https://punto.yandex.ru/) - [PyCharm](https://www.jetbrains.com/pycharm/) - [PyPI](https://pypi.python.org/pypi) - [PyRadio](http://www.coderholic.com/pyradio/) - [Querious](http://www.araelium.com/querious/) - [Quicksilver](http://qsapp.com/) +- [Quitter](https://marco.org/apps) - [Qutebrowser](http://qutebrowser.org/) +- [Qv2ray](https://qv2ray.net/) - [R](http://www.r-project.org/) - [Rails](http://rubyonrails.org/) - [Ranger](https://ranger.github.io/) +- [Raycast](https://raycast.com/) +- [Rbenv](https://www.github.com/rbenv/rbenv) +- [Rclone](https://rclone.org/) +- [Rectangle](https://rectangleapp.com/) - [Redshift Scheduler](https://github.com/spantaleev/redshift-scheduler) - [Redshift](http://jonls.dk/redshift/) +- [Remote Desktop Manager](https://remotedesktopmanager.com/) - [Rhythmbox](https://wiki.gnome.org/Apps/Rhythmbox) - [Rime](http://rime.im/) -- [Robomongo](http://robomongo.org/) +- [ripgrep](https://github.com/BurntSushi/ripgrep) +- [Robo 3T](http://robomongo.org/) +- [Rocket](https://matthewpalmer.net/rocket/) +- [Rofi](https://github.com/DaveDavenport/rofi) - [Royal TSX](http://www.royaltsx.com/ts/osx/features) - [RStudio](https://www.rstudio.com/) - [rTorrent](http://libtorrent.rakshasa.no/) +- [rubiTrack 5](https://www.rubitrack.com) - [Rubocop](https://github.com/bbatsov/rubocop) - [Ruby Version Manager](https://rvm.io/) - [Ruby Version](https://gist.github.com/fnichol/1912050) - [Ruby](https://www.ruby-lang.org/) - [RubyMine](http://www.jetbrains.com/ruby/) +- [Rust](https://www.rust-lang.org/) - [S3cmd](http://s3tools.org/s3cmd) - [SABnzbd](http://sabnzbd.org/) - [SBCL](http://www.sbcl.org/) @@ -461,16 +595,18 @@ See the [README](doc/README.md) file in the doc directory for more info. - [Scrivener](http://www.literatureandlatte.com/scrivener.php) - [Scroll Reverser](https://pilotmoon.com/scrollreverser/) - [SecureCRT](https://www.vandyke.com/products/securecrt/) +- [Secure Pipes](http://www.opoet.com/) - [Seil](https://pqrs.org/osx/karabiner/seil.html.en) - [SelfControl](http://selfcontrolapp.com/) - [Sequel Pro](http://www.sequelpro.com/) - [ShiftIt](https://github.com/fikovnik/ShiftIt) +- [Shifty](https://shifty.natethompson.io/) - [Shimo](https://www.feingeist.io/shimo/) - [ShowyEdge](https://pqrs.org/osx/ShowyEdge/index.html.en) - [SHSH Blobs](https://en.wikipedia.org/wiki/SHSH_blob) - [Shuttle](http://fitztrev.github.io/shuttle/) - [SizeUp](http://www.irradiatedsoftware.com/sizeup/) -- [Sketch](http://sketchapp.com/) +- [Sizzy](https://sizzy.co/) - [skhd](https://github.com/koekeishiya/skhd/) - [Skim](http://skim-app.sourceforge.net/) - [Skitch](https://evernote.com/skitch/) @@ -481,66 +617,98 @@ See the [README](doc/README.md) file in the doc directory for more info. - [Smooth Mouse](http://smoothmouse.com/) - [Soulver](http://www.acqualia.com/soulver/) - [SourceTree](https://www.sourcetreeapp.com/) +- [SpaceLauncher](https://spacelauncherapp.com) - [Spacemacs](https://github.com/syl20bnr/spacemacs) +- [SpaceVim](https://github.com/SpaceVim/SpaceVim) +- [SpamSieve](https://c-command.com/spamsieve) - [Spark](http://www.shadowlab.org/softwares/spark.php) - [Spectacle](https://www.spectacleapp.com/) - [Spectrwm](https://github.com/conformal/spectrwm/wiki) - [Splice](https://splice.com/) - [Spotify Notifications](http://spotify-notifications.citruspi.io/) - [Spotify](https://www.spotify.com/) +- [Sqitch](https://sqitch.org/) +- [Starship](https://starship.rs/) +- [Startupizer2](http://appledoc.gentlebytes.com/startupizer/) - [Stata](http://www.stata.com/) +- [Stats](https://github.com/exelban/stats) - [Stay](https://cordlessdog.com/stay/) +- [Storyist](http://storyist.com/) +- [Subler](https://subler.org) +- [Sublime Merge](https://www.sublimemerge.com/) - [Sublime Text](http://www.sublimetext.com/) - [Subversion](http://subversion.apache.org/) - [SuperDuper!](http://www.shirt-pocket.com/SuperDuper/SuperDuperDescription.html) - [Surge](http://surge.run/manual/) +- [Sway](https://swaywm.org/) - [Swinsian](http://swinsian.com/) +- [Swish](https://highlyopinionated.co/swish/) +- [SwitchHosts](https://github.com/oldj/SwitchHosts) - [T](http://sferik.github.io/t/) -- [TaskPaper](http://www.hogbaysoftware.com/products/taskpaper) +- [TablePlus](https://tableplus.io) +- [TaskPaper](https://www.taskpaper.com) - [Taskwarrior](http://taskwarrior.org/) -- [Teamocil](http://remiprev.github.io/teamocil/) +- [Teamocil](https://github.com/remi/teamocil) - [Telegram for macOS](https://macos.telegram.org) - [Terminal](http://www.apple.com/osx/apps/) - [Terminator](https://launchpad.net/terminator/) +- [termite](https://github.com/thestinger/termite) +- [Termux](https://termux.dev/) - [TextExpander](https://smilesoftware.com/textexpander) - [TextMate](http://macromates.com/) - [Textual](http://www.codeux.com/textual/) - [Tig](https://github.com/jonas/tig) +- [Tiles](https://www.sempliva.com/tiles/) +- [Tilix](https://github.com/gnunn1/tilix) +- [Timeout](https://www.dejal.com/timeout/) - [tint2](https://code.google.com/p/tint2/) - [TinyFugue](http://tinyfugue.sourceforge.net) - [Tmux](http://tmux.sourceforge.net/) - [Tmuxp](https://github.com/tony/tmuxp) - [Tmuxinator](https://github.com/tmuxinator/tmuxinator) - [Todo.txt CLI](http://todotxt.com/) +- [ToothFairy](https://c-command.com/toothfairy/) - [TotalSpaces2](http://totalspaces.binaryage.com/) - [Tower](http://www.git-tower.com/) - [Transmission](http://www.transmissionbt.com/) - [Transmit](http://panic.com/transmit/) +- [TripMode](https://www.tripmode.ch) +- [Trizen](https://github.com/trizen/trizen) - [Tunnelblick](https://tunnelblick.net) - [tvnamer](https://github.com/dbr/tvnamer) - [Twitterrific](http://twitterrific.com/) - [Typinator](http://www.ergonis.com/products/typinator/) - [Typora](https://typora.io) - [uTorrent](http://www.utorrent.com/) +- [ulauncher](https://ulauncher.io/) - [Ventrilo](http://www.ventrilo.com/) +- [Verdaccio](https://verdaccio.org/) - [Versions](http://www.versionsapp.com) - [Vim](http://www.vim.org/) - [Vimperator](http://www.vimperator.org/vimperator) - [Viscosity](http://www.sparklabs.com/viscosity/) +- [Visual Studio Code](https://code.visualstudio.com/) - [Visual Studio Code - Insiders](https://code.visualstudio.com/insiders) -- [Visual Studio Code](https://code.visualstudio.com) +- [Visual Studio Code - OSS](https://github.com/Microsoft/vscode) +- [VSCodium](https://vscodium.com/) - [Visual Studio for Mac](https://www.visualstudio.com/vs/visual-studio-mac/) - [VLC](http://www.videolan.org/) +- [Volt](https://github.com/vim-volt/volt) - [Wakatime](https://wakatime.com/) +- [Warp](https://www.warp.dev) +- [waybar](https://github.com/Alexays/Waybar) - [WebStorm](https://www.jetbrains.com/webstorm/) - [Wget](https://www.gnu.org/software/wget/) - [WhatsApp Web](https://web.whatsapp.com/) - [Wireshark 2](https://www.wireshark.org) - [Witch](http://manytricks.com/witch/) +- [WordGrinder](https://cowlark.com/wordgrinder/) - [WordPress WP-CLI](http://wp-cli.org/) - [Workrave](http://www.workrave.org/) - [X11](http://www.x.org/) +- [Xee](https://theunarchiver.com/xee) - [Xamarin Studio](https://xamarin.com/studio) +- [xbar](https://xbarapp.com/) - [XBindKeys](http://www.nongnu.org/xbindkeys/) - [Xchat](http://xchat.org/) - [Xcode](https://developer.apple.com/xcode/) @@ -548,11 +716,16 @@ See the [README](doc/README.md) file in the doc directory for more info. - [XLD](http://tmkk.undo.jp/xld/) - [Xonsh](https://xon.sh) - [XtraFinder](http://www.trankynam.com/xtrafinder/) +- [yabai](https://github.com/koekeishiya/yabai) +- [yarn](https://yarnpkg.com) - [Yummy FTP](http://www.yummysoftware.com/) +- [zabbix-cli](https://github.com/usit-gd/zabbix-cli) - [zathura](https://pwmt.org/projects/zathura/) +- [zed](https://zed.dev/) +- [Zoom](http://zoom.com/) +- [zoxide](https://github.com/ajeetdsouza/zoxide) - [Zsh](http://zsh.sourceforge.net/) - [Übersicht](http://tracesof.net/uebersicht/) -- iTunes Applescripts ## Can you support application X @@ -563,7 +736,6 @@ We can [with your help](doc#get-official-support-for-an-application) ;) Have an application that shouldn't be generally supported but that you use? Or a cool file you want to sync? -- Use a `~/.mackup.cfg` to [sync a single file](doc#configuration) (e.g. `~/.gitignore`) - Create a `~/.mackup` directory to [sync an application or any file or directory](doc#add-support-for-an-application-or-any-file-or-directory) ## Why did you do this @@ -595,7 +767,7 @@ And it's [GPL](http://www.gnu.org/licenses/gpl.html), of course. ## What platforms are supported -- OS X +- macOS - GNU/Linux ## What's up with the weird name diff --git a/doc/README.md b/doc/README.md index 7879d55a1..d1aa0f600 100644 --- a/doc/README.md +++ b/doc/README.md @@ -3,34 +3,25 @@ All the configuration is done in a file named `.mackup.cfg` stored at the root of your home folder. -To configure Mackup, create a file named ´.mackup.cfg´ in your home directory. +To configure Mackup, create a file named `.mackup.cfg` in your home directory. ```bash vi ~/.mackup.cfg ``` -Add personal files to sync by including the `configuration_files` header, e.g. - -```ini -[configuration_files] -.gitignore_global -.config/your-custom-file -``` - -Note that Mackup assumes the file paths listed here are relative to your home -directory. - ## Storage -### Dropbox - You can specify the storage type Mackup will use to store your configuration files. -For now you have 4 options: `dropbox`, `google_drive`, `copy` and `file_system`. + +For now, you have 4 options: `dropbox`, `google_drive`, `icloud`, `copy` and `file_system`. + If none is specified, Mackup will try to use the default: `dropbox`. With the `dropbox` storage engine, Mackup will automatically figure out your Dropbox folder. +### Dropbox + ```ini [storage] engine = dropbox @@ -48,6 +39,9 @@ engine = google_drive ### iCloud +If you choose the `iCloud` storage engine, Mackup will store store your +configuration files in the `~/Library/Mobile\ Documents/com\~apple\~CloudDocs/` folder. + ```ini [storage] engine = icloud @@ -117,9 +111,19 @@ engine = icloud directory = .config/mackup ``` +### Switching Storage + +If you ever change your mind and switch storage solutions after Mackup is +already setup (ex: from `dropbox` to `icloud`), complete the following steps. + +1. Run `mackup uninstall` on all computers +2. Copy your Mackup files to the new storage location +3. Change the storage provider details in your `.mackup.cfg` file (see above) +4. Run `mackup backup` on the main computer and `mackup restore` on all others + ## Applications -### Only sync one or two application +### Only sync one or two applications In your home folder, create a file named `.mackup.cfg` and add the application names to allow in the `[applications_to_sync]` section, one by line. @@ -131,6 +135,9 @@ ssh adium ``` +Use `mackup list` to get a list of valid application names. Don't use fancy +names (with spaces) here. + A [sample](.mackup.cfg) of this file is available in this folder. Just copy it in your home folder: @@ -150,6 +157,9 @@ ssh adium ``` +Use `mackup list` to get a list of valid application names. Don't use fancy +names (with spaces) here. + A [sample](.mackup.cfg) of this file is available in this folder. Just copy it in your home folder: @@ -164,11 +174,16 @@ fork Mackup and open a [Pull Request](https://help.github.com/articles/using-pull-requests). The stock application configs are in the `mackup/applications` directory. -### Add support for an application or any file or directory +Remember to follow the guidelines in [CONTRIBUTING.md](https://github.com/lra/mackup/blob/master/.github/CONTRIBUTING.md) +to get your Pull Request merged faster. + +### Add support for an application or (almost) any file or directory You can customize the Mackup engine and add support for unsupported applications or just custom files and directories you'd like to sync. +NOTE: Files and directory to be synced should be rooted at $HOME. + Let's say that you'd like to add support for Nethack (config file: `.nethackrc`) and for the `bin` and `.hidden` directories you keep in your home. @@ -185,7 +200,7 @@ touch ~/.mackup/my-files.cfg Edit those files ```bash -$ cat ~/.mackup/nethack.cfg +$ nano ~/.mackup/nethack.cfg [application] name = Nethack @@ -194,7 +209,7 @@ name = Nethack ``` ```bash -$ cat ~/.mackup/my-files.cfg +$ nano ~/.mackup/my-files.cfg [application] name = My personal synced files and dirs @@ -238,3 +253,46 @@ You can add and test an application by following these steps: - if everything works as expected: - run `make undevelop` to revert to the official version - commit and push the change to your fork and then create the Pulls Request + +### Add support for an application using the XDG directory + +For application storing their configuration under the `~/.config` folder, you +should not hardcode it. The `.config` folder is the default location but it can +be named differently on other users' systems by setting the `XDG_CONFIG_HOME` +environment variable. + +See + +Mackup supports this mechanism and provide a dedicated `xdg_configuration_files` +section for those applications. + +If any path starts with `.config`, remove the `.config` part and move the path +to a dedicated `xdg_configuration_files` section. + +Instead of: + +```ini +[application] +name = Git + +[configuration_files] +.gitconfig +.config/git/config +.config/git/ignore +.config/git/attributes +``` + +Use this: + +```ini +[application] +name = Git + +[configuration_files] +.gitconfig + +[xdg_configuration_files] +git/config +git/ignore +git/attributes +``` diff --git a/doc/configuration_merge_guide.md b/doc/configuration_merge_guide.md index f793e8d49..25daf61f2 100644 --- a/doc/configuration_merge_guide.md +++ b/doc/configuration_merge_guide.md @@ -10,8 +10,8 @@ Machine B that you would live to move over to Machine A. The problem is that if you use Mackup to send Machine A's bash configuration settings to Machine B, you will permanently lose any configurations on Machine B that you wanted to keep. Mackup obviously has no idea which features you want -to keep and which ones you don't so you'll have to do a little bit of work to -merge the different configuration files yourself before using Mackup. +to keep and which ones you don't, so you'll have to do a bit of work to merge +the different configuration files yourself before using Mackup. ## Step 0: Read Through This Entire Guide First @@ -22,12 +22,12 @@ It will probably save you some pain in the long run. First, pick the app you wish to keep in sync. Then determine which configuration files will be synced for that application by doing the following: -1. [Install Mackup](INSTALL.md) -1. Create a `.mackup.cfg` file in your home directory -1. Add the following two lines to `.mackup.cfg`. Replace **bash** +1. [Install Mackup](./../INSTALL.md) +2. Create a `.mackup.cfg` file in your home directory +3. Add the following two lines to `.mackup.cfg`. Replace **bash** in the example below with the name of your application. -``` +```text [applications_to_sync] bash ``` @@ -35,7 +35,7 @@ bash You can get a list of supported apps by running `mackup list`. 1. Save the file -1. Run the following command: +2. Run the following command: `mackup --dry-run --verbose backup` @@ -64,9 +64,9 @@ from other machines. 1. Create a backup of each machine's configuration files for the app you wish to sync. -1. Choose a machine that will serve as the initial "master". It doesn't really +2. Choose a machine that will serve as the initial "master". It doesn't really matter which one. -1. Edit your configuration files on the master machine so that they +3. Edit your configuration files on the master machine so that they represent the ideal version of the file you wish to distribute out to your other machines. @@ -80,7 +80,7 @@ for your application on all machines. ##### Sample backup commands for Machine A** -``` +```bash mkdir ~/bash_backup cp ~/.bash_profile ~/bash_backup/bash_profile.bak cp ~/.bash_login ~/bash_backup/bash_login.bak @@ -90,7 +90,7 @@ cp ~/.bash_login ~/bash_backup/bash_login.bak ##### Sample backup commands for Machine B -``` +```bash mkdir ~/bash_backup cp ~/.bash_profile ~/bash_backup/bash_profile.bak cp ~/.bash_login ~/bash_backup/bash_login.bak @@ -102,23 +102,23 @@ Machine A will be our master so we now edit the existing configuration files on Machine A. We will use the vim text editor to do this for each of our configuration files: -``` +```bash vim .bash_profile vim .bash_login ``` -When editing these configuration files on Machine A, copy and and paste the settings +When editing these configuration files on Machine A, copy and paste the settings from Machine B that you want to keep. In essence, you are manually merging the -configuratoin files together. Once you are satisfied the configuration files -have all the settings you want and need, you are ready to push out your changes from -the master machine. +configuration files together. Once you are satisfied the configuration files +have all the settings you want and need, you are ready to push out your changes +from the master machine. ### Method 2: Backup Push-Merge Approach 1. Choose a machine that will serve as the initial "master". You'll probably want to use choose the machine you use most and like its configuration settings the best. -1. For each machine that aren't the "master" (i.e. "slaves"), back up all the +2. For each machine that aren't the "master" (i.e. "slaves"), back up all the configuration files for each app that you want to sync. That's it for now. However, there will be more work for you later. @@ -132,7 +132,7 @@ Machine B: ##### Sample backup commands for Machine B** -``` +```bash mkdir ~/bash_backup cp ~/.bash_profile ~/bash_backup/bash_profile.bak cp ~/.bash_login ~/bash_backup/bash_login.bak @@ -160,7 +160,7 @@ If you used Method 1 in Step 2 above, you are done. You may you discover that you didn't quite merge the files exactly the way you wanted but don't worry, that's why you created the configuration file backups. You can grab snippets from these backup configuration files and add them in to the live -configuraton files and then easily push the changes out to all your +configuration files and then easily push the changes out to all your machines using mackup. If you used Method 2, you'll need to merge in new features over time. As you diff --git a/doc/develop.md b/doc/develop.md new file mode 100644 index 000000000..bdfb175b6 --- /dev/null +++ b/doc/develop.md @@ -0,0 +1,29 @@ +# Develop + +```sh +# Install a recent non-system python +brew install python + +# Install pyenv to be able to easily switch Python versions +brew install pyenv + +# Install the package and virtualenv manager +brew install pipenv + +# Install the most recent Python +pyenv install 3.7.4 + +# Setup local dev +cd .../mackup +pyenv local 3.7.4 +pipenv install +pipenv shell +make develop + +# You can now edit files and see the impact of your changes +mackup --version +nosetests + +# Cleanup +make undevelop +``` diff --git a/doc/release.md b/doc/release.md index ae6167c9a..1c3bd313a 100644 --- a/doc/release.md +++ b/doc/release.md @@ -1,9 +1,10 @@ # Release - 1. Move all the WIP changes under a new version in the [changelog](../CHANGELOG.md) - 1. Increment the version in [constants.py](../mackup/constants.py) - 1. `git commit` with the message `Mackup X.Y.Z` - 1. `git tag ` - 1. `git push` - 1. `git push --tags` - 1. `make release` +1. Move all the WIP changes under a new version in the [changelog](../CHANGELOG.md) +1. Increment the version in [constants.py](../mackup/constants.py) +1. Increment the version in [pyproject.toml](../pyproject.toml) +1. `git commit` with the message `Mackup X.Y.Z` +1. `git tag ` +1. `git push` +1. `git push --tags` +1. `make release` diff --git a/mackup/application.py b/mackup/application.py index e0a78c3f4..7e7522dc2 100644 --- a/mackup/application.py +++ b/mackup/application.py @@ -40,8 +40,10 @@ def getFilepaths(self, filename): Returns: home_filepath, mackup_filepath (str, str) """ - return (os.path.join(os.environ['HOME'], filename), - os.path.join(self.mackup.mackup_folder, filename)) + return ( + os.path.join(os.environ["HOME"], filename), + os.path.join(self.mackup.mackup_folder, filename), + ) def backup(self): """ @@ -51,7 +53,7 @@ def backup(self): if exists home/file if home/file is a real file if exists mackup/file - are you sure ? + are you sure? if sure rm mackup/file mv home/file mackup/file @@ -65,17 +67,17 @@ def backup(self): (home_filepath, mackup_filepath) = self.getFilepaths(filename) # If the file exists and is not already a link pointing to Mackup - if ((os.path.isfile(home_filepath) or - os.path.isdir(home_filepath)) and - not (os.path.islink(home_filepath) and - (os.path.isfile(mackup_filepath) or - os.path.isdir(mackup_filepath)) and - os.path.samefile(home_filepath, - mackup_filepath))): - + if (os.path.isfile(home_filepath) or os.path.isdir(home_filepath)) and not ( + os.path.islink(home_filepath) + and (os.path.isfile(mackup_filepath) or os.path.isdir(mackup_filepath)) + and os.path.samefile(home_filepath, mackup_filepath) + ): if self.verbose: - print("Backing up\n {}\n to\n {} ..." - .format(home_filepath, mackup_filepath)) + print( + "Backing up\n {}\n to\n {} ...".format( + home_filepath, mackup_filepath + ) + ) else: print("Backing up {} ...".format(filename)) @@ -84,23 +86,22 @@ def backup(self): # Check if we already have a backup if os.path.exists(mackup_filepath): - # Name it right if os.path.isfile(mackup_filepath): - file_type = 'file' + file_type = "file" elif os.path.isdir(mackup_filepath): - file_type = 'folder' + file_type = "folder" elif os.path.islink(mackup_filepath): - file_type = 'link' + file_type = "link" else: - raise ValueError("Unsupported file: {}" - .format(mackup_filepath)) - - # Ask the user if he really want to replace it - if utils.confirm("A {} named {} already exists in the" - " backup.\nAre you sure that you want to" - " replace it ?" - .format(file_type, mackup_filepath)): + raise ValueError("Unsupported file: {}".format(mackup_filepath)) + + # Ask the user if he really wants to replace it + if utils.confirm( + "A {} named {} already exists in the" + " backup.\nAre you sure that you want to" + " replace it?".format(file_type, mackup_filepath) + ): # Delete the file in Mackup utils.delete(mackup_filepath) # Copy the file @@ -118,16 +119,21 @@ def backup(self): utils.link(mackup_filepath, home_filepath) elif self.verbose: if os.path.exists(home_filepath): - print("Doing nothing\n {}\n " - "is already backed up to\n {}" - .format(home_filepath, mackup_filepath)) + print( + "Doing nothing\n {}\n " + "is already backed up to\n {}".format( + home_filepath, mackup_filepath + ) + ) elif os.path.islink(home_filepath): - print("Doing nothing\n {}\n " - "is a broken link, you might want to fix it." - .format(home_filepath)) + print( + "Doing nothing\n {}\n " + "is a broken link, you might want to fix it.".format( + home_filepath + ) + ) else: - print("Doing nothing\n {}\n does not exist" - .format(home_filepath)) + print("Doing nothing\n {}\n does not exist".format(home_filepath)) def restore(self): """ @@ -136,7 +142,7 @@ def restore(self): Algorithm: if exists mackup/file if exists home/file - are you sure ? + are you sure? if sure rm home/file link mackup/file home/file @@ -150,18 +156,23 @@ def restore(self): # If the file exists and is not already pointing to the mackup file # and the folder makes sense on the current platform (Don't sync # any subfolder of ~/Library on GNU/Linux) - file_or_dir_exists = (os.path.isfile(mackup_filepath) or - os.path.isdir(mackup_filepath)) - pointing_to_mackup = (os.path.islink(home_filepath) and - os.path.exists(mackup_filepath) and - os.path.samefile(mackup_filepath, - home_filepath)) + file_or_dir_exists = os.path.isfile(mackup_filepath) or os.path.isdir( + mackup_filepath + ) + pointing_to_mackup = ( + os.path.islink(home_filepath) + and os.path.exists(mackup_filepath) + and os.path.samefile(mackup_filepath, home_filepath) + ) supported = utils.can_file_be_synced_on_current_platform(filename) if file_or_dir_exists and not pointing_to_mackup and supported: if self.verbose: - print("Restoring\n linking {}\n to {} ..." - .format(home_filepath, mackup_filepath)) + print( + "Restoring\n linking {}\n to {} ...".format( + home_filepath, mackup_filepath + ) + ) else: print("Restoring {} ...".format(filename)) @@ -172,34 +183,41 @@ def restore(self): if os.path.exists(home_filepath): # Name it right if os.path.isfile(home_filepath): - file_type = 'file' + file_type = "file" elif os.path.isdir(home_filepath): - file_type = 'folder' + file_type = "folder" elif os.path.islink(home_filepath): - file_type = 'link' + file_type = "link" else: - raise ValueError("Unsupported file: {}" - .format(mackup_filepath)) + raise ValueError("Unsupported file: {}".format(mackup_filepath)) - if utils.confirm("You already have a {} named {} in your" - " home.\nDo you want to replace it with" - " your backup ?" - .format(file_type, filename)): + if utils.confirm( + "You already have a {} named {} in your" + " home.\nDo you want to replace it with" + " your backup?".format(file_type, filename) + ): utils.delete(home_filepath) utils.link(mackup_filepath, home_filepath) else: utils.link(mackup_filepath, home_filepath) elif self.verbose: if os.path.exists(home_filepath): - print("Doing nothing\n {}\n already linked by\n {}" - .format(mackup_filepath, home_filepath)) + print( + "Doing nothing\n {}\n already linked by\n {}".format( + mackup_filepath, home_filepath + ) + ) elif os.path.islink(home_filepath): - print("Doing nothing\n {}\n " - "is a broken link, you might want to fix it." - .format(home_filepath)) + print( + "Doing nothing\n {}\n " + "is a broken link, you might want to fix it.".format( + home_filepath + ) + ) else: - print("Doing nothing\n {}\n does not exist" - .format(mackup_filepath)) + print( + "Doing nothing\n {}\n does not exist".format(mackup_filepath) + ) def uninstall(self): """ @@ -221,13 +239,15 @@ def uninstall(self): (home_filepath, mackup_filepath) = self.getFilepaths(filename) # If the mackup file exists - if (os.path.isfile(mackup_filepath) or - os.path.isdir(mackup_filepath)): + if os.path.isfile(mackup_filepath) or os.path.isdir(mackup_filepath): # Check if there is a corresponding file in the home folder if os.path.exists(home_filepath): if self.verbose: - print("Reverting {}\n at {} ..." - .format(mackup_filepath, home_filepath)) + print( + "Reverting {}\n at {} ...".format( + mackup_filepath, home_filepath + ) + ) else: print("Reverting {} ...".format(filename)) @@ -241,5 +261,4 @@ def uninstall(self): # Copy the Dropbox file to the home folder utils.copy(mackup_filepath, home_filepath) elif self.verbose: - print("Doing nothing, {} does not exist" - .format(mackup_filepath)) + print("Doing nothing, {} does not exist".format(mackup_filepath)) diff --git a/mackup/applications/2do.cfg b/mackup/applications/2do.cfg new file mode 100644 index 000000000..7383989b1 --- /dev/null +++ b/mackup/applications/2do.cfg @@ -0,0 +1,5 @@ +[application] +name = 2Do + +[configuration_files] +Library/Preferences/com.guidedways.TodoMac.plist diff --git a/mackup/applications/robomongo.cfg b/mackup/applications/act.cfg similarity index 51% rename from mackup/applications/robomongo.cfg rename to mackup/applications/act.cfg index 177835292..6e15b606f 100644 --- a/mackup/applications/robomongo.cfg +++ b/mackup/applications/act.cfg @@ -1,5 +1,5 @@ [application] -name = Robomongo +name = act [configuration_files] -.config/robomongo +.actrc diff --git a/mackup/applications/activitywatch.cfg b/mackup/applications/activitywatch.cfg new file mode 100644 index 000000000..01d57f2df --- /dev/null +++ b/mackup/applications/activitywatch.cfg @@ -0,0 +1,5 @@ +[application] +name = Activity Watch + +[configuration_files] +Library/Application Support/activitywatch diff --git a/mackup/applications/aerc.cfg b/mackup/applications/aerc.cfg new file mode 100644 index 000000000..5f8f45fcb --- /dev/null +++ b/mackup/applications/aerc.cfg @@ -0,0 +1,5 @@ +[application] +name = aerc + +[configuration_files] +Library/Preferences/aerc diff --git a/mackup/applications/affinity-designer.cfg b/mackup/applications/affinity-designer.cfg new file mode 100644 index 000000000..2835e5eac --- /dev/null +++ b/mackup/applications/affinity-designer.cfg @@ -0,0 +1,5 @@ +[application] +name = Affinity Designer + +[configuration_files] +Library/Containers/Affinity Designer/Data/Library/Application Support/user diff --git a/mackup/applications/affinity-photo.cfg b/mackup/applications/affinity-photo.cfg new file mode 100644 index 000000000..3fe5214ba --- /dev/null +++ b/mackup/applications/affinity-photo.cfg @@ -0,0 +1,5 @@ +[application] +name = Affinity Photo + +[configuration_files] +Library/Containers/Affinity Photo/Data/Library/Application Support/user diff --git a/mackup/applications/affinity-publisher.cfg b/mackup/applications/affinity-publisher.cfg new file mode 100644 index 000000000..09067fe57 --- /dev/null +++ b/mackup/applications/affinity-publisher.cfg @@ -0,0 +1,5 @@ +[application] +name = Affinity Publisher + +[configuration_files] +Library/Containers/Affinity Publisher/Data/Library/Application Support/user diff --git a/mackup/applications/airflow.cfg b/mackup/applications/airflow.cfg new file mode 100644 index 000000000..5524e7912 --- /dev/null +++ b/mackup/applications/airflow.cfg @@ -0,0 +1,6 @@ +[application] +name = Airflow + +[configuration_files] +Library/Preferences/com.bitcavehq.Airflow.plist +Library/Application Support/Airflow diff --git a/mackup/applications/akamai-cli.cfg b/mackup/applications/akamai-cli.cfg new file mode 100644 index 000000000..849d7d751 --- /dev/null +++ b/mackup/applications/akamai-cli.cfg @@ -0,0 +1,5 @@ +[application] +name = Akamai-CLI + +[configuration_files] +.edgerc diff --git a/mackup/applications/alacritty.cfg b/mackup/applications/alacritty.cfg index 44cab2936..d0709ce6f 100644 --- a/mackup/applications/alacritty.cfg +++ b/mackup/applications/alacritty.cfg @@ -3,3 +3,6 @@ name = Alacritty [configuration_files] .alacritty.yml + +[xdg_configuration_files] +alacritty/alacritty.yml diff --git a/mackup/applications/alt-tab.cfg b/mackup/applications/alt-tab.cfg new file mode 100644 index 000000000..81a2aac94 --- /dev/null +++ b/mackup/applications/alt-tab.cfg @@ -0,0 +1,5 @@ +[application] +name = AltTab + +[configuration_files] +Library/Preferences/com.lwouis.alt-tab-macos.plist diff --git a/mackup/applications/amethyst.cfg b/mackup/applications/amethyst.cfg index 3865d6649..87b1798cd 100644 --- a/mackup/applications/amethyst.cfg +++ b/mackup/applications/amethyst.cfg @@ -3,3 +3,6 @@ name = Amethyst [configuration_files] Library/Preferences/com.amethyst.Amethyst.plist + +[xdg_configuration_files] +amethyst/amethyst.yml diff --git a/mackup/applications/appcleaner.cfg b/mackup/applications/appcleaner.cfg index 05d29b66b..90bc5190e 100644 --- a/mackup/applications/appcleaner.cfg +++ b/mackup/applications/appcleaner.cfg @@ -3,3 +3,4 @@ name = AppCleaner [configuration_files] Library/Preferences/net.freemacsoft.AppCleaner.plist +Library/Preferences/net.freemacsoft.AppCleaner-SmartDelete.plist diff --git a/mackup/applications/apple-music.cfg b/mackup/applications/apple-music.cfg new file mode 100644 index 000000000..e39b8fdc7 --- /dev/null +++ b/mackup/applications/apple-music.cfg @@ -0,0 +1,7 @@ +[application] +name = Apple Music + +[configuration_files] +Library/Music/Scripts +Library/Preferences/com.apple.Music.eq.plist +Library/Preferences/com.apple.Music.plist diff --git a/mackup/applications/aria2c.cfg b/mackup/applications/aria2c.cfg index 14c3b30fa..ded172f65 100644 --- a/mackup/applications/aria2c.cfg +++ b/mackup/applications/aria2c.cfg @@ -3,3 +3,6 @@ name = aria2c [configuration_files] .aria2 + +[xdg_configuration_files] +aria2 diff --git a/mackup/applications/asciinema.cfg b/mackup/applications/asciinema.cfg index 2aa216805..de4200b3b 100644 --- a/mackup/applications/asciinema.cfg +++ b/mackup/applications/asciinema.cfg @@ -1,5 +1,5 @@ [application] name = asciinema -[configuration_files] -.asciinema +[xdg_configuration_files] +asciinema diff --git a/mackup/applications/asdf.cfg b/mackup/applications/asdf.cfg index df7bf9924..d57f8dc14 100644 --- a/mackup/applications/asdf.cfg +++ b/mackup/applications/asdf.cfg @@ -3,4 +3,6 @@ name = asdf [configuration_files] .asdfrc +.default-gems +.default-npm-packages .tool-versions diff --git a/mackup/applications/audacious.cfg b/mackup/applications/audacious.cfg index 092f5e56e..ef5adc25b 100644 --- a/mackup/applications/audacious.cfg +++ b/mackup/applications/audacious.cfg @@ -1,9 +1,9 @@ [application] name = Audacious -[configuration_files] -.config/audacious/config -.config/audacious/plugin-registry -.config/audacious/playlists -.config/audacious/playlist-state -.config/audacious/scrobbler.log +[xdg_configuration_files] +audacious/config +audacious/plugin-registry +audacious/playlists +audacious/playlist-state +audacious/scrobbler.log diff --git a/mackup/applications/autokey.cfg b/mackup/applications/autokey.cfg index 3a9fc61f6..0454fd33b 100644 --- a/mackup/applications/autokey.cfg +++ b/mackup/applications/autokey.cfg @@ -1,5 +1,5 @@ [application] name = Autokey -[configuration_files] -.config/autokey +[xdg_configuration_files] +autokey diff --git a/mackup/applications/b-ryan_powerline-shell.cfg b/mackup/applications/b-ryan_powerline-shell.cfg index 54130db16..222f32bc7 100644 --- a/mackup/applications/b-ryan_powerline-shell.cfg +++ b/mackup/applications/b-ryan_powerline-shell.cfg @@ -1,5 +1,5 @@ [application] name = Powerline Shell Prompt -[configuration_files] -.config/powerline-shell/config.json +[xdg_configuration_files] +powerline-shell/config.json diff --git a/mackup/applications/bartender.cfg b/mackup/applications/bartender.cfg index 3fe09640d..85ce1a68e 100644 --- a/mackup/applications/bartender.cfg +++ b/mackup/applications/bartender.cfg @@ -3,3 +3,5 @@ name = Bartender [configuration_files] Library/Preferences/com.surteesstudios.Bartender.plist +Library/Preferences/com.surteesstudios.Bartender-setapp.plist +Library/Application Support/Bartender/Bartender.BartenderPreferences diff --git a/mackup/applications/base.cfg b/mackup/applications/base.cfg new file mode 100644 index 000000000..7c6fb2c42 --- /dev/null +++ b/mackup/applications/base.cfg @@ -0,0 +1,7 @@ +[application] +name = Base + +[configuration_files] +Library/Containers/uk.co.menial.Base/Data/Library/Preferences/uk.co.menial.Base.plist +# contains license and preference state +Library/Containers/uk.co.menial.Base/Data/Library/Application Support/Base/ diff --git a/mackup/applications/bash-it.cfg b/mackup/applications/bash-it.cfg index 6736e1871..9eca56631 100644 --- a/mackup/applications/bash-it.cfg +++ b/mackup/applications/bash-it.cfg @@ -2,4 +2,4 @@ name = Bash it [configuration_files] -.bash_it +.bash_it/enabled diff --git a/mackup/applications/bat.cfg b/mackup/applications/bat.cfg new file mode 100644 index 000000000..a54e7f761 --- /dev/null +++ b/mackup/applications/bat.cfg @@ -0,0 +1,7 @@ +[application] +name = Bat + +[xdg_configuration_files] +bat/config +bat/syntaxes +bat/themes diff --git a/mackup/applications/bbedit.cfg b/mackup/applications/bbedit.cfg deleted file mode 100644 index 8e3a971e1..000000000 --- a/mackup/applications/bbedit.cfg +++ /dev/null @@ -1,6 +0,0 @@ -[application] -name = BBEdit - -[configuration_files] -Library/Application Support/BBEdit -Library/Preferences/com.barebones.bbedit.plist diff --git a/mackup/applications/beets.cfg b/mackup/applications/beets.cfg new file mode 100644 index 000000000..e6af33f98 --- /dev/null +++ b/mackup/applications/beets.cfg @@ -0,0 +1,5 @@ +[application] +name = Beets + +[xdg_configuration_files] +beets/config.yaml diff --git a/mackup/applications/bettertouchtool.cfg b/mackup/applications/bettertouchtool.cfg index 04d3d074c..bcc5ba49c 100644 --- a/mackup/applications/bettertouchtool.cfg +++ b/mackup/applications/bettertouchtool.cfg @@ -8,3 +8,4 @@ Library/Application Support/BetterTouchTool/btt_data_store.v2-shm Library/Application Support/BetterTouchTool/btt_data_store.v2-wal Library/Application Support/BetterTouchTool/bttdata2 Library/Preferences/com.hegenberg.BetterTouchTool.plist +Library/Application Support/BetterTouchTool/bettersnaptool.bttlicense diff --git a/mackup/applications/beyond-compare.cfg b/mackup/applications/beyond-compare.cfg new file mode 100644 index 000000000..404bd8a39 --- /dev/null +++ b/mackup/applications/beyond-compare.cfg @@ -0,0 +1,9 @@ +[application] +name = Beyond Compare + +[configuration_files] +Library/Preferences/com.ScooterSoftware.BeyondCompare.plist +Library/Application Support/Beyond Compare/BC4Key.txt +Library/Application Support/Beyond Compare/BCColors.xml +Library/Application Support/Beyond Compare/BCCommands.xml +Library/Application Support/Beyond Compare/BCPreferences.xml diff --git a/mackup/applications/bitbar.cfg b/mackup/applications/bitbar.cfg new file mode 100644 index 000000000..7d5dc22f1 --- /dev/null +++ b/mackup/applications/bitbar.cfg @@ -0,0 +1,5 @@ +[application] +name = BitBar + +[configuration_files] +Library/Preferences/com.matryer.BitBar.plist diff --git a/mackup/applications/blender.cfg b/mackup/applications/blender.cfg index 0b00531ab..6ce8ff132 100644 --- a/mackup/applications/blender.cfg +++ b/mackup/applications/blender.cfg @@ -3,4 +3,6 @@ name = Blender [configuration_files] Library/Application Support/Blender -.config/blender + +[xdg_configuration_files] +blender diff --git a/mackup/applications/brave.cfg b/mackup/applications/brave.cfg new file mode 100644 index 000000000..599bcf41b --- /dev/null +++ b/mackup/applications/brave.cfg @@ -0,0 +1,5 @@ +[application] +name = Brave + +[configuration_files] +Library/Application Support/BraveSoftware/Brave-Browser/Default/Preferences diff --git a/mackup/applications/btop.cfg b/mackup/applications/btop.cfg new file mode 100644 index 000000000..e066c25eb --- /dev/null +++ b/mackup/applications/btop.cfg @@ -0,0 +1,5 @@ +[application] +name = btop + +[xdg_configuration_files] +btop diff --git a/mackup/applications/bump.cfg b/mackup/applications/bump.cfg new file mode 100644 index 000000000..620fdda19 --- /dev/null +++ b/mackup/applications/bump.cfg @@ -0,0 +1,5 @@ +[application] +name = Bump + +[configuration_files] +.bump.json diff --git a/mackup/applications/caffeine.cfg b/mackup/applications/caffeine.cfg index ff5a7fee6..a7a5ab7b6 100644 --- a/mackup/applications/caffeine.cfg +++ b/mackup/applications/caffeine.cfg @@ -3,3 +3,4 @@ name = Caffeine [configuration_files] Library/Preferences/com.lightheadsw.Caffeine.plist +Library/Preferences/com.intelliscapesolutions.caffeine.plist diff --git a/mackup/applications/calibre.cfg b/mackup/applications/calibre.cfg new file mode 100644 index 000000000..a75779306 --- /dev/null +++ b/mackup/applications/calibre.cfg @@ -0,0 +1,8 @@ +[application] +name = Calibre + +[configuration_files] +Library/Preferences/calibre + +[xdg_configuration_files] +calibre diff --git a/mackup/applications/cerebro.cfg b/mackup/applications/cerebro.cfg index 8bc90d0a9..1d12314a5 100644 --- a/mackup/applications/cerebro.cfg +++ b/mackup/applications/cerebro.cfg @@ -5,6 +5,6 @@ name = Cerebro Library/Application Support/Cerebro/config.json Library/Application Support/Cerebro/plugins -# Linux Files -.config/Cerebro/config.json -.config/Cerebro/plugins +[xdg_configuration_files] +Cerebro/config.json +Cerebro/plugins diff --git a/mackup/applications/cheat.cfg b/mackup/applications/cheat.cfg index cb9c714d9..feed69b31 100644 --- a/mackup/applications/cheat.cfg +++ b/mackup/applications/cheat.cfg @@ -3,3 +3,6 @@ name = Cheat [configuration_files] .cheat + +[xdg_configuration_files] +cheat/conf.yml diff --git a/mackup/applications/choosy.cfg b/mackup/applications/choosy.cfg new file mode 100644 index 000000000..d0ddbcf14 --- /dev/null +++ b/mackup/applications/choosy.cfg @@ -0,0 +1,5 @@ +[application] +name = Choosy + +[configuration_files] +Library/Application Support/Choosy/behaviours.plist diff --git a/mackup/applications/clashx.cfg b/mackup/applications/clashx.cfg new file mode 100644 index 000000000..dc5590547 --- /dev/null +++ b/mackup/applications/clashx.cfg @@ -0,0 +1,5 @@ +[application] +name = ClashX + +[xdg_configuration_files] +clash diff --git a/mackup/applications/cleanshot.cfg b/mackup/applications/cleanshot.cfg new file mode 100644 index 000000000..beeaf04e0 --- /dev/null +++ b/mackup/applications/cleanshot.cfg @@ -0,0 +1,6 @@ +[application] +name = CleanShot + +[configuration_files] +Library/Preferences/com.getcleanshot.app-setapp.plist +Library/Preferences/pl.maketheweb.cleanshotx.plist diff --git a/mackup/applications/clion.cfg b/mackup/applications/clion.cfg index 88e256af5..b6cb99cdf 100644 --- a/mackup/applications/clion.cfg +++ b/mackup/applications/clion.cfg @@ -4,3 +4,5 @@ name = CLion [configuration_files] Library/Preferences/CLion2016.2 Library/Application Support/CLion2016.2 +Library/Application Support/JetBrains/CLion2023.1 +Library/Application Support/JetBrains/CLion2023.2 diff --git a/mackup/applications/clipy.cfg b/mackup/applications/clipy.cfg index 4ab6db013..bcf723cad 100644 --- a/mackup/applications/clipy.cfg +++ b/mackup/applications/clipy.cfg @@ -2,5 +2,4 @@ name = Clipy [configuration_files] -Library/Application Support/Clipy Library/Preferences/com.clipy-app.Clipy.plist diff --git a/mackup/applications/colorslurp.cfg b/mackup/applications/colorslurp.cfg new file mode 100644 index 000000000..f6a0e733f --- /dev/null +++ b/mackup/applications/colorslurp.cfg @@ -0,0 +1,6 @@ +[application] +name = ColorSlurp + +[configuration_files] +Library/Preferences/com.IdeaPunch.ColorSlurp.plist +Library/Containers/com.IdeaPunch.ColorSlurp/Data/Library/Application Support/default.realm diff --git a/mackup/applications/consular.cfg b/mackup/applications/consular.cfg index cc0a3290c..bda4245d5 100644 --- a/mackup/applications/consular.cfg +++ b/mackup/applications/consular.cfg @@ -2,5 +2,7 @@ name = Consular [configuration_files] -.config/consular .consularc + +[xdg_configuration_files] +consular diff --git a/mackup/applications/contexts.cfg b/mackup/applications/contexts.cfg new file mode 100644 index 000000000..43fedfaee --- /dev/null +++ b/mackup/applications/contexts.cfg @@ -0,0 +1,5 @@ +[application] +name = Contexts + +[configuration_files] +Library/Preferences/com.contextsformac.Contexts.plist diff --git a/mackup/applications/copyq.cfg b/mackup/applications/copyq.cfg index 05b5530d4..efb8ee2ed 100644 --- a/mackup/applications/copyq.cfg +++ b/mackup/applications/copyq.cfg @@ -1,5 +1,5 @@ [application] name = CopyQ -[configuration_files] -.config/copyq +[xdg_configuration_files] +copyq diff --git a/mackup/applications/ctags.cfg b/mackup/applications/ctags.cfg index d2727d579..5d9d3b997 100644 --- a/mackup/applications/ctags.cfg +++ b/mackup/applications/ctags.cfg @@ -3,3 +3,4 @@ name = Ctags [configuration_files] .ctags +.ctags.d diff --git a/mackup/applications/datagrip.cfg b/mackup/applications/datagrip.cfg new file mode 100644 index 000000000..36b73e089 --- /dev/null +++ b/mackup/applications/datagrip.cfg @@ -0,0 +1,17 @@ +[application] +name = DataGrip + +[configuration_files] +Library/Application Support/DataGrip2017.3 +Library/Preferences/DataGrip2017.3 +Library/Application Support/DataGrip2018.1 +Library/Preferences/DataGrip2018.1 +Library/Application Support/DataGrip2018.2 +Library/Preferences/DataGrip2018.2 +Library/Application Support/DataGrip2018.3 +Library/Preferences/DataGrip2018.3 +Library/Application Support/DataGrip2019.1 +Library/Preferences/DataGrip2019.1 +Library/Preferences/DataGrip2019.2 +Library/Application Support/JetBrains/DataGrip2023.1 +Library/Application Support/JetBrains/DataGrip2023.2 diff --git a/mackup/applications/deepin-dde-dock.cfg b/mackup/applications/deepin-dde-dock.cfg new file mode 100644 index 000000000..13d3660ef --- /dev/null +++ b/mackup/applications/deepin-dde-dock.cfg @@ -0,0 +1,5 @@ +[application] +name = deepin-dde-dock + +[xdg_configuration_files] +deepin/dde-dock.conf diff --git a/mackup/applications/deepin-dde-file-manager.cfg b/mackup/applications/deepin-dde-file-manager.cfg new file mode 100644 index 000000000..57dbad8d7 --- /dev/null +++ b/mackup/applications/deepin-dde-file-manager.cfg @@ -0,0 +1,5 @@ +[application] +name = deepin-dde-file-manager + +[xdg_configuration_files] +deepin/dde-file-manager.json diff --git a/mackup/applications/deepin-terminal.cfg b/mackup/applications/deepin-terminal.cfg new file mode 100644 index 000000000..0bcc8e18f --- /dev/null +++ b/mackup/applications/deepin-terminal.cfg @@ -0,0 +1,5 @@ +[application] +name = deepin-terminal + +[xdg_configuration_files] +deepin/deepin-terminal/config.conf diff --git a/mackup/applications/devilspie2.cfg b/mackup/applications/devilspie2.cfg index 5d2484f44..40a5c911d 100644 --- a/mackup/applications/devilspie2.cfg +++ b/mackup/applications/devilspie2.cfg @@ -1,5 +1,5 @@ [application] name = Devilspie2 -[configuration_files] -.config/devilspie2 +[xdg_configuration_files] +devilspie2 diff --git a/mackup/applications/docker.cfg b/mackup/applications/docker.cfg index d4fc84ce9..eeb9705ff 100644 --- a/mackup/applications/docker.cfg +++ b/mackup/applications/docker.cfg @@ -2,5 +2,5 @@ name = Docker [configuration_files] -.dockercfg .docker/config.json +.docker/daemon.json diff --git a/mackup/applications/doom-emacs.cfg b/mackup/applications/doom-emacs.cfg new file mode 100644 index 000000000..6cabdb01e --- /dev/null +++ b/mackup/applications/doom-emacs.cfg @@ -0,0 +1,5 @@ +[application] +name = Doom Emacs + +[configuration_files] +.doom.d diff --git a/mackup/applications/doublecmd.cfg b/mackup/applications/doublecmd.cfg index 5f775c8ec..e6605f86e 100644 --- a/mackup/applications/doublecmd.cfg +++ b/mackup/applications/doublecmd.cfg @@ -1,8 +1,8 @@ [application] name = Double Commander -[configuration_files] -.config/doublecmd/wfx.ini -.config/doublecmd/doublecmd.ext -.config/doublecmd/shortcuts.scf -.config/doublecmd/doublecmd.xml +[xdg_configuration_files] +doublecmd/wfx.ini +doublecmd/doublecmd.ext +doublecmd/shortcuts.scf +doublecmd/doublecmd.xml diff --git a/mackup/applications/dozer.cfg b/mackup/applications/dozer.cfg new file mode 100644 index 000000000..467e3a4aa --- /dev/null +++ b/mackup/applications/dozer.cfg @@ -0,0 +1,5 @@ +[application] +name = Dozer + +[configuration_files] +Library/Preferences/com.mortennn.Dozer.plist diff --git a/mackup/applications/draft.cfg b/mackup/applications/draft.cfg new file mode 100644 index 000000000..1c28adde9 --- /dev/null +++ b/mackup/applications/draft.cfg @@ -0,0 +1,5 @@ +[application] +name = Draft + +[configuration_files] +.draft/config.toml diff --git a/mackup/applications/eqmac-2.cfg b/mackup/applications/eqmac-2.cfg new file mode 100644 index 000000000..ab20cc548 --- /dev/null +++ b/mackup/applications/eqmac-2.cfg @@ -0,0 +1,5 @@ +[application] +name = eqMac2 + +[configuration_files] +Library/Preferences/com.bitgapp.eqMac2.plist diff --git a/mackup/applications/eslint.cfg b/mackup/applications/eslint.cfg index ac17092f7..49a5590fe 100644 --- a/mackup/applications/eslint.cfg +++ b/mackup/applications/eslint.cfg @@ -7,3 +7,4 @@ name = ESLint .eslintrc.yml .eslintrc.json .eslintrc +.eslintignore diff --git a/mackup/applications/espanso.cfg b/mackup/applications/espanso.cfg new file mode 100644 index 000000000..93166c2c3 --- /dev/null +++ b/mackup/applications/espanso.cfg @@ -0,0 +1,9 @@ +[application] +name = espanso + +[configuration_files] +Library/Preferences/espanso +Library/Application Support/espanso + +[xdg_configuration_files] +espanso diff --git a/mackup/applications/exercism.cfg b/mackup/applications/exercism.cfg index 95e914b13..c5c522dda 100644 --- a/mackup/applications/exercism.cfg +++ b/mackup/applications/exercism.cfg @@ -3,3 +3,6 @@ name = Exercism [configuration_files] .exercism + +[xdg_configuration_files] +exercism diff --git a/mackup/applications/factorio.cfg b/mackup/applications/factorio.cfg index 14536bcb2..f33c8d483 100644 --- a/mackup/applications/factorio.cfg +++ b/mackup/applications/factorio.cfg @@ -6,3 +6,4 @@ Library/Application Support/factorio/config Library/Application Support/factorio/mods Library/Application Support/factorio/saves Library/Application Support/factorio/player-data.json +Library/Application Support/factorio/blueprint-storage.dat diff --git a/mackup/applications/fasd.cfg b/mackup/applications/fasd.cfg index 4bcb0321e..e4e84bff7 100644 --- a/mackup/applications/fasd.cfg +++ b/mackup/applications/fasd.cfg @@ -3,3 +3,4 @@ name = fasd [configuration_files] .fasd +.fasdrc diff --git a/mackup/applications/fastscripts.cfg b/mackup/applications/fastscripts.cfg new file mode 100644 index 000000000..059c0a254 --- /dev/null +++ b/mackup/applications/fastscripts.cfg @@ -0,0 +1,6 @@ +[application] +name = FastScripts + +[configuration_files] +Library/Preferences/com.red-sweater.fastscripts.plist +Library/Application Support/FastScripts diff --git a/mackup/applications/filezilla.cfg b/mackup/applications/filezilla.cfg index 8f90024cd..1d1498155 100644 --- a/mackup/applications/filezilla.cfg +++ b/mackup/applications/filezilla.cfg @@ -2,7 +2,9 @@ name = FileZilla [configuration_files] -.config/filezilla/filezilla.xml -.config/filezilla/layout.xml -.config/filezilla/sitemanager.xml .filezilla + +[xdg_configuration_files] +filezilla/filezilla.xml +filezilla/layout.xml +filezilla/sitemanager.xml diff --git a/mackup/applications/finicky.cfg b/mackup/applications/finicky.cfg new file mode 100644 index 000000000..dc8b886dd --- /dev/null +++ b/mackup/applications/finicky.cfg @@ -0,0 +1,5 @@ +[application] +name = finicky + +[configuration_files] +.finicky.js diff --git a/mackup/applications/fish.cfg b/mackup/applications/fish.cfg index c25b21b3f..86af13208 100644 --- a/mackup/applications/fish.cfg +++ b/mackup/applications/fish.cfg @@ -1,7 +1,9 @@ [application] name = Fish -[configuration_files] -.config/fish/config.fish -.config/fish/functions -.config/fish/completions +[xdg_configuration_files] +fish/config.fish +fish/conf.d +fish/fish_variables +fish/functions +fish/completions diff --git a/mackup/applications/fisher.cfg b/mackup/applications/fisher.cfg new file mode 100644 index 000000000..c95e43125 --- /dev/null +++ b/mackup/applications/fisher.cfg @@ -0,0 +1,5 @@ +[application] +name = Fisher + +[xdg_configuration_files] +fish/fish_plugins diff --git a/mackup/applications/fisherman.cfg b/mackup/applications/fisherman.cfg deleted file mode 100644 index e3e1db0a2..000000000 --- a/mackup/applications/fisherman.cfg +++ /dev/null @@ -1,5 +0,0 @@ -[application] -name = Fisherman - -[configuration_files] -.config/fish/fishfile diff --git a/mackup/applications/flake8.cfg b/mackup/applications/flake8.cfg new file mode 100644 index 000000000..14019fbba --- /dev/null +++ b/mackup/applications/flake8.cfg @@ -0,0 +1,8 @@ +[application] +name = flake8 + +[configuration_files] +.flake8 + +[xdg_configuration_files] +flake8 diff --git a/mackup/applications/flameshot.cfg b/mackup/applications/flameshot.cfg new file mode 100644 index 000000000..df42a3e6c --- /dev/null +++ b/mackup/applications/flameshot.cfg @@ -0,0 +1,5 @@ +[application] +name = Flameshot + +[xdg_configuration_files] +flameshot/flameshot.ini diff --git a/mackup/applications/flexget.cfg b/mackup/applications/flexget.cfg index 1d8a42875..e8bdaf729 100644 --- a/mackup/applications/flexget.cfg +++ b/mackup/applications/flexget.cfg @@ -2,5 +2,7 @@ name = FlexGet [configuration_files] -.config/flexget/config.yml .flexget/config.yml + +[xdg_configuration_files] +flexget/config.yml diff --git a/mackup/applications/focus.cfg b/mackup/applications/focus.cfg new file mode 100644 index 000000000..7116482a1 --- /dev/null +++ b/mackup/applications/focus.cfg @@ -0,0 +1,5 @@ +[application] +name = Focus + +[configuration_files] +Library/Application Support/Focus/default.cfg diff --git a/mackup/applications/fontconfig.cfg b/mackup/applications/fontconfig.cfg index 14395cd4d..91d11ecb8 100644 --- a/mackup/applications/fontconfig.cfg +++ b/mackup/applications/fontconfig.cfg @@ -1,5 +1,5 @@ [application] name = Fontconfig -[configuration_files] -.config/fontconfig +[xdg_configuration_files] +fontconfig diff --git a/mackup/applications/fork.cfg b/mackup/applications/fork.cfg new file mode 100644 index 000000000..6f7a10649 --- /dev/null +++ b/mackup/applications/fork.cfg @@ -0,0 +1,6 @@ +[application] +name = Fork + +[configuration_files] +Library/Application Support/com.DanPristupov.Fork/custom-commands.json +Library/Preferences/com.DanPristupov.Fork.plist diff --git a/mackup/applications/forklift-2.cfg b/mackup/applications/forklift-2.cfg deleted file mode 100644 index 0cd4e3b68..000000000 --- a/mackup/applications/forklift-2.cfg +++ /dev/null @@ -1,5 +0,0 @@ -[application] -name = ForkLift 2 - -[configuration_files] -Library/Preferences/com.binarynights.ForkLift2.plist diff --git a/mackup/applications/forklift.cfg b/mackup/applications/forklift.cfg new file mode 100644 index 000000000..1f19638ca --- /dev/null +++ b/mackup/applications/forklift.cfg @@ -0,0 +1,7 @@ +[application] +name = ForkLift + +[configuration_files] +Library/Preferences/com.binarynights.ForkLift2.plist +Library/Preferences/com.binarynights.ForkLift-3.plist +Library/Application Support/ForkLift/Favorites/Favorites.json diff --git a/mackup/applications/franz.cfg b/mackup/applications/franz.cfg index eecf73787..73ee73367 100644 --- a/mackup/applications/franz.cfg +++ b/mackup/applications/franz.cfg @@ -4,5 +4,5 @@ name = Franz [configuration_files] Library/Application Support/Franz/settings -# Linux files -.config/Franz/settings +[xdg_configuration_files] +Franz/settings diff --git a/mackup/applications/geektool.cfg b/mackup/applications/geektool.cfg index da67ed563..0de55119b 100644 --- a/mackup/applications/geektool.cfg +++ b/mackup/applications/geektool.cfg @@ -6,4 +6,5 @@ Library/Preferences/org.tynsoe.GeekTool.plist Library/Preferences/org.tynsoe.geeklet.file.plist Library/Preferences/org.tynsoe.geeklet.image.plist Library/Preferences/org.tynsoe.geeklet.shell.plist +Library/Preferences/org.tynsoe.geeklet.web.plist Library/Preferences/org.tynsoe.geektool3.plist diff --git a/mackup/applications/ghidra.cfg b/mackup/applications/ghidra.cfg new file mode 100644 index 000000000..f052c909c --- /dev/null +++ b/mackup/applications/ghidra.cfg @@ -0,0 +1,5 @@ +[application] +name = Ghidra + +[configuration_files] +.ghidra diff --git a/mackup/applications/ghostwriter.cfg b/mackup/applications/ghostwriter.cfg index 070a31e06..20239be3b 100644 --- a/mackup/applications/ghostwriter.cfg +++ b/mackup/applications/ghostwriter.cfg @@ -1,5 +1,5 @@ [application] name = Ghostwriter -[configuration_files] -.config/ghostwriter +[xdg_configuration_files] +ghostwriter diff --git a/mackup/applications/gimp.cfg b/mackup/applications/gimp.cfg new file mode 100644 index 000000000..f224e5085 --- /dev/null +++ b/mackup/applications/gimp.cfg @@ -0,0 +1,52 @@ +[application] +name = gimp + +[configuration_files] +.gimp/colorrc +.gimp/contextrc +.gimp/controllerrc +.gimp/devicerc +.gimp/dockrc +.gimp/gimprc +.gimp/gtkrc +.gimp/menurc +.gimp/parasiterc +.gimp/pluginrc +.gimp/profilerc +.gimp/sessionrc +.gimp/templaterc +.gimp/themerc +.gimp/toolrc +.gimp/unitrc +Library/Application Support/GIMP/2.8/colorrc +Library/Application Support/GIMP/2.8/contextrc +Library/Application Support/GIMP/2.8/controllerrc +Library/Application Support/GIMP/2.8/devicerc +Library/Application Support/GIMP/2.8/dockrc +Library/Application Support/GIMP/2.8/gimprc +Library/Application Support/GIMP/2.8/gtkrc +Library/Application Support/GIMP/2.8/menurc +Library/Application Support/GIMP/2.8/parasiterc +Library/Application Support/GIMP/2.8/pluginrc +Library/Application Support/GIMP/2.8/profilerc +Library/Application Support/GIMP/2.8/sessionrc +Library/Application Support/GIMP/2.8/templaterc +Library/Application Support/GIMP/2.8/themerc +Library/Application Support/GIMP/2.8/toolrc +Library/Application Support/GIMP/2.8/unitrc +Library/Application Support/GIMP/2.10/colorrc +Library/Application Support/GIMP/2.10/contextrc +Library/Application Support/GIMP/2.10/controllerrc +Library/Application Support/GIMP/2.10/devicerc +Library/Application Support/GIMP/2.10/dockrc +Library/Application Support/GIMP/2.10/gimprc +Library/Application Support/GIMP/2.10/gtkrc +Library/Application Support/GIMP/2.10/menurc +Library/Application Support/GIMP/2.10/parasiterc +Library/Application Support/GIMP/2.10/pluginrc +Library/Application Support/GIMP/2.10/profilerc +Library/Application Support/GIMP/2.10/sessionrc +Library/Application Support/GIMP/2.10/templaterc +Library/Application Support/GIMP/2.10/themerc +Library/Application Support/GIMP/2.10/toolrc +Library/Application Support/GIMP/2.10/unitrc diff --git a/mackup/applications/git.cfg b/mackup/applications/git.cfg index fe1358578..4bcad4037 100644 --- a/mackup/applications/git.cfg +++ b/mackup/applications/git.cfg @@ -6,3 +6,5 @@ name = Git [xdg_configuration_files] git/config +git/ignore +git/attributes diff --git a/mackup/applications/gitfox.cfg b/mackup/applications/gitfox.cfg new file mode 100644 index 000000000..199f097b6 --- /dev/null +++ b/mackup/applications/gitfox.cfg @@ -0,0 +1,7 @@ +[application] +name = GitFox + +[configuration_files] +Library/Preferences/com.bytieful.Gitfox.plist +Library/Preferences/com.bytieful.Gitfox-retail.plist +Library/Preferences/com.bytieful.Gitfox-setapp.plist diff --git a/mackup/applications/go2shell.cfg b/mackup/applications/go2shell.cfg index 442e9451d..cb25f8e8f 100644 --- a/mackup/applications/go2shell.cfg +++ b/mackup/applications/go2shell.cfg @@ -2,4 +2,4 @@ name = Go2Shell [configuration_files] -Library/Preferences/com.alice.mac.go2shell.plist +Library/Preferences/com.zipzapmac.Go2Shell.plist diff --git a/mackup/applications/goku.cfg b/mackup/applications/goku.cfg new file mode 100644 index 000000000..4c33e547e --- /dev/null +++ b/mackup/applications/goku.cfg @@ -0,0 +1,5 @@ +[application] +name = Goku + +[xdg_configuration_files] +karabiner.edn diff --git a/mackup/applications/goland.cfg b/mackup/applications/goland.cfg index 0ae90b1fc..e5e0f2fdf 100644 --- a/mackup/applications/goland.cfg +++ b/mackup/applications/goland.cfg @@ -2,12 +2,18 @@ name = GoLand [configuration_files] -Library/Preferences/com.jetbrains.gogland-EAP.plist Library/Application Support/Gogland1.0 +Library/Application Support/GoLand2017.3 +Library/Application Support/GoLand2018.1 +Library/Application Support/GoLand2018.2 +Library/Application Support/GoLand2018.3 +Library/Application Support/GoLand2019.2 +Library/Preferences/com.jetbrains.gogland-EAP.plist Library/Preferences/Gogland1.0 Library/Preferences/GoLand2017.3 -Library/Application Support/GoLand2017.3 Library/Preferences/GoLand2018.1 -Library/Application Support/GoLand2018.1 Library/Preferences/GoLand2018.2 -Library/Application Support/GoLand2018.2 +Library/Preferences/GoLand2018.3 +Library/Preferences/GoLand2019.2 +Library/Application Support/JetBrains/GoLand2023.1 +Library/Application Support/JetBrains/GoLand2023.2 diff --git a/mackup/applications/goldendict.cfg b/mackup/applications/goldendict.cfg new file mode 100644 index 000000000..26cd6ded0 --- /dev/null +++ b/mackup/applications/goldendict.cfg @@ -0,0 +1,5 @@ +[application] +name = Goldendict + +[configuration_files] +.goldendict/config diff --git a/mackup/applications/goodsync.cfg b/mackup/applications/goodsync.cfg new file mode 100644 index 000000000..08184874b --- /dev/null +++ b/mackup/applications/goodsync.cfg @@ -0,0 +1,5 @@ +[application] +name = GoodSync + +[configuration_files] +.goodsync diff --git a/mackup/applications/goshare.cfg b/mackup/applications/goshare.cfg index 31db0a055..f0fecfff2 100644 --- a/mackup/applications/goshare.cfg +++ b/mackup/applications/goshare.cfg @@ -1,5 +1,5 @@ [application] name = GoShare -[configuration_files] -.config/dictget/goshare +[xdg_configuration_files] +dictget/goshare diff --git a/mackup/applications/grsync.cfg b/mackup/applications/grsync.cfg new file mode 100644 index 000000000..0a564446b --- /dev/null +++ b/mackup/applications/grsync.cfg @@ -0,0 +1,5 @@ +[application] +name = grsync + +[configuration_files] +.grsync/grsync.ini diff --git a/mackup/applications/handbrake.cfg b/mackup/applications/handbrake.cfg index b9e27dd09..9040592ba 100644 --- a/mackup/applications/handbrake.cfg +++ b/mackup/applications/handbrake.cfg @@ -2,4 +2,4 @@ name = HandBrake [configuration_files] -Library/Application Support/HandBrake/UserPresets.plist +Library/Containers/fr.handbrake.HandBrake/Data/Library/Application Support/HandBrake/UserPresets.json diff --git a/mackup/applications/hexchat.cfg b/mackup/applications/hexchat.cfg index 62de963df..08b8cb720 100644 --- a/mackup/applications/hexchat.cfg +++ b/mackup/applications/hexchat.cfg @@ -1,5 +1,5 @@ [application] name = HexChat -[configuration_files] -.config/hexchat +[xdg_configuration_files] +hexchat diff --git a/mackup/applications/hocus-focus.cfg b/mackup/applications/hocus-focus.cfg new file mode 100644 index 000000000..e516091a8 --- /dev/null +++ b/mackup/applications/hocus-focus.cfg @@ -0,0 +1,8 @@ +[application] +name = Hocus Focus + +[configuration_files] +Library/Preferences/com.uglyapps.HocusFocus.plist +Library/Application Support/com.uglyapps.HocusFocus/HocusFocus.db +Library/Application Support/com.uglyapps.HocusFocus/HocusFocus.db-shm +Library/Application Support/com.uglyapps.HocusFocus/HocusFocus.db-wal diff --git a/mackup/applications/homebrew.cfg b/mackup/applications/homebrew.cfg new file mode 100644 index 000000000..0a53f033a --- /dev/null +++ b/mackup/applications/homebrew.cfg @@ -0,0 +1,6 @@ +[application] +name = Homebrew + +[configuration_files] +.Brewfile +Brewfile diff --git a/mackup/applications/htop.cfg b/mackup/applications/htop.cfg index c17e11ead..0a6517d51 100644 --- a/mackup/applications/htop.cfg +++ b/mackup/applications/htop.cfg @@ -3,4 +3,6 @@ name = Htop [configuration_files] .htoprc -.config/htop/htoprc + +[xdg_configuration_files] +htop/htoprc diff --git a/mackup/applications/hub.cfg b/mackup/applications/hub.cfg index acdbbec50..e8527eb57 100644 --- a/mackup/applications/hub.cfg +++ b/mackup/applications/hub.cfg @@ -1,5 +1,5 @@ [application] name = hub -[configuration_files] -.config/hub +[xdg_configuration_files] +hub diff --git a/mackup/applications/i3.cfg b/mackup/applications/i3.cfg index 9317fc866..acee30c4f 100644 --- a/mackup/applications/i3.cfg +++ b/mackup/applications/i3.cfg @@ -4,3 +4,6 @@ name = i3 [configuration_files] .i3/config .i3status.conf + +[xdg_configuration_files] +i3/config diff --git a/mackup/applications/idapro.cfg b/mackup/applications/idapro.cfg new file mode 100644 index 000000000..332b892d3 --- /dev/null +++ b/mackup/applications/idapro.cfg @@ -0,0 +1,5 @@ +[application] +name = IDA Pro + +[configuration_files] +.idapro diff --git a/mackup/applications/iina.cfg b/mackup/applications/iina.cfg new file mode 100644 index 000000000..37675c7a4 --- /dev/null +++ b/mackup/applications/iina.cfg @@ -0,0 +1,6 @@ +[application] +name = IINA + +[configuration_files] +Library/Application Support/com.colliderli.iina/input_conf +Library/Preferences/com.colliderli.iina.plist diff --git a/mackup/applications/illustrator.cfg b/mackup/applications/illustrator.cfg index a15cbbc85..16d63eacf 100644 --- a/mackup/applications/illustrator.cfg +++ b/mackup/applications/illustrator.cfg @@ -6,8 +6,35 @@ Library/Application Support/Adobe/Adobe Illustrator 17 Library/Application Support/Adobe/Adobe Illustrator 18 Library/Application Support/Adobe/Adobe Illustrator 19 Library/Application Support/Adobe/Adobe Illustrator 20 +Library/Application Support/Adobe/Adobe Illustrator 23/en_US/Adobe SVG Filters.svg +Library/Application Support/Adobe/Adobe Illustrator 23/en_US/Swatches +Library/Application Support/Adobe/Adobe Illustrator 24/en_US/Adobe SVG Filters.svg +Library/Application Support/Adobe/Adobe Illustrator 24/en_US/Swatches +Library/Application Support/Adobe/OOBE Library/Preferences/Adobe Illustrator 17 Settings Library/Preferences/Adobe Illustrator 18 Settings Library/Preferences/Adobe Illustrator 19 Settings Library/Preferences/Adobe Illustrator 20 Settings +Library/Preferences/Adobe Illustrator 23 Settings/en_US/Adobe Illustrator Prefs +Library/Preferences/Adobe Illustrator 23 Settings/en_US/Last Used Artboard Export Settings +Library/Preferences/Adobe Illustrator 23 Settings/en_US/Last Used Asset Export Settings +Library/Preferences/Adobe Illustrator 23 Settings/en_US/Modified Workspaces +Library/Preferences/Adobe Illustrator 23 Settings/en_US/Perspective grid Presets +Library/Preferences/Adobe Illustrator 23 Settings/en_US/Print Presets +Library/Preferences/Adobe Illustrator 23 Settings/en_US/Tools/Tools Panel Presets +Library/Preferences/Adobe Illustrator 23 Settings/en_US/Transparency flattener presets +Library/Preferences/Adobe Illustrator 23 Settings/en_US/VariableWidthProfiles +Library/Preferences/Adobe Illustrator 23 Settings/en_US/Vectorizing Presets +Library/Preferences/Adobe Illustrator 23 Settings/en_US/Workspaces +Library/Preferences/Adobe Illustrator 24 Settings/en_US/Adobe Illustrator Prefs +Library/Preferences/Adobe Illustrator 24 Settings/en_US/Last Used Artboard Export Settings +Library/Preferences/Adobe Illustrator 24 Settings/en_US/Last Used Asset Export Settings +Library/Preferences/Adobe Illustrator 24 Settings/en_US/Modified Workspaces +Library/Preferences/Adobe Illustrator 24 Settings/en_US/Perspective grid Presets +Library/Preferences/Adobe Illustrator 24 Settings/en_US/Print Presets +Library/Preferences/Adobe Illustrator 24 Settings/en_US/Tools/Tools Panel Presets +Library/Preferences/Adobe Illustrator 24 Settings/en_US/Transparency flattener presets +Library/Preferences/Adobe Illustrator 24 Settings/en_US/VariableWidthProfiles +Library/Preferences/Adobe Illustrator 24 Settings/en_US/Vectorizing Presets +Library/Preferences/Adobe Illustrator 24 Settings/en_US/Workspaces Library/Preferences/com.adobe.illustrator.plist diff --git a/mackup/applications/inkscape.cfg b/mackup/applications/inkscape.cfg index c0b8e05ca..bd7201b28 100644 --- a/mackup/applications/inkscape.cfg +++ b/mackup/applications/inkscape.cfg @@ -1,5 +1,5 @@ [application] name = inkscape -[configuration_files] -.config/inkscape/preferences.xml +[xdg_configuration_files] +inkscape/preferences.xml diff --git a/mackup/applications/insomnia.cfg b/mackup/applications/insomnia.cfg index e427da4c5..f62122e24 100644 --- a/mackup/applications/insomnia.cfg +++ b/mackup/applications/insomnia.cfg @@ -2,5 +2,7 @@ name = Insomnia [configuration_files] -.config/Insomnia Library/Application Support/Insomnia + +[xdg_configuration_files] +Insomnia diff --git a/mackup/applications/intellijidea.cfg b/mackup/applications/intellijidea.cfg index 08b587e84..fb42e8dba 100644 --- a/mackup/applications/intellijidea.cfg +++ b/mackup/applications/intellijidea.cfg @@ -2,44 +2,80 @@ name = IntelliJ IDEA [configuration_files] -.IntelliJIdea12/config/ +.IntelliJIdea12/config +.IntelliJIdea13/config +.IntelliJIdea14/config +.IntelliJIdea15/config +IdeaIC2018.2/config +IdeaIC2018.3/config +IdeaIC2019.1/config +IdeaIC2019.2/config +IdeaIC2019.3/config +IntelliJIdea2016.1/config +IntelliJIdea2016.2/config +IntelliJIdea2016.3/config +IntelliJIdea2017.1/config +IntelliJIdea2017.2/config +IntelliJIdea2017.3/config +IntelliJIdea2018.1/config +IntelliJIdea2018.2/config +IntelliJIdea2018.3/config +IntelliJIdea2019.1/config +IntelliJIdea2019.2/config +IntelliJIdea2019.3/config +Library/Application Support/IdeaIC2016.1 +Library/Application Support/IdeaIC2017.1 +Library/Application Support/IdeaIC2017.2 +Library/Application Support/IdeaIC2017.3 +Library/Application Support/IdeaIC2018.2 +Library/Application Support/IdeaIC2018.3 +Library/Application Support/IdeaIC2019.1 Library/Application Support/IntelliJIdea12 -Library/Preferences/IntelliJIdea12 -.IntelliJIdea13/config/ Library/Application Support/IntelliJIdea13 -Library/Preferences/IntelliJIdea13 -.IntelliJIdea14/config/ Library/Application Support/IntelliJIdea14 -Library/Preferences/IntelliJIdea14 -.IntelliJIdea15/config/ Library/Application Support/IntelliJIdea15 -Library/Preferences/IntelliJIdea15 -IntelliJIdea2016.1/config/ Library/Application Support/IntelliJIdea2016.1 -Library/Preferences/IntelliJIdea2016.1 -Library/Application Support/IdeaIC2016.1 -Library/Preferences/IdeaIC2016.1 -Library/Preferences/IntelliJIdea2016.2 Library/Application Support/IntelliJIdea2016.2 -IntelliJIdea2016.2/config/ -Library/Preferences/IntelliJIdea2016.3 Library/Application Support/IntelliJIdea2016.3 -IntelliJIdea2016.3/config/ -Library/Preferences/IntelliJIdea2017.1 Library/Application Support/IntelliJIdea2017.1 -IntelliJIdea2017.1/config/ -Library/Preferences/IntelliJIdea2017.2 Library/Application Support/IntelliJIdea2017.2 -IntelliJIdea2017.2/config/ -Library/Preferences/IntelliJIdea2017.3 Library/Application Support/IntelliJIdea2017.3 -IntelliJIdea2017.3/config/ -Library/Preferences/IntelliJIdea2018.1 Library/Application Support/IntelliJIdea2018.1 -IntelliJIdea2018.1/config/ +Library/Application Support/IntelliJIdea2018.2 +Library/Application Support/IntelliJIdea2018.3 +Library/Application Support/IntelliJIdea2019.1 +Library/Application Support/IntelliJIdea2019.2 +Library/Application Support/IntelliJIdea2019.3 +Library/Application Support/JetBrains/IntelliJIdea2020.1 +Library/Application Support/JetBrains/IntelliJIdea2020.2 +Library/Application Support/JetBrains/IntelliJIdea2020.3 +Library/Application Support/JetBrains/IntelliJIdea2021.1 +Library/Application Support/JetBrains/IntelliJIdea2022.1 +Library/Application Support/JetBrains/IntelliJIdea2022.2 +Library/Application Support/JetBrains/IntelliJIdea2023.1 +Library/Application Support/JetBrains/IntelliJIdea2023.2 +Library/Preferences/IdeaIC2016.1 +Library/Preferences/IdeaIC2016.2 +Library/Preferences/IdeaIC2016.3 +Library/Preferences/IdeaIC2017.1 +Library/Preferences/IdeaIC2017.2 +Library/Preferences/IdeaIC2017.3 Library/Preferences/IdeaIC2018.2 -Library/Application Support/IdeaIC2018.2 -IdeaIC2018.2/config/ +Library/Preferences/IdeaIC2018.3 +Library/Preferences/IdeaIC2019.1 +Library/Preferences/IntelliJIdea12 +Library/Preferences/IntelliJIdea13 +Library/Preferences/IntelliJIdea14 +Library/Preferences/IntelliJIdea15 +Library/Preferences/IntelliJIdea2016.1 +Library/Preferences/IntelliJIdea2016.2 +Library/Preferences/IntelliJIdea2016.3 +Library/Preferences/IntelliJIdea2017.1 +Library/Preferences/IntelliJIdea2017.2 +Library/Preferences/IntelliJIdea2017.3 +Library/Preferences/IntelliJIdea2018.1 Library/Preferences/IntelliJIdea2018.2 -Library/Application Support/IntelliJIdea2018.2 -IntelliJIdea2018.2/config/ +Library/Preferences/IntelliJIdea2018.3 +Library/Preferences/IntelliJIdea2019.1 +Library/Preferences/IntelliJIdea2019.2 +Library/Preferences/IntelliJIdea2019.3 diff --git a/mackup/applications/istat-menus-5.cfg b/mackup/applications/istat-menus.cfg similarity index 59% rename from mackup/applications/istat-menus-5.cfg rename to mackup/applications/istat-menus.cfg index 78710a0e2..80a821d09 100644 --- a/mackup/applications/istat-menus-5.cfg +++ b/mackup/applications/istat-menus.cfg @@ -3,4 +3,6 @@ name = iStat Menus [configuration_files] Library/Preferences/com.bjango.istatmenus.plist +Library/Preferences/com.bjango.istatmenus.status.plist Library/Preferences/com.bjango.istatmenus5.extras.plist +Library/Preferences/com.bjango.istatmenus6.extras.plist diff --git a/mackup/applications/iterm2.cfg b/mackup/applications/iterm2.cfg index 02e826fe3..bb6453e76 100644 --- a/mackup/applications/iterm2.cfg +++ b/mackup/applications/iterm2.cfg @@ -3,3 +3,6 @@ name = iTerm2 [configuration_files] Library/Preferences/com.googlecode.iterm2.plist + +[xdg_configuration_files] +iterm2/AppSupport/DynamicProfiles diff --git a/mackup/applications/itunesscripts.cfg b/mackup/applications/itunes-scripts.cfg similarity index 73% rename from mackup/applications/itunesscripts.cfg rename to mackup/applications/itunes-scripts.cfg index 913b11617..d56bb8968 100644 --- a/mackup/applications/itunesscripts.cfg +++ b/mackup/applications/itunes-scripts.cfg @@ -1,5 +1,5 @@ [application] -name = iTunesScripts +name = iTunes Scripts [configuration_files] Library/iTunes/Scripts diff --git a/mackup/applications/joplin.cfg b/mackup/applications/joplin.cfg new file mode 100644 index 000000000..a3e5230ad --- /dev/null +++ b/mackup/applications/joplin.cfg @@ -0,0 +1,6 @@ +[application] +name = Joplin + +[xdg_configuration_files] +joplin-desktop/userchrome.css +joplin-desktop/userstyle.css diff --git a/mackup/applications/jrnl.cfg b/mackup/applications/jrnl.cfg index d09c8fe3f..7348f488e 100644 --- a/mackup/applications/jrnl.cfg +++ b/mackup/applications/jrnl.cfg @@ -3,3 +3,6 @@ name = jrnl [configuration_files] .jrnl_config + +[xdg_configuration_files] +jrnl/jrnl.yaml diff --git a/mackup/applications/jsbeautifier.cfg b/mackup/applications/jsbeautifier.cfg new file mode 100644 index 000000000..52b1ac9c8 --- /dev/null +++ b/mackup/applications/jsbeautifier.cfg @@ -0,0 +1,5 @@ +[application] +name = JS Beautifier + +[configuration_files] +.jsbeautifyrc diff --git a/mackup/applications/julia.cfg b/mackup/applications/julia.cfg index 8eb124285..2731ce39c 100644 --- a/mackup/applications/julia.cfg +++ b/mackup/applications/julia.cfg @@ -3,3 +3,4 @@ name = Julia [configuration_files] .juliarc.jl +.julia/config/startup.jl diff --git a/mackup/applications/k9s.cfg b/mackup/applications/k9s.cfg new file mode 100644 index 000000000..5a5f29fe0 --- /dev/null +++ b/mackup/applications/k9s.cfg @@ -0,0 +1,6 @@ +[application] +name = k9s + +[xdg_configuration_files] +k9s/config.yml +k9s/skin.yml diff --git a/mackup/applications/kaggle.cfg b/mackup/applications/kaggle.cfg new file mode 100644 index 000000000..0999d411d --- /dev/null +++ b/mackup/applications/kaggle.cfg @@ -0,0 +1,5 @@ +[application] +name = Kaggle + +[configuration_files] +.kaggle/kaggle.json diff --git a/mackup/applications/karabiner-elements.cfg b/mackup/applications/karabiner-elements.cfg index c11fbf25e..2455434e3 100644 --- a/mackup/applications/karabiner-elements.cfg +++ b/mackup/applications/karabiner-elements.cfg @@ -1,6 +1,5 @@ [application] name = Karabiner Elements -[configuration_files] -.config/karabiner/karabiner.json -.config/karabiner/assets/complex_modifications +[xdg_configuration_files] +karabiner diff --git a/mackup/applications/kdenlive.cfg b/mackup/applications/kdenlive.cfg index b19171780..071b9ff86 100644 --- a/mackup/applications/kdenlive.cfg +++ b/mackup/applications/kdenlive.cfg @@ -2,6 +2,7 @@ name = Kdenlive [configuration_files] - -.config/kdenliverc kdenlive + +[xdg_configuration_files] +kdenliverc diff --git a/mackup/applications/keepassx.cfg b/mackup/applications/keepassx.cfg index 387be3e0b..fc47e6c80 100644 --- a/mackup/applications/keepassx.cfg +++ b/mackup/applications/keepassx.cfg @@ -3,6 +3,8 @@ name = KeePassX [configuration_files] .keepassx -.config/keepassx/keepassx2.ini Library/Preferences/org.keepassx.keepassx.plist Library/Application Support/keepassx/keepassx2.ini + +[xdg_configuration_files] +keepassx/keepassx2.ini diff --git a/mackup/applications/keepassxc.cfg b/mackup/applications/keepassxc.cfg new file mode 100644 index 000000000..e68a462a3 --- /dev/null +++ b/mackup/applications/keepassxc.cfg @@ -0,0 +1,6 @@ +[application] +name = KeePassXC + +[configuration_files] +Library/Preferences/org.keepassxc.keepassxc.plist +Library/Application Support/keepassxc/keepassxc.ini diff --git a/mackup/applications/kitty.cfg b/mackup/applications/kitty.cfg index 5113e5987..081b7269d 100644 --- a/mackup/applications/kitty.cfg +++ b/mackup/applications/kitty.cfg @@ -1,5 +1,5 @@ [application] name = kitty -[configuration_files] -.config/kitty/kitty.conf +[xdg_configuration_files] +kitty/kitty.conf diff --git a/mackup/applications/krew.cfg b/mackup/applications/krew.cfg new file mode 100644 index 000000000..11e530e2e --- /dev/null +++ b/mackup/applications/krew.cfg @@ -0,0 +1,5 @@ +[application] +name = Krew + +[configuration_files] +.krew diff --git a/mackup/applications/lazygit.cfg b/mackup/applications/lazygit.cfg new file mode 100644 index 000000000..0488a8afc --- /dev/null +++ b/mackup/applications/lazygit.cfg @@ -0,0 +1,9 @@ +[application] +name = lazygit + +[configuration_files] +Library/Application Support/jesseduffield/lazygit/config.yml +Library/Application Support/lazygit/config.yml + +[xdg_configuration_files] +lazygit/config.yml diff --git a/mackup/applications/lf.cfg b/mackup/applications/lf.cfg new file mode 100644 index 000000000..21506795b --- /dev/null +++ b/mackup/applications/lf.cfg @@ -0,0 +1,5 @@ +[application] +name = lf + +[xdg_configuration_files] +lf/lfrc diff --git a/mackup/applications/libreoffice.cfg b/mackup/applications/libreoffice.cfg index 0c35b7f11..073d03e89 100644 --- a/mackup/applications/libreoffice.cfg +++ b/mackup/applications/libreoffice.cfg @@ -1,5 +1,5 @@ [application] name = LibreOffice -[configuration_files] -.config/libreoffice +[xdg_configuration_files] +libreoffice diff --git a/mackup/applications/lightroom-classic.cfg b/mackup/applications/lightroom-classic.cfg new file mode 100644 index 000000000..94a7a42af --- /dev/null +++ b/mackup/applications/lightroom-classic.cfg @@ -0,0 +1,5 @@ +[application] +name = Adobe Lightroom Classic + +[configuration_files] +Library/Preferences/com.adobe.LightroomClassicCC7.plist diff --git a/mackup/applications/liquidprompt.cfg b/mackup/applications/liquidprompt.cfg index be815a559..c6a389c3b 100644 --- a/mackup/applications/liquidprompt.cfg +++ b/mackup/applications/liquidprompt.cfg @@ -3,4 +3,6 @@ name = Liquid Prompt [configuration_files] .liquidpromptrc -.config/liquidpromptrc + +[xdg_configuration_files] +liquidpromptrc diff --git a/mackup/applications/littlesnitch.cfg b/mackup/applications/littlesnitch.cfg index c08c487d8..f952d2abb 100644 --- a/mackup/applications/littlesnitch.cfg +++ b/mackup/applications/littlesnitch.cfg @@ -3,6 +3,8 @@ name = LittleSnitch [configuration_files] Library/Preferences/at.obdev.LittleSnitchNetworkMonitor.plist +Library/Preferences/at.obdev.littlesnitch.networkmonitor.plist Library/Application Support/Little Snitch/rules.usr.xpl Library/Application Support/Little Snitch/configuration.xpl Library/Application Support/Little Snitch/configuration.user.xpl +Library/Application Support/Little Snitch/configuration4.user.xpl diff --git a/mackup/applications/livestreamer.cfg b/mackup/applications/livestreamer.cfg index 213a2ea0d..f8f8eb769 100644 --- a/mackup/applications/livestreamer.cfg +++ b/mackup/applications/livestreamer.cfg @@ -3,5 +3,7 @@ name = Livestreamer [configuration_files] .livestreamerrc -.config/livestreamer/config -.config/livestreamer/plugins + +[xdg_configuration_files] +livestreamer/config +livestreamer/plugins diff --git a/mackup/applications/logitech-options.cfg b/mackup/applications/logitech-options.cfg new file mode 100644 index 000000000..751d1ec15 --- /dev/null +++ b/mackup/applications/logitech-options.cfg @@ -0,0 +1,5 @@ +[application] +name = Logitech Options + +[configuration_files] +Library/Preferences/com.logitech.manager.setting.ffff.plist diff --git a/mackup/applications/logseq.cfg b/mackup/applications/logseq.cfg new file mode 100644 index 000000000..aaf5b8ce7 --- /dev/null +++ b/mackup/applications/logseq.cfg @@ -0,0 +1,5 @@ +[application] +name = Logseq + +[configuration_files] +.logseq diff --git a/mackup/applications/loopback.cfg b/mackup/applications/loopback.cfg new file mode 100644 index 000000000..930dc5e53 --- /dev/null +++ b/mackup/applications/loopback.cfg @@ -0,0 +1,6 @@ +[application] +name = Loopback + +[configuration_files] +Library/Preferences/com.rogueamoeba.Loopback.plist +Library/Application Support/Loopback/Devices.plist diff --git a/mackup/applications/lunarvim.cfg b/mackup/applications/lunarvim.cfg new file mode 100644 index 000000000..9cd77d474 --- /dev/null +++ b/mackup/applications/lunarvim.cfg @@ -0,0 +1,5 @@ +[application] +name = LunarVim + +[xdg_configuration_files] +lvim/config.lua diff --git a/mackup/applications/macosx.cfg b/mackup/applications/macosx.cfg index 516495a12..be006d4f9 100644 --- a/mackup/applications/macosx.cfg +++ b/mackup/applications/macosx.cfg @@ -7,6 +7,5 @@ Library/KeyBindings/DefaultKeyBinding.dict Library/PDF Services Library/Preferences/com.apple.symbolichotkeys.plist Library/Scripts -Library/Services Library/Speech/Speakable Items Library/Workflows diff --git a/mackup/applications/magnet.cfg b/mackup/applications/magnet.cfg new file mode 100644 index 000000000..6fdaba4a7 --- /dev/null +++ b/mackup/applications/magnet.cfg @@ -0,0 +1,5 @@ +[application] +name = Magnet + +[configuration_files] +Library/Preferences/com.crowdcafe.windowmagnet.plist diff --git a/mackup/applications/mail.cfg b/mackup/applications/mail.cfg new file mode 100644 index 000000000..cd75971f7 --- /dev/null +++ b/mackup/applications/mail.cfg @@ -0,0 +1,5 @@ +[application] +name = Mail + +[configuration_files] +Library/Preferences/com.apple.mail.plist diff --git a/mackup/applications/mailmate.cfg b/mackup/applications/mailmate.cfg index a49ed2c87..c122a2c17 100644 --- a/mackup/applications/mailmate.cfg +++ b/mackup/applications/mailmate.cfg @@ -10,3 +10,4 @@ Library/Application Support/Mailmate/Signatures.plist Library/Application Support/Mailmate/Sources.plist Library/Application Support/Mailmate/Submission.plist Library/Application Support/Mailmate/Tags.plist +Library/Application Support/Mailmate/Resources/KeyBindings diff --git a/mackup/applications/mako.cfg b/mackup/applications/mako.cfg new file mode 100644 index 000000000..b611ce197 --- /dev/null +++ b/mackup/applications/mako.cfg @@ -0,0 +1,5 @@ +[application] +name = mako + +[xdg_configuration_files] +mako/config diff --git a/mackup/applications/marta.cfg b/mackup/applications/marta.cfg new file mode 100644 index 000000000..e437ba057 --- /dev/null +++ b/mackup/applications/marta.cfg @@ -0,0 +1,8 @@ +[application] +name = Marta + +[configuration_files] +Library/Application Support/org.yanex.marta/conf.json +Library/Application Support/org.yanex.marta/favorites.json +Library/Application Support/org.yanex.marta/conf.marco +Library/Application Support/org.yanex.marta/favorites.marco diff --git a/mackup/applications/maven.cfg b/mackup/applications/maven.cfg index 50e0dc4e3..fa44fd0a1 100644 --- a/mackup/applications/maven.cfg +++ b/mackup/applications/maven.cfg @@ -2,5 +2,6 @@ name = Maven [configuration_files] +.m2/settings-security.xml .m2/settings.xml .m2/toolchains.xml diff --git a/mackup/applications/mendeley.cfg b/mackup/applications/mendeley.cfg new file mode 100644 index 000000000..b33797eb7 --- /dev/null +++ b/mackup/applications/mendeley.cfg @@ -0,0 +1,5 @@ +[application] +name = Mendelay Desktop + +[configuration_files] +Library/Application Support/Mendeley Desktop diff --git a/mackup/applications/micro.cfg b/mackup/applications/micro.cfg index 17f6f810b..862e8c98d 100644 --- a/mackup/applications/micro.cfg +++ b/mackup/applications/micro.cfg @@ -1,8 +1,8 @@ [application] name = Micro -[configuration_files] -.config/micro/colorschemes -.config/micro/syntax -.config/micro/settings.json -.config/micro/bindings.json +[xdg_configuration_files] +micro/colorschemes +micro/syntax +micro/settings.json +micro/bindings.json diff --git a/mackup/applications/microsoft-remote-desktop.cfg b/mackup/applications/microsoft-remote-desktop.cfg index f68255870..afa584b04 100644 --- a/mackup/applications/microsoft-remote-desktop.cfg +++ b/mackup/applications/microsoft-remote-desktop.cfg @@ -2,4 +2,4 @@ name = Microsoft Remote Desktop [configuration_files] -Library/Containers/com.microsoft.rdc.mac/Data/Library/Preferences/com.microsoft.rdc.mac.plist +Library/Containers/com.microsoft.rdc.macos/Data/Library/Preferences/com.microsoft.rdc.macos.plist diff --git a/mackup/applications/mitmproxy.cfg b/mackup/applications/mitmproxy.cfg new file mode 100644 index 000000000..6ab38a75b --- /dev/null +++ b/mackup/applications/mitmproxy.cfg @@ -0,0 +1,5 @@ +[application] +name = mitmproxy + +[configuration_files] +.mitmproxy/config.yaml diff --git a/mackup/applications/mkcert.cfg b/mackup/applications/mkcert.cfg new file mode 100644 index 000000000..566385cac --- /dev/null +++ b/mackup/applications/mkcert.cfg @@ -0,0 +1,5 @@ +[application] +name = mkcert + +[configuration_files] +Library/Application Support/mkcert diff --git a/mackup/applications/mosaic.cfg b/mackup/applications/mosaic.cfg new file mode 100644 index 000000000..51d1bfd5a --- /dev/null +++ b/mackup/applications/mosaic.cfg @@ -0,0 +1,5 @@ +[application] +name = Mosaic + +[configuration_files] +Library/Application Support/com.lightpillar.Mosaic/MosaicCoreData.storedata diff --git a/mackup/applications/mps-youtube.cfg b/mackup/applications/mps-youtube.cfg index 3c73693e4..aca606e5a 100644 --- a/mackup/applications/mps-youtube.cfg +++ b/mackup/applications/mps-youtube.cfg @@ -1,6 +1,6 @@ [application] name = MPS Youtube -[configuration_files] -.config/mps-youtube/config -.config/mps-youtube/playlist_v2 +[xdg_configuration_files] +mps-youtube/config +mps-youtube/playlist_v2 diff --git a/mackup/applications/mpv.cfg b/mackup/applications/mpv.cfg index 3ad60ec59..e8151585a 100644 --- a/mackup/applications/mpv.cfg +++ b/mackup/applications/mpv.cfg @@ -2,11 +2,14 @@ name = MPV [configuration_files] -.config/mpv/config -.config/mpv/mpv.conf -.config/mpv/scripts -.config/mpv/input.conf -.config/mpv/watch_later .mpv/channels.conf .mpv/config .mpv/input.conf + +[xdg_configuration_files] +mpv/config +mpv/mpv.conf +mpv/scripts +mpv/script-opts +mpv/input.conf +mpv/watch_later diff --git a/mackup/applications/mtmr.cfg b/mackup/applications/mtmr.cfg new file mode 100644 index 000000000..04691eafc --- /dev/null +++ b/mackup/applications/mtmr.cfg @@ -0,0 +1,5 @@ +[application] +name = mtmr + +[configuration_files] +Library/Application Support/MTMR/items.json diff --git a/mackup/applications/multitouch.cfg b/mackup/applications/multitouch.cfg new file mode 100644 index 000000000..2314521b9 --- /dev/null +++ b/mackup/applications/multitouch.cfg @@ -0,0 +1,5 @@ +[application] +name = Multitouch + +[configuration_files] +Library/Preferences/com.brassmonkery.Multitouch.plist diff --git a/mackup/applications/mumu.cfg b/mackup/applications/mumu.cfg new file mode 100644 index 000000000..1a388a63b --- /dev/null +++ b/mackup/applications/mumu.cfg @@ -0,0 +1,5 @@ +[application] +name = Mumu + +[configuration_files] +Library/Application Support/Mumu diff --git a/mackup/applications/musicbrainz-picard.cfg b/mackup/applications/musicbrainz-picard.cfg index 01fb730df..9adc25bd9 100644 --- a/mackup/applications/musicbrainz-picard.cfg +++ b/mackup/applications/musicbrainz-picard.cfg @@ -1,5 +1,5 @@ [application] name = MusicBrainz Picard -[configuration_files] -.config/MusicBrainz +[xdg_configuration_files] +MusicBrainz diff --git a/mackup/applications/mutespotifyads.cfg b/mackup/applications/mutespotifyads.cfg new file mode 100644 index 000000000..f8d3b8614 --- /dev/null +++ b/mackup/applications/mutespotifyads.cfg @@ -0,0 +1,5 @@ +[application] +name = MuteSpotifyAds + +[configuration_files] +Library/Preferences/de.simonmeusel.MuteSpotifyAds.plist diff --git a/mackup/applications/mycli.cfg b/mackup/applications/mycli.cfg new file mode 100644 index 000000000..693c4ed77 --- /dev/null +++ b/mackup/applications/mycli.cfg @@ -0,0 +1,5 @@ +[application] +name = mycli + +[configuration_files] +.myclirc diff --git a/mackup/applications/neofetch.cfg b/mackup/applications/neofetch.cfg new file mode 100644 index 000000000..3c52c7644 --- /dev/null +++ b/mackup/applications/neofetch.cfg @@ -0,0 +1,5 @@ +[application] +name = Neofetch + +[xdg_configuration_files] +neofetch/config.conf diff --git a/mackup/applications/neovim.cfg b/mackup/applications/neovim.cfg index 386810e20..424df0fcc 100644 --- a/mackup/applications/neovim.cfg +++ b/mackup/applications/neovim.cfg @@ -2,6 +2,17 @@ name = neovim [configuration_files] -.config/nvim/init.vim .nvimrc .nvim + +[xdg_configuration_files] +nvim/init.vim +nvim/init.lua +nvim/lua +nvim/colors +nvim/compiler +nvim/ftplugin +nvim/ftdetect +nvim/indent +nvim/plugin +nvim/syntax diff --git a/mackup/applications/netlify.cfg b/mackup/applications/netlify.cfg new file mode 100644 index 000000000..83d4b0e30 --- /dev/null +++ b/mackup/applications/netlify.cfg @@ -0,0 +1,5 @@ +[application] +name = Netlify + +[configuration_files] +.netlify/config.json diff --git a/mackup/applications/ni.cfg b/mackup/applications/ni.cfg new file mode 100644 index 000000000..fb635404d --- /dev/null +++ b/mackup/applications/ni.cfg @@ -0,0 +1,5 @@ +[application] +name = ni + +[configuration_files] +.nirc diff --git a/mackup/applications/nomacs.cfg b/mackup/applications/nomacs.cfg index 9ac8ed40a..34d5f394e 100644 --- a/mackup/applications/nomacs.cfg +++ b/mackup/applications/nomacs.cfg @@ -1,5 +1,5 @@ [application] name = Nomacs -[configuration_files] -.config/nomacs +[xdg_configuration_files] +nomacs diff --git a/mackup/applications/nosqlbooster-for-mongodb.cfg b/mackup/applications/nosqlbooster-for-mongodb.cfg new file mode 100644 index 000000000..bb138e0be --- /dev/null +++ b/mackup/applications/nosqlbooster-for-mongodb.cfg @@ -0,0 +1,5 @@ +[application] +name = NoSQLBooster for MongoDB + +[configuration_files] +Documents/NoSQLBooster diff --git a/mackup/applications/notion-enhancer.cfg b/mackup/applications/notion-enhancer.cfg new file mode 100644 index 000000000..78a892afd --- /dev/null +++ b/mackup/applications/notion-enhancer.cfg @@ -0,0 +1,5 @@ +[application] +name = notion-enhancer + +[configuration_files] +.notion-enhancer diff --git a/mackup/applications/nova.cfg b/mackup/applications/nova.cfg new file mode 100644 index 000000000..16970eb58 --- /dev/null +++ b/mackup/applications/nova.cfg @@ -0,0 +1,5 @@ +[application] +name = Nova + +[configuration_files] +Library/Preferences/com.panic.Nova.plist diff --git a/mackup/applications/npmrc.cfg b/mackup/applications/npmrc.cfg new file mode 100644 index 000000000..2ed1e1c89 --- /dev/null +++ b/mackup/applications/npmrc.cfg @@ -0,0 +1,5 @@ +[application] +name = npmrc + +[configuration_files] +.npmrcs diff --git a/mackup/applications/nslogger.cfg b/mackup/applications/nslogger.cfg new file mode 100644 index 000000000..56932ecae --- /dev/null +++ b/mackup/applications/nslogger.cfg @@ -0,0 +1,5 @@ +[application] +name = NSLogger + +[configuration_files] +Library/Preferences/com.florentpillet.NSLogger.plist diff --git a/mackup/applications/nuget.cfg b/mackup/applications/nuget.cfg new file mode 100644 index 000000000..317651a84 --- /dev/null +++ b/mackup/applications/nuget.cfg @@ -0,0 +1,5 @@ +[application] +name = nuget + +[configuration_files] +.nuget/NuGet/NuGet.Config diff --git a/mackup/applications/nushell.cfg b/mackup/applications/nushell.cfg new file mode 100644 index 000000000..782260e3d --- /dev/null +++ b/mackup/applications/nushell.cfg @@ -0,0 +1,10 @@ +[application] +name = Nushell + +[configuration_files] +Library/Application Support/nushell/env.nu +Library/Application Support/nushell/config.nu + +[xdg_configuration_files] +nushell/config.nu +nushell/env.nu diff --git a/mackup/applications/obs.cfg b/mackup/applications/obs.cfg new file mode 100644 index 000000000..48b0e5036 --- /dev/null +++ b/mackup/applications/obs.cfg @@ -0,0 +1,7 @@ +[application] +name = OBS + +[configuration_files] +Library/Preferences/com.obsproject.obs-studio.plist +Library/Application Support/obs-studio/global.ini +Library/Application Support/obs-studio/basic diff --git a/mackup/applications/oci.cfg b/mackup/applications/oci.cfg new file mode 100644 index 000000000..3b144903c --- /dev/null +++ b/mackup/applications/oci.cfg @@ -0,0 +1,6 @@ +[application] +name = Oracle Cloud Infrastructure CLI + +[configuration_files] +.oci/config +.oci/oci_cli_rc diff --git a/mackup/applications/ogdesign-eagle.cfg b/mackup/applications/ogdesign-eagle.cfg new file mode 100644 index 000000000..9fba0defe --- /dev/null +++ b/mackup/applications/ogdesign-eagle.cfg @@ -0,0 +1,5 @@ +[application] +name = Eagle (ogdesign) + +[configuration_files] +Library/Application Support/Eagle/Settings diff --git a/mackup/applications/oh-my-fish.cfg b/mackup/applications/oh-my-fish.cfg index a9b07cf49..cdf1b96c2 100644 --- a/mackup/applications/oh-my-fish.cfg +++ b/mackup/applications/oh-my-fish.cfg @@ -1,5 +1,5 @@ [application] name = Oh My Fish -[configuration_files] -.config/omf +[xdg_configuration_files] +omf diff --git a/mackup/applications/oh-my-tmux.cfg b/mackup/applications/oh-my-tmux.cfg new file mode 100644 index 000000000..1cbeecbbd --- /dev/null +++ b/mackup/applications/oh-my-tmux.cfg @@ -0,0 +1,5 @@ +[application] +name = Oh My Tmux + +[configuration_files] +.tmux.conf.local diff --git a/mackup/applications/oh-my-zsh.cfg b/mackup/applications/oh-my-zsh.cfg deleted file mode 100644 index 37e8aa59d..000000000 --- a/mackup/applications/oh-my-zsh.cfg +++ /dev/null @@ -1,6 +0,0 @@ -[application] -name = Oh My Zsh - -[configuration_files] -.oh-my-zsh/custom -.oh-my-zsh/completions diff --git a/mackup/applications/openbox.cfg b/mackup/applications/openbox.cfg index ed672ab4f..2bd43e3b8 100644 --- a/mackup/applications/openbox.cfg +++ b/mackup/applications/openbox.cfg @@ -1,8 +1,8 @@ [application] name = openbox -[configuration_files] -.config/openbox/menu.xml -.config/openbox/rc.xml -.config/openbox/environment -.config/openbox/autostart +[xdg_configuration_files] +openbox/menu.xml +openbox/rc.xml +openbox/environment +openbox/autostart diff --git a/mackup/applications/p10k.cfg b/mackup/applications/p10k.cfg new file mode 100644 index 000000000..a5e377bc5 --- /dev/null +++ b/mackup/applications/p10k.cfg @@ -0,0 +1,5 @@ +[application] +name = Powerlevel10k + +[configuration_files] +.p10k.zsh diff --git a/mackup/applications/pdfjam.cfg b/mackup/applications/pdfjam.cfg new file mode 100644 index 000000000..45388a368 --- /dev/null +++ b/mackup/applications/pdfjam.cfg @@ -0,0 +1,5 @@ +[application] +name = PDFjam + +[configuration_files] +.pdfjam.conf diff --git a/mackup/applications/photoshop.cfg b/mackup/applications/photoshop.cfg index e596e10f7..aea0ac7fd 100644 --- a/mackup/applications/photoshop.cfg +++ b/mackup/applications/photoshop.cfg @@ -6,8 +6,10 @@ Library/Application Support/Adobe/Adobe Photoshop CC 2013/Presets Library/Application Support/Adobe/Adobe Photoshop CC 2014/Presets Library/Application Support/Adobe/Adobe Photoshop CC 2015/Presets Library/Application Support/Adobe/Adobe Photoshop CC 2015.5/Presets +Library/Application Support/Adobe/Adobe Photoshop CC 2019/Presets Library/Preferences/Adobe Photoshop CC 2013 Settings Library/Preferences/Adobe Photoshop CC 2014 Settings Library/Preferences/Adobe Photoshop CC 2015 Settings Library/Preferences/Adobe Photoshop CC 2015.5 Settings +Library/Preferences/Adobe Photoshop CC 2019 Settings Library/Preferences/com.adobe.Photoshop.plist diff --git a/mackup/applications/phpstorm.cfg b/mackup/applications/phpstorm.cfg index 7017bf394..9977d4298 100644 --- a/mackup/applications/phpstorm.cfg +++ b/mackup/applications/phpstorm.cfg @@ -2,30 +2,65 @@ name = PhpStorm [configuration_files] -Library/Preferences/com.jetbrains.PhpStorm.plist -Library/Application Support/PhpStorm2018.1 -Library/Preferences/PhpStorm2018.1 -Library/Application Support/PhpStorm2017.3 -Library/Preferences/PhpStorm2017.3 -Library/Application Support/PhpStorm2017.2 -Library/Preferences/PhpStorm2017.2 -Library/Application Support/PhpStorm2017.1 -Library/Preferences/PhpStorm2017.1 -Library/Application Support/PhpStorm2016.3 -Library/Preferences/PhpStorm2016.3 -Library/Application Support/PhpStorm2016.2 -Library/Preferences/PhpStorm2016.2 +Library/Application Support/JetBrains/PhpStorm2020.1 +Library/Application Support/JetBrains/PhpStorm2020.2 +Library/Application Support/JetBrains/PhpStorm2020.3 +Library/Application Support/JetBrains/PhpStorm2021.1 +Library/Application Support/JetBrains/PhpStorm2021.2 +Library/Application Support/JetBrains/PhpStorm2021.3 +Library/Application Support/JetBrains/PhpStorm2022.1 +Library/Application Support/JetBrains/PhpStorm2022.2 +Library/Application Support/JetBrains/PhpStorm2022.3 +Library/Application Support/JetBrains/PhpStorm2023.1 +Library/Application Support/JetBrains/PhpStorm2023.2 Library/Application Support/PhpStorm2016.1 -Library/Preferences/PhpStorm2016.1 +Library/Application Support/PhpStorm2016.2 +Library/Application Support/PhpStorm2016.3 +Library/Application Support/PhpStorm2017.1 +Library/Application Support/PhpStorm2017.2 +Library/Application Support/PhpStorm2017.3 +Library/Application Support/PhpStorm2018.1 +Library/Application Support/PhpStorm2018.2 +Library/Application Support/PhpStorm2018.3 +Library/Application Support/PhpStorm2019.1 +Library/Application Support/PhpStorm2019.2 +Library/Application Support/PhpStorm2019.3 +Library/Application Support/PhpStorm2019.4 Library/Application Support/WebIde100 -Library/Preferences/WebIde100 -Library/Application Support/WebIde95 -Library/Preferences/WebIde95 -Library/Application Support/WebIde90 -Library/Preferences/WebIde90 -Library/Application Support/WebIde80 -Library/Preferences/WebIde80 -Library/Application Support/WebIde70 -Library/Preferences/WebIde70 Library/Application Support/WebIde60 +Library/Application Support/WebIde70 +Library/Application Support/WebIde80 +Library/Application Support/WebIde90 +Library/Application Support/WebIde95 +Library/Preferences/com.jetbrains.PhpStorm.plist +Library/Preferences/PhpStorm2016.1 +Library/Preferences/PhpStorm2016.2 +Library/Preferences/PhpStorm2016.3 +Library/Preferences/PhpStorm2017.1 +Library/Preferences/PhpStorm2017.2 +Library/Preferences/PhpStorm2017.3 +Library/Preferences/PhpStorm2018.1 +Library/Preferences/PhpStorm2018.2 +Library/Preferences/PhpStorm2018.3 +Library/Preferences/PhpStorm2019.1 +Library/Preferences/PhpStorm2019.2 +Library/Preferences/PhpStorm2019.3 +Library/Preferences/PhpStorm2019.4 +Library/Preferences/WebIde100 Library/Preferences/WebIde60 +Library/Preferences/WebIde70 +Library/Preferences/WebIde80 +Library/Preferences/WebIde90 +Library/Preferences/WebIde95 +.PhpStorm2016.1/config +.PhpStorm2016.2/config +.PhpStorm2016.3/config +.PhpStorm2017.1/config +.PhpStorm2017.2/config +.PhpStorm2017.3/config +.PhpStorm2018.1/config +.PhpStorm2018.2/config +.PhpStorm2018.3/config +.PhpStorm2019.1/config +.PhpStorm2019.2/config +.PhpStorm2019.3/config diff --git a/mackup/applications/picgo.cfg b/mackup/applications/picgo.cfg new file mode 100644 index 000000000..23d3c307f --- /dev/null +++ b/mackup/applications/picgo.cfg @@ -0,0 +1,5 @@ +[application] +name = PicGo + +[configuration_files] +Library/Application Support/picgo/data.json diff --git a/mackup/applications/pixelsnap2.cfg b/mackup/applications/pixelsnap2.cfg new file mode 100644 index 000000000..54d91f75c --- /dev/null +++ b/mackup/applications/pixelsnap2.cfg @@ -0,0 +1,5 @@ +[application] +name = PixelSnap 2 + +[configuration_files] +Library/Preferences/pl.maketheweb.pixelsnap2.plist diff --git a/mackup/applications/planner.cfg b/mackup/applications/planner.cfg new file mode 100644 index 000000000..ed5863382 --- /dev/null +++ b/mackup/applications/planner.cfg @@ -0,0 +1,6 @@ +[application] +name = Planner + +[configuration_files] +.var/app/com.github.alainm23.planner/config +.var/app/com.github.alainm23.planner/data diff --git a/mackup/applications/pnpm.cfg b/mackup/applications/pnpm.cfg new file mode 100644 index 000000000..b64fb2fd1 --- /dev/null +++ b/mackup/applications/pnpm.cfg @@ -0,0 +1,6 @@ +[application] +name = pnpm + +[configuration_files] +.pnpm/global_pnpmfile.js +.pnpm-store/2/store.json diff --git a/mackup/applications/pock.cfg b/mackup/applications/pock.cfg new file mode 100644 index 000000000..85cf60aed --- /dev/null +++ b/mackup/applications/pock.cfg @@ -0,0 +1,5 @@ +[application] +name = Pock + +[configuration_files] +Library/Preferences/com.pigigaldi.pock.plist diff --git a/mackup/applications/poetry.cfg b/mackup/applications/poetry.cfg new file mode 100644 index 000000000..459105a72 --- /dev/null +++ b/mackup/applications/poetry.cfg @@ -0,0 +1,9 @@ +[application] +name = poetry + +[configuration_files] +Library/Application Support/pypoetry/config.toml +Library/Preferences/pypoetry/config.toml + +[xdg_configuration_files] +pypoetry/config.toml diff --git a/mackup/applications/polybar.cfg b/mackup/applications/polybar.cfg new file mode 100644 index 000000000..7798d4ae0 --- /dev/null +++ b/mackup/applications/polybar.cfg @@ -0,0 +1,11 @@ +[application] +name = polybar + +[configuration_files] +.polybar/config +.polybar/launch.sh + +[xdg_configuration_files] +polybar/config +polybar/launch.sh +polybar/scripts diff --git a/mackup/applications/popclip.cfg b/mackup/applications/popclip.cfg index 5ab9e29f7..a4d00ac41 100644 --- a/mackup/applications/popclip.cfg +++ b/mackup/applications/popclip.cfg @@ -3,4 +3,4 @@ name = PopClip [configuration_files] Library/Preferences/com.pilotmoon.popclip.plist -Library/Application Support/PopClip +Library/Application Support/PopClip/Extensions diff --git a/mackup/applications/powerline.cfg b/mackup/applications/powerline.cfg new file mode 100644 index 000000000..fcf44a83b --- /dev/null +++ b/mackup/applications/powerline.cfg @@ -0,0 +1,8 @@ +[application] +name = Powerline + +[xdg_configuration_files] +powerline/config.json +powerline/colors.json +powerline/themes +powerline/colorschemes diff --git a/mackup/applications/proselint.cfg b/mackup/applications/proselint.cfg new file mode 100644 index 000000000..65efb8037 --- /dev/null +++ b/mackup/applications/proselint.cfg @@ -0,0 +1,8 @@ +[application] +name = proselint + +[configuration_files] +.proselintrc + +[xdg_configuration_files] +proselint/config diff --git a/mackup/applications/proxyman.cfg b/mackup/applications/proxyman.cfg new file mode 100644 index 000000000..424a882cd --- /dev/null +++ b/mackup/applications/proxyman.cfg @@ -0,0 +1,8 @@ +[application] +name = Proxyman + +[configuration_files] +Library/Application Support/com.proxyman.NSProxy +Library/Preferences/com.proxyman.NSProxy.plist +Library/Application Support/com.proxyman.NSProxy-setapp +Library/Preferences/com.proxyman.NSProxy-setapp.plist diff --git a/mackup/applications/prusa-slicer.cfg b/mackup/applications/prusa-slicer.cfg new file mode 100644 index 000000000..f388c1c22 --- /dev/null +++ b/mackup/applications/prusa-slicer.cfg @@ -0,0 +1,5 @@ +[application] +name = PrusaSlicer + +[xdg_configuration_files] +PrusaSlicer diff --git a/mackup/applications/psysh.cfg b/mackup/applications/psysh.cfg new file mode 100644 index 000000000..41542e87f --- /dev/null +++ b/mackup/applications/psysh.cfg @@ -0,0 +1,5 @@ +[application] +name = PsySH + +[xdg_configuration_files] +psysh/config.php diff --git a/mackup/applications/pycharm.cfg b/mackup/applications/pycharm.cfg index edd315e5d..c6fbaf6f7 100644 --- a/mackup/applications/pycharm.cfg +++ b/mackup/applications/pycharm.cfg @@ -2,15 +2,28 @@ name = PyCharm [configuration_files] -.PyCharm40/config -Library/Application Support/PyCharm40 -Library/Preferences/PyCharm40 -.PyCharm50/config -Library/Application Support/PyCharm50 -Library/Preferences/PyCharm50 .PyCharm2016.1/config .PyCharm2016.2/config +.PyCharm40/config +.PyCharm50/config +.PyCharmCE2019.3/config +Library/Application Support/JetBrains/PyCharm2020.1 +Library/Application Support/JetBrains/PyCharm2020.2 +Library/Application Support/JetBrains/PyCharm2020.3 +Library/Application Support/JetBrains/PyCharm2020.4 +Library/Application Support/JetBrains/PyCharmCE2020.1 +Library/Application Support/JetBrains/PyCharm2023.1 +Library/Application Support/JetBrains/PyCharm2023.2 +Library/Application Support/PyCharm Library/Application Support/PyCharm2016.1 Library/Application Support/PyCharm2016.2 +Library/Application Support/PyCharm2019.2 +Library/Application Support/PyCharm2019.3 +Library/Application Support/PyCharm40 +Library/Application Support/PyCharm50 Library/Preferences/PyCharm2016.1 Library/Preferences/PyCharm2016.2 +Library/Preferences/PyCharm2019.2 +Library/Preferences/PyCharm2019.3 +Library/Preferences/PyCharm40 +Library/Preferences/PyCharm50 diff --git a/mackup/applications/quitter.cfg b/mackup/applications/quitter.cfg new file mode 100644 index 000000000..1dae8b0c1 --- /dev/null +++ b/mackup/applications/quitter.cfg @@ -0,0 +1,5 @@ +[application] +name = Quitter + +[configuration_files] +Library/Preferences/com.marcoarment.quitter.plist diff --git a/mackup/applications/qutebrowser.cfg b/mackup/applications/qutebrowser.cfg index 23b8aff72..9acbc7abc 100644 --- a/mackup/applications/qutebrowser.cfg +++ b/mackup/applications/qutebrowser.cfg @@ -3,5 +3,7 @@ name = Qutebrowser [configuration_files] .qutebrowser/config.py -.config/qutebrowser/config.py -.config/qutebrowser/qutebrowser.conf + +[xdg_configuration_files] +qutebrowser/config.py +qutebrowser/qutebrowser.conf diff --git a/mackup/applications/qv2ray.cfg b/mackup/applications/qv2ray.cfg new file mode 100644 index 000000000..25721f229 --- /dev/null +++ b/mackup/applications/qv2ray.cfg @@ -0,0 +1,6 @@ +[application] +name = Qv2ray + +[configuration_files] +Library/Preferences/qv2ray/Qv2ray.conf +Library/Preferences/qv2ray/plugin_settings diff --git a/mackup/applications/r.cfg b/mackup/applications/r.cfg index 7d5d7289f..ac8c9e711 100644 --- a/mackup/applications/r.cfg +++ b/mackup/applications/r.cfg @@ -5,4 +5,7 @@ name = R .R .Rhistory .Rprofile +.Rprofile.d +.Renviron +.Renviron.d Library/Preferences/org.R-project.R.plist diff --git a/mackup/applications/ranger.cfg b/mackup/applications/ranger.cfg index fca092043..24abf3e9a 100644 --- a/mackup/applications/ranger.cfg +++ b/mackup/applications/ranger.cfg @@ -1,9 +1,9 @@ [application] name = Ranger -[configuration_files] -.config/ranger/commands.py -.config/ranger/rc.conf -.config/ranger/rifle.conf -.config/ranger/scope.sh -.config/ranger/plugins +[xdg_configuration_files] +ranger/commands.py +ranger/rc.conf +ranger/rifle.conf +ranger/scope.sh +ranger/plugins diff --git a/mackup/applications/raycast.cfg b/mackup/applications/raycast.cfg new file mode 100644 index 000000000..767ed4d16 --- /dev/null +++ b/mackup/applications/raycast.cfg @@ -0,0 +1,5 @@ +[application] +name = Raycast + +[configuration_files] +Library/Preferences/com.raycast.macos.plist diff --git a/mackup/applications/rbenv.cfg b/mackup/applications/rbenv.cfg new file mode 100644 index 000000000..75d007814 --- /dev/null +++ b/mackup/applications/rbenv.cfg @@ -0,0 +1,5 @@ +[application] +name = rbenv + +[configuration_files] +.rbenv/default_gems diff --git a/mackup/applications/rclone.cfg b/mackup/applications/rclone.cfg new file mode 100644 index 000000000..e87038cad --- /dev/null +++ b/mackup/applications/rclone.cfg @@ -0,0 +1,5 @@ +[application] +name = rclone + +[xdg_configuration_files] +rclone diff --git a/mackup/applications/rectangle.cfg b/mackup/applications/rectangle.cfg new file mode 100644 index 000000000..8d7e3a068 --- /dev/null +++ b/mackup/applications/rectangle.cfg @@ -0,0 +1,5 @@ +[application] +name = Rectangle + +[configuration_files] +Library/Preferences/com.knollsoft.Rectangle.plist diff --git a/mackup/applications/redshift-scheduler.cfg b/mackup/applications/redshift-scheduler.cfg index e41627638..49726ba9c 100644 --- a/mackup/applications/redshift-scheduler.cfg +++ b/mackup/applications/redshift-scheduler.cfg @@ -1,5 +1,5 @@ [application] name = Redshift Scheduler -[configuration_files] -.config/redshift-scheduler/rules.conf +[xdg_configuration_files] +redshift-scheduler/rules.conf diff --git a/mackup/applications/redshift.cfg b/mackup/applications/redshift.cfg index 85bb31e65..87e2eb0b6 100644 --- a/mackup/applications/redshift.cfg +++ b/mackup/applications/redshift.cfg @@ -1,5 +1,5 @@ [application] name = Redshift -[configuration_files] -.config/redshift.conf +[xdg_configuration_files] +redshift.conf diff --git a/mackup/applications/remote-desktop-manager.cfg b/mackup/applications/remote-desktop-manager.cfg new file mode 100644 index 000000000..372542c9d --- /dev/null +++ b/mackup/applications/remote-desktop-manager.cfg @@ -0,0 +1,6 @@ +[application] +name = Remote Desktop Manager + +[configuration_files] +Library/Application Support/com.devolutions.remotedesktopmanager.free/Connections.db +Library/Application Support/com.devolutions.remotedesktopmanager/Connections.db diff --git a/mackup/applications/rime.cfg b/mackup/applications/rime.cfg index 0865c581e..123701aca 100644 --- a/mackup/applications/rime.cfg +++ b/mackup/applications/rime.cfg @@ -2,7 +2,6 @@ name = Rime [configuration_files] - Library/Rime/default.custom.yaml Library/Rime/default.yaml Library/Rime/installation.yaml @@ -11,10 +10,11 @@ Library/Rime/squirrel.yaml Library/Rime/symbols.yaml Library/Rime/user.yaml -.config/ibus/rimedefault.custom.yaml -.config/ibus/rimedefault.yaml -.config/ibus/rimeinstallation.yaml -.config/ibus/rimesquirrel.custom.yaml -.config/ibus/rimesquirrel.yaml -.config/ibus/rimesymbols.yaml -.config/ibus/rimeuser.yaml +[xdg_configuration_files] +ibus/rimedefault.custom.yaml +ibus/rimedefault.yaml +ibus/rimeinstallation.yaml +ibus/rimesquirrel.custom.yaml +ibus/rimesquirrel.yaml +ibus/rimesymbols.yaml +ibus/rimeuser.yaml diff --git a/mackup/applications/ripgrep.cfg b/mackup/applications/ripgrep.cfg new file mode 100644 index 000000000..0c70519d7 --- /dev/null +++ b/mackup/applications/ripgrep.cfg @@ -0,0 +1,5 @@ +[application] +name = ripgrep + +[configuration_files] +.ripgreprc diff --git a/mackup/applications/robo3t.cfg b/mackup/applications/robo3t.cfg new file mode 100644 index 000000000..316168b20 --- /dev/null +++ b/mackup/applications/robo3t.cfg @@ -0,0 +1,6 @@ +[application] +name = Robo 3T + +[configuration_files] +Library/Preferences/com.3t.Robomongo.plist +.3T diff --git a/mackup/applications/rocket.cfg b/mackup/applications/rocket.cfg new file mode 100644 index 000000000..b1e402c0d --- /dev/null +++ b/mackup/applications/rocket.cfg @@ -0,0 +1,6 @@ +[application] +name = Rocket + +[configuration_files] +Library/Preferences/net.matthewpalmer.Rocket.plist +Library/Application Support/Rocket diff --git a/mackup/applications/rofi.cfg b/mackup/applications/rofi.cfg new file mode 100644 index 000000000..d40d53e43 --- /dev/null +++ b/mackup/applications/rofi.cfg @@ -0,0 +1,5 @@ +[application] +name = rofi + +[xdg_configuration_files] +rofi/config.rasi diff --git a/mackup/applications/rstudio.cfg b/mackup/applications/rstudio.cfg index 4f9102fc6..e4a338ed9 100644 --- a/mackup/applications/rstudio.cfg +++ b/mackup/applications/rstudio.cfg @@ -4,3 +4,6 @@ name = RStudio [configuration_files] .rstudio-desktop Library/Preferences/org.rstudio.RStudio.plist + +[xdg_configuration_files] +rstudio diff --git a/mackup/applications/rubitrack5.cfg b/mackup/applications/rubitrack5.cfg new file mode 100644 index 000000000..f78e19929 --- /dev/null +++ b/mackup/applications/rubitrack5.cfg @@ -0,0 +1,5 @@ +[application] +name = rubiTrack 5 + +[configuration_files] +Library/Preferences/com.shiftoption.rubitrack5.pro.plist diff --git a/mackup/applications/rubymine.cfg b/mackup/applications/rubymine.cfg index 7a996e937..962114c19 100644 --- a/mackup/applications/rubymine.cfg +++ b/mackup/applications/rubymine.cfg @@ -22,3 +22,5 @@ Library/Application Support/RubyMine2017.3 Library/Preferences/RubyMine2017.3 Library/Application Support/RubyMine2018.1 Library/Preferences/RubyMine2018.1 +Library/Application Support/JetBrains/RubyMine2023.1 +Library/Application Support/JetBrains/RubyMine2023.2 diff --git a/mackup/applications/rust.cfg b/mackup/applications/rust.cfg new file mode 100644 index 000000000..feea6e031 --- /dev/null +++ b/mackup/applications/rust.cfg @@ -0,0 +1,5 @@ +[application] +name = Rust + +[configuration_files] +.cargo/config diff --git a/mackup/applications/sbt.cfg b/mackup/applications/sbt.cfg index 9e97fa788..205f43136 100644 --- a/mackup/applications/sbt.cfg +++ b/mackup/applications/sbt.cfg @@ -11,3 +11,7 @@ name = SBT .sbt/0.13/build.sbt .sbt/0.13/plugins/plugins.sbt .sbt/0.13/plugins/build.sbt +.sbt/1.0/global.sbt +.sbt/1.0/build.sbt +.sbt/1.0/plugins/plugins.sbt +.sbt/1.0/plugins/build.sbt diff --git a/mackup/applications/secure-pipes.cfg b/mackup/applications/secure-pipes.cfg new file mode 100644 index 000000000..7df111447 --- /dev/null +++ b/mackup/applications/secure-pipes.cfg @@ -0,0 +1,8 @@ +[application] +name = Secure Pipes + +[configuration_files] +Library/Preferences/net.edgeservices.connections.plist +Library/Preferences/net.edgeservices.Secure-Pipes.plist +Library/Preferences/net.edgeservices.sp-config.plist +Library/Application Support/Secure Pipes diff --git a/mackup/applications/sequel-pro.cfg b/mackup/applications/sequel-pro.cfg index 76361d66c..81eb3be19 100644 --- a/mackup/applications/sequel-pro.cfg +++ b/mackup/applications/sequel-pro.cfg @@ -3,4 +3,6 @@ name = Sequel Pro [configuration_files] Library/Application Support/Sequel Pro/Data +Library/Application Support/Sequel Pro/Bundles +Library/Application Support/Sequel Pro/Themes Library/Preferences/com.sequelpro.SequelPro.plist diff --git a/mackup/applications/shifty.cfg b/mackup/applications/shifty.cfg new file mode 100644 index 000000000..9773f68c8 --- /dev/null +++ b/mackup/applications/shifty.cfg @@ -0,0 +1,5 @@ +[application] +name = Shifty + +[configuration_files] +Library/Preferences/io.natethompson.Shifty.plist diff --git a/mackup/applications/sizzy.cfg b/mackup/applications/sizzy.cfg new file mode 100644 index 000000000..ab27f7e0e --- /dev/null +++ b/mackup/applications/sizzy.cfg @@ -0,0 +1,6 @@ +[application] +name = Sizzy + +[configuration_files] +Library/Application Support/Sizzy/config.json +Library/Application Support/Sizzy/window-state.json diff --git a/mackup/applications/sketch.cfg b/mackup/applications/sketch.cfg deleted file mode 100644 index 86ad6b99b..000000000 --- a/mackup/applications/sketch.cfg +++ /dev/null @@ -1,6 +0,0 @@ -[application] -name = Sketch - -[configuration_files] -Library/Application Support/com.bohemiancoding.sketch3 -Library/Preferences/com.bohemiancoding.sketch3.plist diff --git a/mackup/applications/skhd.cfg b/mackup/applications/skhd.cfg index 064ffd304..74f116aef 100644 --- a/mackup/applications/skhd.cfg +++ b/mackup/applications/skhd.cfg @@ -3,3 +3,6 @@ name = skhd [configuration_files] .skhdrc + +[xdg_configuration_files] +skhd/skhdrc diff --git a/mackup/applications/soulver.cfg b/mackup/applications/soulver.cfg index 97293f4e8..96b65bf76 100644 --- a/mackup/applications/soulver.cfg +++ b/mackup/applications/soulver.cfg @@ -4,3 +4,6 @@ name = Soulver [configuration_files] Library/Application Support/Soulver Library/Preferences/com.acqualia.soulver.plist +# Soulver 3 +Library/Application Support/Soulver 3 +Library/Preferences/app.soulver.mac.plist diff --git a/mackup/applications/spacelauncher.cfg b/mackup/applications/spacelauncher.cfg new file mode 100644 index 000000000..97519aa9d --- /dev/null +++ b/mackup/applications/spacelauncher.cfg @@ -0,0 +1,5 @@ +[application] +name = SpaceLauncher + +[configuration_files] +Library/Preferences/name.guoc.SpaceLauncher.plist diff --git a/mackup/applications/spacevim.cfg b/mackup/applications/spacevim.cfg new file mode 100644 index 000000000..33dd700ab --- /dev/null +++ b/mackup/applications/spacevim.cfg @@ -0,0 +1,8 @@ +[application] +name = SpaceVim + +[configuration_files] +# Default configuration directory +.SpaceVim.d +# Default configuration file; could be this specific or backup the config directory +# .SpaceVim.d/init.toml diff --git a/mackup/applications/spamsieve.cfg b/mackup/applications/spamsieve.cfg new file mode 100644 index 000000000..084b6a908 --- /dev/null +++ b/mackup/applications/spamsieve.cfg @@ -0,0 +1,6 @@ +[application] +name = SpamSieve + +[configuration_files] +Library/Application Support/SpamSieve +Library/Preferences/com.c-command.SpamSieve.plist diff --git a/mackup/applications/sqitch.cfg b/mackup/applications/sqitch.cfg new file mode 100644 index 000000000..f5ab2e763 --- /dev/null +++ b/mackup/applications/sqitch.cfg @@ -0,0 +1,5 @@ +[application] +name = Sqitch + +[configuration_files] +.sqitch/sqitch.conf diff --git a/mackup/applications/starship.cfg b/mackup/applications/starship.cfg new file mode 100644 index 000000000..2e55ed92d --- /dev/null +++ b/mackup/applications/starship.cfg @@ -0,0 +1,6 @@ +[application] +name = Starship + +[configuration_files] +# .config is hardcoded, see https://github.com/starship/starship/blob/1eabd527252291398df5749d30f3459ea2a03823/src/config.rs#L184 +.config/starship.toml diff --git a/mackup/applications/startupizer2.cfg b/mackup/applications/startupizer2.cfg new file mode 100644 index 000000000..cd04c7db0 --- /dev/null +++ b/mackup/applications/startupizer2.cfg @@ -0,0 +1,5 @@ +[application] +name = Startupizer2 + +[configuration_files] +Library/Application Support/Startupizer diff --git a/mackup/applications/stats.cfg b/mackup/applications/stats.cfg new file mode 100644 index 000000000..8f8820ecf --- /dev/null +++ b/mackup/applications/stats.cfg @@ -0,0 +1,5 @@ +[application] +name = Stats + +[configuration_files] +Library/Preferences/eu.exelban.Stats.plist diff --git a/mackup/applications/storyist-3.cfg b/mackup/applications/storyist-3.cfg new file mode 100644 index 000000000..5db4d2e94 --- /dev/null +++ b/mackup/applications/storyist-3.cfg @@ -0,0 +1,6 @@ +[application] +name = storyist-3 + +[configuration_files] +Library/Preferences/.com.storyist.storyist.plist +Library/Preferences/com.storyist.storyist.plist diff --git a/mackup/applications/streamdeck.cfg b/mackup/applications/streamdeck.cfg new file mode 100644 index 000000000..41436f081 --- /dev/null +++ b/mackup/applications/streamdeck.cfg @@ -0,0 +1,5 @@ +[application] +name = Elgato StreamDeck + +[configuration_files] +Library/Application Support/com.elgato.StreamDeck diff --git a/mackup/applications/subler.cfg b/mackup/applications/subler.cfg new file mode 100644 index 000000000..64593a6fa --- /dev/null +++ b/mackup/applications/subler.cfg @@ -0,0 +1,5 @@ +[application] +name = Subler + +[configuration_files] +Library/Application Support/Subler diff --git a/mackup/applications/sublime-merge.cfg b/mackup/applications/sublime-merge.cfg new file mode 100644 index 000000000..0311e74cb --- /dev/null +++ b/mackup/applications/sublime-merge.cfg @@ -0,0 +1,5 @@ +[application] +name = Sublime Merge + +[configuration_files] +Library/Application Support/Sublime Merge/Packages/User diff --git a/mackup/applications/sublime-text-2.cfg b/mackup/applications/sublime-text-2.cfg index 694049111..da58aa89e 100644 --- a/mackup/applications/sublime-text-2.cfg +++ b/mackup/applications/sublime-text-2.cfg @@ -4,4 +4,6 @@ name = Sublime Text 2 [configuration_files] # Based on https://packagecontrol.io/docs/syncing Library/Application Support/Sublime Text 2/Packages/User -.config/sublime-text-2/Packages/User + +[xdg_configuration_files] +sublime-text-2/Packages/User diff --git a/mackup/applications/sublime-text-3.cfg b/mackup/applications/sublime-text-3.cfg index 6f4e3b67d..2f3d9805c 100644 --- a/mackup/applications/sublime-text-3.cfg +++ b/mackup/applications/sublime-text-3.cfg @@ -4,4 +4,6 @@ name = Sublime Text 3 [configuration_files] # Based on https://packagecontrol.io/docs/syncing Library/Application Support/Sublime Text 3/Packages/User -.config/sublime-text-3/Packages/User + +[xdg_configuration_files] +sublime-text-3/Packages/User diff --git a/mackup/applications/sublime-text.cfg b/mackup/applications/sublime-text.cfg new file mode 100644 index 000000000..2728a27f1 --- /dev/null +++ b/mackup/applications/sublime-text.cfg @@ -0,0 +1,9 @@ +[application] +name = Sublime Text + +[configuration_files] +# Based on https://packagecontrol.io/docs/syncing +Library/Application Support/Sublime Text/Packages/User + +[xdg_configuration_files] +sublime-text/Packages/User diff --git a/mackup/applications/swaywm.cfg b/mackup/applications/swaywm.cfg new file mode 100644 index 000000000..077c536c7 --- /dev/null +++ b/mackup/applications/swaywm.cfg @@ -0,0 +1,5 @@ +[application] +name = Swaywm + +[xdg_configuration_files] +sway diff --git a/mackup/applications/swish.cfg b/mackup/applications/swish.cfg new file mode 100644 index 000000000..575109a74 --- /dev/null +++ b/mackup/applications/swish.cfg @@ -0,0 +1,5 @@ +[application] +name = Swish + +[configuration_files] +Library/Preferences/co.highlyopinionated.swish.plist diff --git a/mackup/applications/switchhosts.cfg b/mackup/applications/switchhosts.cfg new file mode 100644 index 000000000..d88b7c9fe --- /dev/null +++ b/mackup/applications/switchhosts.cfg @@ -0,0 +1,5 @@ +[application] +name = SwitchHosts + +[configuration_files] +.SwitchHosts/data/collection/hosts diff --git a/mackup/applications/tableplus.cfg b/mackup/applications/tableplus.cfg new file mode 100644 index 000000000..3a35979d3 --- /dev/null +++ b/mackup/applications/tableplus.cfg @@ -0,0 +1,9 @@ +[application] +name = TablePlus + +[configuration_files] +Library/Application Support/com.tinyapp.TablePlus/Cache/Favorite +Library/Application Support/com.tinyapp.TablePlus/Cache/History +Library/Application Support/com.tinyapp.TablePlus/Data +Library/Application Support/com.tinyapp.TablePlus/Plugins +Library/Preferences/com.tinyapp.TablePlus.plist diff --git a/mackup/applications/taskwarrior.cfg b/mackup/applications/taskwarrior.cfg index dbe1a755a..38df86911 100644 --- a/mackup/applications/taskwarrior.cfg +++ b/mackup/applications/taskwarrior.cfg @@ -9,5 +9,4 @@ name = Taskwarrior ## ## If you'd rather want to sync using mackup, uncomment the following lines. -# .task/ - +# .task diff --git a/mackup/applications/terminator.cfg b/mackup/applications/terminator.cfg index 2dc2030d1..36f6abd79 100644 --- a/mackup/applications/terminator.cfg +++ b/mackup/applications/terminator.cfg @@ -1,5 +1,5 @@ [application] name = Terminator -[configuration_files] -.config/terminator/config +[xdg_configuration_files] +terminator/config diff --git a/mackup/applications/termite.cfg b/mackup/applications/termite.cfg new file mode 100644 index 000000000..6c83db357 --- /dev/null +++ b/mackup/applications/termite.cfg @@ -0,0 +1,5 @@ +[application] +name = termite + +[configuration_files] +termite/config diff --git a/mackup/applications/termux.cfg b/mackup/applications/termux.cfg new file mode 100644 index 000000000..e70ef49b8 --- /dev/null +++ b/mackup/applications/termux.cfg @@ -0,0 +1,7 @@ +[application] +name = Configuration for Termux + +[configuration_files] +.termux/colors.properties +.termux/termux.properties +.termux/font.ttf diff --git a/mackup/applications/textmate.cfg b/mackup/applications/textmate.cfg index a1646a991..6a5b65cd9 100644 --- a/mackup/applications/textmate.cfg +++ b/mackup/applications/textmate.cfg @@ -2,7 +2,9 @@ name = TextMate [configuration_files] +Library/Application Support/TextMate/Bundles +Library/Application Support/TextMate/PlugIns +Library/Application Support/TextMate/Pristine Copy Library/Application Support/TextMate/Managed/Bundles -Library/Preferences/com.macromates.textmate.plist Library/Preferences/com.macromates.textmate.latex_config.plist .tm_properties diff --git a/mackup/applications/tiles.cfg b/mackup/applications/tiles.cfg new file mode 100644 index 000000000..6da97d757 --- /dev/null +++ b/mackup/applications/tiles.cfg @@ -0,0 +1,5 @@ +[application] +name = Tiles + +[configuration_files] +Library/Preferences/com.sempliva.Tiles.plist diff --git a/mackup/applications/tilix.cfg b/mackup/applications/tilix.cfg new file mode 100644 index 000000000..7f0ed8ee0 --- /dev/null +++ b/mackup/applications/tilix.cfg @@ -0,0 +1,5 @@ +[application] +name = tilix + +[configuration_files] +tilix.dconf diff --git a/mackup/applications/timeout.cfg b/mackup/applications/timeout.cfg new file mode 100644 index 000000000..095e8575b --- /dev/null +++ b/mackup/applications/timeout.cfg @@ -0,0 +1,5 @@ +[application] +name = TimeOut + +[configuration_files] +Library/Group Containers/6Z7QW53WB6.com.dejal.timeout diff --git a/mackup/applications/tint2.cfg b/mackup/applications/tint2.cfg index bf1a1f7d8..9ab406ea8 100644 --- a/mackup/applications/tint2.cfg +++ b/mackup/applications/tint2.cfg @@ -1,5 +1,5 @@ [application] name = tint2 -[configuration_files] -.config/tint2/tint2rc +[xdg_configuration_files] +tint2/tint2rc diff --git a/mackup/applications/tmux.cfg b/mackup/applications/tmux.cfg index af8f5d27c..eecfa29c5 100644 --- a/mackup/applications/tmux.cfg +++ b/mackup/applications/tmux.cfg @@ -3,3 +3,6 @@ name = Tmux [configuration_files] .tmux.conf + +[xdg_configuration_files] +tmux/tmux.conf diff --git a/mackup/applications/tmuxinator.cfg b/mackup/applications/tmuxinator.cfg index c72e2351a..f2b0ea738 100644 --- a/mackup/applications/tmuxinator.cfg +++ b/mackup/applications/tmuxinator.cfg @@ -1,5 +1,5 @@ [application] name = Tmuxinator -[configuration_files] -.tmuxinator +[xdg_configuration_files] +tmuxinator diff --git a/mackup/applications/toothfairy.cfg b/mackup/applications/toothfairy.cfg new file mode 100644 index 000000000..8afddff75 --- /dev/null +++ b/mackup/applications/toothfairy.cfg @@ -0,0 +1,5 @@ +[application] +name = ToothFairy + +[configuration_files] +Library/Application Scripts/com.robinlu.mac.Tooth-Fairy diff --git a/mackup/applications/tower.cfg b/mackup/applications/tower.cfg index b4bc45a14..cbf945751 100644 --- a/mackup/applications/tower.cfg +++ b/mackup/applications/tower.cfg @@ -3,4 +3,6 @@ name = Tower [configuration_files] Library/Application Support/Tower +Library/Application Support/com.fournova.Tower3 Library/Preferences/com.fournova.Tower.plist +Library/Preferences/com.fournova.Tower3.plist diff --git a/mackup/applications/transmission.cfg b/mackup/applications/transmission.cfg index ff882713c..cfb210e2b 100644 --- a/mackup/applications/transmission.cfg +++ b/mackup/applications/transmission.cfg @@ -4,6 +4,8 @@ name = Transmission [configuration_files] Library/Preferences/org.m0k.transmission.plist Library/Application Support/Transmission/blocklists -.config/transmission/blocklists -.config/transmission/settings.json -.config/transmission/stats.json + +[xdg_configuration_files] +transmission/blocklists +transmission/settings.json +transmission/stats.json diff --git a/mackup/applications/tripmode.cfg b/mackup/applications/tripmode.cfg new file mode 100644 index 000000000..46721fc8b --- /dev/null +++ b/mackup/applications/tripmode.cfg @@ -0,0 +1,5 @@ +[application] +name = TripMode + +[configuration_files] +Library/Application Support/TripMode diff --git a/mackup/applications/trizen.cfg b/mackup/applications/trizen.cfg new file mode 100644 index 000000000..a9bd2f7cb --- /dev/null +++ b/mackup/applications/trizen.cfg @@ -0,0 +1,5 @@ +[application] +name = Trizen + +[xdg_configuration_files] +trizen/trizen.conf diff --git a/mackup/applications/typora.cfg b/mackup/applications/typora.cfg index fd394fc2d..1073a6895 100644 --- a/mackup/applications/typora.cfg +++ b/mackup/applications/typora.cfg @@ -3,3 +3,6 @@ name = Typora [configuration_files] Library/Application Support/abnerworks.Typora/themes + +[xdg_configuration_files] +Typora/themes diff --git a/mackup/applications/ulauncher.cfg b/mackup/applications/ulauncher.cfg new file mode 100644 index 000000000..48b74f12a --- /dev/null +++ b/mackup/applications/ulauncher.cfg @@ -0,0 +1,7 @@ +[application] +name = Ulauncher + +[xdg_configuration_files] +ulauncher/extensions.json +ulauncher/settings.json +ulauncher/shortcuts.json diff --git a/mackup/applications/verdaccio.cfg b/mackup/applications/verdaccio.cfg new file mode 100644 index 000000000..03c738db0 --- /dev/null +++ b/mackup/applications/verdaccio.cfg @@ -0,0 +1,5 @@ +[application] +name = Verdaccio + +[xdg_configuration_files] +verdaccio/config.yaml diff --git a/mackup/applications/vim.cfg b/mackup/applications/vim.cfg index f13b3f447..72c337496 100644 --- a/mackup/applications/vim.cfg +++ b/mackup/applications/vim.cfg @@ -6,6 +6,7 @@ name = Vim .gvimrc.after .gvimrc.before .vim/autoload +.vim/after .vim/bundle .vim/colors .vim/doc @@ -14,6 +15,7 @@ name = Vim .vim/indent .vim/pack .vim/plugin/settings +.vim/spell .vim/syntax .vim/vimrc .vimrc diff --git a/mackup/applications/volt.cfg b/mackup/applications/volt.cfg new file mode 100644 index 000000000..c7925e852 --- /dev/null +++ b/mackup/applications/volt.cfg @@ -0,0 +1,7 @@ +[application] +name = Volt + +[configuration_files] +volt/lock.json +volt/plugconf +volt/rc diff --git a/mackup/applications/vs4mac.cfg b/mackup/applications/vs4mac.cfg index 72a9dd624..e9424be49 100644 --- a/mackup/applications/vs4mac.cfg +++ b/mackup/applications/vs4mac.cfg @@ -5,3 +5,5 @@ name = Visual Studio for Mac Library/VisualStudio Library/Preferences/VisualStudio/7.0/EditingLayout.xml Library/Preferences/VisualStudio/7.0/MonoDevelopProperties.xml +Library/Preferences/VisualStudio/8.0/EditingLayout.xml +Library/Preferences/VisualStudio/8.0/MonoDevelopProperties.xml diff --git a/mackup/applications/vscode-insiders.cfg b/mackup/applications/vscode-insiders.cfg index 7bdc5f0e4..bc52af3bd 100644 --- a/mackup/applications/vscode-insiders.cfg +++ b/mackup/applications/vscode-insiders.cfg @@ -1,5 +1,12 @@ [application] -name = Visual Studio Code - Insiders +name = Visual Studio Code Insiders [configuration_files] -Library/Application Support/Code - Insiders/User +Library/Application Support/Code - Insiders/User/snippets +Library/Application Support/Code - Insiders/User/keybindings.json +Library/Application Support/Code - Insiders/User/settings.json + +[xdg_configuration_files] +Code - Insiders/User/snippets +Code - Insiders/User/keybindings.json +Code - Insiders/User/settings.json diff --git a/mackup/applications/vscode-oss.cfg b/mackup/applications/vscode-oss.cfg new file mode 100644 index 000000000..fbaca786f --- /dev/null +++ b/mackup/applications/vscode-oss.cfg @@ -0,0 +1,12 @@ +[application] +name = Visual Studio Code Open Source Edition + +[configuration_files] +Library/Application Support/Code - OSS/User/snippets +Library/Application Support/Code - OSS/User/keybindings.json +Library/Application Support/Code - OSS/User/settings.json + +[xdg_configuration_files] +Code - OSS/User/snippets +Code - OSS/User/keybindings.json +Code - OSS/User/settings.json diff --git a/mackup/applications/vscode.cfg b/mackup/applications/vscode.cfg index 9c5da5bed..a216c2709 100644 --- a/mackup/applications/vscode.cfg +++ b/mackup/applications/vscode.cfg @@ -6,7 +6,7 @@ Library/Application Support/Code/User/snippets Library/Application Support/Code/User/keybindings.json Library/Application Support/Code/User/settings.json -# Linux Files -.config/Code/User/snippets -.config/Code/User/keybindings.json -.config/Code/User/settings.json +[xdg_configuration_files] +Code/User/snippets +Code/User/keybindings.json +Code/User/settings.json diff --git a/mackup/applications/vscodium.cfg b/mackup/applications/vscodium.cfg new file mode 100644 index 000000000..2bd5224a2 --- /dev/null +++ b/mackup/applications/vscodium.cfg @@ -0,0 +1,12 @@ +[application] +name = VSCodium + +[configuration_files] +Library/Application Support/VSCodium/User/snippets +Library/Application Support/VSCodium/User/keybindings.json +Library/Application Support/VSCodium/User/settings.json + +[xdg_configuration_files] +VSCodium/User/snippets +VSCodium/User/keybindings.json +VSCodium/User/settings.json diff --git a/mackup/applications/warp.cfg b/mackup/applications/warp.cfg new file mode 100644 index 000000000..039e843ce --- /dev/null +++ b/mackup/applications/warp.cfg @@ -0,0 +1,5 @@ +[application] +name = Warp + +[configuration_files] +.warp diff --git a/mackup/applications/waybar.cfg b/mackup/applications/waybar.cfg new file mode 100644 index 000000000..339ec627e --- /dev/null +++ b/mackup/applications/waybar.cfg @@ -0,0 +1,5 @@ +[application] +name = waybar + +[xdg_configuration_files] +waybar diff --git a/mackup/applications/webstorm.cfg b/mackup/applications/webstorm.cfg index 1a9a080cc..f6aac155e 100644 --- a/mackup/applications/webstorm.cfg +++ b/mackup/applications/webstorm.cfg @@ -2,27 +2,47 @@ name = WebStorm [configuration_files] +Library/Application Support/JetBrains/WebStorm2020.1 +Library/Application Support/JetBrains/WebStorm2020.2 +Library/Application Support/JetBrains/WebStorm2020.3 +Library/Application Support/JetBrains/WebStorm2020.4 +Library/Application Support/JetBrains/WebStorm2021.1 +Library/Application Support/JetBrains/WebStorm2021.2 +Library/Application Support/JetBrains/WebStorm2021.3 +Library/Application Support/JetBrains/WebStorm2023.1 +Library/Application Support/JetBrains/WebStorm2023.2 +Library/Application Support/WebStorm +Library/Application Support/WebStorm10 +Library/Application Support/WebStorm11 +Library/Application Support/WebStorm2016.1 +Library/Application Support/WebStorm2016.2 +Library/Application Support/WebStorm2016.3 +Library/Application Support/WebStorm2017.1 +Library/Application Support/WebStorm2017.2 +Library/Application Support/WebStorm2017.3 +Library/Application Support/WebStorm2018.1 +Library/Application Support/WebStorm2018.2 +Library/Application Support/WebStorm2018.3 +Library/Application Support/WebStorm2019.1 +Library/Application Support/WebStorm2019.2 +Library/Application Support/WebStorm2019.3 +Library/Application Support/WebStorm2019.4 Library/Application Support/WebStorm8 -Library/Preferences/WebStorm8 Library/Application Support/WebStorm9 -Library/Preferences/WebStorm9 -Library/Application Support/WebStorm10 Library/Preferences/WebStorm10 -Library/Application Support/WebStorm11 Library/Preferences/WebStorm11 -Library/Application Support/WebStorm2016.1 Library/Preferences/WebStorm2016.1 -Library/Application Support/WebStorm2016.2 Library/Preferences/WebStorm2016.2 -Library/Application Support/WebStorm2016.3 Library/Preferences/WebStorm2016.3 -Library/Application Support/WebStorm2017.1 Library/Preferences/WebStorm2017.1 -Library/Application Support/WebStorm2017.2 Library/Preferences/WebStorm2017.2 -Library/Application Support/WebStorm2017.3 Library/Preferences/WebStorm2017.3 -Library/Application Support/WebStorm2018.1 Library/Preferences/WebStorm2018.1 -Library/Application Support/WebStorm2018.2 Library/Preferences/WebStorm2018.2 +Library/Preferences/WebStorm2018.3 +Library/Preferences/WebStorm2019.1 +Library/Preferences/WebStorm2019.2 +Library/Preferences/WebStorm2019.3 +Library/Preferences/WebStorm2019.4 +Library/Preferences/WebStorm8 +Library/Preferences/WebStorm9 diff --git a/mackup/applications/wget.cfg b/mackup/applications/wget.cfg index 4dadfd835..0cd9f9ebd 100644 --- a/mackup/applications/wget.cfg +++ b/mackup/applications/wget.cfg @@ -3,3 +3,4 @@ name = Wget [configuration_files] .wgetrc +.wget-hsts diff --git a/mackup/applications/wireshark.cfg b/mackup/applications/wireshark.cfg index fa8fb1479..0abfc04cf 100644 --- a/mackup/applications/wireshark.cfg +++ b/mackup/applications/wireshark.cfg @@ -1,5 +1,5 @@ [application] name = Wireshark 2 -[configuration_files] -.config/wireshark +[xdg_configuration_files] +wireshark diff --git a/mackup/applications/wordgrinder.cfg b/mackup/applications/wordgrinder.cfg new file mode 100644 index 000000000..888e7ecad --- /dev/null +++ b/mackup/applications/wordgrinder.cfg @@ -0,0 +1,5 @@ +[application] +name = wordgrinder + +[configuration_files] +.wordgrinder.settings diff --git a/mackup/applications/xbar.cfg b/mackup/applications/xbar.cfg new file mode 100644 index 000000000..e1de62f4d --- /dev/null +++ b/mackup/applications/xbar.cfg @@ -0,0 +1,6 @@ +[application] +name = xbar + +[configuration_files] +Library/Application Support/xbar/xbar.config.json +Library/Application Support/xbar/plugins diff --git a/mackup/applications/xee.cfg b/mackup/applications/xee.cfg new file mode 100644 index 000000000..92e9fc2aa --- /dev/null +++ b/mackup/applications/xee.cfg @@ -0,0 +1,5 @@ +[application] +name = Xee + +[configuration_files] +Library/Preferences/cx.c3.Xee3.plist diff --git a/mackup/applications/xonsh.cfg b/mackup/applications/xonsh.cfg index 7f06fe8db..7f760b258 100644 --- a/mackup/applications/xonsh.cfg +++ b/mackup/applications/xonsh.cfg @@ -3,3 +3,6 @@ name = Xonsh [configuration_files] .xonshrc + +[xdg_configuration_files] +xonsh diff --git a/mackup/applications/yabai.cfg b/mackup/applications/yabai.cfg new file mode 100644 index 000000000..a22287e49 --- /dev/null +++ b/mackup/applications/yabai.cfg @@ -0,0 +1,8 @@ +[application] +name = yabai + +[configuration_files] +.yabairc + +[xdg_configuration_files] +yabai/yabairc diff --git a/mackup/applications/yarn.cfg b/mackup/applications/yarn.cfg new file mode 100644 index 000000000..fd5368610 --- /dev/null +++ b/mackup/applications/yarn.cfg @@ -0,0 +1,5 @@ +[application] +name = yarn + +[configuration_files] +.yarnrc diff --git a/mackup/applications/zabbix-cli.cfg b/mackup/applications/zabbix-cli.cfg new file mode 100644 index 000000000..d56507057 --- /dev/null +++ b/mackup/applications/zabbix-cli.cfg @@ -0,0 +1,5 @@ +[application] +name = Zabbix CLI + +[configuration_files] +.zabbix-cli/zabbix-cli.conf diff --git a/mackup/applications/zathura.cfg b/mackup/applications/zathura.cfg index 103e16273..13e379cf2 100644 --- a/mackup/applications/zathura.cfg +++ b/mackup/applications/zathura.cfg @@ -1,5 +1,5 @@ [application] name = zathura -[configuration_files] -.config/zathura/zathurarc +[xdg_configuration_files] +zathura/zathurarc diff --git a/mackup/applications/zed.cfg b/mackup/applications/zed.cfg new file mode 100644 index 000000000..052feafff --- /dev/null +++ b/mackup/applications/zed.cfg @@ -0,0 +1,6 @@ +[application] +name = Zed + +[xdg_configuration_files] +zed/keymap.json +zed/settings.json diff --git a/mackup/applications/zoom.cfg b/mackup/applications/zoom.cfg new file mode 100644 index 000000000..2d973a86e --- /dev/null +++ b/mackup/applications/zoom.cfg @@ -0,0 +1,9 @@ +[application] +name = Zoom + +[configuration_files] +Library/Preferences/us.zoom.Transcode.plist +Library/Preferences/us.zoom.xos.Hotkey.plist +Library/Preferences/us.zoom.xos.plist +Library/Preferences/us.zoom.ZoomAutoUpdater.plist +Library/Preferences/ZoomChat.plist diff --git a/mackup/applications/zoxide.cfg b/mackup/applications/zoxide.cfg new file mode 100644 index 000000000..4e2ca35ab --- /dev/null +++ b/mackup/applications/zoxide.cfg @@ -0,0 +1,5 @@ +[application] +name = zoxide + +[configuration_files] +Library/Application Support/zoxide diff --git a/mackup/appsdb.py b/mackup/appsdb.py index 0458af013..3699cb1f0 100644 --- a/mackup/appsdb.py +++ b/mackup/appsdb.py @@ -26,7 +26,7 @@ def __init__(self): self.apps = dict() for config_file in ApplicationsDatabase.get_config_files(): - config = configparser.SafeConfigParser(allow_no_value=True) + config = configparser.ConfigParser(allow_no_value=True) # Needed to not lowercase the configuration_files in the ini files config.optionxform = str @@ -35,47 +35,44 @@ def __init__(self): # Get the filename without the directory name filename = os.path.basename(config_file) # The app name is the cfg filename with the extension - app_name = filename[:-len('.cfg')] + app_name = filename[: -len(".cfg")] # Start building a dict for this app self.apps[app_name] = dict() # Add the fancy name for the app, for display purpose - app_pretty_name = config.get('application', 'name') - self.apps[app_name]['name'] = app_pretty_name + app_pretty_name = config.get("application", "name") + self.apps[app_name]["name"] = app_pretty_name # Add the configuration files to sync - self.apps[app_name]['configuration_files'] = set() - if config.has_section('configuration_files'): - for path in config.options('configuration_files'): - if path.startswith('/'): - raise ValueError('Unsupported absolute path: {}' - .format(path)) - self.apps[app_name]['configuration_files'].add(path) + self.apps[app_name]["configuration_files"] = set() + if config.has_section("configuration_files"): + for path in config.options("configuration_files"): + if path.startswith("/"): + raise ValueError( + "Unsupported absolute path: {}".format(path) + ) + self.apps[app_name]["configuration_files"].add(path) # Add the XDG configuration files to sync - home = os.path.expanduser('~/') + home = os.path.expanduser("~/") failobj = "{}.config".format(home) - xdg_config_home = os.environ.get('XDG_CONFIG_HOME', failobj) - if xdg_config_home: - if not os.path.exists(xdg_config_home): - raise ValueError('$XDG_CONFIG_HOME: {} does not exist' - .format(xdg_config_home)) - if not xdg_config_home.startswith(home): - raise ValueError('$XDG_CONFIG_HOME: {} must be ' - 'somewhere within your home ' - 'directory: {}' - .format(xdg_config_home, home)) - if config.has_section('xdg_configuration_files'): - for path in config.options('xdg_configuration_files'): - if path.startswith('/'): - raise ValueError('Unsupported absolute path: ' - '{}' - .format(path)) - path = os.path.join(xdg_config_home, path) - path = path.replace(home, '') - (self.apps[app_name]['configuration_files'] - .add(path)) + xdg_config_home = os.environ.get("XDG_CONFIG_HOME", failobj) + if not xdg_config_home.startswith(home): + raise ValueError( + "$XDG_CONFIG_HOME: {} must be " + "somewhere within your home " + "directory: {}".format(xdg_config_home, home) + ) + if config.has_section("xdg_configuration_files"): + for path in config.options("xdg_configuration_files"): + if path.startswith("/"): + raise ValueError( + "Unsupported absolute path: " "{}".format(path) + ) + path = os.path.join(xdg_config_home, path) + path = path.replace(home, "") + (self.apps[app_name]["configuration_files"].add(path)) @staticmethod def get_config_files(): @@ -83,7 +80,7 @@ def get_config_files(): Return the application configuration files. Return a list of configuration files describing the apps supported by - Mackup. The files return are absolute full path to those files. + Mackup. The files returned are absolute full path to those files. e.g. /usr/lib/mackup/applications/bash.cfg Only one config file per application should be returned, custom config @@ -93,9 +90,8 @@ def get_config_files(): set of strings. """ # Configure the config parser - apps_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), - APPS_DIR) - custom_apps_dir = os.path.join(os.environ['HOME'], CUSTOM_APPS_DIR) + apps_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), APPS_DIR) + custom_apps_dir = os.path.join(os.environ["HOME"], CUSTOM_APPS_DIR) # List of stock application config files config_files = set() @@ -106,9 +102,8 @@ def get_config_files(): # Get the list of custom application config files first if os.path.isdir(custom_apps_dir): for filename in os.listdir(custom_apps_dir): - if filename.endswith('.cfg'): - config_files.add(os.path.join(custom_apps_dir, - filename)) + if filename.endswith(".cfg"): + config_files.add(os.path.join(custom_apps_dir, filename)) # Also add it to the set of custom apps, so that we don't # add the stock config for the same app too custom_files.add(filename) @@ -116,7 +111,7 @@ def get_config_files(): # Add the default provided app config files, but only if those are not # customized, as we don't want to overwrite custom app config. for filename in os.listdir(apps_dir): - if filename.endswith('.cfg') and filename not in custom_files: + if filename.endswith(".cfg") and filename not in custom_files: config_files.add(os.path.join(apps_dir, filename)) return config_files @@ -131,7 +126,7 @@ def get_name(self, name): Returns: str """ - return self.apps[name]['name'] + return self.apps[name]["name"] def get_files(self, name): """ @@ -143,7 +138,7 @@ def get_files(self, name): Returns: set of str. """ - return self.apps[name]['configuration_files'] + return self.apps[name]["configuration_files"] def get_app_names(self): """ diff --git a/mackup/config.py b/mackup/config.py index 574d60f59..9ad9a36d1 100644 --- a/mackup/config.py +++ b/mackup/config.py @@ -3,19 +3,23 @@ import os import os.path -from .constants import (MACKUP_BACKUP_PATH, - MACKUP_CONFIG_FILE, - ENGINE_DROPBOX, - ENGINE_GDRIVE, - ENGINE_ICLOUD, - ENGINE_BOX, - ENGINE_FS) - -from .utils import (error, - get_dropbox_folder_location, - get_google_drive_folder_location, - get_icloud_folder_location, - get_box_folder_location) +from .constants import ( + CUSTOM_APPS_DIR, + MACKUP_BACKUP_PATH, + MACKUP_CONFIG_FILE, + ENGINE_DROPBOX, + ENGINE_GDRIVE, + ENGINE_ICLOUD, + ENGINE_FS, +) + +from .utils import ( + error, + get_dropbox_folder_location, + get_google_drive_folder_location, + get_icloud_folder_location, +) + try: import configparser except ImportError: @@ -39,7 +43,7 @@ def __init__(self, filename=None): # Initialize the parser self._parser = self._setup_parser(filename) - # Do we have an old config file ? + # Do we have an old config file? self._warn_on_old_config() # Get the storage engine @@ -62,8 +66,7 @@ def engine(self): """ The engine used by the storage. - ENGINE_DROPBOX, ENGINE_GDRIVE, ENGINE_ICLOUD, ENGINE_BOX - or ENGINE_FS. + ENGINE_DROPBOX, ENGINE_GDRIVE, ENGINE_ICLOUD or ENGINE_FS. Returns: str @@ -134,7 +137,7 @@ def _setup_parser(self, filename=None): filename (str) or None Returns: - SafeConfigParser + ConfigParser """ assert isinstance(filename, str) or filename is None @@ -142,29 +145,32 @@ def _setup_parser(self, filename=None): if not filename: filename = MACKUP_CONFIG_FILE - parser = configparser.SafeConfigParser(allow_no_value=True) - parser.read(os.path.join(os.path.join(os.environ['HOME'], filename))) + parser = configparser.ConfigParser( + allow_no_value=True, inline_comment_prefixes=(";", "#") + ) + parser.read(os.path.join(os.path.join(os.environ["HOME"], filename))) return parser def _warn_on_old_config(self): """Warn the user if an old config format is detected.""" - # Is an old setion is in the config file ? - old_sections = ['Allowed Applications', 'Ignored Applications'] + # Is an old section in the config file? + old_sections = ["Allowed Applications", "Ignored Applications"] for old_section in old_sections: if self._parser.has_section(old_section): - error("Old config file detected. Aborting.\n" - "\n" - "An old section (e.g. [Allowed Applications]" - " or [Ignored Applications] has been detected" - " in your {} file.\n" - "I'd rather do nothing than do something you" - " do not want me to do.\n" - "\n" - "Please read the up to date documentation on" - " and migrate" - " your configuration file." - .format(MACKUP_CONFIG_FILE)) + error( + "Old config file detected. Aborting.\n" + "\n" + "An old section (e.g. [Allowed Applications]" + " or [Ignored Applications] has been detected" + " in your {} file.\n" + "I'd rather do nothing than do something you" + " do not want me to do.\n" + "\n" + "Please read the up to date documentation on" + " and migrate" + " your configuration file.".format(MACKUP_CONFIG_FILE) + ) def _parse_engine(self): """ @@ -173,19 +179,20 @@ def _parse_engine(self): Returns: str """ - if self._parser.has_option('storage', 'engine'): - engine = str(self._parser.get('storage', 'engine')) + if self._parser.has_option("storage", "engine"): + engine = str(self._parser.get("storage", "engine")) else: engine = ENGINE_DROPBOX assert isinstance(engine, str) - if engine not in [ENGINE_DROPBOX, - ENGINE_GDRIVE, - ENGINE_ICLOUD, - ENGINE_BOX, - ENGINE_FS]: - raise ConfigError('Unknown storage engine: {}'.format(engine)) + if engine not in [ + ENGINE_DROPBOX, + ENGINE_GDRIVE, + ENGINE_ICLOUD, + ENGINE_FS, + ]: + raise ConfigError("Unknown storage engine: {}".format(engine)) return str(engine) @@ -202,15 +209,15 @@ def _parse_path(self): path = get_google_drive_folder_location() elif self.engine == ENGINE_ICLOUD: path = get_icloud_folder_location() - elif self.engine == ENGINE_BOX: - path = get_box_folder_location() elif self.engine == ENGINE_FS: - if self._parser.has_option('storage', 'path'): - cfg_path = self._parser.get('storage', 'path') - path = os.path.join(os.environ['HOME'], cfg_path) + if self._parser.has_option("storage", "path"): + cfg_path = self._parser.get("storage", "path") + path = os.path.join(os.environ["HOME"], cfg_path) else: - raise ConfigError("The required 'path' can't be found while" - " the 'file_system' engine is used.") + raise ConfigError( + "The required 'path' can't be found while" + " the 'file_system' engine is used." + ) return str(path) @@ -221,8 +228,13 @@ def _parse_directory(self): Returns: str """ - if self._parser.has_option('storage', 'directory'): - directory = self._parser.get('storage', 'directory') + if self._parser.has_option("storage", "directory"): + directory = self._parser.get("storage", "directory") + # Don't allow CUSTOM_APPS_DIR as a storage directory + if directory == CUSTOM_APPS_DIR: + raise ConfigError( + "{} cannot be used as a storage directory.".format(CUSTOM_APPS_DIR) + ) else: directory = MACKUP_BACKUP_PATH @@ -238,8 +250,8 @@ def _parse_apps_to_ignore(self): # We ignore nothing by default apps_to_ignore = set() - # Is the "[applications_to_ignore]" in the cfg file ? - section_title = 'applications_to_ignore' + # Is the "[applications_to_ignore]" in the cfg file? + section_title = "applications_to_ignore" if self._parser.has_section(section_title): apps_to_ignore = set(self._parser.options(section_title)) @@ -255,8 +267,8 @@ def _parse_apps_to_sync(self): # We allow nothing by default apps_to_sync = set() - # Is the "[applications_to_sync]" section in the cfg file ? - section_title = 'applications_to_sync' + # Is the "[applications_to_sync]" section in the cfg file? + section_title = "applications_to_sync" if self._parser.has_section(section_title): apps_to_sync = set(self._parser.options(section_title)) diff --git a/mackup/constants.py b/mackup/constants.py index 8b07af3fe..28fb5fd08 100644 --- a/mackup/constants.py +++ b/mackup/constants.py @@ -1,29 +1,41 @@ """Constants used in Mackup.""" # Current version -VERSION = '0.8.20' +VERSION = "0.8.39" # Support platforms -PLATFORM_DARWIN = 'Darwin' -PLATFORM_LINUX = 'Linux' +PLATFORM_DARWIN = "Darwin" +PLATFORM_LINUX = "Linux" # Directory containing the application configs -APPS_DIR = 'applications' +APPS_DIR = "applications" # Mackup application name -MACKUP_APP_NAME = 'mackup' +MACKUP_APP_NAME = "mackup" # Default Mackup backup path where it stores its files in Dropbox -MACKUP_BACKUP_PATH = 'Mackup' +MACKUP_BACKUP_PATH = "Mackup" # Mackup config file -MACKUP_CONFIG_FILE = '.mackup.cfg' +MACKUP_CONFIG_FILE = ".mackup.cfg" # Directory that can contains user defined app configs -CUSTOM_APPS_DIR = '.mackup' +CUSTOM_APPS_DIR = ".mackup" # Supported engines -ENGINE_BOX = 'box' -ENGINE_DROPBOX = 'dropbox' -ENGINE_FS = 'file_system' -ENGINE_GDRIVE = 'google_drive' -ENGINE_ICLOUD = 'icloud' +ENGINE_DROPBOX = "dropbox" +ENGINE_FS = "file_system" +ENGINE_GDRIVE = "google_drive" +ENGINE_ICLOUD = "icloud" + +DOCUMENTATION_URL = "https://github.com/lra/mackup/blob/master/doc/README.md" + +# Error message displayed when mackup can't find the storage specified +# in the config (or the default one). +ERROR_UNABLE_TO_FIND_STORAGE = ( + "Unable to find your {provider} =(\n" + "If this is the first time you use %s, you may want " + "to use another provider.\n" + "Take a look at the documentation [1] to know more about " + "how to configure mackup.\n\n" + "[1]: %s" % (MACKUP_APP_NAME, DOCUMENTATION_URL) +) diff --git a/mackup/mackup.py b/mackup/mackup.py index f0d5c1040..734e8ee9c 100644 --- a/mackup/mackup.py +++ b/mackup/mackup.py @@ -28,17 +28,21 @@ def __init__(self): def check_for_usable_environment(self): """Check if the current env is usable and has everything's required.""" - # Do not let the user run Mackup as root - if os.geteuid() == 0: - utils.error("Running Mackup as a superuser is useless and" - " dangerous. Don't do it!") - - # Do we have a folder to put the Mackup folder ? + # Allow only explicit superuser usage + if os.geteuid() == 0 and not utils.CAN_RUN_AS_ROOT: + utils.error( + "Running Mackup as superuser can be dangerous." + " Don't do it unless you know what you're doing!" + " Run mackup --help for guidance." + ) + + # Do we have a folder set to save Mackup content into? if not os.path.isdir(self._config.path): - utils.error("Unable to find the storage folder: {}" - .format(self._config.path)) + utils.error( + "Unable to find the storage folder: {}".format(self._config.path) + ) - # Is Sublime Text running ? + # Is Sublime Text running? # if is_process_running('Sublime Text'): # error("Sublime Text is running. It is known to cause problems" # " when Sublime Text is running while I backup or restore" @@ -55,10 +59,11 @@ def check_for_usable_restore_env(self): self.check_for_usable_environment() if not os.path.isdir(self.mackup_folder): - utils.error("Unable to find the Mackup folder: {}\n" - "You might want to back up some files or get your" - " storage directory synced first." - .format(self.mackup_folder)) + utils.error( + "Unable to find the Mackup folder: {}\n" + "You might want to back up some files or get your" + " storage directory synced first.".format(self.mackup_folder) + ) def clean_temp_folder(self): """Delete the temp folder and files created while running.""" @@ -67,10 +72,11 @@ def clean_temp_folder(self): def create_mackup_home(self): """If the Mackup home folder does not exist, create it.""" if not os.path.isdir(self.mackup_folder): - if utils.confirm("Mackup needs a directory to store your" - " configuration files\n" - "Do you want to create it now? <{}>" - .format(self.mackup_folder)): + if utils.confirm( + "Mackup needs a directory to store your" + " configuration files\n" + "Do you want to create it now? <{}>".format(self.mackup_folder) + ): os.makedirs(self.mackup_folder) else: utils.error("Mackup can't do anything without a home =(") diff --git a/mackup/main.py b/mackup/main.py index a712aba28..198ac2563 100644 --- a/mackup/main.py +++ b/mackup/main.py @@ -1,12 +1,13 @@ """Mackup. Keep your application settings in sync. -Copyright (C) 2013-2015 Laurent Raufaste +Copyright (C) 2013-2021 Laurent Raufaste Usage: mackup list mackup [options] backup mackup [options] restore + mackup show mackup [options] uninstall mackup (-h | --help) mackup --version @@ -14,6 +15,7 @@ Options: -h --help Show this screen. -f --force Force every question asked to be answered with "Yes". + -r --root Allow mackup to be run as superuser. -n --dry-run Show steps without executing. -v --verbose Show additional details. --version Show version. @@ -21,13 +23,12 @@ Modes of action: 1. list: display a list of all supported applications. 2. backup: sync your conf files to your synced storage, use this the 1st time - you use Mackup. (Note that by default this will sync private keys used by - GnuPG.) + you use Mackup. 3. restore: link the conf files already in your synced storage on your system, use it on any new system you use. 4. uninstall: reset everything as it was before using Mackup. -By default, Mackup syncs all application data (except for private keys) via +By default, Mackup syncs all application data via Dropbox, but may be configured to exclude applications or use a different backend with a .mackup.cfg file. @@ -40,12 +41,13 @@ from .constants import MACKUP_APP_NAME, VERSION from .mackup import Mackup from . import utils +import sys class ColorFormatCodes: - BLUE = '\033[34m' - BOLD = '\033[1m' - NORMAL = '\033[0m' + BLUE = "\033[34m" + BOLD = "\033[1m" + NORMAL = "\033[0m" def header(str): @@ -69,36 +71,36 @@ def printAppHeader(app_name): print(("\n{0} {1} {0}").format(header("---"), bold(app_name))) # If we want to answer mackup with "yes" for each question - if args['--force']: + if args["--force"]: utils.FORCE_YES = True - dry_run = args['--dry-run'] + # Allow mackup to be run as root + if args["--root"]: + utils.CAN_RUN_AS_ROOT = True - verbose = args['--verbose'] + dry_run = args["--dry-run"] - if args['backup']: + verbose = args["--verbose"] + + if args["backup"]: # Check the env where the command is being run mckp.check_for_usable_backup_env() # Backup each application for app_name in sorted(mckp.get_apps_to_backup()): - app = ApplicationProfile(mckp, - app_db.get_files(app_name), - dry_run, - verbose) + app = ApplicationProfile(mckp, app_db.get_files(app_name), dry_run, verbose) printAppHeader(app_name) app.backup() - elif args['restore']: + elif args["restore"]: # Check the env where the command is being run mckp.check_for_usable_restore_env() # Restore the Mackup config before any other config, as we might need # it to know about custom settings - mackup_app = ApplicationProfile(mckp, - app_db.get_files(MACKUP_APP_NAME), - dry_run, - verbose) + mackup_app = ApplicationProfile( + mckp, app_db.get_files(MACKUP_APP_NAME), dry_run, verbose + ) printAppHeader(MACKUP_APP_NAME) mackup_app.restore() @@ -113,43 +115,40 @@ def printAppHeader(app_name): app_names.discard(MACKUP_APP_NAME) for app_name in sorted(app_names): - app = ApplicationProfile(mckp, - app_db.get_files(app_name), - dry_run, - verbose) + app = ApplicationProfile(mckp, app_db.get_files(app_name), dry_run, verbose) printAppHeader(app_name) app.restore() - elif args['uninstall']: + elif args["uninstall"]: # Check the env where the command is being run mckp.check_for_usable_restore_env() if dry_run or ( - utils.confirm("You are going to uninstall Mackup.\n" - "Every configuration file, setting and dotfile" - " managed by Mackup will be unlinked and moved back" - " to their original place, in your home folder.\n" - "Are you sure ?")): - + utils.confirm( + "You are going to uninstall Mackup.\n" + "Every configuration file, setting and dotfile" + " managed by Mackup will be unlinked and copied back" + " to their original place, in your home folder.\n" + "Are you sure?" + ) + ): # Uninstall the apps except Mackup, which we'll uninstall last, to # keep the settings as long as possible app_names = mckp.get_apps_to_backup() app_names.discard(MACKUP_APP_NAME) for app_name in sorted(app_names): - app = ApplicationProfile(mckp, - app_db.get_files(app_name), - dry_run, - verbose) + app = ApplicationProfile( + mckp, app_db.get_files(app_name), dry_run, verbose + ) printAppHeader(app_name) app.uninstall() # Restore the Mackup config before any other config, as we might # need it to know about custom settings - mackup_app = ApplicationProfile(mckp, - app_db.get_files(MACKUP_APP_NAME), - dry_run, - verbose) + mackup_app = ApplicationProfile( + mckp, app_db.get_files(MACKUP_APP_NAME), dry_run, verbose + ) mackup_app.uninstall() # Delete the Mackup folder in Dropbox @@ -157,22 +156,37 @@ def printAppHeader(app_name): # uninstalled yet # delete(mckp.mackup_folder) - print("\n" - "All your files have been put back into place. You can now" - " safely uninstall Mackup.\n" - "\n" - "Thanks for using Mackup !") + print( + "\n" + "All your files have been put back into place. You can now" + " safely uninstall Mackup.\n" + "\n" + "Thanks for using Mackup!" + ) - elif args['list']: + elif args["list"]: # Display the list of supported applications mckp.check_for_usable_environment() output = "Supported applications:\n" for app_name in sorted(app_db.get_app_names()): output += " - {}\n".format(app_name) output += "\n" - output += ("{} applications supported in Mackup v{}" - .format(len(app_db.get_app_names()), VERSION)) + output += "{} applications supported in Mackup v{}".format( + len(app_db.get_app_names()), VERSION + ) print(output) + elif args["show"]: + mckp.check_for_usable_environment() + app_name = args[""] + + # Make sure the app exists + if app_name not in app_db.get_app_names(): + sys.exit("Unsupported application: {}".format(app_name)) + print("Name: {}".format(app_db.get_name(app_name))) + print("Configuration files:") + for file in app_db.get_files(app_name): + print(" - {}".format(file)) + # Delete the tmp folder mckp.clean_temp_folder() diff --git a/mackup/utils.py b/mackup/utils.py index caec69a1a..6cf005f45 100644 --- a/mackup/utils.py +++ b/mackup/utils.py @@ -16,10 +16,13 @@ # If True, the user wants to say "yes" to everything. FORCE_YES = False +# Flag that control if mackup can be run as root +CAN_RUN_AS_ROOT = False + def confirm(question): """ - Ask the user if he really want something to happen. + Ask the user if he really wants something to happen. Args: question(str): What can happen @@ -31,12 +34,12 @@ def confirm(question): return True while True: - answer = input(question + ' ').lower() + answer = input(question + " ").lower() - if answer == 'yes' or answer == 'y': + if answer == "yes" or answer == "y": confirmed = True break - if answer == 'no' or answer == 'n': + if answer == "no" or answer == "n": confirmed = False break @@ -69,7 +72,7 @@ def copy(src, dst): """ Copy a file or a folder (recursively) from src to dst. - For simplicity sake, both src and dst must be absolute path and must + For the sake of simplicity, both src and dst must be absolute path and must include the filename of the file or folder. Also do not include any trailing slash. @@ -87,7 +90,7 @@ def copy(src, dst): assert os.path.exists(src) assert isinstance(dst, str) - # Create the path to the dst file if it does not exists + # Create the path to the dst file if it does not exist abs_path = os.path.dirname(os.path.abspath(dst)) if not os.path.isdir(abs_path): os.makedirs(abs_path) @@ -101,7 +104,7 @@ def copy(src, dst): elif os.path.isdir(src): shutil.copytree(src, dst) - # What the heck is this ? + # What the heck is this? else: raise ValueError("Unsupported file: {}".format(src)) @@ -113,7 +116,7 @@ def link(target, link_to): """ Create a link to a target file or a folder. - For simplicity sake, both target and link_to must be absolute path and must + For the sake of simplicity, both target and link_to must be absolute path and must include the filename of the file or folder. Also do not include any trailing slash. @@ -130,7 +133,7 @@ def link(target, link_to): assert os.path.exists(target) assert isinstance(link_to, str) - # Create the path to the link if it does not exists + # Create the path to the link if it does not exist abs_path = os.path.dirname(os.path.abspath(link_to)) if not os.path.isdir(abs_path): os.makedirs(abs_path) @@ -185,8 +188,8 @@ def error(message): Args: message(str): The message to display. """ - fail = '\033[91m' - end = '\033[0m' + fail = "\033[91m" + end = "\033[0m" sys.exit(fail + "Error: {}".format(message) + end) @@ -197,12 +200,12 @@ def get_dropbox_folder_location(): Returns: (str) Full path to the current Dropbox folder """ - host_db_path = os.path.join(os.environ['HOME'], '.dropbox/host.db') + host_db_path = os.path.join(os.environ["HOME"], ".dropbox/host.db") try: - with open(host_db_path, 'r') as f_hostdb: + with open(host_db_path, "r") as f_hostdb: data = f_hostdb.read().split() except IOError: - error("Unable to find your Dropbox install =(") + error(constants.ERROR_UNABLE_TO_FIND_STORAGE.format(provider="Dropbox install")) dropbox_home = base64.b64decode(data[1]).decode() return dropbox_home @@ -215,57 +218,41 @@ def get_google_drive_folder_location(): Returns: (str) Full path to the current Google Drive folder """ - gdrive_db_path = 'Library/Application Support/Google/Drive/sync_config.db' - yosemite_gdrive_db_path = ('Library/Application Support/Google/Drive/' - 'user_default/sync_config.db') - yosemite_gdrive_db = os.path.join(os.environ['HOME'], - yosemite_gdrive_db_path) + gdrive_db_path = "Library/Application Support/Google/Drive/sync_config.db" + yosemite_gdrive_db_path = ( + "Library/Application Support/Google/Drive/" "user_default/sync_config.db" + ) + yosemite_gdrive_db = os.path.join(os.environ["HOME"], yosemite_gdrive_db_path) if os.path.isfile(yosemite_gdrive_db): gdrive_db_path = yosemite_gdrive_db googledrive_home = None - gdrive_db = os.path.join(os.environ['HOME'], gdrive_db_path) + gdrive_db = os.path.join(os.environ["HOME"], gdrive_db_path) if os.path.isfile(gdrive_db): con = sqlite3.connect(gdrive_db) if con: cur = con.cursor() - query = ("SELECT data_value " - "FROM data " - "WHERE entry_key = 'local_sync_root_path';") + query = ( + "SELECT data_value " + "FROM data " + "WHERE entry_key = 'local_sync_root_path';" + ) cur.execute(query) data = cur.fetchone() googledrive_home = str(data[0]) con.close() if not googledrive_home: - error("Unable to find your Google Drive install =(") + error( + constants.ERROR_UNABLE_TO_FIND_STORAGE.format( + provider="Google Drive install" + ) + ) return googledrive_home -def get_box_folder_location(): - """ - Try to locate the Box folder. - - Returns: - (str) Full path to the current Box folder - """ - box_prefs_path = ('Library/Application Support/Box/Box Sync/' - 'sync_root_folder.txt') - box_home = None - - box_prefs = os.path.join(os.environ['HOME'], box_prefs_path) - try: - with open(box_prefs, 'r') as sync_path: - data = sync_path.read() - box_home = data - except IOError: - error("Unable to find your Box prefs =(") - - return box_home - - def get_icloud_folder_location(): """ Try to locate the iCloud Drive folder. @@ -273,12 +260,12 @@ def get_icloud_folder_location(): Returns: (str) Full path to the iCloud Drive folder. """ - yosemite_icloud_path = '~/Library/Mobile Documents/com~apple~CloudDocs/' + yosemite_icloud_path = "~/Library/Mobile Documents/com~apple~CloudDocs/" icloud_home = os.path.expanduser(yosemite_icloud_path) if not os.path.isdir(icloud_home): - error('Unable to find your iCloud Drive =(') + error(constants.ERROR_UNABLE_TO_FIND_STORAGE.format(provider="iCloud Drive")) return str(icloud_home) @@ -296,10 +283,9 @@ def is_process_running(process_name): is_running = False # On systems with pgrep, check if the given process is running - if os.path.isfile('/usr/bin/pgrep'): - dev_null = open(os.devnull, 'wb') - returncode = subprocess.call(['/usr/bin/pgrep', process_name], - stdout=dev_null) + if os.path.isfile("/usr/bin/pgrep"): + dev_null = open(os.devnull, "wb") + returncode = subprocess.call(["/usr/bin/pgrep", process_name], stdout=dev_null) is_running = bool(returncode == 0) return is_running @@ -317,12 +303,12 @@ def remove_acl(path): recursively. """ # Some files have ACLs, let's remove them recursively - if (platform.system() == constants.PLATFORM_DARWIN and - os.path.isfile('/bin/chmod')): - subprocess.call(['/bin/chmod', '-R', '-N', path]) - elif ((platform.system() == constants.PLATFORM_LINUX) and - os.path.isfile('/bin/setfacl')): - subprocess.call(['/bin/setfacl', '-R', '-b', path]) + if platform.system() == constants.PLATFORM_DARWIN and os.path.isfile("/bin/chmod"): + subprocess.call(["/bin/chmod", "-R", "-N", path]) + elif (platform.system() == constants.PLATFORM_LINUX) and os.path.isfile( + "/bin/setfacl" + ): + subprocess.call(["/bin/setfacl", "-R", "-b", path]) def remove_immutable_attribute(path): @@ -338,12 +324,14 @@ def remove_immutable_attribute(path): attribute for, recursively. """ # Some files have ACLs, let's remove them recursively - if ((platform.system() == constants.PLATFORM_DARWIN) and - os.path.isfile('/usr/bin/chflags')): - subprocess.call(['/usr/bin/chflags', '-R', 'nouchg', path]) - elif (platform.system() == constants.PLATFORM_LINUX and - os.path.isfile('/usr/bin/chattr')): - subprocess.call(['/usr/bin/chattr', '-R', '-i', path]) + if (platform.system() == constants.PLATFORM_DARWIN) and os.path.isfile( + "/usr/bin/chflags" + ): + subprocess.call(["/usr/bin/chflags", "-R", "nouchg", path]) + elif platform.system() == constants.PLATFORM_LINUX and os.path.isfile( + "/usr/bin/chattr" + ): + subprocess.call(["/usr/bin/chattr", "-R", "-f", "-i", path]) def can_file_be_synced_on_current_platform(path): @@ -367,12 +355,12 @@ def can_file_be_synced_on_current_platform(path): can_be_synced = True # If the given path is relative, prepend home - fullpath = os.path.join(os.environ['HOME'], path) + fullpath = os.path.join(os.environ["HOME"], path) - # Compute the ~/Library path on OS X + # Compute the ~/Library path on macOS # End it with a slash because we are looking for this specific folder and # not any file/folder named LibrarySomething - library_path = os.path.join(os.environ['HOME'], 'Library/') + library_path = os.path.join(os.environ["HOME"], "Library/") if platform.system() == constants.PLATFORM_LINUX: if fullpath.startswith(library_path): diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 000000000..5906252f0 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,684 @@ +# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. + +[[package]] +name = "2to3" +version = "1.0" +description = "Adds the 2to3 command directly to entry_points." +optional = false +python-versions = "*" +files = [ + {file = "2to3-1.0-py3-none-any.whl", hash = "sha256:a39fb204829c6ed90be1507f3aff1c2b4fa6734585d57a50286f039546b5fb7f"}, + {file = "2to3-1.0.tar.gz", hash = "sha256:958bc212c928bbdcbc778b72528e0a39ae4ee8040eda6af6c3b5dd640c98ce6d"}, +] + +[[package]] +name = "alabaster" +version = "0.7.13" +description = "A configurable sidebar-enabled Sphinx theme" +optional = false +python-versions = ">=3.6" +files = [ + {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, + {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, +] + +[[package]] +name = "babel" +version = "2.13.1" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Babel-2.13.1-py3-none-any.whl", hash = "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed"}, + {file = "Babel-2.13.1.tar.gz", hash = "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"}, +] + +[package.dependencies] +pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} +setuptools = {version = "*", markers = "python_version >= \"3.12\""} + +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + +[[package]] +name = "certifi" +version = "2023.7.22" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "coverage" +version = "7.3.2" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, + {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, + {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, + {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, + {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, + {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, + {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, + {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, + {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, + {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, + {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, + {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, + {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, + {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, +] + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "docopt" +version = "0.6.2" +description = "Pythonic argument parser, that will make you smile" +optional = false +python-versions = "*" +files = [ + {file = "docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491"}, +] + +[[package]] +name = "docutils" +version = "0.20.1" +description = "Docutils -- Python Documentation Utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, + {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, +] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "imagesize" +version = "1.4.1" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] + +[[package]] +name = "importlib-metadata" +version = "6.8.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, + {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "markupsafe" +version = "2.1.3" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, +] + +[[package]] +name = "nose-py3" +version = "1.6.3" +description = "nose extends unittest to make testing easier - python3 version" +optional = false +python-versions = ">=3.6" +files = [ + {file = "nose_py3-1.6.3-py3-none-any.whl", hash = "sha256:97daa91c0f1aa0594857aac709ba6da52f5a7d88d16b618b2506d595e2d0580e"}, +] + +[package.dependencies] +2to3 = "*" +coverage = "*" +numpy = "*" +six = "*" +sphinx = "*" + +[[package]] +name = "numpy" +version = "1.24.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "numpy-1.24.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64"}, + {file = "numpy-1.24.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1"}, + {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4"}, + {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6"}, + {file = "numpy-1.24.4-cp310-cp310-win32.whl", hash = "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc"}, + {file = "numpy-1.24.4-cp310-cp310-win_amd64.whl", hash = "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e"}, + {file = "numpy-1.24.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810"}, + {file = "numpy-1.24.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254"}, + {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7"}, + {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5"}, + {file = "numpy-1.24.4-cp311-cp311-win32.whl", hash = "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d"}, + {file = "numpy-1.24.4-cp311-cp311-win_amd64.whl", hash = "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694"}, + {file = "numpy-1.24.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61"}, + {file = "numpy-1.24.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f"}, + {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e"}, + {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc"}, + {file = "numpy-1.24.4-cp38-cp38-win32.whl", hash = "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2"}, + {file = "numpy-1.24.4-cp38-cp38-win_amd64.whl", hash = "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706"}, + {file = "numpy-1.24.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400"}, + {file = "numpy-1.24.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f"}, + {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9"}, + {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d"}, + {file = "numpy-1.24.4-cp39-cp39-win32.whl", hash = "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835"}, + {file = "numpy-1.24.4-cp39-cp39-win_amd64.whl", hash = "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2"}, + {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, +] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] + +[[package]] +name = "pygments" +version = "2.16.1" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, +] + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pytz" +version = "2023.3.post1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, +] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "setuptools" +version = "68.2.2" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, + {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +optional = false +python-versions = "*" +files = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] + +[[package]] +name = "sphinx" +version = "7.1.2" +description = "Python documentation generator" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sphinx-7.1.2-py3-none-any.whl", hash = "sha256:d170a81825b2fcacb6dfd5a0d7f578a053e45d3f2b153fecc948c37344eb4cbe"}, + {file = "sphinx-7.1.2.tar.gz", hash = "sha256:780f4d32f1d7d1126576e0e5ecc19dc32ab76cd24e950228dcf7b1f6d3d9e22f"}, +] + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=2.9" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.18.1,<0.21" +imagesize = ">=1.3" +importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} +Jinja2 = ">=3.0" +packaging = ">=21.0" +Pygments = ">=2.13" +requests = ">=2.25.0" +snowballstemmer = ">=2.0" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.5" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] +test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.4" +description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, + {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.1" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, + {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["html5lib", "pytest"] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] + +[package.extras] +test = ["flake8", "mypy", "pytest"] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.5" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "urllib3" +version = "2.0.7" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.7" +files = [ + {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"}, + {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "zipp" +version = "3.17.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "454bbc88f1b6c2be019c27da622698360726b6528f909624561b45613d32e3f1" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..883fa3486 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,25 @@ +[tool.poetry] +name = "mackup" +version = "0.8.39" +description = "Keep your application settings in sync (macOS/Linux)" +authors = ["Laurent Raufaste "] +license = "GPLv3" +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.8" +docopt = "^0.6.2" +six = "^1.16.0" + +[tool.poetry.group.dev] +optional = true + +[tool.poetry.group.dev.dependencies] +nose-py3 = "^1.6.3" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[tool.poetry.scripts] +mackup = "mackup.main:main" diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index e4c375a7e..000000000 --- a/requirements.txt +++ /dev/null @@ -1,7 +0,0 @@ -# Needed to run the tests -# Run "pip install -r requirements.txt" then "make test" -nose -flake8 -docopt -six -coverage diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 2a9acf13d..000000000 --- a/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[bdist_wheel] -universal = 1 diff --git a/setup.py b/setup.py deleted file mode 100644 index cfd89666f..000000000 --- a/setup.py +++ /dev/null @@ -1,34 +0,0 @@ -"""Setup file to automate the install of Mackup in the Python environment.""" -from setuptools import setup -from mackup.constants import VERSION - - -setup( - name='mackup', - version=VERSION, - author='Laurent Raufaste', - author_email='analogue@glop.org', - url='https://github.com/lra/mackup', - description='Keep your application settings in sync (OS X/Linux)', - keywords='configuration config dotfiles sync backup dropbox gdrive box', - license='GPLv3', - packages=['mackup'], - install_requires=['docopt', 'six'], - entry_points={ - 'console_scripts': [ - 'mackup=mackup.main:main', - ], - }, - package_data={'mackup': ['applications/*.cfg']}, - classifiers=[ - 'Development Status :: 4 - Beta', - 'Environment :: Console', - 'Intended Audience :: End Users/Desktop', - ('License :: OSI Approved :: ' - 'GNU General Public License v3 or later (GPLv3+)'), - 'Natural Language :: English', - 'Operating System :: POSIX', - 'Programming Language :: Python', - 'Topic :: Utilities', - ], -) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index a5e148567..03908ef44 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -1,6 +1,6 @@ name: mackup version: git -version-script: "git describe --tags" +version-script: "python -c \"from mackup.constants import VERSION; print(VERSION)\"" summary: Keep your application settings in sync description: | Back ups your application settings in a safe directory (e.g. Dropbox). diff --git a/tests/README.md b/tests/README.md index 0d2ca02ee..d27f371d0 100644 --- a/tests/README.md +++ b/tests/README.md @@ -2,19 +2,19 @@ Tests are put in this folder. -Feel free to add more, the more the better ! +Feel free to add more, the more the better! ## How to run the tests ```bash -cd src/mackup -pip install -r requirements.txt -nosetests +pip install pipenv +pipenv install -d +pipenv run make test ``` And you should see -``` +```text . ---------------------------------------------------------------------- Ran 1 test in 0.016s @@ -23,4 +23,4 @@ OK ``` Yeah, I wrote this file when there was only 1 test, I hope there will be more -when you read it ! +when you read it! diff --git a/tests/config_tests.py b/tests/config_tests.py index a994e0f7e..08109b3cc 100644 --- a/tests/config_tests.py +++ b/tests/config_tests.py @@ -1,19 +1,19 @@ import unittest import os.path -from mackup.constants import (ENGINE_DROPBOX, - ENGINE_GDRIVE, - ENGINE_ICLOUD, - ENGINE_BOX, - ENGINE_FS) +from mackup.constants import ( + ENGINE_DROPBOX, + ENGINE_GDRIVE, + ENGINE_ICLOUD, + ENGINE_FS, +) from mackup.config import Config, ConfigError class TestConfig(unittest.TestCase): - def setUp(self): realpath = os.path.dirname(os.path.realpath(__file__)) - os.environ['HOME'] = os.path.join(realpath, 'fixtures') + os.environ["HOME"] = os.path.join(realpath, "fixtures") def test_config_no_config(self): cfg = Config() @@ -24,221 +24,192 @@ def test_config_no_config(self): assert isinstance(cfg.path, str) print(cfg.path) - assert cfg.path == '/home/some_user/Dropbox' + assert cfg.path == "/home/some_user/Dropbox" assert isinstance(cfg.directory, str) - assert cfg.directory == u'Mackup' + assert cfg.directory == "Mackup" assert isinstance(cfg.fullpath, str) - assert cfg.fullpath == u'/home/some_user/Dropbox/Mackup' + assert cfg.fullpath == "/home/some_user/Dropbox/Mackup" assert cfg.apps_to_ignore == set() assert cfg.apps_to_sync == set() def test_config_empty(self): - cfg = Config('mackup-empty.cfg') + cfg = Config("mackup-empty.cfg") assert isinstance(cfg.engine, str) assert cfg.engine == ENGINE_DROPBOX assert isinstance(cfg.path, str) - assert cfg.path == u'/home/some_user/Dropbox' + assert cfg.path == "/home/some_user/Dropbox" assert isinstance(cfg.directory, str) - assert cfg.directory == u'Mackup' + assert cfg.directory == "Mackup" assert isinstance(cfg.fullpath, str) - assert cfg.fullpath == u'/home/some_user/Dropbox/Mackup' + assert cfg.fullpath == "/home/some_user/Dropbox/Mackup" assert cfg.apps_to_ignore == set() assert cfg.apps_to_sync == set() def test_config_engine_dropbox(self): - cfg = Config('mackup-engine-dropbox.cfg') + cfg = Config("mackup-engine-dropbox.cfg") assert isinstance(cfg.engine, str) assert cfg.engine == ENGINE_DROPBOX assert isinstance(cfg.path, str) - assert cfg.path == u'/home/some_user/Dropbox' + assert cfg.path == "/home/some_user/Dropbox" assert isinstance(cfg.directory, str) - assert cfg.directory == u'some_weirld_name' + assert cfg.directory == "some_weirld_name" assert isinstance(cfg.fullpath, str) - assert cfg.fullpath == u'/home/some_user/Dropbox/some_weirld_name' + assert cfg.fullpath == "/home/some_user/Dropbox/some_weirld_name" assert cfg.apps_to_ignore == set() assert cfg.apps_to_sync == set() def test_config_engine_filesystem_absolute(self): - cfg = Config('mackup-engine-file_system-absolute.cfg') + cfg = Config("mackup-engine-file_system-absolute.cfg") assert isinstance(cfg.engine, str) assert cfg.engine == ENGINE_FS assert isinstance(cfg.path, str) - assert cfg.path == u'/some/absolute/folder' + assert cfg.path == "/some/absolute/folder" assert isinstance(cfg.directory, str) - assert cfg.directory == u'custom_folder' + assert cfg.directory == "custom_folder" assert isinstance(cfg.fullpath, str) - assert cfg.fullpath == u'/some/absolute/folder/custom_folder' + assert cfg.fullpath == "/some/absolute/folder/custom_folder" - assert cfg.apps_to_ignore == set(['subversion', 'sequel-pro']) + assert cfg.apps_to_ignore == set(["subversion", "sequel-pro"]) assert cfg.apps_to_sync == set() def test_config_engine_filesystem(self): - cfg = Config('mackup-engine-file_system.cfg') + cfg = Config("mackup-engine-file_system.cfg") assert isinstance(cfg.engine, str) assert cfg.engine == ENGINE_FS assert isinstance(cfg.path, str) - assert cfg.path.endswith(os.path.join(os.environ[u'HOME'], - u'some/relative/folder')) + assert cfg.path.endswith( + os.path.join(os.environ["HOME"], "some/relative/folder") + ) assert isinstance(cfg.directory, str) - assert cfg.directory == u'Mackup' + assert cfg.directory == "Mackup" assert isinstance(cfg.fullpath, str) - assert cfg.fullpath == os.path.join(os.environ[u'HOME'], - u'some/relative/folder', - u'Mackup') + assert cfg.fullpath == os.path.join( + os.environ["HOME"], "some/relative/folder", "Mackup" + ) assert cfg.apps_to_ignore == set() - assert cfg.apps_to_sync == set(['sabnzbd', 'sublime-text-3', 'x11']) + assert cfg.apps_to_sync == set(["sabnzbd", "sublime-text-3", "x11"]) def test_config_engine_google_drive(self): - cfg = Config('mackup-engine-google_drive.cfg') + cfg = Config("mackup-engine-google_drive.cfg") assert isinstance(cfg.engine, str) assert cfg.engine == ENGINE_GDRIVE assert isinstance(cfg.path, str) - assert cfg.path == u'/Users/whatever/Google Drive' + assert cfg.path == "/Users/whatever/Google Drive" assert isinstance(cfg.directory, str) - assert cfg.directory == u'Mackup' + assert cfg.directory == "Mackup" assert isinstance(cfg.fullpath, str) - assert cfg.fullpath.endswith(u'/Google Drive/Mackup') + assert cfg.fullpath.endswith("/Google Drive/Mackup") - assert cfg.apps_to_ignore == set(['subversion', - 'sequel-pro', - 'sabnzbd']) - assert cfg.apps_to_sync == set(['sublime-text-3', 'x11', 'sabnzbd']) + assert cfg.apps_to_ignore == set(["subversion", "sequel-pro", "sabnzbd"]) + assert cfg.apps_to_sync == set(["sublime-text-3", "x11", "sabnzbd"]) def test_config_engine_icloud(self): - cfg = Config('mackup-engine-icloud.cfg') + cfg = Config("mackup-engine-icloud.cfg") assert isinstance(cfg.engine, str) assert cfg.engine == ENGINE_ICLOUD assert isinstance(cfg.path, str) assert cfg.path == os.path.expanduser( - '~/Library/Mobile Documents/com~apple~CloudDocs/') + "~/Library/Mobile Documents/com~apple~CloudDocs/" + ) assert isinstance(cfg.directory, str) - assert cfg.directory == u'Mackup' + assert cfg.directory == "Mackup" assert isinstance(cfg.fullpath, str) - assert cfg.fullpath.endswith(u'/com~apple~CloudDocs/Mackup') - - assert cfg.apps_to_ignore == set(['subversion', - 'sequel-pro', - 'sabnzbd']) - assert cfg.apps_to_sync == set(['sublime-text-3', 'x11', 'sabnzbd']) - - def test_config_engine_box(self): - cfg = Config('mackup-engine-box.cfg') - - assert isinstance(cfg.engine, str) - assert cfg.engine == ENGINE_BOX - - assert isinstance(cfg.path, str) - assert cfg.path == u'/Users/whatever/Box Sync' + assert cfg.fullpath.endswith("/com~apple~CloudDocs/Mackup") - assert isinstance(cfg.directory, str) - assert cfg.directory == u'some_weirder_name' - - assert isinstance(cfg.fullpath, str) - assert cfg.fullpath == u'/Users/whatever/Box Sync/some_weirder_name' - - assert cfg.apps_to_ignore == set() - assert cfg.apps_to_sync == set() + assert cfg.apps_to_ignore == set(["subversion", "sequel-pro", "sabnzbd"]) + assert cfg.apps_to_sync == set(["sublime-text-3", "x11", "sabnzbd"]) def test_config_engine_filesystem_no_path(self): with self.assertRaises(ConfigError): - Config('mackup-engine-file_system-no_path.cfg') + Config("mackup-engine-file_system-no_path.cfg") def test_config_engine_unknown(self): with self.assertRaises(ConfigError): - Config('mackup-engine-unknown.cfg') + Config("mackup-engine-unknown.cfg") def test_config_apps_to_ignore(self): - cfg = Config('mackup-apps_to_ignore.cfg') + cfg = Config("mackup-apps_to_ignore.cfg") assert isinstance(cfg.engine, str) assert cfg.engine == ENGINE_DROPBOX assert isinstance(cfg.path, str) - assert cfg.path == '/home/some_user/Dropbox' + assert cfg.path == "/home/some_user/Dropbox" assert isinstance(cfg.directory, str) - assert cfg.directory == u'Mackup' + assert cfg.directory == "Mackup" assert isinstance(cfg.fullpath, str) - assert cfg.fullpath == u'/home/some_user/Dropbox/Mackup' + assert cfg.fullpath == "/home/some_user/Dropbox/Mackup" - assert cfg.apps_to_ignore == set(['subversion', - 'sequel-pro', - 'sabnzbd']) + assert cfg.apps_to_ignore == set(["subversion", "sequel-pro", "sabnzbd"]) assert cfg.apps_to_sync == set() def test_config_apps_to_sync(self): - cfg = Config('mackup-apps_to_sync.cfg') + cfg = Config("mackup-apps_to_sync.cfg") assert isinstance(cfg.engine, str) assert cfg.engine == ENGINE_DROPBOX assert isinstance(cfg.path, str) - assert cfg.path == u'/home/some_user/Dropbox' + assert cfg.path == "/home/some_user/Dropbox" assert isinstance(cfg.directory, str) - assert cfg.directory == u'Mackup' + assert cfg.directory == "Mackup" assert isinstance(cfg.fullpath, str) - assert cfg.fullpath == u'/home/some_user/Dropbox/Mackup' + assert cfg.fullpath == "/home/some_user/Dropbox/Mackup" assert cfg.apps_to_ignore == set() - assert cfg.apps_to_sync == set(['sabnzbd', - 'sublime-text-3', - 'x11']) + assert cfg.apps_to_sync == set(["sabnzbd", "sublime-text-3", "x11"]) def test_config_apps_to_ignore_and_sync(self): - cfg = Config('mackup-apps_to_ignore_and_sync.cfg') + cfg = Config("mackup-apps_to_ignore_and_sync.cfg") assert isinstance(cfg.engine, str) assert cfg.engine == ENGINE_DROPBOX assert isinstance(cfg.path, str) - assert cfg.path == u'/home/some_user/Dropbox' + assert cfg.path == "/home/some_user/Dropbox" assert isinstance(cfg.directory, str) - assert cfg.directory == u'Mackup' + assert cfg.directory == "Mackup" assert isinstance(cfg.fullpath, str) - assert cfg.fullpath == u'/home/some_user/Dropbox/Mackup' + assert cfg.fullpath == "/home/some_user/Dropbox/Mackup" - assert cfg.apps_to_ignore == set(['subversion', - 'sequel-pro', - 'sabnzbd']) - assert cfg.apps_to_sync == set(['sabnzbd', - 'sublime-text-3', - 'x11', - 'vim']) + assert cfg.apps_to_ignore == set(["subversion", "sequel-pro", "sabnzbd"]) + assert cfg.apps_to_sync == set(["sabnzbd", "sublime-text-3", "x11", "vim"]) def test_config_old_config(self): - self.assertRaises(SystemExit, Config, 'mackup-old-config.cfg') + self.assertRaises(SystemExit, Config, "mackup-old-config.cfg") diff --git a/tests/fixtures/Library/Mobile Documents/com~apple~CloudDocs/_blank_.md b/tests/fixtures/Library/Mobile Documents/com~apple~CloudDocs/_blank_.md index 6a23f9455..06c937b02 100644 --- a/tests/fixtures/Library/Mobile Documents/com~apple~CloudDocs/_blank_.md +++ b/tests/fixtures/Library/Mobile Documents/com~apple~CloudDocs/_blank_.md @@ -1 +1 @@ -Blank file for git sync \ No newline at end of file +Blank file for git sync diff --git a/tests/fixtures/mackup-apps_to_ignore.cfg b/tests/fixtures/mackup-apps_to_ignore.cfg index be205c742..b3c69e181 100644 --- a/tests/fixtures/mackup-apps_to_ignore.cfg +++ b/tests/fixtures/mackup-apps_to_ignore.cfg @@ -1,4 +1,4 @@ [applications_to_ignore] -subversion -sequel-pro +subversion ; inline comment +sequel-pro # inline comment sabnzbd diff --git a/tests/fixtures/mackup-engine-box.cfg b/tests/fixtures/mackup-engine-box.cfg deleted file mode 100644 index c4b3aa5e6..000000000 --- a/tests/fixtures/mackup-engine-box.cfg +++ /dev/null @@ -1,3 +0,0 @@ -[storage] -engine = box -directory = some_weirder_name diff --git a/tests/main_tests.py b/tests/main_tests.py index 5474cc6de..288443975 100644 --- a/tests/main_tests.py +++ b/tests/main_tests.py @@ -3,9 +3,8 @@ class TestMain(unittest.TestCase): - def test_main_header(self): - assert main.header('blah') == '\033[34mblah\033[0m' + assert main.header("blah") == "\033[34mblah\033[0m" def test_main_bold(self): - assert main.bold('blah') == '\033[1mblah\033[0m' + assert main.bold("blah") == "\033[1mblah\033[0m" diff --git a/tests/utils_test.py b/tests/utils_test.py index 956a982e2..0fbf4fe81 100644 --- a/tests/utils_test.py +++ b/tests/utils_test.py @@ -16,27 +16,29 @@ def convert_to_octal(file_name): class TestMackup(unittest.TestCase): - def test_confirm_yes(self): # Override the input used in utils def custom_input(_): - return 'Yes' + return "Yes" + utils.input = custom_input - assert utils.confirm('Answer Yes to this question') + assert utils.confirm("Answer Yes to this question") def test_confirm_no(self): # Override the input used in utils def custom_input(_): - return 'No' + return "No" + utils.input = custom_input - assert not utils.confirm('Answer No to this question') + assert not utils.confirm("Answer No to this question") def test_confirm_typo(self): # Override the input used in utils def custom_input(_): - return 'No' + return "No" + utils.input = custom_input - assert not utils.confirm('Answer garbage to this question') + assert not utils.confirm("Answer garbage to this question") def test_delete_file(self): # Create a tmp file @@ -152,10 +154,9 @@ def test_copy_file_to_dir(self): # Set the destination filename srcpath_basename = os.path.basename(srcpath) - dstfile = os.path.join(dstpath, - 'subfolder', - srcpath_basename, - os.path.basename(srcfile)) + dstfile = os.path.join( + dstpath, "subfolder", srcpath_basename, os.path.basename(srcfile) + ) # Make sure the source file and destination folder exist and the # destination file doesn't yet exist assert os.path.isdir(srcpath) @@ -189,9 +190,7 @@ def test_copy_dir(self): # Set the destination filename srcpath_basename = os.path.basename(srcpath) - dstfile = os.path.join(dstpath, - srcpath_basename, - os.path.basename(srcfile)) + dstfile = os.path.join(dstpath, srcpath_basename, os.path.basename(srcfile)) # Make sure the source file and destination folder exist and the # destination file doesn't yet exist assert os.path.isdir(srcpath) @@ -280,28 +279,24 @@ def test_error(self): def test_failed_backup_location(self): """ Tests for the error that should occur if the backup folder cannot be - found for Dropbox, Google and Box + found for Dropbox and Google """ # Hack to make our home folder some temporary folder temp_home = tempfile.mkdtemp() - utils.os.environ['HOME'] = temp_home + utils.os.environ["HOME"] = temp_home # Check for the missing Dropbox folder assert not os.path.exists(os.path.join(temp_home, ".dropbox/host.db")) self.assertRaises(SystemExit, utils.get_dropbox_folder_location) # Check for the missing Google Drive folder - assert not os.path.exists(os.path.join( - temp_home, - "Library/Application Support/Google/Drive/sync_config.db")) + assert not os.path.exists( + os.path.join( + temp_home, "Library/Application Support/Google/Drive/sync_config.db" + ) + ) self.assertRaises(SystemExit, utils.get_google_drive_folder_location) - # Check for the missing Box folder - assert not os.path.exists(os.path.join( - temp_home, - "Library/Application Support/Box/Box Sync/sync_root_folder.txt")) - self.assertRaises(SystemExit, utils.get_box_folder_location) - def test_is_process_running(self): # A pgrep that has one letter and a wildcard will always return id 1 assert utils.is_process_running("a*")