{"id":15027051,"url":"https://github.com/novoid/memacs","last_synced_at":"2025-05-14T06:14:18.766Z","repository":{"id":646042,"uuid":"2092708","full_name":"novoid/Memacs","owner":"novoid","description":"What did I do on February 14th 2007? Visualize your (digital) life in Org-mode","archived":false,"fork":false,"pushed_at":"2025-04-01T15:33:19.000Z","size":1193,"stargazers_count":1054,"open_issues_count":18,"forks_count":69,"subscribers_count":48,"default_branch":"master","last_synced_at":"2025-04-14T16:56:11.818Z","etag":null,"topics":["emacs","email","files","filesystem","git","org-mode","orgmode","personal-information-management","pim","python","quantified-self","search"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/novoid.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":"license.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2011-07-23T10:52:49.000Z","updated_at":"2025-04-08T04:16:00.000Z","dependencies_parsed_at":"2024-10-27T23:46:20.396Z","dependency_job_id":"03be457f-caca-4cd0-805a-ed6607d07fbe","html_url":"https://github.com/novoid/Memacs","commit_stats":{"total_commits":624,"total_committers":26,"mean_commits":24.0,"dds":0.641025641025641,"last_synced_commit":"c0fc3a9e1f09a2b1959371e8324729fdd359df57"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novoid%2FMemacs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novoid%2FMemacs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novoid%2FMemacs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novoid%2FMemacs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/novoid","download_url":"https://codeload.github.com/novoid/Memacs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254083871,"owners_count":22011905,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["emacs","email","files","filesystem","git","org-mode","orgmode","personal-information-management","pim","python","quantified-self","search"],"created_at":"2024-09-24T20:05:41.578Z","updated_at":"2025-05-14T06:14:18.723Z","avatar_url":"https://github.com/novoid.png","language":"Python","readme":"*What were you doing* on February 14th of 2007? On *which tasks* were\nyou working on that very day you met your girl friend? When was the\n*last appointments* with your dentist? *Who called* you on telephone\nduring that meeting with your customer last month?\n\nMost people can not answer such questions. *With Memacs you can!*\n\nMemacs extracts metadata (subjects, timestamps, contact information,\n...) from many different existing data sources (file names, emails,\ntweets, bookmarks, ...) on your computer and generates files which are\nreadable by [[http://en.wikipedia.org/wiki/Emacs][GNU Emacs]] with [[http://orgmode.org/][Org mode]].\n\nExample:\n:    emails              -\u003e memacs-maildir.py  \\\n:    firefox history     -\u003e memacs-firefox.py   |\n:    SMS                 -\u003e memacs-sms.py       |\n:    RSS-feeds           -\u003e memacs_rss.py       |\n:    bank statements     -\u003e memacs-easybank.py  |\u003e  Memacs\n:    postings            -\u003e memacs-slrn.org     |\n:    git repository logs -\u003e memacs_git.py       |\n:    svn repository logs -\u003e memacs_svn.py      /\n:    |_________________|   |_________________|     |______|\n:    your personal data      Memacs modules        Org mode\n\nMemacs - as the central component of the system - is a hub for all the\nconnectors that add data from individual data sources. Those connectors\nare called *Memacs modules* or short /module/.\n\nYour agenda automatically gets populated with entries similar to the example shown in the screenshot from [[http://arxiv.org/abs/1304.1332][the white paper]]:\n\n[[file:https://github.com/novoid/screencasts/raw/master/memacs/2012-04-08_Memacs_2008-09-15_archive.png]]\n\nYou can see some demo data using the modulees for SMS, filenamedatestamps, Twitter, RSS, imap, phonecalls, and git.\n\n- *target group*: Users of  [[http://en.wikipedia.org/wiki/Emacs][Emacs]] and [[http://orgmode.org/][Org mode]]\n- *skills necessary*: creating/modifying shell script code; creating\n  scheduled tasks\n- *project hosted on* https://github.com/novoid/Memacs\n\n\n** Table of Contents\n- [[#installation][Installation]]\n- [[#getting-started][Getting started]]\n- [[#workflows][Workflows]]\n- [[#memacs-modules][Memacs modules]]\n- [[#changelog][Changelog]]\n- [[#example-story][Example story]]\n- [[#background][Background]]\n- [[#contribute][Contribute]]\n- [[#license][License]]\n\n** Installation\n\n*** Install using Pip\n\nThe easiest way of installing Memacs is by using `pip`:\n\n: pip install memacs[all]\n\nThis gets you the whole set of modules with all dependencies on your system.\n\nIf you would like to define the dependencies more fine-grained, you\ncan use one or more of the extras: =gps=, =rss=, =ical=, =lastfm=,\n=battery=, or =twitter= like the following example:\n\n: pip install memacs[gps,rss]\n\n*** Manual Setup from Git\n\nIn case you prefer to set the environment \"the old way\", you can do it manually:\n\n- clone or download repository from github\n- make sure to use *Python version 3*\n- create a virtualenv or\n- export/set ~PYTHONPATH~\n\n: PYTHONPATH=/path/to/memacs\n\n- install dependencies\n\n: pip install -r requirements.txt\n\n** Getting Started\n\nThe basic concept of using a Memacs module is following:\n\n1. Choose a Memacs module you want to use and set it up:\n   - Read the module descripion files in the ~docs~ folder.\n   - Each [[#memacs-modules][module]] shares global options but also comes with its very\n     own set of custom arguments.\n   - Manually start the module of your choice from the ~bin~ folder of\n     Memacs with the argument ~--help~, e.g. ~bin/memacs_csv.py\n     --help~ in your command line in order to get an overview of the\n     arguments of this module.\n   - You probably want to *develop and test a script (=.bat= or =.sh=)\n     for the module invocation* in the command line and ...\n2. When this script works as expected, set up a periodical invocation\n   so that your data gets converted to Org mode via Memacs regularily.\n   - This is usually done via operating system dependent methods:\n     - Windows: [[https://docs.microsoft.com/en-us/windows/desktop/taskschd/task-scheduler-start-page][Task Scheduler]]\n     - GNU/Linux: [[https://en.wikipedia.org/wiki/Cron][cron job]] or via [[https://wiki.archlinux.org/index.php/Systemd/Timers][systemd]]\n     - macOS: [[http://www.launchd.info/][launchd]]\n3. For an update from a running instance of Emacs, independent of a\n   recurrent schedule (e.g., Memacs' photo module after returning from\n   an excursion), you may add a key binding to Emacs, e.g. =C-c m p=\n   to your configuration\n\n   #+begin_src emacs-lisp\n     (defun mp-update-memacs-photos ()\n       \"An extra (i.e., not cron-scheduled) run of Memacs' photo module.\"\n       (interactive)\n\t (shell-command\n\t   (format \"~/org/update-memacs-photos.sh\")\n\t )\n     )\n\n     (global-set-key (kbd \"C-c m p\") 'mp-update-memacs-photos)\n   #+end_src\n\n   The script called requires the provision of the executable bit.\n   Additional background of this technique is compiled by Mickey\n   Petersen in [[https://www.masteringemacs.org/article/mastering-key-bindings-emacs][Mastering Key Bindings in Emacs]].\n4. Think of another Memacs module you might want to try ;-)\n\nPlease make sure you also read the [[docs/FAQs_and_Best_Practices.org][FAQ's and best practices]], as it\ncontains many tips and tricks on how to meet your requirements and on\nhow to choose a reasonable setup.\n\n** Workflows\n\nHere are some workflows just to give you an initial impression how\nMemacs may give you much for digital fun.\n\n*** The Basics\n\nWhen one or more Memacs modules are set-up and data starts flowing in\nto your Memacs Org mode files, you have many options to use Memacs for\nyour personal workflows.\n\nThe most basic thing that changes with Memacs is that you might want\nto see Memacs-processed data in your agenda:\n\nEither you are generating (1) Org mode files that are within your\n[[https://orgmode.org/manual/Agenda-files.html][agenda files]] or you are generating (2) [[https://orgmode.org/manual/Archiving.html#Archiving][archive files]] whose more or\nless empty Org mode file stub is within your agenda files (as\ndescribed in the [[https://github.com/novoid/Memacs/blob/master/docs/FAQs_and_Best_Practices.org#performance-and-scalability][FAQs]]).\n\nThis way, the generated time-stamp information gets into your normal\nagenda (1) or in the [[https://orgmode.org/manual/Agenda-commands.html][extended in archives-mode]] (by pressing =v A= in\nyour agenda) that also shows content of the archive files (2).\n\n*** Filename Time-Stamp and Friends\n\nA Memacs feature I personally use all the time provides a somewhat\nmore complex workflow whose basic data is provided by the [[docs/memacs_filenametimestamps.org][filename\ntime-stamp module]]. The module indexes all my files that contain\nISO-datestamps or ISO-timestamps in their file names just like\n[[http://linux-sxs.org/utilities/updatedb.html][updatedb]] does for \"locate\".\n\nThe fun starts, when this module is set-up and the file index is\ngenerated (nightly). With the elisp snippets mentioned in the module\ndocumentation, I am able to link to any of those files just by\nspecifying their file name. This links never get broken since it does\nnot matter in which folder files are located in any more.\n\nPlease refer to [[https://github.com/novoid/dot-emacs/blob/master/config.org#handling-tsfile-links-memacs][my Emacs configuration]] and look out for all\noccurrences of =tsfile= (time-stamp file) which is my custom link for\nthose files.\n\nI even extended this workflow such that my [[https://github.com/novoid/lazyblorg][blog system]] is able to [[https://github.com/novoid/lazyblorg/wiki/Images#embedding-tsfile-image-files][link\nto =tsfile:= images]] independent of their location. Awesome stuff.\n\n** Memacs Modules\n\n- [[docs/memacs_arbtt.org][arbtt]]\n- [[docs/memacs_battery.org][battery]]\n- [[docs/memacs_csv.org][csv]]\n- [[docs/memacs_filenametimestamps.org][filenametimestamps]]\n- [[file:docs/memacs_firefox_history.org][firefox_history]]\n- [[file:docs/memacs_chrome_history.org][chrome_history]]\n- [[docs/memacs_git.org][git]]\n- [[docs/memacs_gpx.org][gpx]]\n- [[docs/memacs_ical.org][ical]]\n- [[docs/memacs_imap.org][imap]]\n- [[docs/memacs_lastfm.org][lastfm]]\n- [[docs/memacs_mumail.org][mu]]\n- [[docs/memacs_phonecalls.org][phonecalls]]\n- [[docs/memacs_photos.org][photos]]\n- [[docs/memacs_rss.org][rss]]\n- [[docs/memacs_simplephonelogs.org][simplephonelogs]]\n- [[docs/memacs_sms.org][sms]]\n- [[docs/memacs_svn.org][svn]]\n- [[docs/memacs_twitter.org][twitter]]\n- [[docs/memacs_whatsapp.org][whatsapp]]\n- [[docs/memacs_kodi.org][KODI logs]]\n\nThis module is an example for developers: [[docs/memacs_csv.org]]\n\nThose modules are *not* adopted to the new unified framework yet:\n\n- [[tmp/emails/maildir/memacs-maildir.org][maildir]]\n- [[tmp/emails/mbox/memacs-mbox.org][mbox]] (also useful for newsgroups)\n  - see also [[tmp/emails/mbox/works-for-me-hack/memacs-mbox.org]]\n\n- *bank account*:\n  - [[http://www.easybank.at][easybank.at]]: see [[tmp/bank_statements/easybank.at/memacs-easybank.org]]\n\n- *newsgroups*\n  - *[[http://en.wikipedia.org/wiki/Slrn][slrn]]*: see [[tmp/emails/mbox/works-for-me-hack/memacs-mbox.org]]\n\nFollowing modules exist as a rough idea only and might get implemented\nsome day (by you?):\n\n- *[[http://karl-voit.at/tagstore/][tagstore]]*: see [[tmp/tagstore/memacs-tagstore.org]]\n\n- *calendar*:\n  - [[http://www.jpilot.org/][JPilot]]-datebook: see [[tmp/calendars/memacs-jpilot-datebook.org]]\n\n- *tasks*:\n  - [[http://www.jpilot.org/][JPilot]]-todos: see [[tmp/tasklists/jpilot-todos/memacs-jpilot-todos.org]]\n\n- *blog_systems*:\n  - [[http://en.wikipedia.org/wiki/Serendipity_(weblog_software)][Serendipity]]: see [[tmp/blog_systems/serendipity/memacs-serendipity.org]]\n\n** Changelog\n\n- Version 2020.06.05.1\n  - Features\n    - New module: [[https://github.com/novoid/Memacs/blob/master/docs/memacs_kodi.org][memacs_kodi]]\n    - Andrea Ghensi [[https://github.com/novoid/Memacs/pull/100][provided an improved pip setup method]]\n  - Bugfixes\n    - fix chrome.py output to include url and title for org headings\n    - many improvements for the Chrome module\n    - filenametimestamps: fixed check_datestamp_correctness ([[https://github.com/novoid/Memacs/issues/97][#97]])\n\n- Version 2019.11.06.1\n  - Features\n    - [[https://github.com/novoid/orgformat][orgformat is now an external library]]\n  - Bugfixes\n    - Fix problems when locale is not en_US\n\n- Versions prior to 2019-10-09.1 are not documented using this\n  changelog. Please read the git commit messages.\n\n* Example Story\n\nImagine you are already using Memacs.\n\nWhen remembering that day, when you joined an interesting talk about\n«[[http://en.wikipedia.org/wiki/Getting_Things_Done][Getting Things Done]]» (GTD), you start up your GNU Emacs with your main\nOrg mode file. There you go to the Agenda-view and select this\nspecific day a couple of months ago.\n\nThere it is, from 2pm to 3pm you scheduled this talk in your calendar.\nAnd then you realize that within this time frame, there appear some\n[[http://en.wikipedia.org/wiki/Jpeg][JPEG files]] containing an [[http://www.cl.cam.ac.uk/~mgk25/iso-time.html][ISO 8601]] time stamp[1] are indexed by one\nmodule. (filenametimestamp-module)\n\nThis image contains a slide you found interesting and which you\nphotographed using your sleek smartphone. Who would remember having\ntaken a picture during a talk?\n\nTen minutes after the talk you wrote a short message on [[http://Twitter.com][Twitter]] where\nyou mentioned useful URLs for your followers. This time those URLs are\nhandy for yourself too! (Twitter-module)\n\nOn the evening of that day you see an entry of an incoming email from\nthe author of the talk. Now you remember having had a cool\nconversation at the end of the talk where he promised you some\nadditional information about that nice little GTD tool on his\ncomputer. Great that you got that link to that email too. Without\nMemacs you would probably never remembered that email again.\n(Maildir-module)\n\nAnd then there were some bookmarks you saved this day, almost all\nrelated to great ideas you got from the GTD talk. (delicious-module)\n\nThis small story shows only a few use cases where different modules\ncombine given data sources and their information to provide an overall\nview related to an event. Since Org mode has got links, no actual data\nhas to be duplicated (except the meta data extracted by Memacs).\nEmails, files, bookmarks, and so forth are linked rather than copied.\n\n[1] with periods instead of colons - just because the [[http://msdn.microsoft.com/en-us/library/aa365247(v%3Dvs.85).aspx#naming_conventions][ancient\nlimitations of Microsoft based file systems]]; like «2011-02-14T14.35.42\nideas.jpg»\n\n* Background\n\nIn 1945, [[http://en.wikipedia.org/wiki/Vannevar_Bush][Vannevar Bush]] wrote a famous article «[[http://en.wikipedia.org/wiki/As_We_May_Think][As We May Think]]» where\nhe develops the idea of having a «memory extender» called *Memex*. The\nmemex can store all letters, books, and other information which are\nrelated to a person.\n\nBesides having foreseen several technologies like hypertext, he\ndefined a device that holds all metadata and data and provides\nassociative trails to access information.\n\nIn the last decade of the previous century Microsoft Research had a\nresearch program that resulted in [[http://en.wikipedia.org/wiki/MyLifeBits][MyLifeBits]]. This software tried to\nstore each information of the user like office documents, screenshots,\nname of active windows on the desktop computer, and even automatically\ntook photographs ([[http://en.wikipedia.org/wiki/Sensecam][SenseCam]]). This word did not result in any (open)\nsoftware product. Bell and Gemmell wrote a book called «[[http://www.amazon.de/gp/product/0525951342/ref%3Das_li_ss_tl?ie%3DUTF8\u0026tag%3Dkarlssuder-21\u0026linkCode%3Das2\u0026camp%3D1638\u0026creative%3D19454\u0026creativeASIN%3D0525951342][Total Recall]]».\n\nThe Memacs project tries to implement the ideas of Vannevar Bush's\nvision with open source and open standards. Hence, it's name «Memacs»\nis the obvious combination of «[[http://www.gnu.org/software/emacs/][GNU Emacs]]» and «Memex».\n\nMemacs uses GNU Emacs Org mode to visualize and access information\nextracted by Memacs modules: using tags, time stamps, full text\nsearch, and so forth GNU Emacs is able to derive different\nviews. The most important view probably is the [[http://orgmode.org/org.html#Agenda-Views][Agenda-view]] where you\ncan see anything that happened during a specific day/week/month\naccording to the time frame selected. But you can derive other views\ntoo. For example you can choose to generate a condensed search result\nusing a [[http://en.wikipedia.org/wiki/Boolean_algebra_(logic)][boolean combination]] of tags.\n\nRelated to Memacs, the project founder developed a research software\ncalled *[[http://karl-voit.at/tagstore/][tagstore]]*. This system allows users to store (local) files\nusing tags without a hierarchy of folders. As a natural extension,\ntagstore targets associative access for (local) files. You might want\nto check out tagstore too. Memacs and tagstore are a very useful\ncombination.\n\nIf you do like to know how to efficiently organize digital files in a\nsimple and operating system independent way, read [[http://karl-voit.at/managing-digital-photographs/][this blog post]] from\nKarl. It might give you ideas for your workflows as well.\n\nKarl also wrote [[http://arxiv.org/abs/1304.1332][a whitepaper on Memacs]] which describes Memacs from a\nscientists point of view.\n\n* Similar Projects\n\n- In https://github.com/novoid/Memacs/issues/88, Alex links to a\n  browser extension from [[https://worldbrain.io/][WorldBrain]] called [[https://github.com/WorldBrain/Memex][Memex]].\n- https://github.com/karlicoss/orger has similar goals: converting\n  data into Org mode\n\n* Contribute! We are looking for your ideas:\n\nIf you want to contribute to this cool project, please fork and\ncontribute or write an additional module!\n\nSee [[docs/FAQs_and_Best_Practices.org]] for more developing information.\n\nWe are sure that there are a *lot* of cool ideas for other modules out\nthere! This is just the beginning!\n\nMemacs is designed with respect to minimal effort for new modules.\n\nWe are using [[http://www.python.org/dev/peps/pep-0008/][Python PEP8]] and [[http://en.wikipedia.org/wiki/Test-driven_development][Test Driven Development (TDD)]].\n\n* License\n\nMemacs is licensed under the GPLv3 [[license.txt][license]].\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnovoid%2Fmemacs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnovoid%2Fmemacs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnovoid%2Fmemacs/lists"}