(define-module (oni packages emacs-config)
  #:use-module (guix packages)
  #:use-module (guix git-download)
  #:use-module (guix build-system emacs)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (gnu packages emacs-xyz)
  #:use-module (gnu packages llvm)
  #:use-module (gnu packages cmake)
  #:use-module (gnu packages bash)
  #:use-module ((gnu packages mail)
                #:select (emacs-notmuch))
  #:use-module ((gnu packages python-xyz)
                #:select (python-black))
  #:use-module ((gnu packages tree-sitter)
                #:select (tree-sitter-python))
  #:use-module (oni packages emacs))

(define-public emacs-oni-config
  (let ((commit "0fc53aec356daafd14aa6e8a192d37975863e394")
        (revision "0"))
    (package
      (name "emacs-oni-config")
      (version (git-version "0.0.1" revision commit))
      (source
       (origin
         (method git-fetch)
         (uri (git-reference
               (url "https://code.ryuslash.org/ryuslash/emacs-config.git")
               (commit commit)))
         (file-name (git-file-name name version))
         (sha256
          (base32 "11gypfc2z9cz144k93dwkaqvhw4y3dcja13i4c147y39lml9xgxg"))))
      (build-system emacs-build-system)
      (home-page "https://code.ryuslash.org/ryuslash/emacs-config/")
      (synopsis "My Emacs configuration")
      (description "This package provides my configuration for emacs")
      (license license:gpl3+))))

(define-public emacs-oni-vterm
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-vterm")
   (arguments
    '(#:include '("oni-vterm.el")))
   (propagated-inputs
    `(("emacs-vterm" ,emacs-vterm)))
   (synopsis "My Emacs vterm configuration")
   (description "This package provides my configuration for emacs-vterm")))

(define-public emacs-oni-ui
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-ui")
   (arguments
    '(#:include '("oni-ui.el")))
   (propagated-inputs
    (list emacs-beacon
          emacs-diminish))
   (synopsis "My Emacs vterm configuration")
   (description "This package provides my configuration for emacs-vterm")))

(define-public emacs-oni-gui
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-gui")
   (arguments
    '(#:include '("oni-gui.el")))
   (propagated-inputs
    (list emacs-oni-ui
          emacs-oni-hydra
          emacs-yoshi-theme
          emacs-diminish))
   (synopsis "My Emacs vterm configuration")
   (description "This package provides my configuration for emacs-vterm")))

(define-public emacs-oni-elfeed
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-elfeed")
    (arguments
     '(#:include '("oni-elfeed.el")))
    (propagated-inputs
     `(("emacs-elfeed" ,emacs-elfeed)))
    (synopsis "My Emacs elfeed configuration")
    (description "This package provides my configuration for emacs-elfeed")))

(define-public emacs-oni-magit
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-magit")
    (arguments
     '(#:include '("oni-magit.el")))
    (propagated-inputs
     (list emacs-magit
           emacs-magit-popup
           emacs-oni-hydra))
    (synopsis "My Emacs elfeed configuration")
    (description "This package provides my configuration for emacs-elfeed")))

(define-public emacs-oni-alert
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-alert")
   (arguments
    '(#:include '("oni-alert.el")))
   (propagated-inputs
    `(("emacs-alert" ,emacs-alert)))
   (synopsis "My Emacs alert configuration")
   (description "This package provides my configuration for emacs-alert")))

(define-public emacs-oni-bookmark
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-bookmark")
   (arguments
    '(#:include '("oni-bookmark.el")))
   (synopsis "My Emacs bookmark configuration")
   (description "This package provides my configuration for the bookmark library
in Emacs")))

(define-public emacs-oni-lui
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-lui")
   (arguments
    '(#:include '("oni-lui.el")))
   (propagated-inputs
    `(("emacs-circe" ,emacs-circe)))
   (synopsis "My Emacs Line-UI configuration")
   (description "This package provides my configuration for the lui library in
Emacs")))

(define-public emacs-oni-circe
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-circe")
   (arguments
    '(#:include '("oni-circe.el")))
   (propagated-inputs
    `(("emacs-circe" ,emacs-circe)
      ("emacs-circe-serenityc" ,emacs-circe-serenity)
      ("emacs-oni-lui" ,emacs-oni-lui)
      ("emacs-olivetti" ,emacs-olivetti)))
   (synopsis "My Emacs Circe configuration")
   (description "This package provides my configuration for emacs-circe")))

(define-public emacs-oni-embrace
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-embrace")
    (arguments
     '(#:include '("oni-embrace.el")))
    (propagated-inputs
     `(("emacs-embrace" ,emacs-embrace)))
    (synopsis "My Emacs Embrace configuration")
    (description "This package provides my configuration for emacs-embrace")))

(define-public emacs-oni-hydra
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-hydra")
    (arguments
     '(#:include '("oni-hydra.el")))
    (propagated-inputs
     `(("emacs-hydra" ,emacs-hydra)
       ("emacs-posframe" ,emacs-posframe)))
    (synopsis "My Emacs Hydra configuration")
    (description "This package provides my configuration for emacs-hydra")))

(define-public emacs-oni-data-dir
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-data-dir")
    (arguments
     '(#:include '("oni-data-dir.el")))
    (synopsis "Data dir configuration")
    (description "Utilities for placing all state files in 'data/' inside my
`user-emacs-directory'.")))

(define-public emacs-oni-core
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-core")
    (arguments
     '(#:include '("oni-core.el")))
    (propagated-inputs
     `(("emacs-oni-data-dir" ,emacs-oni-data-dir)
       ("emacs-oni-embrace" ,emacs-oni-embrace)
       ("emacs-oni-hydra" ,emacs-oni-hydra)
       ("emacs-expand-region" ,emacs-expand-region)
       ("emacs-multiple-cursors" ,emacs-multiple-cursors)
       ("emacs-gcmh" ,emacs-gcmh)
       ("emacs-diminish" ,emacs-diminish)
       ("emacs-ws-butler" ,emacs-ws-butler)
       ("emacs-which-key" ,emacs-which-key)
       ("emacs-insert-char-preview" ,emacs-insert-char-preview)
       ("emacs-mixed-pitch" ,emacs-mixed-pitch)
       ("emacs-ace-window" ,emacs-ace-window)
       ("emacs-vertico" ,emacs-vertico)
       ("emacs-marginalia" ,emacs-marginalia)
       ("emacs-orderless" ,emacs-orderless)
       ("emacs-consult" ,emacs-consult)
       ("emacs-embark" ,emacs-embark)
       ("emacs-docstr" ,emacs-docstr)
       ("emacs-mini-frame" ,emacs-mini-frame)))
    (synopsis "My core Emacs configuration")
    (description "This package provides my core configuration for Emacs")))

(define-public emacs-oni-smartparens
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-smartparens")
   (arguments
    '(#:include '("oni-smartparens.el")))
   (propagated-inputs
    `(("emacs-smartparens" ,emacs-smartparens)))
   (synopsis "My Emacs smartparens configuration")
   (description "This package provides my configuration for Emacs smartparens")))

(define-public emacs-oni-flycheck
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-flycheck")
   (arguments
    '(#:include '("oni-flycheck.el")))
   (propagated-inputs
    `(("emacs-flycheck" ,emacs-flycheck)
      ("emacs-flycheck-posframe" ,emacs-flycheck-posframe)
      ("emacs-flycheck-cask" ,emacs-flycheck-cask)))
   (synopsis "My Emacs flycheck configuration")
   (description "This package provides my configuration for Emacs flycheck")))

(define-public emacs-oni-lsp
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-lsp")
   (arguments
    '(#:include '("oni-lsp.el")))
   (propagated-inputs
    `(("emacs-lsp-mode" ,emacs-lsp-mode)
      ("emacs-lsp-ui" ,emacs-lsp-ui)
      ("emacs-lsp-ivy" ,emacs-lsp-ivy)))
   (synopsis "My Emacs LSP configuration")
   (description "This package provides my configuration for Emacs LSP")))

(define-public emacs-oni-c
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-c")
   (arguments
    '(#:include '("oni-c.el")))
   (propagated-inputs
    `(("emacs-oni-flycheck" ,emacs-oni-flycheck)
      ("emacs-oni-lsp" ,emacs-oni-lsp)
      ("emacs-reformatter" ,emacs-reformatter)
      ("emacs-ccls" ,emacs-ccls)
      ("emacs-rainbow-delimiters" ,emacs-rainbow-delimiters)
      ;; For `clang-format'.
      ("clang" ,clang)))
   (synopsis "My Emacs C coding configuration")
   (description "This package provides my configuration for coding in C")))

(define-public emacs-oni-sh
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-sh")
   (arguments
    '(#:include '("oni-sh.el")))
   (propagated-inputs
    `(("emacs-reformatter" ,emacs-reformatter)
      ("emacs-oni-flycheck" ,emacs-oni-flycheck)
      ("emacs-oni-smartparens" ,emacs-oni-smartparens)
      ;; ("shfmt" ,shfmt)
      ))
   (synopsis "My Emacs Shell coding configuration")
   (description "This package provides my configuration for coding in Shell")))

(define-public emacs-oni-yasnippet
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-yasnippet")
    (arguments
     '(#:include '("oni-yasnippet.el")))
    (propagated-inputs
     `(("emacs-yasnippet" ,emacs-yasnippet)
       ("emacs-yasnippet-snippets" ,emacs-yasnippet-snippets)
       ("emacs-diminish" ,emacs-diminish)))
    (synopsis "My Emacs yasnippet configuration")
    (description "This package provides my configuration for yasnippet")))

(define-public emacs-oni-bats
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-bats")
    (arguments
     `(#:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'chdir-oni-bats
           (λ _ (chdir "oni-bats"))))
       #:include '("\\.el$" "^snippets\\/bats-mode\\/")))
    (propagated-inputs
     `(("emacs-bats" ,emacs-bats)
       ("emacs-oni-sh" ,emacs-oni-sh)
       ("emacs-oni-yasnippet" ,emacs-oni-yasnippet)
       ("bats" ,bats)))
    (synopsis "My Emacs Bats coding configuration")
    (description "This package provides my configuration for coding in Bats")))

(define-public (emacs-oni-org emacs)
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-org")
   (arguments
    `(#:phases
      (modify-phases %standard-phases
                     (add-after 'unpack 'chdir-oni-org
                                (λ _ (chdir "oni-org"))))
      #:include '("\\.el$"
                  "^snippets\\/org-mode\\/"
                  "^capture-templates\\/"
                  "^icons\\/")
      ;; The default #:emacs (emacs-minimal) doesn't include `range.el' and
      ;; throws an error while trying to byte-compile oni-org.
      #:emacs ,emacs))
   (propagated-inputs
    (list emacs-oni-yasnippet
          emacs-oni-hydra
          emacs-org-roam
          emacs-org
          emacs-org-contrib
          emacs-org-edna
          emacs-diminish
          emacs-olivetti
          emacs-org-pretty-table))
   (synopsis "My Emacs Org configuration")
   (description "This package provides my configuration for org")))

(define-public (emacs-oni-org-roam emacs)
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-org-roam")
   (arguments
    '(#:include '("oni-org-roam.el")))
   (propagated-inputs
    `(("emacs-oni-org" ,(emacs-oni-org emacs))
      ("emacs-org-roam" ,emacs-org-roam)))
   (synopsis "My Emacs Org Roam configuration")
   (description "This package provides my configuration for Org Roam")))

(define-public emacs-oni-browse-url
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-browse-url")
   (arguments
    '(#:include '("oni-browse-url.el")))
   (synopsis "My Emacs Browse Url configuration")
   (description "This package provides my configuration for Browse Url")))

(define-public emacs-oni-prescient
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-prescient")
   (arguments
    '(#:include '("oni-prescient.el")))
   (propagated-inputs
    `(("emacs-prescient" ,emacs-prescient)
      ("emacs-oni-data-dir" ,emacs-oni-data-dir)))
   (synopsis "My Emacs prescient configuration")
   (description "This package provides my configuration for prescient")))

(define-public emacs-oni-company
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-company")
   (arguments
    '(#:include '("oni-company.el")))
   (propagated-inputs
    `(("emacs-company" ,emacs-company)
      ("emacs-oni-prescient" ,emacs-oni-prescient)
      ("emacs-company-posframe" ,emacs-company-posframe)
      ("emacs-diminish" ,emacs-diminish)))
   (synopsis "My Emacs Company configuration")
   (description "This package provides my configuration for company")))

(define-public emacs-oni-paredit
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-paredit")
   (arguments
    '(#:include '("oni-paredit.el")))
   (propagated-inputs
    `(("emacs-paredit" ,emacs-paredit)
      ("emacs-diminish" ,emacs-diminish)))
   (synopsis "My Emacs paredit configuration")
   (description "This package provides my configuration for paredit")))

(define-public emacs-oni-python
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-python")
    (arguments
     `(#:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'chdir-oni-python
           (λ _ (chdir "oni-python"))))
       #:include '("\\.el$" "^snippets\\/python-mode\\/")))
    (propagated-inputs
     (list emacs-oni-yasnippet
           emacs-oni-company
           emacs-oni-flycheck
           emacs-oni-hydra
           emacs-oni-lsp
           emacs-rainbow-delimiters
           emacs-reformatter
           python-black
           tree-sitter-python))))

(define-public emacs-oni-clojure
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-clojure")
    (arguments
     '(#:include '("oni-clojure.el")))
    (propagated-inputs
     `(("emacs-clojure-mode" ,emacs-clojure-mode)
       ("emacs-oni-company" ,emacs-oni-company)
       ("emacs-cider" ,emacs-cider)
       ("emacs-oni-paredit" ,emacs-oni-paredit)
       ("emacs-rainbow-delimiters" ,emacs-rainbow-delimiters)
       ("emacs-oni-data-dir" ,emacs-oni-data-dir)))
    (synopsis "My Emacs Clojure configuration")
    (description "This package provides my configuration for Clojure")))

(define-public emacs-oni-cmake
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-cmake")
   (arguments
    '(#:include '("oni-cmake.el")))
   (propagated-inputs
    `(("emacs-cmake-mode" ,emacs-cmake-mode)
      ("emacs-oni-company" ,emacs-oni-company)
      ("emacs-oni-flycheck" ,emacs-oni-flycheck)
      ("emacs-oni-lsp" ,emacs-oni-lsp)
      ("emacs-cmake-font-lock" ,emacs-cmake-font-lock)
      ("emacs-eldoc-cmake" ,emacs-eldoc-cmake)))
   (synopsis "My Emacs CMake confifguration")
   (description "This package provides my configuration for CMake")))

(define-public emacs-oni-gnus
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-gnus")
   (arguments
    '(#:include '("oni-gnus.el")))
   (propagated-inputs
    (list emacs-oni-data-dir
          emacs-oni-gnus))
   (synopsis "My Emacs Gnus confifguration")
   (description "This package provides my configuration for Gnus")))

(define-public emacs-oni-common-lisp
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-common-lisp")
   (arguments
    '(#:include '("oni-common-lisp.el")))
   (propagated-inputs
    `(("emacs-oni-company" ,emacs-oni-company)
      ("emacs-oni-flycheck" ,emacs-oni-flycheck)
      ("emacs-oni-paredit" ,emacs-oni-paredit)
      ("emacs-rainbow-delimiters" ,emacs-rainbow-delimiters)
      ("emacs-slime" ,emacs-slime)
      ("emacs-slime-company" ,emacs-slime-company)))
   (synopsis "My Emacs Common Lisp configuration")
   (description "This package provides my configuration for Common Lisp")))

(define-public emacs-oni-compilation
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-compilation")
   (arguments
    '(#:include '("oni-compilation.el")))
   (propagated-inputs
    `(("emacs-oni-alert" ,emacs-oni-alert)
      ("emacs-xterm-color" ,emacs-xterm-color)))
   (synopsis "My Emacs Compilation configuration")
   (description "This package provides my configuration for Compilation mode")))

(define-public emacs-oni-conf
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-conf")
   (arguments
    `(#:phases
      (modify-phases %standard-phases
                     (add-after 'unpack 'chdir-oni-conf
                                (λ _ (chdir "oni-conf"))))
      #:include '("\\.el$"
                  "^snippets\\/conf-mode\\/")))
   (propagated-inputs
    `(("emacs-oni-yasnippet" ,emacs-oni-yasnippet)))
   (synopsis "My Emacs Conf mode configuration")
   (description "This pakcage provides my configuation for Conf mode")))

(define-public emacs-oni-counsel
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-counsel")
   (arguments
    '(#:include '("oni-counsel.el")))
   (propagated-inputs
    `(("emacs-counsel" ,emacs-counsel)
      ("emacs-diminish" ,emacs-diminish)))
   (synopsis "My Emacs Counsel configuration")
   (description "This package provides my configuration for Counsel mode")))

(define-public emacs-oni-cpp
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-cpp")
   (arguments
    '(#:include '("oni-cpp.el")))
   (propagated-inputs
    `(("emacs-oni-company" ,emacs-oni-company)
      ("emacs-oni-flycheck" ,emacs-oni-flycheck)))
   (synopsis "My Emacs C++ configuration")
   (description "This package provides my configuration for programming in C++.")))

(define-public emacs-oni-csharp
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-csharp")
   (arguments
    '(#:phases
      (modify-phases %standard-phases
                     (add-after 'unpack 'chdir-oni-csharp
                                (λ _ (chdir "oni-csharp"))))
      #:include '("\\.el$" "^snippets\\/")))
   (propagated-inputs
    `(("emacs-csharp-mode" ,emacs-csharp-mode)
      ("emacs-oni-company" ,emacs-oni-company)
      ("emacs-oni-flycheck" ,emacs-oni-flycheck)
      ("emacs-oni-yasnippet" ,emacs-oni-yasnippet)
      ("emacs-oni-hydra" ,emacs-oni-hydra)
      ("emacs-oni-lsp" ,emacs-oni-lsp)
      ("emacs-oni-smartparens" ,emacs-oni-smartparens)))
   (synopsis "My Emacs C# configuration")
   (description "This package provides my configuration for programming in C#.")))

(define-public emacs-oni-css
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-css")
   (arguments
    '(#:phases
      (modify-phases %standard-phases
                     (add-after 'unpack 'chdir-oni-css
                                (λ _ (chdir "oni-css"))))
      #:include '("\\.el$" "^snippets\\/")))
   (propagated-inputs
    `(("emacs-oni-company" ,emacs-oni-company)
      ("emacs-oni-hydra" ,emacs-oni-hydra)
      ("emacs-rainbow-mode" ,emacs-rainbow-mode)
      ("emacs-oni-yasnippet" ,emacs-oni-yasnippet)))
   (synopsis "My Emacs CSS configuration")
   (description "This package provides my configuration for writing CSS.")))

(define-public emacs-oni-diff-hl
  (package
   (inherit emacs-oni-config)
   (name "emacs-oni-diff-hl")
   (arguments
    '(#:include '("oni-diff-hl.el")))
   (propagated-inputs
    `(("emacs-diff-hl" ,emacs-diff-hl)))
   (synopsis "My Emacs Diff Highlight configuration")
   (description "This package provides my configuration for Diff Highlight.")))

(define-public emacs-oni-elisp
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-elisp")
    (arguments
     '(#:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'chdir-oni-elisp
           (λ _ (chdir "oni-elisp"))))
       #:include '("\\.el$" "^snippets\\/")))
    (propagated-inputs
     `(("emacs-oni-company" ,emacs-oni-company)
       ("emacs-oni-flycheck" ,emacs-oni-flycheck)
       ("emacs-oni-paredit" ,emacs-oni-paredit)
       ("emacs-oni-yasnippet" ,emacs-oni-yasnippet)
       ("emacs-oni-hydra" ,emacs-oni-hydra)
       ("emacs-rainbow-delimiters" ,emacs-rainbow-delimiters)
       ("emacs-nameless" ,emacs-nameless)
       ("emacs-erefactor" ,emacs-erefactor)
       ("emacs-flycheck-relint" ,emacs-flycheck-relint)
       ("emacs-elisp-format" ,emacs-elisp-format)))
    (synopsis "My Emacs Lisp configuration")
    (description "This package provides my configuration for Emacs Lisp.")))

(define-public emacs-oni-eshell
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-eshell")
    (arguments
     '(#:include '("oni-eshell.el")))
    (propagated-inputs
     `(("emacs-esh-autosuggest" ,emacs-esh-autosuggest)
       ("emacs-xterm-color" ,emacs-xterm-color)
       ("emacs-eshell-syntax-highlighting" ,emacs-eshell-syntax-highlighting)
       ("emacs-eshell-fringe-status" ,emacs-eshell-fringe-status)))
    (synopsis "My Emacs Lisp configuration")
    (description "This package provides my configuration for Emacs Lisp.")))

(define-public emacs-oni-sendmail
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-sendmail")
    (arguments
     '(#:include '("oni-sendmail.el")))
    (synopsis "My configuration to send email through Emacs.")
    (description "This package provides my configuration for sending mail through Emacs.")))

(define-public emacs-oni-notmuch
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-notmuch")
    (arguments
     '(#:include '("oni-notmuch.el")))
    (propagated-inputs
     (list emacs-oni-sendmail
           emacs-notmuch
           emacs-ol-notmuch
           emacs-olivetti))
    (synopsis "My notmuch configuration for Emacs.")
    (description "This package provides my configuration for notmuch.")))

(define-public emacs-oni-hy
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-hy")
    (arguments
     '(#:include '("oni-hy\\.el$")))
    (propagated-inputs
     (list emacs-hy-mode
           emacs-oni-paredit
           emacs-oni-yasnippet
           emacs-rainbow-delimiters))
    (synopsis "My Hy configuration")
    (description "This package provides my configuration for Hy.")))

(define-public emacs-oni-project
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-project")
    (arguments
     '(#:include '("oni-project\\.el$")))
    (synopsis "My project.el configuration")
    (description "This package provides my configuration for project.el.")))

(define-public emacs-oni-dired
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-dired")
    (arguments
     '(#:include '("oni-dired\\.el$")))
    (synopsis "My Dired configuration")
    (description "This package provides my configuration for Dired.")))

(define-public emacs-oni-ediff
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-ediff")
    (arguments
     '(#:include '("oni-ediff\\.el$")))
    (synopsis "My Ediff configuration")
    (description "This package provides my configuration for Ediff.")))

(define-public emacs-oni-elm
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-elm")
    (arguments
     '(#:include '("oni-elm\\.el$")))
    (propagated-inputs
     (list emacs-elm-mode
           emacs-oni-lsp
           emacs-rainbow-delimiters))
    (synopsis "My Elm configuration")
    (description "This package provides my configuration for writing Elm code.")))

(define-public emacs-oni-emms
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-emms")
    (arguments
     '(#:include '("oni-emms\\.el$")))
    (propagated-inputs
     (list emacs-emms))
    (synopsis "My EMMS configuration")
    (description "This package provides my configuration for EMMS.")))

(define-public emacs-oni-epub
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-epub")
    (arguments
     '(#:include '("oni-epub\\.el$")))
    (propagated-inputs
     (list emacs-nov-el))
    (synopsis "My configuration for reading ePub files")
    (description "This package provides my configuration for reading ePub files.")))

(define-public emacs-oni-eww
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-eww")
    (arguments
     '(#:include '("oni-eww\\.el")))
    (propagated-inputs
     (list emacs-oni-data-dir))
    (synopsis "My configuration for EWW")
    (description "This package provides my configuration for EWW.")))

(define-public emacs-oni-grep
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-grep")
    (arguments
     '(#:include '("oni-grep\\.el$")))
    (synopsis "My grep configuration")
    (description "This package provides my configuration for grep.")))

(define-public emacs-oni-haskell
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-haskell")
    (arguments
     '(#:include '("oni-haskell\\.el$")))
    (propagated-inputs
     (list emacs-haskell-mode))
    (synopsis "My configuration for Haskell programming")
    (description "This package provides my configuration for programming Haskell.")))

(define-public emacs-oni-highlight-indent-guides
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-highlight-indent-guides")
    (arguments
     '(#:include '("oni-highlight-indent-guides\\.el$")))
    (propagated-inputs
     (list emacs-highlight-indent-guides))
    (synopsis "My configuration for highlight indent guides")
    (description "This package provides my configuration for highlight indent guides.")))

(define-public emacs-oni-html
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-html")
    (arguments
     '(#:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'chdir-oni-html
           (λ _ (chdir "oni-html"))))
       #:include '("\\.el$" "^snippets\\/")))
    (propagated-inputs
     (list emacs-oni-yasnippet))
    (synopsis "My HTML configuration")
    (description "This package provides my configuration for HTML.")))

(define-public emacs-oni-java
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-java")
    (arguments
     '(#:include '("oni-java\\.el$")))
    (propagated-inputs
     (list emacs-oni-data-dir
           emacs-oni-lsp
           emacs-oni-hydra
           emacs-lsp-java
           emacs-rainbow-delimiters))
    (synopsis "My configuration for Java")
    (description "This package provides my configuration for writing Java.")))

(define-public emacs-oni-json
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-json")
    (arguments
     '(#:include '("oni-json\\.el$")))
    (propagated-inputs
     (list emacs-json-mode))
    (synopsis "My configuration for json")
    (description "This package provides my configuration for writing json.")))

(define-public emacs-oni-log-edit
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-log-edit")
    (arguments
     '(#:include '("oni-log-edit\\.el$")))
    (synopsis "My configuration for log-edit")
    (description "This package provides my configuration for log-edit.")))

(define-public emacs-oni-lua
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-lua")
    (arguments
     '(#:include '("oni-lua\\.el$")))
    (propagated-inputs
     (list emacs-lua-mode))
    (synopsis "My configuration for Lua")
    (description "This package provides my configuration for writing Lua.")))

(define-public emacs-oni-makefile
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-makefile")
    (arguments
     '(#:include '("oni-makefile\\.el$")))
    (synopsis "My configuration for GNU Make")
    (description "This package provides my configuration for writing Makefiles.")))

(define-public emacs-oni-nxml
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-nxml")
    (arguments
     '(#:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'chdir-oni-nxml
           (λ _ (chdir "oni-nxml"))))
       #:include '("\\.el$" "^snippets\\/")))
    (propagated-inputs
     (list emacs-oni-yasnippet
           emacs-reformatter))
    (synopsis "My XML configuration")
    (description "This package provides my configuration for writing XML.")))

(define-public emacs-oni-package
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-package")
    (arguments
     '(#:include '("oni-package\\.el$")))
    (synopsis "My configuration for package.el")
    (description "This package provides my configuration for package.el.")))

(define-public emacs-oni-projectile
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-projectile")
    (arguments
     '(#:include '("oni-projectile\\.el$")))
    (propagated-inputs
     (list emacs-projectile))
    (synopsis "My configuration for Projectile")
    (description "This package provides my configuration for Projectile.")))

(define-public emacs-oni-scheme
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-scheme")
    (arguments
     '(#:include '("oni-scheme\\.el$")))
    (propagated-inputs
     (list emacs-oni-company
           emacs-oni-paredit
           emacs-rainbow-delimiters
           emacs-geiser
           emacs-geiser-guile))
    (synopsis "My configuration for Scheme")
    (description "This package provides my configuration for writing Scheme.")))

(define-public emacs-oni-shr
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-shr")
    (arguments
     '(#:include '("oni-shr\\.el$")))
    (synopsis "My configuration for shr")
    (description "This package provides my configuration for shr.")))

(define-public emacs-oni-tramp
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-tramp")
    (arguments
     '(#:include '("oni-tramp\\.el$")))
    (synopsis "My configuration for TRAMP")
    (description "This package provides my configuration for TRAMP.")))

(define-public emacs-oni-git-commit
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-git-commit")
    (arguments
     '(#:include '("oni-git-commit\\.el$")))
    (propagated-inputs
     (list
      emacs-magit))
    (synopsis "My configuration for git-commit-mode")
    (description "This package provides my configuration for git-commit-mode.")))

(define-public emacs-oni-yaml
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-yaml")
    (arguments
     '(#:include '("oni-yaml\\.el$")))
    (propagated-inputs
     (list
      emacs-yaml-mode
      emacs-oni-flycheck
      emacs-oni-highlight-indent-guides
      emacs-indent-tools
      emacs-yaml-imenu
      emacs-yaml-pro))
    (synopsis "My configuration for yaml-mode.")
    (description "This package provides my configuration for editing Yaml files.")))

(define-public emacs-oni-php
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-php")
    (arguments
     '(#:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'chdir-oni-php
           (λ _ (chdir "oni-php"))))
       #:include '("\\.el$" "^snippets\\/")))
    (propagated-inputs
     (list emacs-php-mode
           emacs-oni-yasnippet
           emacs-oni-flycheck
           emacs-oni-company
           emacs-oni-hydra
           emacs-ggtags
           emacs-fic-mode
           emacs-ac-php
           ;; Actually a dependency of emacs-ac-php for using company-php.
           emacs-xcscope))
    (synopsis "My configuration for php-mode.")
    (description "This package provides my configuration for editing PHP files.")))

(define-public emacs-oni-web-mode
  (package
    (inherit emacs-oni-config)
    (name "emacs-oni-web-mode")
    (arguments
     '(#:include '("oni-web\\.el$")))
    (propagated-inputs
     (list
      emacs-web-mode
      emacs-oni-flycheck))
    (synopsis "My configuration for web-mode.")
    (description "This package provides my configuration for editing Web template files.")))