diff options
author | Jacob Janzen <jjanzenn@proton.me> | 2024-08-07 14:58:48 -0500 |
---|---|---|
committer | Jacob Janzen <jjanzenn@proton.me> | 2024-08-07 14:58:48 -0500 |
commit | 341c3be75228dbd23fd05208d148acecf950d573 (patch) | |
tree | ecac1a33408f61c9816c56f97a2b617ab425c68e |
initial commit
-rw-r--r-- | README.md | 3 | ||||
-rw-r--r-- | clang-format.org | 9 | ||||
-rw-r--r-- | config/discord/settings.org | 16 | ||||
-rw-r--r-- | config/emacs/config.org | 626 | ||||
-rw-r--r-- | config/emacs/feed.org | 25 | ||||
-rw-r--r-- | config/emacs/init.el | 5 | ||||
-rw-r--r-- | config/emacs/init.org | 13 | ||||
-rw-r--r-- | config/fastfetch/config.org | 92 | ||||
-rw-r--r-- | config/foot/foot.org | 52 | ||||
-rw-r--r-- | config/mpd/mpd.org | 68 | ||||
-rw-r--r-- | config/ncmpcpp/bindings.org | 28 | ||||
-rw-r--r-- | config/ncmpcpp/config.org | 16 | ||||
-rw-r--r-- | config/nvim/init.org | 37 | ||||
-rw-r--r-- | config/nvim/lua/appearance.org | 15 | ||||
-rw-r--r-- | config/nvim/lua/autocomplete.org | 57 | ||||
-rw-r--r-- | config/nvim/lua/behaviour.org | 19 | ||||
-rw-r--r-- | config/nvim/lua/format.org | 25 | ||||
-rw-r--r-- | config/nvim/lua/languageServers.org | 92 | ||||
-rw-r--r-- | config/nvim/lua/plugins.org | 49 | ||||
-rw-r--r-- | config/sway/config.org | 269 | ||||
-rw-r--r-- | config/sway/poweraction.org | 9 | ||||
-rw-r--r-- | config/sway/powerprompt.org | 19 | ||||
-rw-r--r-- | config/waybar/config.org | 110 | ||||
-rw-r--r-- | config/waybar/style.org | 142 | ||||
-rw-r--r-- | gitconfig.org | 18 | ||||
-rw-r--r-- | profile.org | 16 | ||||
-rwxr-xr-x | update-configs.sh | 10 |
27 files changed, 1840 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..125add1 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Dotfiles + +These are my configuration files. diff --git a/clang-format.org b/clang-format.org new file mode 100644 index 0000000..66ebc8a --- /dev/null +++ b/clang-format.org @@ -0,0 +1,9 @@ +#+title: Clang-Format Settings +Use a style similar to Linux kernel style (but with 4-wide indents and spaces over tabs). +#+begin_src yaml :tangle .clang-format +BasedOnStyle: LLVM +IndentWidth: 4 +BreakBeforeBraces: Linux +AllowShortIfStatementsOnASingleLine: false +IndentCaseLabels: false +#+end_src diff --git a/config/discord/settings.org b/config/discord/settings.org new file mode 100644 index 0000000..7323f78 --- /dev/null +++ b/config/discord/settings.org @@ -0,0 +1,16 @@ +#+title: Discord settings.json +There really isn't much to this. I do set =SKIP_HOST_UPDATE= to =true= though to prevent it from trying to auto-update before it appears in my operating system repositories. +#+begin_src json :tangle yes +{ + "IS_MAXIMIZED": false, + "IS_MINIMIZED": false, + "SKIP_HOST_UPDATE": true, + "chromiumSwitches": {}, + "WINDOW_BOUNDS": { + "x": 0, + "y": 0, + "width": 1060, + "height": 1870 + } +} +#+end_src diff --git a/config/emacs/config.org b/config/emacs/config.org new file mode 100644 index 0000000..495f37c --- /dev/null +++ b/config/emacs/config.org @@ -0,0 +1,626 @@ +#+title: Emacs Configuration +* Package Setup +Set up package archives including =melpa=, =org=, and =elpa=. +#+begin_src emacs-lisp + (require 'package) + + (setq package-archives '(("melpa" . "https://melpa.org/packages/") + ("org" . "https://orgmode.org/elpa/") + ("elpa" . "https://elpa.gnu.org/packages/"))) + + (package-initialize) + (unless package-archive-contents + (package-refresh-contents)) +#+end_src + +Install =use-package= for declarative package installation. Make =use-package= default to =ensure t= so that packages are enabled if they are declared. +#+begin_src emacs-lisp + (unless (package-installed-p 'use-package) + (package-install 'use-package)) + + (require 'use-package) + (setq use-package-always-ensure t) +#+end_src + +* User Interface +** Theming +Set the default font to the Source Code Pro nerd font variant. I use size 14 font. +#+begin_src emacs-lisp + (set-face-attribute 'default t :font "Sauce Code Pro Nerd Font-14") +#+end_src + +Use the Doom Nord light theme. +#+begin_src emacs-lisp + (use-package doom-themes + :config + (setq doom-themes-enable-bold t + doom-themes-enable-italic t) + (load-theme 'doom-nord-light t) + (doom-themes-org-config)) +#+end_src + +Use =doom-modeline= for a nicer modeline. +#+begin_src emacs-lisp + (use-package doom-modeline + :init (doom-modeline-mode 1)) +#+end_src + +** Clean UI +Disable the Emacs start screen and make the =scratch= buffer default to empty. +#+begin_src emacs-lisp + (setq inhibit-startup-screen t) + (setq initial-scratch-message nil) +#+end_src + +Disable scroll bar, tool bar, and menu bar. +#+begin_src emacs-lisp + (scroll-bar-mode -1) + (tool-bar-mode -1) + (menu-bar-mode -1) +#+end_src + +** Fancy Stuff +Use line numbers by default. +#+begin_src emacs-lisp + (global-display-line-numbers-mode 1) +#+end_src + +Highlight changes for an operation with =evil-goggles=. +#+begin_src emacs-lisp + (use-package evil-goggles + :after evil + :config + (evil-goggles-mode) + (evil-goggles-use-diff-faces)) +#+end_src + +Install nerd font icons. +#+begin_src emacs-lisp + (use-package nerd-icons) +#+end_src + +Scroll one line at a time. +#+begin_src emacs-lisp + (setq scroll-conservatively most-positive-fixnum) +#+end_src + +Create parent directories when they don't yet exist. +#+begin_src emacs-lisp + (defun jj/create-non-existent-directory () + (let ((parent-directory (file-name-directory buffer-file-name))) + (when (and (not (file-exists-p parent-directory)) + (y-or-n-p (format "Directory `%s' does not exist! Create it?" parent-directory))) + (make-directory parent-directory t)))) + (add-to-list 'find-file-not-found-functions #'jj/create-non-existent-directory) +#+end_src + + +** Whitespace Management +Use spaces over tabs and set tab width to 4. +#+begin_src emacs-lisp + (setq-default indent-tabs-mode nil) + (setq tab-width 4 + c-basic-offset tab-width) +#+end_src + +Delete trailing whitespace on save. +#+begin_src emacs-lisp + (defun jj/before-save-hook () + (unless (eql (with-current-buffer (current-buffer) major-mode) + 'markdown-mode) + (delete-trailing-whitespace))) + (add-hook 'before-save-hook #'jj/before-save-hook) +#+end_src + +** Backup Management +Don't create backup files. +#+begin_src emacs-lisp + (setq make-backup-files nil) +#+end_src + +** Customize =dired= +Use nerd font icons in =dired=. +#+begin_src emacs-lisp + (use-package nerd-icons-dired + :hook dired-mode) +#+end_src + +Use colours in =dired= with =diredfl=. +#+begin_src emacs-lisp + (use-package diredfl + :init (diredfl-global-mode 1)) +#+end_src + +* Tools +** Vi Keybindings +Use =vi= keybindings with =evil=. Set the undo system to =undo-fu=. Wrapped lines can be moved between with =j= and =k=. +#+begin_src emacs-lisp + (use-package evil + :init + (setq evil-want-keybinding nil) + :config + (evil-mode) + (evil-global-set-key 'motion "j" 'evil-next-visual-line) + (evil-global-set-key 'motion "k" 'evil-previous-visual-line) + :custom + (evil-undo-system 'undo-fu)) +#+end_src + +Use =evil-collection= to include =vi= keybindings in extra modes. +#+begin_src emacs-lisp + (use-package evil-collection + :after evil + :config + (evil-collection-init)) +#+end_src + +** Lisp Editing +Better Lisp editing with =lispy= and =lispyville=. +#+begin_src emacs-lisp + (use-package lispy + :hook emacs-lisp-mode) + (use-package lispyville + :after lispy + :hook lispy-mode) +#+end_src + +Better parentheses handling in lisp with =parinfer-rust-mode=. +#+begin_src emacs-lisp + (use-package parinfer-rust-mode + :hook emacs-lisp-mode + :init + (setq parinfer-rust-auto-download t)) +#+end_src + +** Undo +Better undo with =undo-fu=. +#+begin_src emacs-lisp + (use-package undo-fu) +#+end_src + +Make undo persistent when closing Emacs with =undo-fu-session=. +#+begin_src emacs-lisp + (use-package undo-fu-session + :init (undo-fu-session-global-mode 1)) +#+end_src + +** Lookup +Better lookup with =dumb-jump=. +#+begin_src emacs-lisp + (use-package dumb-jump + :init (add-hook 'xref-backend-functions #'dumb-jump-xref-activate)) +#+end_src + +** Version Control +Install Magit for Git integration. +#+begin_src emacs-lisp + (use-package magit) +#+end_src + +** Document Viewing +Replace =DocView= with a better document viewer from =pdf-tools=. +#+begin_src emacs-lisp + (use-package pdf-tools + :config + (pdf-tools-install) + :init + (add-hook 'pdf-view-mode-hook #'(lambda () (display-line-numbers-mode -1))) + (add-hook 'TeX-after-compilation-finished-functions + #'TeX-revert-document-buffer) + :config + (setq TeX-view-program-selection '((output-pdf "PDF Tools")) + TeX-view-program-list '(("PDF Tools" TeX-pdf-tools-sync-view)) + TeX-source-correlate-start-server t)) +#+end_src + +Save place in PDFs with =saveplace-pdf-view=. +#+begin_src emacs-lisp + (use-package saveplace-pdf-view + :config (save-place-mode 1)) +#+end_src + +** Org-Mode +Set my =org-mode= directory. +#+begin_src emacs-lisp +(setq org-directory "~/org") +#+end_src + +Hide emphasis markers because I can see if something is *bold*, /italic/, or =monospace= without needing to see the markers. +#+begin_src emacs-lisp +(setq org-hide-emphasis-markers t) +#+end_src + +Set up nicer looking bullet points. +- they look like circles +- instead of hyphens +#+begin_src emacs-lisp +(font-lock-add-keywords 'org-mode + '(("^ *\\([-]\\) " + (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•")))))) +#+end_src + +Set up fonts. Don't use =monospace= by default. Do use it where necessary though. Also, make different heading levels different sizes. +#+begin_src emacs-lisp +(add-hook 'org-mode-hook 'variable-pitch-mode) +(custom-set-faces + '(variable-pitch ((t (:family "CMU Serif" :height 130 :weight thin)))) + '(fixed-pitch ((t (:family "SauceCodePro Nerd Font" :height 110 :weight regular)))) + '(org-block ((t (:inherit fixed-pitch)))) + '(org-code ((t (:inherit (shadow fixed-pitch))))) + '(org-document-info-keyword ((t (:inherit (shadow fixed-pitch))))) + '(org-meta-line ((t (:inherit (font-lock-comment-face fixed-pitch))))) + '(org-verbatim ((t (:inherit (shadow fixed-pitch))))) + '(org-table ((t (:inherit (shadow fixed-pitch))))) + '(org-document-title ((t (:inherit title :height 2.0 :underline nil)))) + '(org-level-1 ((t (:inherit outline-1 :weight: bold :height 1.75)))) + '(org-level-2 ((t (:inherit outline-2 :weight: bold :height 1.5)))) + '(org-level-2 ((t (:inherit outline-3 :weight: bold :height 1.25)))) + '(org-level-2 ((t (:inherit outline-4 :weight: bold :height 1.1)))) + '(org-level-4 ((t (:inherit outline-4 :height 1.1)))) + '(org-level-5 ((t (:inherit outline-5 :height 1.0)))) + ) +#+end_src + +Wrap lines and centre the view to make for a nicer reading experience. +#+begin_src emacs-lisp +(use-package visual-fill-column) +(add-hook 'org-mode-hook 'visual-line-mode) +(add-hook 'org-mode-hook #'(lambda () (display-line-numbers-mode -1))) +(defun jj/org-mode-visual-fill () + (setq visual-fill-column-width 100 + visual-fill-column-center-text t) + (visual-fill-column-mode 1)) +(add-hook 'org-mode-hook #'jj/org-mode-visual-fill) +#+end_src + +Increase the size of LaTeX previews. +#+begin_src emacs-lisp +(setq org-format-latex-options (plist-put org-format-latex-options :scale 2.0)) +#+end_src + +Follow links with the return key. +#+begin_src emacs-lisp +(setq org-return-follows-link t) +#+end_src + +Tangle on save. +#+begin_src emacs-lisp +(add-hook 'org-mode-hook + (lambda () + (add-hook 'after-save-hook #'org-babel-tangle))) +#+end_src + + +** Shell +Use =eshell= as an integrated shell. +#+begin_src emacs-lisp + (use-package eshell) +#+end_src + +** Language Servers +Add =eglot= keybindings. +#+begin_src emacs-lisp + (global-set-key (kbd "C-c r") 'eglot-rename) + (global-set-key (kbd "C-c a") 'eglot-code-actions) +#+end_src + +Install =tree-sitter=. +#+begin_src emacs-lisp + (use-package tree-sitter) + (use-package tree-sitter-langs) +#+end_src + +Define function to set up =eglot= automatically. +#+begin_src emacs-lisp + (defun jj/eglot-setup () + (eglot-ensure) + (tree-sitter-mode 1) + (tree-sitter-hl-mode 1)) +#+end_src + +** Completions +Use company for completions with no delay, starting immediately after first character is typed. +#+begin_src emacs-lisp + (use-package company + :config + (add-hook 'after-init-hook 'global-company-mode) + (setq company-idle-delay 0 + company-minimum-prefix-length 1 + company-selection-wrap-around t)) +#+end_src + +Use =vertico= as a completion user interface. +#+begin_src emacs-lisp + (use-package vertico + :custom + (vertico-cycle t) + :init + (vertico-mode)) +#+end_src + +Use =orderless= to allow typing any portion of a word that you want to search for. +#+begin_src emacs-lisp + (use-package orderless + :ensure t + :custom + (completion-styles '(orderless basic)) + (completion-category-overrides '((file (styles basic partial-completion))))) +#+end_src + +Get descriptions of items in =vertico= with =marginalia=. +#+begin_src emacs-lisp + (use-package marginalia + :bind (:map minibuffer-local-map + ("M-A" . marginalia-cycle)) + :init + (marginalia-mode)) +#+end_src + +Get nerd font icons in completions. +#+begin_src emacs-lisp + (use-package nerd-icons-completion + :config + (nerd-icons-completion-mode)) +#+end_src + +Use consult with =vertico= for extra functionality to various functions. +#+begin_src emacs-lisp + (use-package consult + :bind ( + ("C-c M-x" . consult-mode-command) + ("C-c h" . consult-history) + ("C-c k" . consult-kmacro) + ("C-c m" . consult-man) + ("C-c i" . consult-info) + ([remap Info-search] . consult-info) + ("C-x M-:" . consult-complex-command) + ("C-x b" . consult-buffer) + ("C-x 4 b" . consult-buffer-other-window) + ("C-x 5 b" . consult-buffer-other-frame) + ("C-x t b" . consult-buffer-other-tab) + ("C-x r b" . consult-bookmark) + ("C-x p b" . consult-project-buffer) + ("M-#" . consult-register-load) + ("M-'" . consult-register-store) + ("C-M-#" . consult-register) + ("M-y" . consult-yank-pop) + ("M-g e" . consult-compile-error) + ("M-g f" . consult-flycheck) + ("M-g g" . consult-goto-line) + ("M-g M-g" . consult-goto-line) + ("M-g o" . consult-outline) + ("M-g m" . consult-mark) + ("M-g k" . consult-global-mark) + ("M-g i" . consult-imenu) + ("M-g I" . consult-imenu-multi) + ("M-s d" . consult-fd) + ("M-s c" . consult-locate) + ("M-s g" . consult-grep) + ("M-s G" . consult-git-grep) + ("M-s r" . consult-ripgrep) + ("M-s l" . consult-line) + ("M-s L" . consult-line-multi) + ("M-s k" . consult-keep-lines) + ("M-s u" . consult-focus-lines) + ("M-s e" . consult-isearch-history) + :map isearch-mode-map + ("M-e" . consult-isearch-history) + ("M-s e" . consult-isearch-history) + ("M-s l" . consult-line) + ("M-s L" . consult-line-multi) + :map minibuffer-local-map + ("M-s" . consult-history) + ("M-r" . consult-history)) + :hook (completion-list-mode . consult-preview-at-point-mode) + :init + (setq register-preview-delay 0.5 + register-preview-function #'consult-register-format) + (advice-add #'register-preview :override #'consult-register-window) + (setq xref-show-xrefs-function #'consult-xref + xref-show-definitions-function #'consult-xref) + :config + (consult-customize + consult-theme :preview-key '(:debounce 0.2 any) + consult-ripgrep consult-git-grep consult-grep + consult-bookmark consult-recent-file consult-xref + consult--source-bookmark consult--source-file-register + consult--source-recent-file consult--source-project-recent-file + :preview-key '(:debounce 0.4 any)) + (setq consult-narrow-key "<")) +#+end_src + +Use Flycheck for syntax checking. +#+begin_src emacs-lisp + (use-package flycheck + :config + (add-hook 'after-init-hook #'global-flycheck-mode)) +#+end_src + +Use Flyspell for spell checking. +#+begin_src emacs-lisp + (dolist (hook '(text-mode-hook)) + (add-hook hook (lambda () (flyspell-mode 1)))) + (use-package flyspell-correct + :after flyspell + :bind (:map flyspell-mode-map ("C-;" . flyspell-correct-wrapper))) +#+end_src + +** Snippets +Use =yasnippet= for snippets so I don't need to type as much. +#+begin_src emacs-lisp + (use-package yasnippet + :init + (yas-global-mode 1) + :config + (global-set-key (kbd "C-c s") 'yas-insert-snippet)) +#+end_src + +Install snippet collection for =yasnippet=. +#+begin_src emacs-lisp + (use-package yasnippet-snippets) +#+end_src + +** Formatting +Automatically format with Apheleia and =clang-format=. +#+begin_src emacs-lisp + (use-package apheleia + :init (apheleia-global-mode +1)) + (use-package clang-format) +#+end_src + +** RSS +Use Emacs as an RSS feed with =elfeed=. +#+begin_src emacs-lisp + (use-package elfeed + :config + (global-set-key (kbd "C-c w") 'elfeed) + (global-set-key (kbd "C-c C-W") 'elfeed-update)) +#+end_src + +Make =elfeed= more powerful with =elfeed-goodies=. +#+begin_src emacs-lisp + (use-package elfeed-goodies + :after elfeed + :config + (elfeed-goodies/setup)) +#+end_src + +Store my feed in Org-mode [[./feed.org][here]]. +#+begin_src emacs-lisp + (use-package elfeed-org + :config + (elfeed-org) + (setq rmh-elfeed-org-files (list "~/.config/emacs/feed.org"))) +#+end_src + +** Deft +Use the Deft package to manage notes. +#+begin_src emacs-lisp + (use-package deft + :config + (global-set-key (kbd "C-c d") 'deft) + (setq deft-directory "~/notes/" + deft-default-extension "org")) +#+end_src + +* Languages +** Shell Script +Run =eglot= on shell script files. +#+begin_src emacs-lisp + (add-hook 'sh-mode-hook 'jj/eglot-setup) +#+end_src + +** C +Run =eglot= on C and C++ files. +#+begin_src emacs-lisp + (add-hook 'c-mode-hook 'jj/eglot-setup) + (add-hook 'c++-mode-hook 'jj/eglot-setup) + (add-hook 'cc-mode-hook 'jj/eglot-setup) +#+end_src + +** Web +Run =eglot= on HTML files. +#+begin_src emacs-lisp + (add-hook 'html-mode-hook 'jj/eglot-setup) +#+end_src + +Run =eglot= on CSS files. +#+begin_src emacs-lisp + (add-hook 'css-mode-hook 'jj/eglot-setup) +#+end_src + +Run =eglot= on JavaScript/Typescript files. +#+begin_src emacs-lisp + (add-hook 'js-json-mode-hook 'jj/eglot-setup) + (add-hook 'js-mode-hook 'jj/eglot-setup) + (use-package typescript-mode + :init + (add-hook 'typescript-mode-hook 'jj/eglot-setup)) +#+end_src + +** Python +Run =eglot= on Python files. +#+begin_src emacs-lisp + (add-hook 'python-mode-hook 'jj/eglot-setup) +#+end_src + +** TODO Rust +Run =eglot= on Rust files. (This does not work at all) +#+begin_src emacs-lisp + (use-package rust-mode + :init + (add-hook 'rust-mode-hook 'jj/eglot-setup)) +#+end_src + +** Go +Run =eglot= on Go files. +#+begin_src emacs-lisp + (use-package go-mode + :init + (add-hook 'go-mode-hook 'jj/eglot-setup)) +#+end_src + +Get documentation for Go variables, functions, and arguments. +#+begin_src emacs-lisp + (use-package go-eldoc + :init + (add-hook 'go-mode-hook 'go-eldoc-setup)) +#+end_src + +Automatically generate tests. +#+begin_src emacs-lisp + (use-package go-gen-test) +#+end_src + +Refactoring tools from =go-guru=. +#+begin_src emacs-lisp + (use-package go-guru + :hook (go-mode . go-guru-hl-identifier-mode)) +#+end_src + +** Lua +Run =eglot= on Lua files. +#+begin_src emacs-lisp + (use-package lua-mode + :init + (add-hook 'lua-mode-hook 'jj/eglot-setup)) +#+end_src + +** Markdown +Run =eglot= on Markdown files. +#+begin_src emacs-lisp + (use-package markdown-mode + :init + (add-hook 'markdown-mode-hook 'jj/eglot-setup)) +#+end_src + +** LaTeX +Run =eglot= on TeX files. +#+begin_src emacs-lisp + (add-hook 'tex-mode-hook 'jj/eglot-setup) +#+end_src + +Use AUCTeX for extra LaTeX integrations. +#+begin_src emacs-lisp + (use-package auctex + :config + (add-hook 'LaTeX-mode-hook 'jj/eglot-setup) + (add-hook 'LaTeX-mode-hook + (lambda () + (put 'LaTeX-mode 'eglot-language-id "latex")))) +#+end_src + +Use CDLaTeX for environment and macro insertion. +#+begin_src emacs-lisp + (use-package cdlatex + :config + (add-hook 'LaTeX-mode-hook #'turn-on-cdlatex)) +#+end_src + +** YAML +Run =eglot= on YAML files. +#+begin_src emacs-lisp + (use-package yaml-mode + :init + (add-hook 'yaml-mode-hook 'jj/eglot-setup)) +#+end_src diff --git a/config/emacs/feed.org b/config/emacs/feed.org new file mode 100644 index 0000000..045ac62 --- /dev/null +++ b/config/emacs/feed.org @@ -0,0 +1,25 @@ +* Blogs +:PROPERTIES: +:ID: elfeed +:END: +** http://feeds.feedburner.com/InformationIsBeautiful +** [[http://orgmode.org][Org Mode Links supported as well]] +** Software Development :dev: +*** Emacs :emacs:mustread: +**** http://www.terminally-incoherent.com/blog/feed +**** http://nullprogram.com/feed +**** entry-title: \(emacs\|org-mode\) +**** http://planet.emacsen.org/atom.xml +**** [[toobnix:154][EmacsConf]] +*** Web Development :web: +**** http://planet.phpunit.de/atom.xml +**** http://feeds.feedburner.com/symfony/blog +**** http://feeds.feedburner.com/qooxdoo/blog/content +*** Eclipse :eclipse: +**** http://blog.eclipse-tips.com/feeds/posts/default?alt=rss +**** http://ed-merks.blogspot.com/feeds/posts/default + A description of a feed can be written under any headline. + The text will be ignored by elfeed. +**** http://feeds.feedburner.com/eclipselive :ignore: +**** http://www.fosslc.org/drupal/rss.xml :video: +#+link: toobnix https://toobnix.org/feeds/videos.xml?videoChannelId= diff --git a/config/emacs/init.el b/config/emacs/init.el new file mode 100644 index 0000000..cc210a3 --- /dev/null +++ b/config/emacs/init.el @@ -0,0 +1,5 @@ +(setq custom-file (concat user-emacs-directory "custom.el")) +(when (file-exists-p custom-file) + (load custom-file)) + +(org-babel-load-file "~/.config/emacs/config.org") diff --git a/config/emacs/init.org b/config/emacs/init.org new file mode 100644 index 0000000..36131cf --- /dev/null +++ b/config/emacs/init.org @@ -0,0 +1,13 @@ +#+title: Emacs =init.el= + +Force the usage of a =custom.el= file for customizations. +#+begin_src emacs-lisp :tangle yes +(setq custom-file (concat user-emacs-directory "custom.el")) +(when (file-exists-p custom-file) + (load custom-file)) +#+end_src + +Load the main configuration from [[./config.org][config.org]]. +#+begin_src emacs-lisp :tangle yes +(org-babel-load-file "~/.config/emacs/config.org") +#+end_src diff --git a/config/fastfetch/config.org b/config/fastfetch/config.org new file mode 100644 index 0000000..3aec5f6 --- /dev/null +++ b/config/fastfetch/config.org @@ -0,0 +1,92 @@ +#+title: Fastfetch Settings +Open a JSON object. +#+begin_src jsonc :tangle yes + { +#+end_src + +Use a =sixel= image for the logo. +#+begin_src jsonc :tangle yes + "logo": { + "type": "raw", + "source": "~/.config/fastfetch/logo.sixel", + "width": 40, + "height": 19 + }, +#+end_src + +Two spaces between an item and its key. +#+begin_src jsonc :tangle yes + "display": { + "separator": " " + }, +#+end_src + +Define the modules in the =fastfetch= display. +#+begin_src jsonc :tangle yes + "modules": [ + "title", + { + "type": "custom", + "format": "──────────────────────────────────" + }, + { + "type": "os", + "key": "" + }, + { + "type": "kernel", + "key": "" + }, + { + "type": "uptime", + "key": "" + }, + { + "type": "packages", + "key": "" + }, + { + "type": "shell", + "key": "" + }, + { + "type": "display", + "key": "" + }, + { + "type": "wm", + "key": "" + }, + { + "type": "terminal", + "key": "" + }, + { + "type": "cpu", + "key": "" + }, + { + "type": "gpu", + "key": "" + }, + { + "type": "memory", + "key": "" + }, + { + "type": "disk", + "key": "" + }, + { + "type": "locale", + "key": "" + }, + "break", + "colors" + ] +#+end_src + +Close the JSON object. +#+begin_src jsonc :tangle yes +} +#+end_src diff --git a/config/foot/foot.org b/config/foot/foot.org new file mode 100644 index 0000000..922964a --- /dev/null +++ b/config/foot/foot.org @@ -0,0 +1,52 @@ +#+title: Foot Settings +* Basic Settings +Use Source Code Pro with Nerd Font in size 10. +#+begin_src ini :tangle yes +font=SauceCodePro Nerd Font:size=10 +#+end_src + +Add 6 pixel padding around the terminal. +#+begin_src ini :tangle yes +pad=6x6 +#+end_src + +* URL +Use Firefox to open URLs. +#+begin_src ini :tangle yes +[url] +launch=firefox ${url} +#+end_src + +* Mouse +Hide the mouse when typing. +#+begin_src ini :tangle yes +[mouse] +hide-when-typing=yes +#+end_src + +* Colours +The colours are defined here. I use a slightly transparent background. +#+begin_src ini :tangle yes +[colors] +alpha=0.9 +background=fcfcfc +foreground=5c6166 + +regular0=010101 +regular1=e7666a +regular2=80ab24 +regular3=eba54d +regular4=4196df +regular5=9870c3 +regular6=51b891 +regular7=c1c1c1 + +bright0=343434 +bright1=ee9295 +bright2=9fd32f +bright3=f0bc7b +bright4=6daee6 +bright5=b294d2 +bright6=75c7a8 +bright7=dbdbdb +#+end_src diff --git a/config/mpd/mpd.org b/config/mpd/mpd.org new file mode 100644 index 0000000..4fa290e --- /dev/null +++ b/config/mpd/mpd.org @@ -0,0 +1,68 @@ +#+title: MPD Settings +* Directories +Check for music files in =~/Music=. +#+begin_src conf :tangle yes +music_directory "~/Music" +#+end_src + +Put playlists at =~/.config/mpd/playlists=. +#+begin_src conf :tangle yes +playlist_directory "~/.config/mpd/playlists" +#+end_src + +Put database at =~/.config/mpd/database=. +#+begin_src conf :tangle yes +db_file "~/.config/mpd/database" +#+end_src + +Put log file at =~/.config/mpd/log=. +#+begin_src conf :tangle yes +log_file "~/.config/mpd/log" +#+end_src + +Put PID file at =~/.config/mpd/pid=. +#+begin_src conf :tangle yes +pid_file "~/.config/mpd/pid" +#+end_src + +Put the state file at =~/.config/mpd/state=. +#+begin_src conf :tangle yes +state_file "~/.config/mpd/state" +#+end_src + +Put the sticker file at =~/.config/mpd/sticker.sql=. +#+begin_src conf :tangle yes +sticker_file "~/.config/mpd/sticker.sql" +#+end_src + +Use UTF-8 in the file system. +#+begin_src conf :tangle yes +filesystem_charset "UTF-8" +#+end_src + +* Network +Run MPD on =localhost=. +#+begin_src conf :tangle yes +bind_to_address "localhost" +#+end_src + +* Outputs +Output to PipeWire. +#+begin_src conf :tangle yes +audio_output { + type "pipewire" + name "Pipewire" + mixer_type "hardware" + enabled "yes" +} +#+end_src + +Output to FIFO. +#+begin_src conf :tangle yes +audio_output { + type "fifo" + name "my_fifo" + path "~/.config/mpd/mpd.fifo" + format "44100:16:2" +} +#+end_src diff --git a/config/ncmpcpp/bindings.org b/config/ncmpcpp/bindings.org new file mode 100644 index 0000000..159d3ae --- /dev/null +++ b/config/ncmpcpp/bindings.org @@ -0,0 +1,28 @@ +#+title: =ncmpcpp= Keyboard Bindings +Use =vi= motions. +#+begin_src txt :tangle bindings +def_key "j" + scroll_down +def_key "k" + scroll_up +def_key "h" + previous_column +def_key "l" + next_column +def_key "ctrl-b" + page_up +def_key "ctrl-u" + page_up +def_key "ctrl-f" + page_down +def_key "ctrl-d" + page_down +def_key "g" + move_home +def_key "G" + move_end +def_key "n" + next_found_item +def_key "N" + previous_found_item +#+end_src diff --git a/config/ncmpcpp/config.org b/config/ncmpcpp/config.org new file mode 100644 index 0000000..18a2a0e --- /dev/null +++ b/config/ncmpcpp/config.org @@ -0,0 +1,16 @@ +#+title: =ncmpcpp= Configuration +Set the =ncmpcpp= directory to =~/.config/ncmpcpp/=. +#+begin_src conf :tangle config +ncmpcpp_directory = "~/.ncmpcpp" +#+end_src + +Set the host/port pair to find the music player daemon at. +#+begin_src conf :tangle config +mpd_host = "localhost" +mpd_port = "6600" +#+end_src + +Specify the location of the Music directory to be =~/Music=. +#+begin_src conf :tangle config +mpd_music_dir = "~/Music" +#+end_src diff --git a/config/nvim/init.org b/config/nvim/init.org new file mode 100644 index 0000000..703e8e2 --- /dev/null +++ b/config/nvim/init.org @@ -0,0 +1,37 @@ +#+title: Neovim Settings +This is the entry point for my Neovim configuration. + +Disable timeout to speed things up. +#+begin_src lua :tangle yes +vim.cmd([[set notimeout]]) +#+end_src + +Install plugins in the [[./lua/plugins.org][plugins.lua]] file. +#+begin_src lua :tangle yes +require('plugins') +#+end_src + +Set up behaviour in the [[./lua/behaviour.org][behaviour.lua]] file. +#+begin_src lua :tangle yes +require('behaviour') +#+end_src + +Set up appearance in the [[./lua/appearance.org][appearance.lua]] file. +#+begin_src lua :tangle yes +require('appearance') +#+end_src + +Set up formatting options in the [[./lua/format.org][format.lua]] file. +#+begin_src lua :tangle yes +require('format') +#+end_src + +Set up language servers in the [[./lua/languageServers.org][languageServers.lua]] file. +#+begin_src lua :tangle yes +require('languageServers') +#+end_src + +Set up auto-complete in the [[./lua/autocomplete.org][autocomplete.lua]] file. +#+begin_src lua :tangle yes +require('autocomplete') +#+end_src diff --git a/config/nvim/lua/appearance.org b/config/nvim/lua/appearance.org new file mode 100644 index 0000000..6cbf4ba --- /dev/null +++ b/config/nvim/lua/appearance.org @@ -0,0 +1,15 @@ +#+title: Neovim Appearance Settings +Use line numbers. +#+begin_src lua :tangle yes + vim.opt.number = true +#+end_src + +Set colour scheme. +#+begin_src lua :tangle yes + vim.cmd([[ + set termguicolors + let ayucolor="light" + syntax on + colorscheme ayu + ]]) +#+end_src diff --git a/config/nvim/lua/autocomplete.org b/config/nvim/lua/autocomplete.org new file mode 100644 index 0000000..505e93c --- /dev/null +++ b/config/nvim/lua/autocomplete.org @@ -0,0 +1,57 @@ +#+title: Neovim Auto-complete Settings +Set up auto-completion with LSP. +#+begin_src lua :tangle yes + local capabilities = require("cmp_nvim_lsp").default_capabilities() + + local lspconfig = require('lspconfig') + + local servers = { 'clangd', 'rust_analyzer', 'pyright', 'tsserver' } + for _, lsp in ipairs(servers) do + lspconfig[lsp].setup { + -- on_attach = my_custom_on_attach, + capabilities = capabilities, + } + end + + local luasnip = require 'luasnip' + + local cmp = require 'cmp' + cmp.setup { + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert({ + ['<C-d>'] = cmp.mapping.scroll_docs(-4), + ['<C-f>'] = cmp.mapping.scroll_docs(4), + ['<C-Space>'] = cmp.mapping.complete(), + ['<CR>'] = cmp.mapping.confirm { + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }, + ['<Tab>'] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + else + fallback() + end + end, { 'i', 's' }), + ['<S-Tab>'] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { 'i', 's' }), + }), + sources = { + { name = 'nvim_lsp' }, + { name = 'luasnip' }, + }, + } +#+end_src diff --git a/config/nvim/lua/behaviour.org b/config/nvim/lua/behaviour.org new file mode 100644 index 0000000..d843d7b --- /dev/null +++ b/config/nvim/lua/behaviour.org @@ -0,0 +1,19 @@ +#+title: Neovim Behaviour Settings + +Use tabs with width 4. +#+begin_src lua :tangle yes + vim.opt.tabstop = 4 + vim.opt.expandtab = true + vim.opt.shiftwidth = 4 + vim.opt.autoindent = true +#+end_src + +Better command line completion. +#+begin_src lua :tangle yes + vim.opt.wildmode = 'longest,list' +#+end_src + +Better management of file types. +#+begin_src lua :tangle yes + vim.cmd('filetype plugin indent on') +#+end_src diff --git a/config/nvim/lua/format.org b/config/nvim/lua/format.org new file mode 100644 index 0000000..5b362d0 --- /dev/null +++ b/config/nvim/lua/format.org @@ -0,0 +1,25 @@ +#+title: Neovim Formatting Settings +Turn on =clang-format= in C, CUDA, C++, C#, Java, JavaScript, and JSON. +#+begin_src lua :tangle yes + vim.cmd([[ + let g:clang_format#code_style = 'file' + autocmd FileType c ClangFormatAutoEnable + autocmd FileType cuda ClangFormatAutoEnable + autocmd FileType cpp ClangFormatAutoEnable + autocmd FileType cs ClangFormatAutoEnable + autocmd FileType java ClangFormatAutoEnable + autocmd FileType javascript ClangFormatAutoEnable + autocmd FileType json ClangFormatAutoEnable + let g:vimtex_view_method = 'skim' + ]]) +#+end_src + +Auto-format Rust on save. +#+begin_src lua :tangle yes + vim.g.rustfmt_autosave = 1 +#+end_src + +Start making a table by placing a =|=. +#+begin_src lua :tangle yes + vim.g.table_mode_corner = '|' +#+end_src diff --git a/config/nvim/lua/languageServers.org b/config/nvim/lua/languageServers.org new file mode 100644 index 0000000..8861ace --- /dev/null +++ b/config/nvim/lua/languageServers.org @@ -0,0 +1,92 @@ +#+title: Neovim Language Server Configuration +* Keybindings +Set keys for LSP auto-completion. +#+begin_src lua :tangle yes + vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, opts) + vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts) + vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts) + vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, opts) + + -- Use an on_attach function to only map the following keys + -- after the language server attaches to the current buffer + local on_attach = function(client, bufnr) + -- Enable completion triggered by <c-x><c-o> + vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + + local bufopts = { noremap=true, silent=true, buffer=bufnr } + vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts) + vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts) + vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts) + vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts) + vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts) + vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, bufopts) + vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts) + vim.keymap.set('n', '<space>wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, bufopts) + vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, bufopts) + vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts) + vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts) + vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) + vim.keymap.set('n', '<space>f', function() vim.lsp.buf.format { async = true } end, bufopts) + end +#+end_src + +* Languages +Turn on LSP for various languages. +#+begin_src lua :tangle yes + require('lspconfig')['awk_ls'].setup{ + on_attach = on_attach, + flags = lsp_flags, + } + + require('lspconfig')['bashls'].setup{ + on_attach = on_attach, + flags = lsp_flags, + } + + require('lspconfig')['fortls'].setup{ + on_attach = on_attach, + flags = lsp_flags, + } + + require('lspconfig')['hls'].setup{ + on_attach = on_attach, + flags = lsp_flags + } + + require('lspconfig')['pyright'].setup{ + on_attach = on_attach, + flags = lsp_flags, + } + + require('lspconfig')['tsserver'].setup{ + on_attach = on_attach, + flags = lsp_flags, + } + + require('lspconfig')['rust_analyzer'].setup{ + on_attach = on_attach, + flags = lsp_flags, + settings = { + ["rust-analyzer"] = {} + } + } + + require('lspconfig')['gopls'].setup{ + on_attach = on_attach, + flags = lsp_flags + } + + require('lspconfig')['clangd'].setup{ + on_attach = on_attach, + flags = lsp_flags + } + + require('lspconfig')['texlab'].setup{ + on_attach = on_attach, + flags = lsp_flags + } + + require('lspconfig')['perlpls'].setup{} +#+end_src diff --git a/config/nvim/lua/plugins.org b/config/nvim/lua/plugins.org new file mode 100644 index 0000000..0dab41b --- /dev/null +++ b/config/nvim/lua/plugins.org @@ -0,0 +1,49 @@ +#+title: Neovim Plugins +* Setup +Use =lazy= to manage plugins. +#+begin_src lua :tangle yes + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not vim.loop.fs_stat(lazypath) then + vim.fn.system({ + "git", + "clone", + "--filter=blob:none", + "https://github.com/folke/lazy.nvim.git", + "--branch=stable", -- latest stable release + lazypath, + }) + end + vim.opt.rtp:prepend(lazypath) +#+end_src + +* Plugins +Install plugins here. +#+begin_src lua :tangle yes +require('lazy').setup({ + 'itchyny/lightline.vim', + 'ayu-theme/ayu-vim', + 'Raimondi/delimitMate', + 'bronson/vim-trailing-whitespace', + 'dhruvasagar/vim-table-mode', + 'rhysd/vim-clang-format', + 'chrisbra/csv.vim', + 'neovim/nvim-lspconfig', + { + 'nvim-treesitter/nvim-treesitter', + cmd = 'TSUpdate' + }, + 'junegunn/fzf', + 'junegunn/fzf.vim', + 'hrsh7th/nvim-cmp', + 'hrsh7th/cmp-nvim-lsp', + 'saadparwaiz1/cmp_luasnip', + 'L3MON4D3/LuaSnip', + { + 'fatih/vim-go', + cmd = 'GoUpdateBinaries', + }, + 'rust-lang/rust.vim', + 'neovimhaskell/haskell-vim', + 'lervag/vimtex', +}) +#+end_src diff --git a/config/sway/config.org b/config/sway/config.org new file mode 100644 index 0000000..b4923e6 --- /dev/null +++ b/config/sway/config.org @@ -0,0 +1,269 @@ +#+title: Sway Configuration +* Variables +Use =super= as modifier key. +#+begin_src conf :tangle config + set $mod Mod4 +#+end_src + +Use =vi= motions as directional inputs. +#+begin_src conf :tangle config + set $left h + set $down j + set $up k + set $right l +#+end_src + +Use =foot= as default terminal. +#+begin_src conf :tangle config + set $term foot +#+end_src + +Use =wofi= as app launcher. +#+begin_src conf :tangle config + set $menu wofi --show drun --allow-images +#+end_src + +* Startup Application +Use =dbus= environment. +#+begin_src conf :tangle config + exec --no-startup-id dbus-update-activation-environment --all +#+end_src + +Use =mako= as notification daemon. +#+begin_src conf :tangle config + exec mako +#+end_src + +Launch PipeWire without =systemd=. +#+begin_src conf :tangle config + exec gentoo-pipewire-launcher & +#+end_src + +Launch =blueman-applet= as Bluetooth daemon. +#+begin_src conf :tangle config + exec blueman-applet +#+end_src + +Launch music player daemon. +#+begin_src conf :tangle config + exec mpd +#+end_src + +Launch =mpdscribble= as scrobbler daemon. +#+begin_src conf :tangle config + exec mpdscribble +#+end_src + +* Display +I use a vertical monitor on the left and horizontal monitor on the right. +#+begin_src conf :tangle config + output HDMI-A-1 resolution 1920x1080 position 1080 140 + output HDMI-A-2 resolution 1920x1080 transform 90 position 0 0 +#+end_src + +Use the file at =~/.wallpaper= as my wallpaper. +#+begin_src conf :tangle config + output * bg ~/.wallpaper fill +#+end_src + +Remove borders from windows. +#+begin_src conf :tangle config + default_border none + default_floating_border none + font pango:monospace 1 +#+end_src + +Use 10 pixel gaps. +#+begin_src conf :tangle config + gaps inner 10 +#+end_src + +Use =waybar= as a top bar. +#+begin_src conf :tangle config + bar { + position top + + status_command waybar + mode invisible + } +#+end_src + +* Input +Use pointer acceleration. +#+begin_src conf :tangle config + input * { + accel_profile "adaptive" + pointer_accel -.5 + } +#+end_src + +* Controls +Add ability to lock the screen with =swaylock=. Turn off the screen after 15 seconds on lock screen. +#+begin_src conf :tangle config + bindsym $mod+Control+l exec swaylock --ignore-empty-password --show-failed-attempts --image ~/.wallpaper + exec swayidle -w timeout 15 'if pgrep -x swaylock; then swaymsg "output * power off"; fi' resume 'swaymsg "output * power on"' +#+end_src + +Add keybinding to open a terminal emulator. +#+begin_src conf :tangle config + bindsym $mod+Return exec $term +#+end_src + +Add keybinding for killing a window. +#+begin_src conf :tangle config + bindsym $mod+Shift+q kill +#+end_src + +Add keybinding for opening an app launcher. +#+begin_src conf :tangle config + bindsym $mod+d exec $menu +#+end_src + +Holding the modifier key allows moving a window. +#+begin_src conf :tangle config + floating_modifier $mod normal +#+end_src + +Add keybinding for reloading the configuration. +#+begin_src conf :tangle config + bindsym $mod+Shift+c reload +#+end_src + +Add keybinding to launch logout/power off/restart [[file:powerprompt.org][prompt]] which also activates with the power key. +#+begin_src conf :tangle config + bindsym $mod+Shift+e exec bash ~/.config/sway/powerprompt + bindsym XF86PowerOff exec bash ~/.config/sway/powerprompt +#+end_src + +Change focus keybindings. +#+begin_src conf :tangle config + bindsym $mod+$left focus left + bindsym $mod+$down focus down + bindsym $mod+$up focus up + bindsym $mod+$right focus right + + bindsym $mod+Left focus left + bindsym $mod+Down focus down + bindsym $mod+Up focus up + bindsym $mod+Right focus right +#+end_src + +Move window keybindings. +#+begin_src conf :tangle config + bindsym $mod+Shift+$left move left + bindsym $mod+Shift+$down move down + bindsym $mod+Shift+$up move up + bindsym $mod+Shift+$right move right + + bindsym $mod+Shift+Left move left + bindsym $mod+Shift+Down move down + bindsym $mod+Shift+Up move up + bindsym $mod+Shift+Right move right +#+end_src + +Change workspace keybindings. +#+begin_src conf :tangle config + bindsym $mod+1 workspace number 1 + bindsym $mod+2 workspace number 2 + bindsym $mod+3 workspace number 3 + bindsym $mod+4 workspace number 4 + bindsym $mod+5 workspace number 5 + bindsym $mod+6 workspace number 6 + bindsym $mod+7 workspace number 7 + bindsym $mod+8 workspace number 8 + bindsym $mod+9 workspace number 9 + bindsym $mod+0 workspace number 10 +#+end_src + +Move window to workspace keybindings. +#+begin_src conf :tangle config + bindsym $mod+Shift+1 move container to workspace number 1 + bindsym $mod+Shift+2 move container to workspace number 2 + bindsym $mod+Shift+3 move container to workspace number 3 + bindsym $mod+Shift+4 move container to workspace number 4 + bindsym $mod+Shift+5 move container to workspace number 5 + bindsym $mod+Shift+6 move container to workspace number 6 + bindsym $mod+Shift+7 move container to workspace number 7 + bindsym $mod+Shift+8 move container to workspace number 8 + bindsym $mod+Shift+9 move container to workspace number 9 + bindsym $mod+Shift+0 move container to workspace number 10 +#+end_src + +Set split direction keybindings. +#+begin_src conf :tangle config + bindsym $mod+v splith + bindsym $mod+s splitv +#+end_src + +Toggle layout keybindings. +#+begin_src conf :tangle config + bindsym $mod+e layout toggle split +#+end_src + +Define full screen keybinding. +#+begin_src conf :tangle config + bindsym $mod+f fullscreen +#+end_src + +Define toggle floating keybinding. +#+begin_src conf :tangle config + bindsym $mod+Shift+space floating toggle +#+end_src + +Move focus between floating and tiled layer keybinding. +#+begin_src conf :tangle config + bindsym $mod+space focus mode_toggle +#+end_src + +Focus on the parent window keybinding. +#+begin_src conf :tangle config + bindsym $mod+a focus parent +#+end_src + +Keybindings to move a window to the scratchpad and back from it. +#+begin_src conf :tangle config + bindsym $mod+Shift+minus move scratchpad + bindsym $mod+minus scratchpad show +#+end_src + +Add resize keybindings. +#+begin_src conf :tangle config + mode "resize" { + bindsym $left resize shrink width 10px + bindsym $down resize grow height 10px + bindsym $up resize shrink height 10px + bindsym $right resize grow width 10px + + bindsym Left resize shrink width 10px + bindsym Down resize grow height 10px + bindsym Up resize shrink height 10px + bindsym Right resize grow width 10px + + bindsym Return mode "default" + bindsym Escape mode "default" + } + bindsym $mod+r mode "resize" +#+end_src + +Add screenshot keybinding. +#+begin_src conf :tangle config + bindsym $mod+Shift+s exec grim -g "$(slurp)" - | wl-copy +#+end_src + +Add volume keybindings. +#+begin_src conf :tangle config + bindsym XF86AudioRaiseVolume exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ + bindsym XF86AudioLowerVolume exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- + bindsym XF86AudioMute exec wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +#+end_src + +Add pause keybinding. +#+begin_src conf :tangle config + bindsym XF86Eject exec mpc toggle +#+end_src + +* Extras +Load extra configuration. +#+begin_src conf :tangle config + include /etc/sway/config.d/* +#+end_src diff --git a/config/sway/poweraction.org b/config/sway/poweraction.org new file mode 100644 index 0000000..72931c7 --- /dev/null +++ b/config/sway/poweraction.org @@ -0,0 +1,9 @@ +#+title: Sway Power Action Script +Run this shell script from power off menu to either log off or power off. +#+begin_src sh :tangle poweraction + rm ~/.swaynaglock + case $1 in + logout) swaymsg exit;; + ,*) doas "/sbin/$1";; + esac +#+end_src diff --git a/config/sway/powerprompt.org b/config/sway/powerprompt.org new file mode 100644 index 0000000..796bead --- /dev/null +++ b/config/sway/powerprompt.org @@ -0,0 +1,19 @@ +#+title: Sway Power Prompt Script +Activate =swaynag= prompt with power-off options if the lock file is not present which executes an [[file:poweraction.org][action]]. +#+begin_src sh :tangle powerprompt + if test -f ~/.swaynaglock; then + killall swaynag + rm ~/.swaynaglock + else + touch ~/.swaynaglock + swaynag --background 00000030 --border 00000030 --border-bottom 00000030 --button-background 00000030 --font=SauceCodePro Nerd Font 256\ + -m '' \ + -b '' \ + 'bash ~/.config/sway/poweraction logout' \ + -b '⏻' \ + 'bash ~/.config/sway/poweraction poweroff' \ + -b '' \ + 'bash ~/.config/sway/poweraction reboot' + rm ~/.swaynaglock + fi +#+end_src diff --git a/config/waybar/config.org b/config/waybar/config.org new file mode 100644 index 0000000..a23d887 --- /dev/null +++ b/config/waybar/config.org @@ -0,0 +1,110 @@ +#+title: Waybar Configuration +* Layout +Define the layout of the bar. +#+begin_src js-json :tangle config + { + "height": 30, + "spacing": 4, + "modules-left": ["sway/workspaces", "sway/scratchpad"], + "modules-center": ["sway/window"], + "modules-right": ["mpd", "pulseaudio", "network", "cpu", "memory", "clock", "tray"], +#+end_src + +* Components +Define scratchpad component. +#+begin_src js-json :tangle config + "sway/scratchpad": { + "format": "{icon} {count}", + "show-empty": false, + "format-icons": ["", ""], + "tooltip": true, + "tooltip-format": "{app}: {title}" + }, +#+end_src + +Define music player daemon component. +#+begin_src js-json :tangle config + "mpd": { + "format": "{stateIcon} {artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) [{songPosition}|{queueLength}] 🎵", + "format-disconnected": "Disconnected 🎵", + "format-stopped": "{consumeIcon}Stopped 🎵", + "unknown-tag": "N/A", + "interval": 2, + "state-icons": { + "paused": "", + "playing": "" + }, + "tooltip-format": "MPD (connected)", + "tooltip-format-disconnected": "MPD (disconnected)", + "on-click": "foot -e ncmpcpp" + }, +#+end_src + +Define tray component. +#+begin_src js-json :tangle config + "tray": { + "icon-size": 21, + "spacing": 10, + "show-passive-items": true + }, +#+end_src + +Define clock component. +#+begin_src js-json :tangle config + "clock": { + "format": "{:%H:%M\t%Y-%m-%d}", + "tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>" + }, +#+end_src + +Define CPU usage component. +#+begin_src js-json :tangle config + "cpu": { + "format": "{usage}% ", + "tooltip": false + }, +#+end_src + +Define memory usage component. +#+begin_src js-json :tangle config + "memory": { + "format": "{}% " + }, +#+end_src + +Define network component. +#+begin_src js-json :tangle config + "network": { + // "interface": "wlp2*", // (Optional) To force the use of this interface + "format-wifi": "", + "tooltip": false, + "format-ethernet": "", + "format-linked": "", + "format-disconnected": "⚠", + "format-alt": "{ifname}: {ipaddr}/{cidr}" + }, +#+end_src + +Define audio component. +#+begin_src js-json :tangle config + "pulseaudio": { + // "scroll-step": 1, // %, can be a float + "format": "{volume}% {icon}", + "format-bluetooth": "{volume}% {icon}", + "format-bluetooth-muted": " {icon}", + "format-muted": " ", + "format-source": "{volume}% ", + "format-source-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + }, + "on-click": "pavucontrol" + } + } +#+end_src diff --git a/config/waybar/style.org b/config/waybar/style.org new file mode 100644 index 0000000..193b465 --- /dev/null +++ b/config/waybar/style.org @@ -0,0 +1,142 @@ +#+title: Waybar Styling +* Global +Set global font, colours, and transitions. +#+begin_src css :tangle yes + window#waybar { + font-family: FontAwesome, Roboto, Helvetica, Arial, sans-serif; + font-size: 13px; + background: transparent; + color: #ffffff; + text-shadow: 1px 1px #64727D; + transition-property: background-color; + transition-duration: .5s; + } +#+end_src + +* Button +Set global button styling. +#+begin_src css :tangle yes + button { + box-shadow: inset 0 -3px transparent; + border: none; + border-radius: 0; + } +#+end_src + +Set button hover styling +#+begin_src css :tangle yes + button:hover { + background: inherit; + box-shadow: inset 0 -3px #ffffff; + } +#+end_src + +Set workspace button styling. +#+begin_src css :tangle yes + #workspaces button { + padding: 0 5px; + text-shadow: 1px 1px #64727D; + background-color: transparent; + color: #ffffff; + } +#+end_src + +Set button hover styling in workspaces. +#+begin_src css :tangle yes + #workspaces button:hover { + background: rgba(0, 0, 0, 0.2); + } +#+end_src + +Set button focused styling in workspaces. +#+begin_src css :tangle yes + #workspaces button.focused { + background: transparent; + text-shadow: 1px 1px #64727D; + box-shadow: inset 0 -3px #ffffff; + } +#+end_src + +Set button urgent styling in workspaces. +#+begin_src css :tangle yes + #workspaces button.urgent { + background-color: #eb4d4b; + } +#+end_src + +* Modes +Set global mode styling. +#+begin_src css :tangle yes + #mode { + background-color: #64727D; + border-bottom: 3px solid #ffffff; + } +#+end_src + +Set typical mode styling. +#+begin_src css :tangle yes + #clock, + #cpu, + #memory, + #disk, + #network, + #pulseaudio, + #wireplumber, + #custom-media, + #tray, + #mode, + #scratchpad, + #mpd { + padding: 0 10px; + color: #ffffff; + } +#+end_src + +Add margins for workspaces and windows. +#+begin_src css :tangle yes + #window, + #workspaces { + margin: 0 4px; + } +#+end_src + +Omit margins on leftmost and rightmost workspaces. +#+begin_src css :tangle yes + .modules-left > widget:first-child > #workspaces { + margin-left: 0; + } + + /* If workspaces is the rightmost module, omit right margin */ + .modules-right > widget:last-child > #workspaces { + margin-right: 0; + } +#+end_src + +Set focus styling. +#+begin_src css :tangle yes + label:focus { + background-color: #000000; + } +#+end_src + +Set important mode styling. +#+begin_src css :tangle yes + #tray > .passive { + -gtk-icon-effect: dim; + } + + #tray > .needs-attention { + -gtk-icon-effect: highlight; + } +#+end_src + +Set scratchpad styling. +#+begin_src css :tangle yes + #scratchpad { + background: rgba(0, 0, 0, 0.2); + } + + #scratchpad.empty { + background-color: transparent; + } +#+end_src diff --git a/gitconfig.org b/gitconfig.org new file mode 100644 index 0000000..7ea0fc6 --- /dev/null +++ b/gitconfig.org @@ -0,0 +1,18 @@ +#+title: Git Configuration +Define my full name and email. +#+begin_src conf :tangle .gitconfig + [user] + name = Jacob Janzen + email = jjanzenn@proton.me +#+end_src +Use =main= over =master=. +#+begin_src conf :tangle .gitconfig + [init] + defaultBranch = main +#+end_src + +Make =pull= rebase on conflict. +#+begin_src conf :tangle .gitconfig + [pull] + rebase = true +#+end_src diff --git a/profile.org b/profile.org new file mode 100644 index 0000000..ea33433 --- /dev/null +++ b/profile.org @@ -0,0 +1,16 @@ +#+title: =.profile= Settings +* Path +Add items to the path. +#+begin_src sh :tangle .profile +export PATH="$HOME/.local/share/fzf-zsh-plugin/bin:$HOME/node_modules/.bin:$HOME/.emacs.d/bin:$HOME/bin:$HOME/gems/bin:$HOME/.local/bin:$HOME/go/bin:$PATH" +#+end_src + +* SSH Agent +Run =ssh-agent= if =ssh-agent= is not already running. Ensure that the authorization socket is available in the shell. +#+begin_src sh :tangle .profile +if [ ! -S ~/.ssh/ssh_auth_sock ]; then + eval `ssh-agent` > /dev/null + ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock +fi +export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock +#+end_src diff --git a/update-configs.sh b/update-configs.sh new file mode 100755 index 0000000..1936038 --- /dev/null +++ b/update-configs.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +if ! test -d ~/.dotfiles; then + echo "installing dotfiles..." +fi + +find -- * -type f -name "*.org" | while read -r file; do + echo "installing ${file} configuration..." + # emacs --batch "${file}" -f package-initialize --eval '(org-babel-tangle)' +done |