[[https://gnu.org/software/emacs/][Emacs]] has been around since the 1980s, and it's painfully obvious when you're greeted with the default user interface. Disable some unwanted features to clean it up, and bring the appearance to something closer to a modern editor.
[[https://gnu.org/software/emacs/][Emacs]] has been around since the 1980s, and it's painfully obvious when you're greeted with the default user interface. Disable some unwanted features to clean it up, and bring the appearance to something closer to a modern editor.
@ -1228,7 +1228,7 @@ Native Comp, also known as GccEmacs, refers to the ~--with-native-compilation~ c
[[https://gnu.org/software/emacs/][Emacs]] makes a backup for a file only the first time the file is saved from a buffer. No matter how many times the file is subsequently written to, the backup remains unchanged. For files managed by a version control system, backup files are redundant since the previous versions are already stored.
[[https://gnu.org/software/emacs/][Emacs]] makes a backup for a file only the first time the file is saved from a buffer. No matter how many times the file is subsequently written to, the backup remains unchanged. For files managed by a version control system, backup files are redundant since the previous versions are already stored.
@ -1239,7 +1239,7 @@ Native Comp, also known as GccEmacs, refers to the ~--with-native-compilation~ c
create-lockfiles nil)
create-lockfiles nil)
#+END_SRC
#+END_SRC
** Shell Commands
*** Shell Commands
Define some methods for interaction between [[https://gnu.org/software/emacs/][GNU/Emacs]], and the systems underyling shell:
Define some methods for interaction between [[https://gnu.org/software/emacs/][GNU/Emacs]], and the systems underyling shell:
@ -1260,7 +1260,7 @@ Define some methods for interaction between [[https://gnu.org/software/emacs/][G
By default Emacs will ask you to enter 'Yes' or 'No' instead of 'Y' or 'N'. This is a relatively conservative design decision, based on the fact that certain prompts may be important enough to warrant typing three characters.
By default Emacs will ask you to enter 'Yes' or 'No' instead of 'Y' or 'N'. This is a relatively conservative design decision, based on the fact that certain prompts may be important enough to warrant typing three characters.
@ -1270,7 +1270,7 @@ By default Emacs will ask you to enter 'Yes' or 'No' instead of 'Y' or 'N'. This
(defalias 'yes-or-no-p 'y-or-n-p)
(defalias 'yes-or-no-p 'y-or-n-p)
#+END_SRC
#+END_SRC
** Nix Mode
*** Nix Mode
#+NAME: emacs-nix-mode-extras
#+NAME: emacs-nix-mode-extras
#+BEGIN_SRC nix
#+BEGIN_SRC nix
@ -1285,7 +1285,7 @@ pkgs.rnix-lsp
epkgs.nix-mode
epkgs.nix-mode
#+END_SRC
#+END_SRC
** Evil Mode
*** Evil Mode
[[https://evil.readthedocs.io/en/latest/overview.html][Evil Mode]] is an extensible VI layer for [[https://gnu.org/software/emacs/][GNU/Emacs]]. It emulates the main features of [[https://neovim.io][Vim]], transforming GNU/Emacs into a modal editor.
[[https://evil.readthedocs.io/en/latest/overview.html][Evil Mode]] is an extensible VI layer for [[https://gnu.org/software/emacs/][GNU/Emacs]]. It emulates the main features of [[https://neovim.io][Vim]], transforming GNU/Emacs into a modal editor.
@ -1320,7 +1320,7 @@ The next time [[https://gnu.org/software/emacs/][Emacs]] is started, it will com
(dotfiles/run-in-background "autorandr --change --force"))) ;; Swap to the next screen config.
(dotfiles/run-in-background "autorandr --change --force"))) ;; Swap to the next screen config.
#+END_SRC
#+END_SRC
** General
*** General
#+NAME: emacs-general-package
#+NAME: emacs-general-package
#+BEGIN_SRC nix
#+BEGIN_SRC nix
@ -1454,7 +1454,7 @@ epkgs.general
"t" '(:ignore t :which-key "Toggle / Tweak"))
"t" '(:ignore t :which-key "Toggle / Tweak"))
#+END_SRC
#+END_SRC
** Which Key
*** Which Key
[[https://github.com/justbur/emacs-which-key][Which Key]] is an [[https://gnu.org/software/emacs/][Emacs]] minor mode that displays the key bindings following your currently entered incomplete command (prefix) in a popup or mini-buffer.
[[https://github.com/justbur/emacs-which-key][Which Key]] is an [[https://gnu.org/software/emacs/][Emacs]] minor mode that displays the key bindings following your currently entered incomplete command (prefix) in a popup or mini-buffer.
@ -1471,7 +1471,7 @@ epkgs.which-key
(which-key-mode +1)
(which-key-mode +1)
#+END_SRC
#+END_SRC
** EWW
*** EWW
[[https://emacswiki.org/emacs/eww][Emacs Web Wowser (EWW)]] is a Web browser written in [[https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html][Emacs Lisp]] based on the ~shr.el~ library. It's my primary browser when it comes to text-based browsing.
[[https://emacswiki.org/emacs/eww][Emacs Web Wowser (EWW)]] is a Web browser written in [[https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html][Emacs Lisp]] based on the ~shr.el~ library. It's my primary browser when it comes to text-based browsing.
@ -1488,7 +1488,7 @@ epkgs.which-key
shr-use-colors nil)
shr-use-colors nil)
#+END_SRC
#+END_SRC
** ERC
*** ERC
[[https://gnu.org/software/emacs/erc.html][ERC]] is a powerful, modular, and extensible IRC client for [[https://gnu.org/software/emacs/][GNU/Emacs]]. It's part of the GNU project, and included in Emacs.
[[https://gnu.org/software/emacs/erc.html][ERC]] is a powerful, modular, and extensible IRC client for [[https://gnu.org/software/emacs/][GNU/Emacs]]. It's part of the GNU project, and included in Emacs.
@ -1519,7 +1519,7 @@ epkgs.which-key
"i" '(dotfiles/erc-connect :which-key "Chat"))
"i" '(dotfiles/erc-connect :which-key "Chat"))
#+END_SRC
#+END_SRC
** Dired
*** Dired
#+NAME: emacs-dired-package
#+NAME: emacs-dired-package
#+BEGIN_SRC nix
#+BEGIN_SRC nix
@ -1543,7 +1543,7 @@ epkgs.dired-single
"d" '(dired-jump :which-key "Dired"))
"d" '(dired-jump :which-key "Dired"))
#+END_SRC
#+END_SRC
** Icons
*** Icons
#+NAME: emacs-icons-package
#+NAME: emacs-icons-package
#+BEGIN_SRC nix
#+BEGIN_SRC nix
@ -1566,7 +1566,7 @@ epkgs.all-the-icons-ivy-rich
(global-prettify-symbols-mode +1)
(global-prettify-symbols-mode +1)
#+END_SRC
#+END_SRC
** Emojis
*** Emojis
#+NAME: emacs-emoji-package
#+NAME: emacs-emoji-package
#+BEGIN_SRC nix
#+BEGIN_SRC nix
@ -1581,7 +1581,7 @@ epkgs.emojify
(add-hook 'after-init-hook 'global-emojify-mode)
(add-hook 'after-init-hook 'global-emojify-mode)
#+END_SRC
#+END_SRC
** EShell
*** EShell
#+NAME: emacs-eshell-package
#+NAME: emacs-eshell-package
#+BEGIN_SRC nix
#+BEGIN_SRC nix
@ -1605,7 +1605,7 @@ epkgs.eshell-prompt-extras
"e" '(eshell :which-key "EShell"))
"e" '(eshell :which-key "EShell"))
#+END_SRC
#+END_SRC
** VTerm
*** VTerm
[[https://github.com/akermu/emacs-libvterm][Emacs Libvterm (VTerm)]] is a fully-fledged terminal emulator inside [[https://gnu.org/software/emacs/][GNU/Emacs]] based on [[https://github.com/neovim/libvterm][Libvterm]], a blazing fast C library used in [[https://neovim.io][Neovim]]. As a result of using compiled code (instead of [[https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html][Emacs Lisp]]), VTerm is capable, fast, and it can seamlessly handle large outputs.
[[https://github.com/akermu/emacs-libvterm][Emacs Libvterm (VTerm)]] is a fully-fledged terminal emulator inside [[https://gnu.org/software/emacs/][GNU/Emacs]] based on [[https://github.com/neovim/libvterm][Libvterm]], a blazing fast C library used in [[https://neovim.io][Neovim]]. As a result of using compiled code (instead of [[https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html][Emacs Lisp]]), VTerm is capable, fast, and it can seamlessly handle large outputs.
@ -1621,7 +1621,7 @@ epkgs.vterm
"v" '(vterm :which-key "VTerm"))
"v" '(vterm :which-key "VTerm"))
#+END_SRC
#+END_SRC
** Magit
*** Magit
[[https://magit.vc][Magit]] is an interface to the [[https://git-scm.com][Git]] version control system, implemented as a [[https://gnu.org/software/emacs/][GNU/Emacs]] package written in [[https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html][Emacs Lisp]]. It fills the glaring gap between the Git command line interface and various GUIs, letting you perform trivial as well as elaborate version control tasks within a few mnemonic key presses.
[[https://magit.vc][Magit]] is an interface to the [[https://git-scm.com][Git]] version control system, implemented as a [[https://gnu.org/software/emacs/][GNU/Emacs]] package written in [[https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html][Emacs Lisp]]. It fills the glaring gap between the Git command line interface and various GUIs, letting you perform trivial as well as elaborate version control tasks within a few mnemonic key presses.
@ -1641,7 +1641,7 @@ epkgs.magit
"gp" '(magit-pull :which-key "Pull"))
"gp" '(magit-pull :which-key "Pull"))
#+END_SRC
#+END_SRC
** Hydra
*** Hydra
#+NAME: emacs-hydra-package
#+NAME: emacs-hydra-package
#+BEGIN_SRC nix
#+BEGIN_SRC nix
@ -1650,7 +1650,7 @@ epkgs.hydra
[[https://github.com/abo-abo/hydra][Hydra]] allows you to create keymaps for related commands, with the ability to easily repeat commands using a single keystroke.
[[https://github.com/abo-abo/hydra][Hydra]] allows you to create keymaps for related commands, with the ability to easily repeat commands using a single keystroke.
** Fonts
*** Fonts
[[https://typeof.net/Iosevka][Iosevka]] is an open-source, sans-serif + slab-serif, monospace + quasi-proportional typeface family, designed for writing code, using in terminals, and preparing technical documents. Configure it as the default font face inside of [[https://gnu.org/software/emacs/][Emacs]] and define a [[https://github.com/abo-abo/hydra][Hydra]] command for quickly scaling text.
[[https://typeof.net/Iosevka][Iosevka]] is an open-source, sans-serif + slab-serif, monospace + quasi-proportional typeface family, designed for writing code, using in terminals, and preparing technical documents. Configure it as the default font face inside of [[https://gnu.org/software/emacs/][Emacs]] and define a [[https://github.com/abo-abo/hydra][Hydra]] command for quickly scaling text.
@ -1672,7 +1672,7 @@ epkgs.hydra
"tf" '(hydra-text-scale/body :which-key "Font"))
"tf" '(hydra-text-scale/body :which-key "Font"))
#+END_SRC
#+END_SRC
** Frames
*** Frames
Sometimes it's useful to resize the current frame without using the mouse (always). The default behaviour when calling ~shrink-window~ and ~enlarge-window~ only changes the size by a small margin. I solved this problem with the same method used for scaling text:
Sometimes it's useful to resize the current frame without using the mouse (always). The default behaviour when calling ~shrink-window~ and ~enlarge-window~ only changes the size by a small margin. I solved this problem with the same method used for scaling text:
@ -1703,7 +1703,7 @@ Sometimes it's useful to resize the current frame without using the mouse (alway
The way [[https://orgmode.org][Org Mode]] works, TODO items, time-stamped items, and tagged headlines can be scattered throughout a file, or even a number of files. To get an overview of open action items, or of events that are important for a particular date, this information must be collected, sorted, and displayed in an organized way.
The way [[https://orgmode.org][Org Mode]] works, TODO items, time-stamped items, and tagged headlines can be scattered throughout a file, or even a number of files. To get an overview of open action items, or of events that are important for a particular date, this information must be collected, sorted, and displayed in an organized way.
@ -1986,7 +1986,7 @@ The way [[https://orgmode.org][Org Mode]] works, TODO items, time-stamped items,
[[https://wikipedia.org/wiki/Tex_Live][TeX Live]] is a free software distributution for the TeX typesetting system that includes major TeX-related programs, macro packages, and fonts. Since TeX Live consists of /thousands/ of packages, to make managing it easier, NixOS replicates the organization of Tex Live into /schemes/ and /collections/:
[[https://wikipedia.org/wiki/Tex_Live][TeX Live]] is a free software distributution for the TeX typesetting system that includes major TeX-related programs, macro packages, and fonts. Since TeX Live consists of /thousands/ of packages, to make managing it easier, NixOS replicates the organization of Tex Live into /schemes/ and /collections/:
@ -2452,7 +2452,7 @@ Rustic is a fork of Rust Mode that integrates well with the [[https://microsoft.
rustic-lsp-server 'rls)
rustic-lsp-server 'rls)
#+END_SRC
#+END_SRC
** Python Mode
*** Python Mode
#+NAME: emacs-python-package
#+NAME: emacs-python-package
#+BEGIN_SRC nix
#+BEGIN_SRC nix
@ -2469,21 +2469,21 @@ The built in [[https://emacswiki.org/emacs/PythonProgrammingInEmacs][Python Mode
(turn-on-pretty-mode)))
(turn-on-pretty-mode)))
#+END_SRC
#+END_SRC
** Protobuf Mode
*** Protobuf Mode
#+NAME: emacs-protobuf-package
#+NAME: emacs-protobuf-package
#+BEGIN_SRC nix
#+BEGIN_SRC nix
epkgs.protobuf-mode
epkgs.protobuf-mode
#+END_SRC
#+END_SRC
** Typescript Mode
*** Typescript Mode
#+NAME: emacs-typescript-package
#+NAME: emacs-typescript-package
#+BEGIN_SRC nix
#+BEGIN_SRC nix
epkgs.typescript-mode
epkgs.typescript-mode
#+END_SRC
#+END_SRC
** PlantUML
*** PlantUML
#+NAME: emacs-plantuml-extras
#+NAME: emacs-plantuml-extras
#+BEGIN_SRC nix
#+BEGIN_SRC nix
@ -2508,7 +2508,7 @@ epkgs.plantuml-mode
org-plantuml-exec-mode 'plantuml)
org-plantuml-exec-mode 'plantuml)
#+END_SRC
#+END_SRC
** Swiper
*** Swiper
#+NAME: emacs-swiper-package
#+NAME: emacs-swiper-package
#+BEGIN_SRC nix
#+BEGIN_SRC nix
@ -2542,7 +2542,7 @@ epkgs.ivy-prescient
(ivy-prescient-mode +1)
(ivy-prescient-mode +1)
#+END_SRC
#+END_SRC
** Transparency
*** Transparency
It's possible to control the frame opacity in [[https://gnu.org/software/emacs/][GNU/Emacs]]. Unlike other transparency hacks, it's not merely showing the desktop background image, but is true transparency -- you can see other windows behind the Emacs window.
It's possible to control the frame opacity in [[https://gnu.org/software/emacs/][GNU/Emacs]]. Unlike other transparency hacks, it's not merely showing the desktop background image, but is true transparency -- you can see other windows behind the Emacs window.
@ -2553,7 +2553,7 @@ It's possible to control the frame opacity in [[https://gnu.org/software/emacs/]
Dates are important in [[https://gohugo.io][Hugo]], and they configure how dates are assigned and displayed in your content pages. Themes are also able to extract information from the configuration to display, including social media icons, subtitles, and footer sections.
Dates are important in [[https://gohugo.io][Hugo]], and they configure how dates are assigned and displayed in your content pages. Themes are also able to extract information from the configuration to display, including social media icons, subtitles, and footer sections.
@ -2767,7 +2767,7 @@ Dates are important in [[https://gohugo.io][Hugo]], and they configure how dates
url = "mailto:chris@chrishayward.xyz"
url = "mailto:chris@chrishayward.xyz"
#+END_SRC
#+END_SRC
** Privacy
*** Privacy
I do not use any analytics or tracking in my website. Depending on the theme selected, some of these features may be enabled. I opt to override those settings here to make sure no unwanted trackers are loaded.
I do not use any analytics or tracking in my website. Depending on the theme selected, some of these features may be enabled. I opt to override those settings here to make sure no unwanted trackers are loaded.
@ -2793,7 +2793,7 @@ I do not use any analytics or tracking in my website. Depending on the theme sel
disable = true
disable = true
#+END_SRC
#+END_SRC
** Layout
*** Layout
Individual pages can be configured here to define the layout of the page. This is where quick links can be configured, and other sections such as blog posts, an about section, or a contact page can be added.
Individual pages can be configured here to define the layout of the page. This is where quick links can be configured, and other sections such as blog posts, an about section, or a contact page can be added.