{"id":13646413,"url":"https://github.com/emacs-dashboard/emacs-dashboard","last_synced_at":"2025-05-15T12:06:27.108Z","repository":{"id":37382140,"uuid":"72868989","full_name":"emacs-dashboard/emacs-dashboard","owner":"emacs-dashboard","description":"An extensible emacs dashboard","archived":false,"fork":false,"pushed_at":"2025-05-09T21:53:18.000Z","size":1167,"stargazers_count":1395,"open_issues_count":71,"forks_count":140,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-05-09T22:31:06.122Z","etag":null,"topics":["elisp","emacs","startpage"],"latest_commit_sha":null,"homepage":"","language":"Emacs Lisp","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/emacs-dashboard.png","metadata":{"files":{"readme":"README.org","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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},"funding":{"github":["emacs-dashboard","jcs090218"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2016-11-04T17:12:59.000Z","updated_at":"2025-05-09T21:53:21.000Z","dependencies_parsed_at":"2023-10-11T01:57:10.811Z","dependency_job_id":"e0e12b74-b228-4646-99cb-57b285d47158","html_url":"https://github.com/emacs-dashboard/emacs-dashboard","commit_stats":{"total_commits":516,"total_committers":95,"mean_commits":5.431578947368421,"dds":0.5329457364341086,"last_synced_commit":"946b9957470a3cac6b089bdf2d9edd07a29fcc9c"},"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacs-dashboard%2Femacs-dashboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacs-dashboard%2Femacs-dashboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacs-dashboard%2Femacs-dashboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacs-dashboard%2Femacs-dashboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emacs-dashboard","download_url":"https://codeload.github.com/emacs-dashboard/emacs-dashboard/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254337613,"owners_count":22054253,"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":["elisp","emacs","startpage"],"created_at":"2024-08-02T01:02:55.008Z","updated_at":"2025-05-15T12:06:22.085Z","avatar_url":"https://github.com/emacs-dashboard.png","language":"Emacs Lisp","funding_links":["https://github.com/sponsors/emacs-dashboard","https://github.com/sponsors/jcs090218"],"categories":["Emacs Lisp"],"sub_categories":[],"readme":"[[https://www.gnu.org/licenses/gpl-3.0][https://img.shields.io/badge/License-GPL%20v3-blue.svg]]\n[[https://jcs-emacs.github.io/jcs-elpa/#/dashboard][https://raw.githubusercontent.com/jcs-emacs/badges/master/elpa/v/dashboard.svg]]\n[[https://melpa.org/#/dashboard][https://melpa.org/packages/dashboard-badge.svg]]\n[[https://stable.melpa.org/#/dashboard][https://stable.melpa.org/packages/dashboard-badge.svg]]\n\n* Emacs Dashboard\n\n[[https://github.com/emacs-dashboard/emacs-dashboard/actions/workflows/test.yml][https://github.com/emacs-dashboard/emacs-dashboard/workflows/CI/badge.svg]]\n[[https://github.com/emacs-dashboard/emacs-dashboard/actions/workflows/activate.yml][https://github.com/emacs-dashboard/emacs-dashboard/workflows/Activate/badge.svg]]\n\nAn extensible emacs startup screen showing you what's most important.\n\n* Features\n1. Displays an awesome Emacs banner!\n2. Recent files\n3. Bookmarks list\n4. Recent projects list (Depends on `projectile` or `project.el` package)\n5. Org mode agenda\n6. Register list\n7. Supports both [[https://github.com/domtronn/all-the-icons.el][all-the-icons]] and [[https://github.com/rainstormstudio/nerd-icons.el][nerd-icons]]\n\n* Screenshot\n\n[[./etc/screenshot.png]]\n\n* Dependencies\nYou will need the following packages which are all available on MELPA:\n\n1. [[https://github.com/purcell/page-break-lines][page-break-lines]] (optional)\n2. [[https://github.com/bbatsov/projectile][projectile]] (optional)\n3. [[https://github.com/domtronn/all-the-icons.el][all-the-icons]] (optional)\n4. [[https://github.com/rainstormstudio/nerd-icons.el][nerd-icons]] (optional)\n\n* Usage\n\n#+BEGIN_SRC shell\n  M-x package-install RET dashboard\n#+END_SRC\n\n** Open the Dashboard\nYou can set up the dashboard to open automatically at startup using =dashboard-setup-startup-hook=:\n#+BEGIN_SRC elisp\n  (require 'dashboard)\n  (dashboard-setup-startup-hook)\n#+END_SRC\n\nOr with use-package:\n#+BEGIN_SRC elisp\n  ;; use-package with package.el:\n  (use-package dashboard\n    :ensure t\n    :config\n    (dashboard-setup-startup-hook))\n#+END_SRC\n\n#+BEGIN_SRC elisp\n  ;; use-package with Elpaca:\n  (use-package dashboard\n    :elpaca t\n    :config\n    (add-hook 'elpaca-after-init-hook #'dashboard-insert-startupify-lists)\n    (add-hook 'elpaca-after-init-hook #'dashboard-initialize)\n    (dashboard-setup-startup-hook))\n#+END_SRC\n\nAlternatively, if you don't want the dashboard to open by default, you can use the interactive function =dashboard-open= to open it when you do want it.\n\nBy default, the dashboard will show three lists, recent files and bookmarks and org-agenda items.\n\nThe widget “projects”, which shows a list of recent projects, is not enabled\nby default since it depends on packages that might not be available.  To\nactivate the widget, set the variable =dashboard-projects-backend= to either\n='projectile= (projectile, available from melpa) or ='project-el= (project.el,\navailable from GNU elpa), then add an entry like\n=(projects . 5)= to the variable =dashboard-items=.\n\nThe function =dashboard-refresh-buffer= (an alias for =dashboard-open=) can be used to visit and refresh the dashboard.\n\n** Emacs Daemon\n\nIn addition to the above, configure =initial-buffer-choice= to show\nDashboard in frames created with =emacsclient -c= as follows:\n\n#+BEGIN_SRC elisp\n  (setq initial-buffer-choice (lambda () (get-buffer-create dashboard-buffer-name)))\n#+END_SRC\n\n* Configuration\n\nTo update the banner or banner title\n\n#+BEGIN_SRC elisp\n  ;; Set the title\n  (setq dashboard-banner-logo-title \"Welcome to Emacs Dashboard\")\n  ;; Set the banner\n  (setq dashboard-startup-banner [VALUE])\n  ;; Value can be:\n  ;;  - 'official which displays the official emacs logo.\n  ;;  - 'logo which displays an alternative emacs logo.\n  ;;  - an integer which displays one of the text banners\n  ;;    (see dashboard-banners-directory files).\n  ;;  - a string that specifies a path for a custom banner\n  ;;    currently supported types are gif/image/text/xbm.\n  ;;  - a cons of 2 strings which specifies the path of an image to use\n  ;;    and other path of a text file to use if image isn't supported.\n  ;;    (cons \"path/to/image/file/image.png\" \"path/to/text/file/text.txt\").\n  ;;  - a list that can display an random banner,\n  ;;    supported values are: string (filepath), 'official, 'logo and integers.\n\n  ;; Content is not centered by default. To center, set\n  (setq dashboard-center-content t)\n  ;; vertically center content\n  (setq dashboard-vertically-center-content t)\n\n  ;; To disable shortcut \"jump\" indicators for each section, set\n  (setq dashboard-show-shortcuts nil)\n#+END_SRC\n\nTo customize which items are displayed, you can use the following snippet\n#+BEGIN_SRC elisp\n  (setq dashboard-items '((recents   . 5)\n                          (bookmarks . 5)\n                          (projects  . 5)\n                          (agenda    . 5)\n                          (registers . 5)))\n#+END_SRC\nThis will add the recent files, bookmarks, projects, org-agenda and registers widgets to your dashboard each displaying 5 items.\n\nTo customize which widgets to display in order (example: Banner, footer message ...):\n#+begin_src emacs-lisp\n  (setq dashboard-startupify-list '(dashboard-insert-banner\n                                    dashboard-insert-newline\n                                    dashboard-insert-banner-title\n                                    dashboard-insert-newline\n                                    dashboard-insert-navigator\n                                    dashboard-insert-newline\n                                    dashboard-insert-init-info\n                                    dashboard-insert-items\n                                    dashboard-insert-newline\n                                    dashboard-insert-footer))\n#+end_src\nSee dashboard-startupify-list for all the widgets avalaibles.\n\nTo enable cycle navigation between each section:\n#+begin_src emacs-lisp\n  (setq dashboard-navigation-cycle t)\n#+end_src\n\nTo customize string format in shortcuts:\n#+begin_src emacs-lisp\n  (setq dashboard-heading-shorcut-format \" [%s]\")\n#+end_src\n\nTo customize item shortcuts:\n#+BEGIN_SRC elisp\n  (setq dashboard-item-shortcuts '((recents   . \"r\")\n                                   (bookmarks . \"m\")\n                                   (projects  . \"p\")\n                                   (agenda    . \"a\")\n                                   (registers . \"e\")))\n#+END_SRC\n\nTo modify the widget heading name:\n#+BEGIN_SRC elisp\n  (setq dashboard-item-names '((\"Recent Files:\"               . \"Recently opened files:\")\n                               (\"Agenda for today:\"           . \"Today's agenda:\")\n                               (\"Agenda for the coming week:\" . \"Agenda:\")))\n#+END_SRC\n\nTo use ~all-the-icons~ package:\n#+BEGIN_SRC emacs-lisp\n  (setq dashboard-icon-type 'all-the-icons)  ; use `all-the-icons' package\n#+END_SRC\n\nTo use ~nerd-icons~ package:\n#+BEGIN_SRC emacs-lisp\n  (setq dashboard-display-icons-p t)     ; display icons on both GUI and terminal\n  (setq dashboard-icon-type 'nerd-icons) ; use `nerd-icons' package\n#+END_SRC\n\nTo add icons to the widget headings and their items:\n#+BEGIN_SRC elisp\n  (setq dashboard-set-heading-icons t)\n  (setq dashboard-set-file-icons t)\n#+END_SRC\n\nTo modify heading icons with another icon from all-the-icons octicons:\n#+BEGIN_SRC elisp\n  (dashboard-modify-heading-icons '((recents   . \"file-text\")\n                                    (bookmarks . \"book\")))\n#+END_SRC\n\nTo modify heading icons with another icon from nerd-icons octicons:\n#+BEGIN_SRC emacs-lisp\n  (dashboard-modify-heading-icons '((recents   . \"nf-oct-file_text\")\n                                    (bookmarks . \"nf-oct-book\")))\n#+END_SRC\n\nTo modify the icon height or vertical adjust:\n#+BEGIN_SRC emacs-lisp\n  (setq dashboard-icon-file-height 1.75)\n  (setq dashboard-icon-file-v-adjust -0.125)\n  (setq dashboard-heading-icon-height 1.75)\n  (setq dashboard-heading-icon-v-adjust -0.125)\n#+END_SRC\n\nTo customize the buttons of the navigator like this:\n#+BEGIN_SRC emacs-lisp\n  ;; Format: \"(icon title help action face prefix suffix)\"\n  (setq dashboard-navigator-buttons\n        `(;; line1\n          ((,(all-the-icons-octicon \"mark-github\" :height 1.1 :v-adjust 0.0)\n            \"Homepage\"\n            \"Browse homepage\"\n            (lambda (\u0026rest _) (browse-url \"homepage\")))\n           (\"★\" \"Star\" \"Show stars\" (lambda (\u0026rest _) (show-stars)) warning)\n           (\"?\" \"\" \"?/h\" #'show-help nil \"\u003c\" \"\u003e\"))\n          ;; line 2\n          ((,(all-the-icons-faicon \"linkedin\" :height 1.1 :v-adjust 0.0)\n            \"Linkedin\"\n            \"\"\n            (lambda (\u0026rest _) (browse-url \"homepage\")))\n           (\"⚑\" nil \"Show flags\" (lambda (\u0026rest _) (message \"flag\")) error))))\n#+END_SRC\n\nTo use it with [[https://github.com/ericdanan/counsel-projectile][counsel-projectile]] or [[https://github.com/bbatsov/persp-projectile][persp-projectile]]\n\n#+begin_src elisp\n  (setq dashboard-projects-switch-function 'counsel-projectile-switch-project-by-name)\n#+end_src\n\nOr\n\n#+begin_src elisp\n  (setq dashboard-projects-switch-function 'projectile-persp-switch-project)\n#+end_src\n\nPlease check the [[./docs/variables-and-functions.org][complete list of variables and functions]].\n** Org mode’s agenda\n\nTo display today’s agenda items on the dashboard, add ~agenda~ to ~dashboard-items~:\n\n#+BEGIN_SRC elisp\n  (add-to-list 'dashboard-items '(agenda) t)\n#+END_SRC\n\nTo show agenda for the upcoming seven days set the variable ~dashboard-week-agenda~ to ~t~.\n#+BEGIN_SRC elisp\n  (setq dashboard-week-agenda t)\n#+END_SRC\n\nBy default org-agenda entries are filter by time, only showing those\ntask with ~DEADLINE~, ~SCHEDULE-TIME~ or ~TIMESTAMP~ . To show all agenda entries\n(except ~DONE~)\n\n#+begin_src elisp\n  (setq dashboard-filter-agenda-entry 'dashboard-no-filter-agenda)\n#+end_src\n\nTo have an extra filter, ~MATCH~ parameter is exposed as\n~dashboard-match-agenda-entry~ variable, by default is ~nil~\n#+begin_quote\n‘MATCH’ is a tags/property/TODO match. Org iterates only matched\nheadlines. Org iterates over all headlines when MATCH is nil or t.\n#+end_quote\n\nSee [[https://orgmode.org/manual/Using-the-Mapping-API.html][Org Manual]] for more information.\n\nOnce the agenda appears in the dashboard, ~org-agenda-files~ stay\nopen. With ~(setq dashboard-agenda-release-buffers t)~ the org files\nare close. Note that this could slow down the dashboard buffer refreshment.\n\n*** Agenda sort\n\nAgenda is now sorted with ~dashboard-agenda-sort-strategy~ following\nthe idea of [[https://orgmode.org/worg/doc.html#org-agenda-sorting-strategy][org-agenda-sorting-strategy]]. Suported strategies are\n~priority-up~, ~priority-down~, ~time-up~, ~time-down~, ~todo-state-up~ and ~todo-state-down~\n\n*** Agenda format\n\nTo personalize the aspect of each entry, there is\n~dashboard-agenda-prefix-format~ which initial value is\n~\" %i %-12:c %-10s \"~ where ~%i~ is the icon category of the item (see\n[[https://orgmode.org/worg/doc.html#org-agenda-category-icon-alist][org-agenda-category-icon-alist]]), ~%-12:c~ gives the category a 12\nchars wide field and append a colon to the category. A similar padding\nbut for a 10 wide field is ~%-10s~ that is for the scheduling or\ndeadline information. For more information see [[https://orgmode.org/worg/doc.html#org-agenda-prefix-format][org-agenda-prefix-format]].\n\nDeadline or Scheduling time will be formatted using\n~dashboard-agenda-time-string-format~ and the keywords (TODO, DONE)\nrespect [[https://orgmode.org/worg/doc.html#org-agenda-todo-keyword-format][org-agenda-todo-keyword-format]].\n\n*** Agenda tags\n\nTo customize the tags format there is a variable\n~dashboard-agenda-tags-format~. This variable could be any function that\nreceives the tags directly from ~org-get-tags~. By default\n~dashboard-agenda-tags-format~ is set to ~identity~. To hide the\ntags set the variable to ~ignore~: ~(setq dashboard-agenda-tags-format 'ignore)~\nor to ~nil~.\n\n** FAQ\n\nCheck out our [[./docs/FAQ.org][Frequently Asked Questions]].\n\n** Faces\n\nIt is possible to customize Dashboard's appearance using the following faces:\n\n- ~dashboard-banner-logo-title~ ::\n  Highlights the banner title.\n- ~dashboard-text-banner~ ::\n  Highlights text banners.\n- ~dashboard-heading~ ::\n  Highlights widget headings.\n- ~dashboard-items-face~ ::\n  Highlights widget items.\n\n* Shortcuts\n\nYou can use any of the following shortcuts inside Dashboard\n\n|----------------------------+------------------|\n| Shortcut                   | Function         |\n|----------------------------+------------------|\n| Tab Or C-i                 | Next Item        |\n| Shift-Tab                  | Previous Item    |\n| Return / Mouse Click / C-m | Open             |\n| r                          | Recent files     |\n| m                          | Bookmarks        |\n| p                          | Projects         |\n| a                          | Org-Mode Agenda  |\n| e                          | Registers        |\n| g                          | Refresh contents |\n| {                          | Previous section |\n| }                          | Next section     |\n|----------------------------+------------------|\n\n* Wish List\n1. [X] Center content\n2. [X] More banner options\n3. [X] Customizing the list of widgets to display\n4. [X] Integrate Org-mode's agenda\n5. [ ] Listing Perspectives\n\n* Contributions\n\nTo contribute your changes to this package, please do the following:\n\n1. Fork the repo\n2. Clone a local copy\n3. Make your changes\n4. Push and create your PR\n\nWhen working on this package, it's typical to uninstall dashboard,\ndevelop your changes and then install this as \"development version\".\n\nThis is accomplished with the following steps:\n\n#+BEGIN_SRC shell\n  # In emacs:\n  M-x package-delete dashboard-\u003cversion\u003e RET\n#+END_SRC\n\n#+BEGIN_SRC shell\n  make package\n  make install\n#+END_SRC\n\nOr, you can use [[https://github.com/emacs-eask/cli][Eask]] to set up\nthe development environment, so there's no need to delete your local ~dashboard~.\n\nInstall all dependencies and development dependencies:\n\n#+BEGIN_SRC shell\n  eask install-deps --dev\n#+END_SRC\n\nTo test the package's installation:\n\n#+BEGIN_SRC shell\n  eask package\n  eask install\n#+END_SRC\n\nTo test compilation:\n\n#+BEGIN_SRC shell\n  eask compile\n#+END_SRC\n\n🪧 The following steps are optional, but we recommend you follow these lint results!\n\nThe built-in ~checkdoc~ linter:\n\n#+BEGIN_SRC shell\n  eask lint checkdoc\n#+END_SRC\n\nThe standard ~package~ linter:\n\n#+BEGIN_SRC shell\n  eask lint package\n#+END_SRC\n\n/📝 P.S. For more information, find the Eask manual at https://emacs-eask.github.io/.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femacs-dashboard%2Femacs-dashboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femacs-dashboard%2Femacs-dashboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femacs-dashboard%2Femacs-dashboard/lists"}