forked from FG42/FG42
1
0
Fork 0

Compare commits

...

6 Commits

18 changed files with 419 additions and 107 deletions

View File

@ -47,11 +47,11 @@
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1712014858,
"narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=",
"lastModified": 1714641030,
"narHash": "sha256-yzcRNDoyVP7+SCNX0wmuDju1NUCt8Dz9+lyUXEI0dbI=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "9126214d0a59633752a136528f5f3b9aa8565b7d",
"rev": "e5d10a24b66c3ea8f150e47dfdb0416ab7c3390e",
"type": "github"
},
"original": {
@ -132,20 +132,14 @@
},
"nixpkgs-lib": {
"locked": {
"dir": "lib",
"lastModified": 1711703276,
"narHash": "sha256-iMUFArF0WCatKK6RzfUJknjem0H9m4KgorO/p3Dopkk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "d8fe5e6c92d0d190646fb9f1056741a229980089",
"type": "github"
"lastModified": 1714640452,
"narHash": "sha256-QBx10+k6JWz6u7VsohfSw8g8hjdBZEf8CFzXH1/1Z94=",
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/50eb7ecf4cd0a5756d7275c8ba36790e5bd53e33.tar.gz"
},
"original": {
"dir": "lib",
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/50eb7ecf4cd0a5756d7275c8ba36790e5bd53e33.tar.gz"
}
},
"nixpkgs-lib_2": {
@ -253,16 +247,16 @@
"nixpkgs": "nixpkgs_4"
},
"locked": {
"lastModified": 1713553841,
"narHash": "sha256-k0p6s7cbN3cAeOBeTpIaFWbHhma+yNisC7HwAo4aDuA=",
"ref": "refs/tags/v0.1.10",
"rev": "8164261df59f6a31cbbd72b19777b1023aa38448",
"revCount": 52,
"lastModified": 1714648678,
"narHash": "sha256-CxLSUYRk2quey0skgxa+v8mVE+pGSSPcxtK0uFq6YkQ=",
"ref": "refs/tags/v0.1.11",
"rev": "b4e667a73a0de7d83f78910d6fa3acc3b3044675",
"revCount": 53,
"type": "git",
"url": "https://devheroes.codes/lxsameer/noether"
},
"original": {
"ref": "refs/tags/v0.1.10",
"ref": "refs/tags/v0.1.11",
"type": "git",
"url": "https://devheroes.codes/lxsameer/noether"
}

View File

@ -17,7 +17,7 @@
description = "FG42 - Emacs Editor for advance users";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/442d407992384ed9c0e6d352de75b69079904e4e";
inputs.noether.url = "git+https://devheroes.codes/lxsameer/noether?ref=refs/tags/v0.1.10";
inputs.noether.url = "git+https://devheroes.codes/lxsameer/noether?ref=refs/tags/v0.1.11";
inputs.emacs-overlay.url = "github:nix-community/emacs-overlay/0f7f3b39157419f3035a2dad39fbaf8a4ba0448d";
inputs.flake-parts.url = "github:hercules-ci/flake-parts";

View File

@ -26,7 +26,7 @@
(require 'noether)
(require 'noether-units)
(require 'projectile)
(require 'project)
(require 'nerd-icons)

View File

@ -62,7 +62,7 @@
(buffer-name-unit
:label (format "%s " (nerd-icons-codicon "nf-cod-layers"))
:len 20)
(projectile-project-unit
(project-unit
:label (format "%s " (nerd-icons-octicon "nf-oct-project"))
:len 20)
(git-branch-unit
@ -94,7 +94,7 @@ Appears on the center of the current window."
(buffer-name-unit
:label (format "%s " (nerd-icons-codicon "nf-cod-layers"))
:len 30)
(time-unit :label (format "%s " (nerd-icons-mdicon "nf-md-clock_time_three")))))

View File

@ -118,14 +118,14 @@ in combination with Corfu, Company or the default completion UI."
;; first function returning a result wins. Note that the list of buffer-local
;; completion functions takes precedence over the global list.
;;(add-to-list 'completion-at-point-functions #'cape-history)
;;(add-to-list 'completion-at-point-functions #'cape-keyword)
;;(add-to-list 'completion-at-point-functions #'cape-tex)
;;(add-to-list 'completion-at-point-functions #'cape-sgml)
;;(add-to-list 'completion-at-point-functions #'cape-rfc1345)
;;(add-to-list 'completion-at-point-functions #'cape-abbrev)
;;(add-to-list 'completion-at-point-functions #'cape-dict)
;;(add-to-list 'completion-at-point-functions #'cape-elisp-symbol)
;;(add-to-list 'completion-at-point-functions #'cape-line)
;;(add-to-list 'completion-at-point-functions #'cape-keyword)
(add-to-list 'completion-at-point-functions #'cape-elisp-symbol)
(add-to-list 'completion-at-point-functions #'cape-dabbrev)
(add-to-list 'completion-at-point-functions #'cape-file)
(add-to-list 'completion-at-point-functions #'cape-elisp-block))

View File

@ -35,6 +35,9 @@ let
./python
./wm
./verilog
./workspace
./rss
./organize
];
in
modules

View File

@ -26,9 +26,6 @@ let
deps =
(with pkgs.emacsPackages; [
origami
which-key
projectile
projectile-ripgrep
pkg-info
expand-region
direnv
@ -40,14 +37,13 @@ let
avy
ace-window
flycheck
org
org-super-agenda
rainbow-delimiters
org-ql
org-modern
base16-theme
tempel
tempel-collection
beacon
hydra
rg
]);
drv = makeFG42Drv {

View File

@ -25,12 +25,12 @@
(require 'fpkg)
;; We build this file via the main FG42's Nix derivation. It
;; contains the final Nix configuration of FG42.
(require 'fg42/config)
(require 'fg42/organize))
(require 'fg42/config))
(require 'server)
(require 'fg42/utils)
(defun fg42/setup-font ()
"Set the default font of `FG42' to FONT-NAME and FONT-SIZE."
(let ((name (config-get font-name))
@ -50,36 +50,12 @@
(global-origami-mode t))
(use! which-key
"which-key is a minor mode for Emacs that displays the key bindings following
your currently entered incomplete command (a prefix) in a popup. For example,
after enabling the minor mode if you enter ~C-x~ and wait for the default of
1 second the minibuffer will expand with all of the available key bindings
that follow ~C-x~ (or as many as space allows given your settings).
This includes prefixes like ~C-x 8~ which are shown in a different face."
:config
(which-key-setup-side-window-bottom)
(which-key-mode))
(use! projectile
"Projectile is a project interaction library for Emacs. Its goal is to provide
a nice set of features operating on a project level without introducing
external dependencies."
:hook (emacs-startup . projectile-mode)
:config
;; We don't want the auto discovery on startup
(setq projectile-auto-discover nil)
(setq projectile-enable-caching t)
:bind (:map projectile-mode-map
("s-p" . projectile-command-map)
("C-c p" . projectile-command-map)))
(use! projectile-ripgrep
"Use ripgrep with projectile"
:after projectile)
(use! rg
"A ripgrep based search utility."
:commands rg-menu
:bind
("C-c s" . rg-menu)
("C-c p s" . rg-dwim-project-dir))
(use! pkg-info
@ -141,7 +117,7 @@ contextual information."
(use! avy
"This cube controls the different aspect of buffer navigation"
:bind ("M-1" . avy-goto-word-1))
:bind ("C-c g" . avy-goto-word-1))
(use! ace-window
@ -220,6 +196,24 @@ of the Emacs Tempo library."
"A collection of tempel templates.")
(use! hydra
"Once you summon the Hydra through the prefixed binding (the
body+ any one head), all heads can be called in succession with only a
short extension."
:init
(require 'hydra)
:hook (emacs-startup . hydra-add-imenu)
:config
(defhydra hydra-zoom (global-map "<f2>")
"zoom"
("g" text-scale-increase "in")
("l" text-scale-decrease "out")))
(use! beacon
"Never lose sight of your curser."
:hook (emacs-startup . beacon-mode))
(defun fg42/setup-editor ()
"Setup the overall functionality of FG42."
@ -295,8 +289,7 @@ of the Emacs Tempo library."
(when (not (server-running-p))
(when-wm
(setq server-name "fg42-wm"))
(server-start)
(require 'org-protocol))
(server-start))
(when-wm
;; Activating the WM mode

View File

@ -181,8 +181,8 @@ match all of the components in any order."
;; Configure the narrowing key.
;; Both < and C-+ work reasonably well.
(setq consult-narrow-key "<") ;; "C-+"
(autoload 'projectile-project-root "projectile")
(setq consult-project-function (lambda (_) (projectile-project-root)))
(setq consult-project-function (lambda (_) (when (project-current)
(project-root (project-current)))))
;; Optionally make narrowing help available in the minibuffer.
;; You may want to use `embark-prefix-help-command' or which-key instead.

View File

@ -27,13 +27,13 @@
(require 'noether)
(require 'noether-units)
(require 'projectile)
(require 'project)
(with-config "graphics"
(require 'nerd-icons)
(defvar fg42/-mode-icon)
(defun fg42/-update-mode-icon ()
"Set the current buffer name to the watched var."
(setq fg42/-mode-icon major-mode))

View File

@ -67,7 +67,7 @@
(buffer-name-unit
:label (format "%s " (nerd-icons-codicon "nf-cod-layers"))
:len 20)
(projectile-project-unit
(project-unit
:label (format "%s " (nerd-icons-octicon "nf-oct-project"))
:len 20)
(git-branch-unit
@ -81,7 +81,7 @@
(buffer-name-unit
:label "B: "
:len 20)
(projectile-project-unit
(project-unit
:label "P: "
:len 20)
(git-branch-unit

View File

@ -53,7 +53,6 @@
"Smart mode line is a pretty simple yet fantastic alternative
to Emacs modeline."
:if (display-graphic-p)
;;:after projectile
:commands noether-global-mode
:hook (emacs-startup . noether-global-mode)
:config

View File

@ -0,0 +1,85 @@
# Fg42 - Emacs Editor for advance users
#
# Copyright (c) 2010-2024 Sameer Rahmani <lxsameer@gnu.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 2.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# This is the home manager module that exposes FG42. It differs
# from FG42 modules that are structurally the same but used in
# different context
# A list of default FG42 modules to build FG42 with.
{ lib, config, pkgs, makeFG42Drv, ... }:
with lib;
let
cfg = config.fg42.organize;
deps =
(with pkgs.emacsPackages; [
org
org-super-agenda
org-ql
org-modern
] ++ optionals (cfg.org-roam) [
org-roam
org-roam-ui
websocket
simple-httpd
f
]);
drv = makeFG42Drv {
pname = "organize";
version = config.fg42.version;
buildInputs = deps;
src = ./.;
};
in
{
imports = [
../editor
];
options.fg42.organize = {
enable = mkAndEnableOption "organize";
org-roam = mkAndEnableOption "organize";
org-dir = mkOption {
type = types.str;
default = "~/.orgs";
example = literalExpression ''"~/.orgs"'';
description = mdDoc ''
A non-nix `path` (string `path`) of the location your want org-mode
to store you org files.
'';
};
};
config = mkIf cfg.enable {
fg42.elispPackages = [ drv ] ++ deps;
fg42.requires = [ drv.pname ];
fg42.vars = [
(defVar "org-home" cfg.org-dir "Where to store org files.")
(defVar "org-roam" cfg.org-roam "Enable org-roam?")
];
meta = {
maintainers = [ maintainers.lxsameer ];
doc = ./README.md;
};
};
}

View File

@ -22,28 +22,43 @@
;;; Commentary:
;;; Code:
(eval-when-compile
(require 'fpkg))
(require 'fpkg)
(require 'fg42/utils)
(require 'fg42/config)
(require 'hydra))
(defvar fg42/org-super-agenda-groups nil)
(defvar fg42/org-home "~/.orgs"
;;=============================================================================
;; Vars that user meant to set
;;=============================================================================
(defvar org-home "~/.orgs"
"The location to the org file repository.")
(defvar fg42/default-org-journal-heder
"
#+TITLE: Yearly Journal
#+STARTUP: folded logdrawer logdone logreschedule indent content align constSI entitiespretty
"
"Org journal header.")
(defvar fg42/notes-file "notes.org")
(defvar fg42/org-main-file "main.org")
(defvar fg42/org-notes-file "notes.org")
(defvar fg42/org-agenda-files "main.org")
(defvar fg42/global-tags nil)
(defvar fg42/agenda-files "main.org")
;;=============================================================================
;; Helper functions
;;=============================================================================
(defun fg42/org-home ()
"Return the directory path to store everthing org related."
(config-get-or "org-dir" org-home))
(defun fg42/create-org-home ()
"Create the org-files directory directory."
(make-directory (fg42/org-home) t))
(defun fg42/organize-setup ()
"Setup all the necessary files and directories to use `org' and `org-roam'."
(fg42/create-org-home))
;;=============================================================================
;; Package defs
;;=============================================================================
(use! org-ql
"This package provides a query language for Org files. It offers two
syntax styles: Lisp-like sexps and search engine-like keywords.
@ -63,7 +78,6 @@ Now you can sort-of do this already with custom agenda commands, but when you
do that, you lose the daily/weekly aspect of the agenda: items are no longer
shown based on deadline/scheduled timestamps, but are shown no-matter-what.
h
For more information checkout `https://github.com/alphapapa/org-super-agenda'"
:after org-agenda
:config
@ -72,8 +86,7 @@ For more information checkout `https://github.com/alphapapa/org-super-agenda'"
org-agenda-include-deadlines t
org-agenda-compact-blocks t
org-agenda-start-day nil ;; Today
org-agenda-span 1
org-super-agenda-groups fg42/org-super-agenda-groups)
org-agenda-span 1)
(org-super-agenda-mode))
@ -86,24 +99,27 @@ For more information checkout `https://github.com/alphapapa/org-super-agenda'"
org-capture-templates
(eval
`(list
'("t" "Todo" entry (file+headline ,(expand-file-name "main.org" fg42/org-home) "New Tasks")
(file ,(expand-file-name "templates/todo" fg42/org-home))
'("t" "Todo" entry (file+headline ,(expand-file-name fg42/org-main-file (fg42/org-home)) "New Tasks")
(file ,(expand-file-name "templates/todo" (fg42/org-home)))
:prepend t)
'("l" "Link" entry (file+headline ,(expand-file-name "bookmarks.org" fg42/org-home) "Links")
(file ,(expand-file-name "templates/links" fg42/org-home))
'("l" "Link" entry (file+headline ,(expand-file-name "bookmarks.org" (fg42/org-home)) "Links")
(file ,(expand-file-name "templates/links" (fg42/org-home)))
:prepend t
:immediate-finish t
:empty-lines 1)
'("h" "Thoughts" entry (file+datetree ,(expand-file-name "journal.org" fg42/org-home))
(file ,(expand-file-name "templates/thoughts" fg42/org-home)))))))
'("h" "Thoughts" entry (file+datetree ,(expand-file-name "journal.org" (fg42/org-home)))
(file ,(expand-file-name "templates/thoughts" (fg42/org-home))))))))
(use! org-protocol
"`org-protocol' intercepts calls from emacsclient to trigger custom actions without external
dependencies. Only one protocol has to be configured with your external applications or
the operating system, to trigger an arbitrary number of custom actions. Just register
your custom sub-protocol and handler with the variable `org-protocol-protocol-alist'.")
your custom sub-protocol and handler with the variable `org-protocol-protocol-alist'."
:init
(require 'org-protocol))
(use! org
"A GNU Emacs major mode for keeping notes, authoring documents, computational notebooks,
@ -111,7 +127,9 @@ literate programming, maintaining to-do lists, planning projects, and more — i
and effective plain text system.
For more info on ~org-mode~ check out `https://orgmode.org/'"
:hook (org-mod . flyspell-mode)
:hook
(org-mod . flyspell-mode)
(org-mode . fg42/organize-setup)
:init
(setq
org-auto-align-tags nil
@ -133,12 +151,12 @@ For more info on ~org-mode~ check out `https://orgmode.org/'"
" ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄")
org-agenda-current-time-string
"<── now ─────────────────────────────────────────────────"
org-agenda-files (concat (file-name-as-directory fg42/org-home)
fg42/agenda-files)
org-agenda-files (concat (file-name-as-directory (fg42/org-home))
fg42/org-agenda-files)
org-directory fg42/org-home
org-default-notes-file (concat (file-name-as-directory fg42/org-home)
fg42/notes-file)
org-directory (fg42/org-home)
org-default-notes-file (concat (file-name-as-directory (fg42/org-home))
fg42/org-notes-file)
org-refile-targets '((org-agenda-files :maxlevel . 3))
@ -154,5 +172,40 @@ For more info on ~org-mode~ check out `https://orgmode.org/'"
(org-agenda-finalize . org-modern-mode)))
(with-config "org-roam"
(use! org-roam
"Create a second brain for yourself with this great knowledge base tool."
:after org
:commands (org-roam-node-find org-roam-node-insert
org-roam-capture org-roam-ui-mode)
:config
(setq-default org-roam-directory (file-truename (path-join (fg42/org-home) "roam"))
org-roam-db-update-on-save t)
(make-directory org-roam-directory t)
(org-roam-db-autosync-mode))
(use! websocket
"Websocket support for Elisp."
:after org-roam)
(use! org-roam-ui
"A nice web UI for `org-roam'"
:after org-roam
:config
(setq org-roam-ui-sync-theme t
org-roam-ui-follow t
org-roam-ui-update-on-save t
org-roam-ui-open-on-start t))
(defhydra hydra-org-roam (:exit t)
"Org Roam"
("i" org-roam-node-insert "Insert")
("f" org-roam-node-find "Find")
("c" org-roam-capture "Capture")
("u" org-roam-ui-mode "Web UI"))
(global-set-key (kbd "C-c o") 'hydra-org-roam/body))
(provide 'fg42/organize)
;;; organize.el ends here

View File

@ -0,0 +1,59 @@
# Fg42 - Emacs Editor for advance users
#
# Copyright (c) 2010-2024 Sameer Rahmani <lxsameer@gnu.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 2.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# This is the home manager module that exposes FG42. It differs
# from FG42 modules that are structurally the same but used in
# different context
# A list of default FG42 modules to build FG42 with.
{ lib, config, pkgs, makeFG42Drv, ... }:
with lib;
let
cfg = config.fg42.rss;
deps =
(with pkgs.emacsPackages; [
elfeed
elfeed-goodies
]);
drv = makeFG42Drv {
pname = "rss";
version = config.fg42.version;
buildInputs = deps;
src = ./.;
};
in
{
options.fg42.rss.enable = mkAndEnableOption "rss";
config = mkIf cfg.enable {
fg42.elispPackages = [ drv ] ++ deps;
fg42.requires = [ drv.pname ];
fg42.paths = (with pkgs;[
curl
]);
meta = {
maintainers = [ maintainers.lxsameer ];
doc = ./README.md;
};
};
}

View File

@ -0,0 +1,36 @@
;;; FG42 --- The mighty editor for the emacsians -*- lexical-binding: t; -*-
;;
;; Copyright (c) 2010-2024 Sameer Rahmani & Contributors
;;
;; Author: Sameer Rahmani <lxsameer@gnu.org>
;; URL: https://devheroes.codes/FG42/FG42
;; Version: 4.0.0
;;
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;
;;; Commentary:
;;; Code:
(eval-when-compile
(require 'fpkg))
(use! elfeed
"The best rss reader you can ask for."
:commands elfeed
:bind
("C-x w" . elfeed))
(provide 'fg42/rss)
;;; rss.el ends here

View File

@ -0,0 +1,54 @@
# Fg42 - Emacs Editor for advance users
#
# Copyright (c) 2010-2024 Sameer Rahmani <lxsameer@gnu.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 2.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# This is the home manager module that exposes FG42. It differs
# from FG42 modules that are structurally the same but used in
# different context
# A list of default FG42 modules to build FG42 with.
{ lib, config, pkgs, makeFG42Drv, ... }:
with lib;
let
cfg = config.fg42.workspace;
deps =
(with pkgs.emacsPackages; [
perspective
]);
drv = makeFG42Drv {
pname = "workspace";
version = config.fg42.version;
buildInputs = deps;
src = ./.;
};
in
{
options.fg42.workspace.enable = mkAndEnableOption "workspace";
config = mkIf cfg.enable {
fg42.elispPackages = [ drv ] ++ deps;
fg42.requires = [ drv.pname ];
meta = {
maintainers = [ maintainers.lxsameer ];
doc = ./README.md;
};
};
}

View File

@ -0,0 +1,40 @@
;;; FG42 --- The mighty editor for the emacsians -*- lexical-binding: t; -*-
;;
;; Copyright (c) 2010-2024 Sameer Rahmani & Contributors
;;
;; Author: Sameer Rahmani <lxsameer@gnu.org>
;; URL: https://devheroes.codes/FG42/FG42
;; Version: 4.0.0
;;
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;
;;; Commentary:
;;; Code:
(eval-when-compile
(require 'fpkg))
(use! perspective
"The Perspective package provides multiple named workspaces (or perspectives)
in Emacs"
:commands persp-mode
:hook (emacs-startup . persp-mode)
:bind
("C-x C-b" . persp-list-buffers)
:custom
(persp-mode-prefix-key (kbd "C-c w")))
(provide 'fg42/workspace)
;;; workspace.el ends here