Package day-care manager on macOS.
Project description
Platform: macOS High Sierra | Mojave
Language: Python | Bourne-Again Shell
Environment: Console | Terminal
MacDaily
About
Just some useful daily utility scripts.
macdaily
is a mediate collection of console scripts written in Python and Bourne-Again Shell. Originally works as an automatic housekeeper for Mac to update all packages outdated, macdaily
is now fully functioned and end-user oriented. Without being aware of everything about your Mac, one can easily work around and manage packages out of no pain using macdaily
.
Installation
Just as many Python packages, macdaily
can be installed through pip
using the following command, which will get you the latest version from PyPI.
pip install macdaily
Or if you prefer the real-latest version and fetch from this Git repository, then the script below should be used.
git clone https://github.com/JarryShaw/macdaily.git
cd macdaily
pip install -e .
# and to update at any time
git pull
And for tree format support in dependency command, you may need pipdeptree
, then implicily you can use the following script to do so.
pip install macdaily[pipdeptree]
# or explicitly...
pip install macdaily pipdeptree
Do please NOTE that, macdaily
runs only with support of Python from version 3.6 and on. And it shall only work ideally on macOS.
Configuration
This part might be kind of garrulous, for some may not know what's going on here. :wink:
Since robust enough, macdaily
now supports configuration upon user's own wish. One may set up log path, hard disk path, archive path and many other things, other than the default settings.
NOTA BENE --
macdaily
now supports configuration commands, see Config Procedure section for more information.
The configuration file should lie under ~/.dailyrc
, which is hidden from Finder by macOS. To review or edit it, you may use text editors like vim
and/or nano
, or other graphic editors, such as Sublime Text
and/or Atom
, or whatever you find favourable.
[Path]
# In this section, paths for log files are specified.
# Please, under any circumstances, make sure they are valid.
logdir = ~/Library/Logs/MacDaily ; path where logs will be stored
tmpdir = /tmp/dailylog ; path where temporary runtime logs go
dskdir = /Volumes/Your Disk ; path where your hard disk lies
arcdir = ${dskdir}/Developers ; path where ancient logs archive
[Mode]
# In this section, flags for modes are configured.
# If you would like to disable the mode, set it to "false".
apm = true ; Atom packages
gem = true ; Ruby gems
mas = true ; Mac App Store applications
npm = true ; Node.js modules
pip = true ; Python packages
brew = true ; Homebrew Cellars
cask = true ; Caskroom Casks
dotapp = true ; Applications (*.app)
macapp = true ; all applications in /Application folder
system = true ; macOS system packages
cleanup = true ; cleanup caches
appstore = true ; Mac App Store applications in /Application folder
[Daemon]
# In this section, scheduled tasks are set up.
# You may append and/or remove the time intervals.
update = true ; run update on schedule
uninstall = false ; don't run uninstall
reinstall = false ; don't run reinstall
postinstall = false ; don't run postinstall
dependency = false ; don't run dependency
logging = true ; run logging on schedule
schedule = ; scheduled timing (in 24 hours)
8:00 ; update & logging at 8:00
22:30-update ; update at 22:30
23:00-logging ; logging at 23:00
[Option]
# In this section, command options are picked.
# Do make sure these options are available for commands.
update = --all --yes --pre --quiet --restart --show-log
logging = --all --quiet --show-log
Above is the default content of .dailyrc
, following the grammar of INI
files. Lines and words after number sign ('#'
) and semicolon (';'
) are comments, whose main purpose is to help understanding the contents of this file.
In section [Path]
, there are path names where logs and some other things to be stored. In section [Mode]
, there are ten different modes to indicate if they are enabled or disabled when calling from --all
option.
You may wish to set the dskdir
-- path where your hard disk lies, which allows macdaily
to archive your ancient logs and caches into somewhere never bothers.
Please NOTE that, under all circumstances, of section [Path]
, all values would better be a valid path name without blank characters ( \t\n\r\f\v
), except your hard disk dskdir
.
Besides, in section [Daemon]
, you can decide which command is scheduled and when to run such command, with the format of HH:MM[-CMD]
. The CMD
is optional, which will be any
if omits. And you may setup which command(s) will be registered as daemons and run with schedule through six booleans above. These boolean values help macdaily
indicate which is to be launched when commands in schedule
omit. That is to say, when command
omits in schedule
, macdaily
will register all commands that set true
in the above boolean values.
Also, in section [Option]
, you may set up optional arguments for the daemons above. Do please make sure these commands are valid. And if omit, an empty arguments will be given.
Usage Manual
Start-Up
Before we dive into the detailed usage of macdaily
, let's firstly get our hands dirty with some simple commands.
NOTE -- all acronyms and aliases are left out for a quick and clear view of
macdaily
-
How to use
macdaily
?# call from $PATH $ macdaily [command ...] [flag ...] # or call from Python module $ python -m macdaily [command ...] [flag ...]
-
How to setup my disks and daemons?
$ macdaily config
-
How to relaunch daemons after I manually modified
~/.dailyrc
?$ macdaily launch
-
How to archive ancient logs without running any commands?
$ macdaily archive
-
How to update all outdated packages?
$ macdaily update --all
-
How to update a certain package (eg:
hello
from Homebrew) ?$ macdaily update brew --package hello
-
How to uninstall a certain package along with its dependencies (eg:
pytest
from brewed CPython version 3.6) ?$ macdaily uninstall pip --brew --cpython --python_version=3 --package pytest
-
How to reinstall all packages but do not cleanup caches?
$ macdaily reinstall --all --no-cleanup
-
How to postinstall packages whose name ranges between "start" and "stop" alphabetically?
$ macdaily postinstall --all --startwith=start --endwith=stop
-
How to show dependency of a certain package as a tree (eg:
gnupg
from Homebrew) ?$ macdaily dependency brew --package gnupg --tree
-
How to log all applications on my Mac, a.k.a.
*.app
files?$ macdaily logging dotapp
-
How to run
macdaily
in quiet mode, i.e. with no output information (eg:logging
in quiet mode) ?$ macdaily logging --all --quiet
-
How to dump a
Macfile
to keep track of all packages?$ macdaily bundle dump
Commands
macdaily
supports several different commands, from archive
, bundle
, config
, launch
, update
, unisntall
, reinstall
and postinstall
to dependency
and logging
. Of all commands, there are corresponding aliases for which to be reckoned as valid.
Command | Aliases |
---|---|
archive |
|
bundle |
|
config |
cfg |
launch |
init |
update |
up , upgrade |
uninstall |
un , remove , rm , r , un |
reinstall |
re |
postinstall |
post , ps , |
dependency |
deps , dp |
logging |
log |
Generals
The man page of macdaily
shows as below.
$ macdaily --help
usage: macdaily [-h] command
Package Day Care Manager
optional arguments:
-h, --help show this help message and exit
-V, --version show program's version number and exit
Commands:
macdaily provides a friendly CLI workflow for the administrator of macOS to
manipulate packages
Commands for macdaily
is shown as above and they are mandatory. For more detailed usage information, please refer to the MacDaily General Manual. And here is a brief catalogue for the manual.
- Archive Procedure
- Config Procedure
- Launch Procedure
- Update Procedure
- Uninstall Procedure
- Reinstall Procedure
- Postinstall Procedure
- Dependency Procedure
- Logging Procedure
- Bundle Procedure
Troubleshooting
-
Where can I find the log files?
It depends. Since the path where logs go can be modified through
~/.dailyrc
, it may vary as your settings. In default, you may find them under~/Library/Logs/Scripts
. And with every command, logs can be found in its corresponding folder. Logs are named after its running time, in the fold with corresponding date as its name.Note that, normally, you can only find today's logs in the folder, since
macdaily
automatically archive ancient logs into${logdir}/archive
folder. And every week,${logdir}/archive
folder will be tape-archived into${logdir}/tarfile
. Then after a month, and your hard disk available, they will be moved into/Volumes/Your Diks/Developers/archive.zip
. -
What if my hard disk ain't plugged-in when running the scripts?
Then the archiving and removing procedure will NOT perform. In case there might be some useful resources of yours.
-
Which directory should I set in the configuration file?
First and foremost, I highly recommend you NOT to modify the paths in
~/.dailyrc
manually, EXCEPT your disk pathdskdir
.But if you insist to do so, then make sure they are VALID and available with permission granted, and most importantly, have NO blank characters (
\t\n\r\f\v
) in the path, exceptdskdir
.
TODO
- support configuration
- support command aliases
- reconstruct archiving procedure
- support
gem
andnpm
in all commands - optimise
KeyboardInterrupt
handling procedure - review
pip
implementation and version indication - considering support more versions of Python
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file macdaily-2018.8.29a1.tar.gz
.
File metadata
- Download URL: macdaily-2018.8.29a1.tar.gz
- Upload date:
- Size: 71.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/3.7.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 683c933e945903e8e025dfc81e01f05db5eaf4941529e43fb135752f1bdfceec |
|
MD5 | 1db4daf25f6b9c82278d11bde62d21a3 |
|
BLAKE2b-256 | 02c8a9f4bd9481f4109b206c43a46c22d2763ead457e1aa3d3490f4ffea2101c |
File details
Details for the file macdaily-2018.8.29a1-py2.py3-none-any.whl
.
File metadata
- Download URL: macdaily-2018.8.29a1-py2.py3-none-any.whl
- Upload date:
- Size: 139.2 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/3.7.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6d630477dc9e6343c6c18aa7b4909a4a51efb6f6e1191c1e4a61a6e0210d784c |
|
MD5 | 240ed8bd0e129b54227d5c0ef756b7ad |
|
BLAKE2b-256 | 05f337c0030b55c801151793cbe671ce4a67e251193b21954fb7949bf0eca960 |