init: new dotfile configuration

Remove all org files using a new script to more config over, The old org
file configuaration were great but required org. This new version only
requires the scripts that is included in the repo.

The configuration are all done but have not ported the theming system
yet.

Signed-off-by: Steve Beaulac <steve@sagacity.ca>
Change-Id: I14cd7fe058a71c8ba9d6d35397dc8d7e6a6a6964
This commit is contained in:
2026-03-02 13:26:21 -05:00
committed by gitadmin
commit 02a5e0df28
410 changed files with 18546 additions and 0 deletions
Executable
+22
View File
@@ -0,0 +1,22 @@
#!/usr/bin/env bash
set -euo pipefail
if [[ -z "${DOTFILE_DIR:-}" ]]; then
export DOTFILE_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
fi
script_dir="$script_dir/installer"
shopt -s nullglob
ran_any=false
for script in "$script_dir"/*.sh; do
if [[ -f "$script" && -x "$script" ]]; then
"$script"
ran_any=true
fi
done
if ! $ran_any; then
echo "No executable .sh scripts found in $script_dir"
fi
+272
View File
@@ -0,0 +1,272 @@
#? Config file for btop v.1.4.6
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
color_theme = "current"
#* If the theme set background should be shown, set to False if you want terminal background transparency.
theme_background = true
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
truecolor = true
#* Set to true to force tty mode regardless if a real tty has been detected or not.
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
force_tty = false
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
#* Use whitespace " " as separator between different presets.
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = false
#* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = true
#* Use terminal synchronized output sequences to reduce flickering on supported terminals.
terminal_sync = true
#* Default symbols to use for graph creation, "braille", "block" or "tty".
#* "braille" offers the highest resolution but might not be included in all fonts.
#* "block" has half the resolution of braille but uses more common characters.
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
graph_symbol = "braille"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_cpu = "default"
# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty".
graph_symbol_gpu = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_mem = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_net = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_proc = "default"
#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
shown_boxes = "cpu mem net proc"
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
update_ms = 2000
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
proc_sorting = "cpu lazy"
#* Reverse sorting order, True or False.
proc_reversed = false
#* Show processes as a tree.
proc_tree = false
#* Use the cpu graph colors in the process list.
proc_colors = true
#* Use a darkening gradient in the process list.
proc_gradient = true
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
proc_per_core = false
#* Show process memory as bytes instead of percent.
proc_mem_bytes = true
#* Show cpu graph for each process.
proc_cpu_graphs = true
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
proc_info_smaps = false
#* Show proc box on left side of screen instead of right.
proc_left = true
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
proc_filter_kernel = false
#* In tree-view, always accumulate child process resources in the parent process.
proc_aggregate = false
#* Should cpu and memory usage display be preserved for dead processes when paused.
keep_dead_proc_usage = false
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_upper = "Auto"
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_lower = "Auto"
#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off".
show_gpu_info = "Auto"
#* Toggles if the lower CPU graph should be inverted.
cpu_invert_lower = true
#* Set to True to completely disable the lower CPU graph.
cpu_single_graph = false
#* Show cpu box at bottom of screen instead of top.
cpu_bottom = false
#* Shows the system uptime in the CPU box.
show_uptime = true
#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo.
show_cpu_watts = true
#* Show cpu temperature.
check_temp = true
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
cpu_sensor = "Auto"
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
show_coretemp = true
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
#* Example: "4:0 5:1 6:3"
cpu_core_map = ""
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
temp_scale = "celsius"
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
base_10_sizes = false
#* Show CPU frequency.
show_cpu_freq = true
#* How to calculate CPU frequency, available values: "first", "range", "lowest", "highest" and "average".
freq_mode = "first"
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
clock_format = "%X"
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
background_update = true
#* Custom cpu model name, empty string to disable.
custom_cpu_name = ""
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", disks_filter="exclude=/boot /home/user"
disks_filter = ""
#* Show graphs instead of meters for memory values.
mem_graphs = true
#* Show mem box below net box instead of above.
mem_below_net = false
#* Count ZFS ARC in cached and available memory.
zfs_arc_cached = true
#* If swap memory should be shown in memory box.
show_swap = true
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
swap_disk = true
#* If mem box should be split to also show disks info.
show_disks = true
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
only_physical = true
#* Read disks list from /etc/fstab. This also disables only_physical.
use_fstab = true
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
zfs_hide_datasets = false
#* Set to true to show available disk space for privileged users.
disk_free_priv = false
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
show_io_stat = true
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
io_mode = false
#* Set to True to show combined read/write io graphs in io mode.
io_graph_combined = false
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
#* Example: "/mnt/media:100 /:20 /boot:1".
io_graph_speeds = ""
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
net_download = 100
net_upload = 100
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
net_auto = true
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
net_sync = true
#* Starts with the Network Interface specified here.
net_iface = ""
#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes.
base_10_bitrate = "Auto"
#* Show battery stats in top right if battery is present.
show_battery = true
#* Which battery to use if multiple are present. "Auto" for auto detection.
selected_battery = "Auto"
#* Show power stats of battery next to charge indicator.
show_battery_watts = true
#* Set loglevel for "~/.local/state/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
log_level = "WARNING"
#* Automatically save current settings to config file on exit.
save_config_on_exit = true
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
nvml_measure_pcie_speeds = true
#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
rsmi_measure_pcie_speeds = true
#* Horizontally mirror the GPU graph.
gpu_mirror_graph = true
#* Set which GPU vendors to show. Available values are "nvidia amd intel"
shown_gpus = "nvidia amd intel"
#* Custom gpu0 model name, empty string to disable.
custom_gpu_name0 = ""
#* Custom gpu1 model name, empty string to disable.
custom_gpu_name1 = ""
#* Custom gpu2 model name, empty string to disable.
custom_gpu_name2 = ""
#* Custom gpu3 model name, empty string to disable.
custom_gpu_name3 = ""
#* Custom gpu4 model name, empty string to disable.
custom_gpu_name4 = ""
#* Custom gpu5 model name, empty string to disable.
custom_gpu_name5 = ""
+4
View File
@@ -0,0 +1,4 @@
--ozone-platform=wayland
--ozone-platform-hint=wayland
--enable-features=TouchpadOverscrollHistoryNavigation
--disable-features=WaylandWpColorManagerV1
+312
View File
@@ -0,0 +1,312 @@
;;; early-init.el --- Early Init -*- no-byte-compile: t; lexical-binding: t; -*-
;; Author: James Cherti
;; URL: https://github.com/jamescherti/minimal-emacs.d
;; Package-Requires: ((emacs "29.1"))
;; Keywords: maint
;; Version: 1.1.0
;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Commentary:
;; The minimal-emacs.d starter kit provides improved Emacs defaults and
;; optimized startup, intended to serve as a solid foundation for your vanilla
;; Emacs configuration and enhance your overall Emacs experience.
;;; Code:
;;; Variables
(defvar minimal-emacs-ui-features '()
"List of user interface features to disable in minimal Emacs setup.
This variable holds a list Emacs UI features that can be enabled:
- `context-menu`: Enables the context menu in graphical environments.
- `tool-bar`: Enables the tool bar in graphical environments.
- `menu-bar`: Enables the menu bar in graphical environments.
- `dialogs`: Enables both file dialogs and dialog boxes.
- `tooltips`: Enables tooltips.
Each feature in the list corresponds to a specific UI component that can be
turned on.")
(defvar minimal-emacs-frame-title-format "%b – Emacs"
"Template for displaying the title bar of visible and iconified frame.")
(defvar minimal-emacs-debug nil
"Non-nil to enable debug.")
(defvar minimal-emacs-gc-cons-threshold (* 16 1024 1024)
"The value of `gc-cons-threshold' after Emacs startup.")
(defvar minimal-emacs-package-initialize-and-refresh t
"Whether to automatically initialize and refresh packages.
When set to non-nil, Emacs will automatically call `package-initialize' and
`package-refresh-contents' to set up and update the package system.")
(defvar minimal-emacs-user-directory user-emacs-directory
"The default value of the `user-emacs-directory' variable.")
;;; Load pre-early-init.el
(defun minimal-emacs-load-user-init (filename)
"Execute a file of Lisp code named FILENAME."
(let ((user-init-file
(expand-file-name filename
minimal-emacs-user-directory)))
(when (file-exists-p user-init-file)
(load user-init-file nil t))))
(minimal-emacs-load-user-init "pre-early-init.el")
(setq custom-theme-directory
(expand-file-name "themes/" minimal-emacs-user-directory))
(setq custom-file (expand-file-name "custom.el" minimal-emacs-user-directory))
;;; Misc
(set-language-environment "UTF-8")
;; Set-language-environment sets default-input-method, which is unwanted.
(setq default-input-method nil)
;; Some features that are not represented as packages can be found in
;; `features', but this can be inconsistent. The following enforce consistency:
(if (fboundp #'json-parse-string)
(push 'jansson features))
(if (string-match-p "HARFBUZZ" system-configuration-features) ; no alternative
(push 'harfbuzz features))
(if (bound-and-true-p module-file-suffix)
(push 'dynamic-modules features))
;;; Garbage collection
;; Garbage collection significantly affects startup times. This setting delays
;; garbage collection during startup but will be reset later.
(setq gc-cons-threshold most-positive-fixnum)
(add-hook 'emacs-startup-hook
(lambda ()
(setq gc-cons-threshold minimal-emacs-gc-cons-threshold)))
;;; Performance
;; Prefer loading newer compiled files
(setq load-prefer-newer t)
;; Increase how much is read from processes in a single chunk (default is 4kb).
(setq read-process-output-max (* 512 1024)) ; 512kb
;; Reduce rendering/line scan work by not rendering cursors or regions in
;; non-focused windows.
(setq-default cursor-in-non-selected-windows nil)
(setq highlight-nonselected-windows nil)
;; Disable warnings from the legacy advice API. They aren't useful.
(setq ad-redefinition-action 'accept)
(setq warning-suppress-types '((lexical-binding)))
;; Don't ping things that look like domain names.
(setq ffap-machine-p-known 'reject)
;; By default, Emacs "updates" its ui more often than it needs to
(setq idle-update-delay 1.0)
;; Font compacting can be very resource-intensive, especially when rendering
;; icon fonts on Windows. This will increase memory usage.
(setq inhibit-compacting-font-caches t)
(unless (daemonp)
(let ((old-value (default-toplevel-value 'file-name-handler-alist)))
(set-default-toplevel-value
'file-name-handler-alist
;; Determine the state of bundled libraries using calc-loaddefs.el.
;; If compressed, retain the gzip handler in `file-name-handler-alist`.
;; If compiled or neither, omit the gzip handler during startup for
;; improved startup and package load time.
(if (eval-when-compile
(locate-file-internal "calc-loaddefs.el" load-path))
nil
(list (rassq 'jka-compr-handler old-value))))
;; Ensure the new value persists through any current let-binding.
(set-default-toplevel-value 'file-name-handler-alist
file-name-handler-alist)
;; Remember the old value to reset it as needed.
(add-hook 'emacs-startup-hook
(lambda ()
(set-default-toplevel-value
'file-name-handler-alist
;; Merge instead of overwrite to preserve any changes made
;; since startup.
(delete-dups (append file-name-handler-alist old-value))))
101))
(unless noninteractive
(progn
;; Disable mode-line-format during init
(defun minimal-emacs--reset-inhibited-vars-h ()
(setq-default inhibit-redisplay nil
;; Inhibiting `message' only prevents redraws and
inhibit-message nil)
(redraw-frame))
(defvar minimal-emacs--default-mode-line-format mode-line-format
"Default value of `mode-line-format'.")
(setq-default mode-line-format nil)
(defun minimal-emacs--startup-load-user-init-file (fn &rest args)
"Advice for startup--load-user-init-file to reset mode-line-format."
(let (init)
(unwind-protect
(progn
(apply fn args) ; Start up as normal
(setq init t))
(unless init
;; If we don't undo inhibit-{message, redisplay} and there's an
;; error, we'll see nothing but a blank Emacs frame.
(minimal-emacs--reset-inhibited-vars-h))
(unless (default-toplevel-value 'mode-line-format)
(setq-default mode-line-format
minimal-emacs--default-mode-line-format)))))
(advice-add 'startup--load-user-init-file :around
#'minimal-emacs--startup-load-user-init-file))
;; Without this, Emacs will try to resize itself to a specific column size
(setq frame-inhibit-implied-resize t)
;; A second, case-insensitive pass over `auto-mode-alist' is time wasted.
;; No second pass of case-insensitive search over auto-mode-alist.
(setq auto-mode-case-fold nil)
;; Reduce *Message* noise at startup. An empty scratch buffer (or the
;; dashboard) is more than enough, and faster to display.
(setq inhibit-startup-screen t
inhibit-startup-echo-area-message user-login-name)
(setq initial-buffer-choice nil
inhibit-startup-buffer-menu t
inhibit-x-resources t)
;; Disable bidirectional text scanning for a modest performance boost.
(setq-default bidi-display-reordering 'left-to-right
bidi-paragraph-direction 'left-to-right)
;; Give up some bidirectional functionality for slightly faster re-display.
(setq bidi-inhibit-bpa t)
;; Remove "For information about GNU Emacs..." message at startup
(advice-add #'display-startup-echo-area-message :override #'ignore)
;; Suppress the vanilla startup screen completely. We've disabled it with
;; `inhibit-startup-screen', but it would still initialize anyway.
(advice-add #'display-startup-screen :override #'ignore)
;; Shave seconds off startup time by starting the scratch buffer in
;; `fundamental-mode'
(setq initial-major-mode 'fundamental-mode
initial-scratch-message nil)
(unless minimal-emacs-debug
;; Unset command line options irrelevant to the current OS. These options
;; are still processed by `command-line-1` but have no effect.
(unless (eq system-type 'darwin)
(setq command-line-ns-option-alist nil))
(unless (memq initial-window-system '(x pgtk))
(setq command-line-x-option-alist nil)))))
;;; Native compilation and Byte compilation
(if (and (featurep 'native-compile)
(fboundp 'native-comp-available-p)
(native-comp-available-p))
;; Activate `native-compile'
(setq native-comp-jit-compilation t
native-comp-deferred-compilation t ; Obsolete since Emacs 29.1
package-native-compile t)
;; Deactivate the `native-compile' feature if it is not available
(setq features (delq 'native-compile features)))
;; Suppress compiler warnings and don't inundate users with their popups.
(setq native-comp-async-report-warnings-errors
(or minimal-emacs-debug 'silent))
(setq native-comp-warning-on-missing-source minimal-emacs-debug)
(setq debug-on-error minimal-emacs-debug
jka-compr-verbose minimal-emacs-debug)
(setq byte-compile-warnings minimal-emacs-debug)
(setq byte-compile-verbose minimal-emacs-debug)
;;; UI elements
(setq frame-title-format minimal-emacs-frame-title-format
icon-title-format minimal-emacs-frame-title-format)
;; Disable startup screens and messages
(setq inhibit-splash-screen t)
;; I intentionally avoid calling `menu-bar-mode', `tool-bar-mode', and
;; `scroll-bar-mode' because manipulating frame parameters can trigger or queue
;; a superfluous and potentially expensive frame redraw at startup, depending
;; on the window system. The variables must also be set to `nil' so users don't
;; have to call the functions twice to re-enable them.
(unless (memq 'menu-bar minimal-emacs-ui-features)
(push '(menu-bar-lines . 0) default-frame-alist)
(unless (memq window-system '(mac ns))
(setq menu-bar-mode nil)))
(unless (daemonp)
(unless noninteractive
(when (fboundp 'tool-bar-setup)
;; Temporarily override the tool-bar-setup function to prevent it from
;; running during the initial stages of startup
(advice-add #'tool-bar-setup :override #'ignore)
(define-advice startup--load-user-init-file
(:before (&rest _) minimal-emacs-setup-toolbar)
(advice-remove #'tool-bar-setup #'ignore)
(tool-bar-setup)))))
(unless (memq 'tool-bar minimal-emacs-ui-features)
(push '(tool-bar-lines . 0) default-frame-alist)
(setq tool-bar-mode nil))
(push '(vertical-scroll-bars) default-frame-alist)
(push '(horizontal-scroll-bars) default-frame-alist)
(setq scroll-bar-mode nil)
(when (fboundp 'horizontal-scroll-bar-mode)
(horizontal-scroll-bar-mode -1))
(unless (memq 'tooltips minimal-emacs-ui-features)
(when (bound-and-true-p tooltip-mode)
(tooltip-mode -1)))
;; Disable GUIs because they are inconsistent across systems, desktop
;; environments, and themes, and they don't match the look of Emacs.
(unless (memq 'dialogs minimal-emacs-ui-features)
(setq use-file-dialog nil)
(setq use-dialog-box nil))
;; Allow for shorter responses: "y" for yes and "n" for no.
(if (boundp 'use-short-answers)
(setq use-short-answers t)
(advice-add #'yes-or-no-p :override #'y-or-n-p))
(defalias #'view-hello-file #'ignore) ; Never show the hello file
;;; package.el
(setq package-enable-at-startup nil)
(setq package-quickstart nil)
(setq use-package-always-ensure t)
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
("melpa-stable" . "https://stable.melpa.org/packages/")
("gnu" . "https://elpa.gnu.org/packages/")
("nongnu" . "https://elpa.nongnu.org/nongnu/")))
(customize-set-variable 'package-archive-priorities '(("gnu" . 99)
("nongnu" . 80)
("stable" . 70)
("melpa" . 0)))
;;; Load post-early-init.el
(minimal-emacs-load-user-init "post-early-init.el")
(provide 'early-init)
;;; early-init.el ends here
+356
View File
@@ -0,0 +1,356 @@
;;; init.el --- Init -*- no-byte-compile: t; lexical-binding: t; -*-
;; Author: James Cherti
;; URL: https://github.com/jamescherti/minimal-emacs.d
;; Package-Requires: ((emacs "29.1"))
;; Keywords: maint
;; Version: 1.1.0
;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Commentary:
;; The minimal-emacs.d starter kit provides improved Emacs defaults and
;; optimized startup, intended to serve as a solid foundation for your vanilla
;; Emacs configuration and enhance your overall Emacs experience.
;;; Code:
;;; Load pre-init.el
(minimal-emacs-load-user-init "pre-init.el")
;;; package.el
(when (bound-and-true-p minimal-emacs-package-initialize-and-refresh)
;; Initialize and refresh package contents again if needed
(package-initialize)
(unless package-archive-contents
(package-refresh-contents))
;; Install use-package if necessary
(unless (package-installed-p 'use-package)
(package-install 'use-package))
;; Ensure use-package is available at compile time
(eval-when-compile
(require 'use-package)))
;; Ensure the 'use-package' package is installed and loaded
;;; Minibuffer
;; Allow nested minibuffers
(setq enable-recursive-minibuffers t)
;; Keep the cursor out of the read-only portions of the.minibuffer
(setq minibuffer-prompt-properties
'(read-only t intangible t cursor-intangible t face
minibuffer-prompt))
(add-hook 'minibuffer-setup-hook #'cursor-intangible-mode)
;;; Misc
;; switch-to-buffer runs pop-to-buffer-same-window instead
(setq switch-to-buffer-obey-display-actions t)
(setq show-paren-delay 0.1
show-paren-highlight-openparen t
show-paren-when-point-inside-paren t
show-paren-when-point-in-periphery t)
(setq whitespace-line-column nil) ; whitespace-mode
;; I reduced the default value of 9 to simplify the font-lock keyword,
;; aiming to improve performance. This package helps differentiate
;; nested delimiter pairs, particularly in languages with heavy use of
;; parentheses.
(setq rainbow-delimiters-max-face-count 5)
;; Can be activated with `display-line-numbers-mode'
(setq-default display-line-numbers-width 3)
(setq-default display-line-numbers-widen t)
(setq comint-prompt-read-only t)
(setq comint-buffer-maximum-size 2048)
(setq compilation-always-kill t
compilation-ask-about-save nil
compilation-scroll-output 'first-error)
(setq truncate-string-ellipsis "…")
;; Configure Emacs to ask for confirmation before exiting
(setq confirm-kill-emacs 'y-or-n-p)
;; Delete by moving to trash in interactive mode
(setq delete-by-moving-to-trash (not noninteractive))
;;; Files
;; Disable the warning "X and Y are the same file". Ignoring this warning is
;; acceptable since it will redirect you to the existing buffer regardless.
(setq find-file-suppress-same-file-warnings t)
;; Resolve symlinks when opening files, so that any operations are conducted
;; from the file's true directory (like `find-file').
(setq find-file-visit-truename t
vc-follow-symlinks t)
;; Skip confirmation prompts when creating a new file or buffer
(setq confirm-nonexistent-file-or-buffer nil)
(setq uniquify-buffer-name-style 'forward)
(setq mouse-yank-at-point t)
;; Prefer vertical splits over horizontal ones
(setq split-width-threshold 170
split-height-threshold nil)
;; The native border "uses" a pixel of the fringe on the rightmost
;; splits, whereas `window-divider` does not.
(setq window-divider-default-bottom-width 1
window-divider-default-places t
window-divider-default-right-width 1)
(add-hook 'after-init-hook #'window-divider-mode)
;;; Backup files
;; Avoid generating backups or lockfiles to prevent creating world-readable
;; copies of files.
(setq create-lockfiles nil)
(setq make-backup-files nil)
(setq backup-directory-alist
`(("." . ,(expand-file-name "backup" user-emacs-directory))))
(setq tramp-backup-directory-alist backup-directory-alist)
(setq backup-by-copying-when-linked t)
(setq backup-by-copying t) ; Backup by copying rather renaming
(setq delete-old-versions t) ; Delete excess backup versions silently
(setq version-control t) ; Use version numbers for backup files
(setq kept-new-versions 5)
(setq kept-old-versions 5)
(setq vc-make-backup-files nil) ; Do not backup version controlled files
;;; Auto save
;; Enable auto-save to safeguard against crashes or data loss. The
;; `recover-file' or `recover-session' functions can be used to restore
;; auto-saved data.
(setq auto-save-default t)
;; Do not auto-disable auto-save after deleting large chunks of
;; text. The purpose of auto-save is to provide a failsafe, and
;; disabling it contradicts this objective.
(setq auto-save-include-big-deletions t)
(setq auto-save-list-file-prefix
(expand-file-name "autosave/" user-emacs-directory))
(setq tramp-auto-save-directory
(expand-file-name "tramp-autosave/" user-emacs-directory))
;; Auto save options
(setq kill-buffer-delete-auto-save-files t)
;;; Auto revert
;; Auto-revert in Emacs is a feature that automatically updates the
;; contents of a buffer to reflect changes made to the underlying file
;; on disk.
(setq revert-without-query (list ".") ; Do not prompt
auto-revert-stop-on-user-input nil
auto-revert-verbose t)
;; Revert other buffers (e.g, Dired)
(setq global-auto-revert-non-file-buffers t)
;;; recentf
;; `recentf' is an Emacs package that maintains a list of recently
;; accessed files, making it easier to reopen files you have worked on
;; recently.
(setq recentf-max-saved-items 300) ; default is 20
(setq recentf-auto-cleanup 'mode)
;;; saveplace
;; `save-place-mode` enables Emacs to remember the last location within a file
;; upon reopening. This feature is particularly beneficial for resuming work at
;; the precise point where you previously left off.
(setq save-place-file (expand-file-name "saveplace" user-emacs-directory))
(setq save-place-limit 600)
;;; savehist
;; `savehist` is an Emacs feature that preserves the minibuffer history between
;; sessions. It saves the history of inputs in the minibuffer, such as commands,
;; search strings, and other prompts, to a file. This allows users to retain
;; their minibuffer history across Emacs restarts.
(setq history-length 300)
(setq savehist-save-minibuffer-history t) ;; Default
;;; Frames and windows
;; Resizing the Emacs frame can be costly when changing the font. Disable this
;; to improve startup times with fonts larger than the system default.
(setq frame-resize-pixelwise t)
;; However, do not resize windows pixelwise, as this can cause crashes in some
;; cases when resizing too many windows at once or rapidly.
(setq window-resize-pixelwise nil)
(setq resize-mini-windows 'grow-only)
;;; Scrolling
;; Enables faster scrolling through unfontified regions. This may result in
;; brief periods of inaccurate syntax highlighting immediately after scrolling,
;; which should quickly self-correct.
(setq fast-but-imprecise-scrolling t)
;; Move point to top/bottom of buffer before signaling a scrolling error.
(setq scroll-error-top-bottom t)
;; Keeps screen position if the scroll command moved it vertically out of the
;; window.
(setq scroll-preserve-screen-position t)
;;; Mouse
;; Emacs 29
(when (memq 'context-menu minimal-emacs-ui-features)
(when (and (display-graphic-p) (fboundp 'context-menu-mode))
(add-hook 'after-init-hook #'context-menu-mode)))
(setq hscroll-margin 2
hscroll-step 1
;; Emacs spends excessive time recentering the screen when the cursor
;; moves more than N lines past the window edges (where N is the value of
;; `scroll-conservatively`). This can be particularly slow in larger files
;; during extensive scrolling. If `scroll-conservatively` is set above
;; 100, the window is never automatically recentered. The default value of
;; 0 triggers recentering too aggressively. Setting it to 10 reduces
;; excessive recentering and only recenters the window when scrolling
;; significantly off-screen.
scroll-conservatively 10
scroll-margin 0
scroll-preserve-screen-position t
;; Reduce cursor lag by preventing automatic adjustments to
;; `window-vscroll' for unusually long lines. Setting
;; `auto-window-vscroll' it to nil also resolves the issue of random
;; half-screen jumps during scrolling.
auto-window-vscroll nil
;; Mouse
mouse-wheel-scroll-amount '(1 ((shift) . hscroll))
mouse-wheel-scroll-amount-horizontal 1)
;;; Cursor
;; The blinking cursor is distracting and interferes with cursor settings in
;; some minor modes that try to change it buffer-locally (e.g., Treemacs).
;; Additionally, it can cause freezing, especially on macOS, for users with
;; customized and colored cursors.
(blink-cursor-mode -1)
;; Don't blink the paren matching the one at point, it's too distracting.
(setq blink-matching-paren nil)
;; Don't stretch the cursor to fit wide characters, it is disorienting,
;; especially for tabs.
(setq x-stretch-cursor nil)
;;; Annoyances
;; No beeping or blinking
(setq visible-bell nil)
(setq ring-bell-function #'ignore)
;; This controls how long Emacs will blink to show the deleted pairs with
;; `delete-pair'. A longer delay can be annoying as it causes a noticeable pause
;; after each deletion, disrupting the flow of editing.
(setq delete-pair-blink-delay 0.03)
;;; Indent and formatting
(setq-default left-fringe-width 8)
(setq-default right-fringe-width 8)
;; Do not show an arrow at the top/bottomin the fringe and empty lines
(setq-default indicate-buffer-boundaries nil)
(setq-default indicate-empty-lines nil)
;; Continue wrapped lines at whitespace rather than breaking in the
;; middle of a word.
(setq-default word-wrap t)
;; Disable wrapping by default due to its performance cost.
(setq-default truncate-lines t)
;; If enabled and `truncate-lines' is disabled, soft wrapping will not occur
;; when the window is narrower than `truncate-partial-width-windows' characters.
(setq truncate-partial-width-windows nil)
;; Prefer spaces over tabs. Spaces offer a more consistent default compared to
;; 8-space tabs. This setting can be adjusted on a per-mode basis as needed.
(setq-default indent-tabs-mode nil
tab-width 4)
;; Enable indentation and completion using the TAB key
(setq-default tab-always-indent nil)
;; Enable multi-line commenting which ensures that `comment-indent-new-line'
;; properly continues comments onto new lines, which is useful for writing
;; longer comments or docstrings that span multiple lines.
(setq comment-multi-line t)
;; We often split terminals and editor windows or place them side-by-side,
;; making use of the additional horizontal space.
(setq-default fill-column 80)
;; Disable the obsolete practice of end-of-line spacing from the
;; typewriter era.
(setq sentence-end-double-space nil)
;; According to the POSIX, a line is defined as "a sequence of zero or
;; more non-newline characters followed by a terminating newline".
(setq require-final-newline t)
;; Remove duplicates from the kill ring to reduce clutter
(setq kill-do-not-save-duplicates t)
;; Ensures that empty lines within the commented region are also commented out.
;; This prevents unintended visual gaps and maintains a consistent appearance,
;; ensuring that comments apply uniformly to all lines, including those that are
;; otherwise empty.
(setq comment-empty-lines t)
;; Eliminate delay before highlighting search matches
(setq lazy-highlight-initial-delay 0)
;;; Mode line
;; Setting `display-time-default-load-average' to nil makes Emacs omit the load
;; average information from the mode line.
(setq display-time-default-load-average nil)
;; Display the current line and column numbers in the mode line
(setq line-number-mode t)
(setq column-number-mode t)
;;; Filetype
;; Do not notify the user each time Python tries to guess the indentation offset
(setq python-indent-guess-indent-offset-verbose nil)
(setq sh-indent-after-continuation 'always)
(setq dired-clean-confirm-killing-deleted-buffers nil
dired-recursive-deletes 'top
dired-recursive-copies 'always
dired-create-destination-dirs 'ask)
;;; Font / Text scale
;; Avoid automatic frame resizing when adjusting settings.
(setq global-text-scale-adjust-resizes-frames nil)
;;; Ediff
;; Configure Ediff to use a single frame and split windows horizontally
(setq ediff-window-setup-function #'ediff-setup-windows-plain
ediff-split-window-function #'split-window-horizontally)
;;; Load post-init.el
(minimal-emacs-load-user-init "post-init.el")
(provide 'init)
;;; init.el ends here
@@ -0,0 +1,7 @@
,#+TITLE: ${title}
,#+AUTHOR: Steve Beaulac
,#+OPTIONS: title:nil toc:nil
,#+EXPORT_FILE_NAME: /tmp/
,#+LaTex_CLASS: short
,#+LATEX_HEADER: \runningtitle{Shortened Title}
,#+LATEX_HEADER: wordcount{36}
+55
View File
@@ -0,0 +1,55 @@
;;;; post-early-init.el --- Early Init -*- no-byte-compile: t; lexical-binding: t; -*-
;; Compile warnings
(setq warning-minimum-level :emergency)
(setq warning-minimum-log-level :emergency)
(setq gc-cons-percentage 0.6)
;; Revert Dired and other buffers
(customize-set-variable 'global-auto-revert-non-file-buffers t)
;; Revert buffers when the underlying file has changed
(add-hook 'after-init-hooks #'global-auto-revert-mode)
(setq auto-revert-interval 1)
(setq-default default-frame-alist '((undecorated . t)))
(setq process-adaptive-read-buffering nil)
(add-hook 'focus-out-hook #'garbage-collect)
;(add-hook 'after-save-hook #'garbage-collect)
;(run-with-idle-timer 5 t (lambda () (garbage-collect)))
(setq-default ispell-program-name "aspell")
(setq-default ispell-local-dictionary "english")
(when (fboundp 'set-scroll-bar-mode)
(set-scroll-bar-mode nil))
(when (fboundp 'pixel-scroll-precision-mode)
(setq pixel-scroll-precision-large-scroll-height 40.0)
(pixel-scroll-precision-mode 1))
(when (fboundp 'pixel-scroll-mode)
(pixel-scroll-mode 1))
(setq tramp-default-host "localhost")
;; disable startup messages
(setq inhibit-startup-message t)
(setq large-file-warning-threshold nil)
;;; package.el
;;(setq use-package-expand-minimally t)
;;(setq package-install-upgrade-built-in t)
;;(setq use-package-enable-imenu-support t)
(when init-file-debug
(setq use-package-verbose t
use-package-debug t
use-package-expand-minimally nil
use-package-compute-statistics t
debug-on-error t))
(provide 'post-early-init)
File diff suppressed because it is too large Load Diff
+34
View File
@@ -0,0 +1,34 @@
;;;; pre-init.el --- Init -*- no-byte-compile: t; lexical-binding: t; -*-
;; handle emacs server
(defun server-already-running-p ()
"Is Emacs already running?"
(or (file-exists-p (format "/tmp/emacs%s/server" (user-uid)))
(file-exists-p (format "/run/user/%s/snap.emacs/emacs/server" (user-uid)))
(file-exists-p (format "/run/user/%s/emacs/server" (user-uid)))))
(defun server-shunt ()
"Shunts to emacsclient"
(let ((args (append '("emacsclient" "-a" "\"\"" "-c" "-n")
(cdr command-line-args))))
(shell-command (substring (format "%S" args) 1 -1))
(kill-emacs)))
;; restart with emacsclient if server is running
(unless (featurep 'server)
(if (server-already-running-p) (server-shunt) (server-start)))
(fset 'epg-wait-for-status 'ignore)
(fset 'epg-pinentry-mode 'loopback)
;;(fset 'epg-debug t)
(require 'package)
(require 'xdg)
(setq package-user-dir (expand-file-name "emacs/elpa" (xdg-cache-home)))
;; make sure the elpa/ folder exists after setting it above.
(unless (file-exists-p package-user-dir)
(mkdir package-user-dir t))
(provide 'pre-init)
@@ -0,0 +1,11 @@
# -*- mode: snippet -*-
# name: insert-preamble
# key: ---
# --
/**
,* @brief $0
,* @ingroup
,*
,* @date `(format-time-string "%Y-%m-%d")`
,* @author `(eval user-full-name)`
,*/
@@ -0,0 +1,8 @@
# -*- mode: snippet; require-final-newline: nil -*-
# name: foreach (... in ...) { ... }
# key: foreach
# --
foreach (var $1 in $2) {
$3
}
$0
+8
View File
@@ -0,0 +1,8 @@
# -*- mode: snippet; require-final-newline: nil -*-
# name: ifunc
# key: ifunc
# binding: direct-keybinding
# --
func ($1) $2 {
$0
}
+6
View File
@@ -0,0 +1,6 @@
# -*- mode: snippet; require-final-newline: nil -*-
# name: json
# key: json
# binding: direct-keybinding
# --
\`json:"$1"\`
@@ -0,0 +1,6 @@
# -*- mode: snippet; require-final-newline: nil -*-
# name: Copyright
# key: Copyright
# binding: direct-keybinding
# --
Copyright (c) `(format-time-string "%Y")` ${1:$$(yas-choose-value '("Sagacity Solutions Inc" "National Centre for Audiology"))}. All right reserved.
+2
View File
@@ -0,0 +1,2 @@
// Copyright (c) `(format-time-string "%Y")` ${1:$$(yas-choose-value '("Sagacity Solutions Inc" "National Centre for Audiology"))}. All right reserved.
$0
+4
View File
@@ -0,0 +1,4 @@
// -*- csharp -*- -- ${1:`(file-name-nondirectory (buffer-file-name))`} : ${2} --
// Copyright (c) `(format-time-string "%Y")` ${3:$$(yas-choose-value '("Sagacity Solutions Inc" "National Centre for Audiology"))}. All right reserved.
$0
+5
View File
@@ -0,0 +1,5 @@
// Copyright (c) `(format-time-string "%Y")` ${1:$$(yas-choose-value '("Sagacity Solutions Inc" "National Centre for Audiology"))}. All right reserved.
package ${2:main}
$0
+4
View File
@@ -0,0 +1,4 @@
// Copyright (c) `(format-time-string "%Y")` ${1:$$(yas-choose-value '("Sagacity Solutions Inc" "National Centre for Audiology"))}. All right reserved.
'use strict' ;
$0
+2
View File
@@ -0,0 +1,2 @@
# Copyright (c) `(format-time-string "%Y")` ${1:$$(yas-choose-value '("Sagacity Solutions Inc" "National Centre for Audiology"))}. All right reserved.
$0
+19
View File
@@ -0,0 +1,19 @@
#!/bin/${1:sh}
# ----------------------------------------------------------------------
# `(upcase (file-name-nondirectory (file-name-sans-extension (buffer-file-name))))`: $0
# ----------------------------------------------------------------------
OPT1="default value" # Setup a default value
OPT2=0
while getopts "d:s" o
do case "$o" in
d) OPT1="$OPTARG";;
s) OPT2=1;;
[?]) print >&2 "Usage: \$0 [-s] [-d seplist] file ..."
exit 1;;
esac
done
shift $(expr $OPTIND - 1)
# ----------------------------------------------------------------------
+3
View File
@@ -0,0 +1,3 @@
// Copyright (c) `(format-time-string "%Y")` ${1:$$(yas-choose-value '("Sagacity Solutions Inc" "National Centre for Audiology"))}. All right reserved.
$0
+6
View File
@@ -0,0 +1,6 @@
<template>
$0
</template>
<script>
</script>
@@ -0,0 +1,439 @@
;;; ef-catppuccin-frappe-theme.el --- implementation of catppuccin-frappe theme using ef-themes -*- lexical-binding:t -*-
;; Copyright (C) 2022-2024 Free Software Foundation, Inc.
;; Author: Steve Beaulac <steve@beaulac.me>
;; Maintainer: Steve Beaulac <steve@beaulac.me>
;; URL: https://github.com/SjB/ef-catppuccin
;; Keywords: faces, theme, accessibility
;; This file is NOT part of GNU Emacs.
;; GNU Emacs 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.
;;
;; GNU Emacs 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 GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;;
;; The `ef-themes' are a collection of light and dark themes for GNU
;; Emacs whose goal is to provide colorful ("pretty") yet legible
;; options for users who want something with a bit more flair than the
;; `modus-themes' (also designed by me).
;;; Code:
(eval-and-compile
(require 'ef-themes)
(deftheme ef-catppuccin-frappe
"ef-themes of the catppuccin-frappe palette"
:background-mode 'dark
:kind 'color-scheme
:family 'ef)
(defconst ef-catppuccin-frappe-palette
'(
;;; Basic values
;;; Basic hues for foreground values
(crust "#232634")
(mantle "#292c3c")
(base "#303446")
(surface0 "#414559")
(surface1 "#51576d")
(surface2 "#626880")
(overlay0 "#737994")
(overlay1 "#838BA7")
(overlay2 "#949CBB")
(text "#c6d0f5")
(subtext0 "#a5adce")
(subtext1 "#b5bfe2")
(rosewater "#f2d5cf")
(rosewater-warmer "#fed5c2")
(rosewater-cooler "#e5d5db")
(rosewater-faint "#fbf3f2")
(rosewater-intense "#f9cfc7")
(bg-rosewater-intense "#82655d")
(bg-rosewater-subtle "#b0452f")
(flamingo "#eebebe")
(flamingo-warmer "#fabeb1")
(flamingo-cooler "#e1beca")
(flamingo-faint "#f6dfdf")
(flamingo-intense "#f8b3b3")
(bg-flamingo-intense "#7e5757")
(bg-flamingo-subtle "#a92c2c")
(pink "#f3b8e4")
(pink-warmer "#ffb8d7")
(pink-cooler "#e6b8f0")
(pink-faint "#f9dcf1")
(pink-intense "#fdade9")
(bg-pink-intense "#8b4979")
(bg-pink-subtle "#b61e90")
(mauve "#ca9ee6")
(mauve-warmer "#d69ed9")
(mauve-cooler "#bd9ef2")
(mauve-faint "#dabced")
(mauve-intense "#cd8ef5")
(bg-mauve-intense "#644e72")
(bg-mauve-subtle "#6d279a")
(red "#e78284")
(red-warmer "#f38277")
(red-cooler "#da8290")
(red-faint "#eca0a1")
(red-intense "#f96f72")
(bg-red-intense "#734041")
(bg-red-subtle "#971d1f")
(maroon "#ea999c")
(maroon-warmer "#f6998f")
(maroon-cooler "#dd99a8")
(maroon-faint "#f0b9bb")
(maroon-intense "#f9898d")
(bg-maroon-intense "#794749")
(bg-maroon-subtle "#a02125")
(peach "#ef9f76")
(peach-warmer "#fb9f69")
(peach-cooler "#e29f82")
(peach-faint "#f2b595")
(peach-intense "#ff9965")
(bg-peach-intense "#7b4d36")
(bg-peach-subtle "#9f4212")
(yellow "#e5c890")
(yellow-warmer "#f1c883")
(yellow-cooler "#d8c89c")
(yellow-faint "#ecd6ae")
(yellow-intense "#f6cd7e")
(bg-yellow-intense "#716348")
(bg-yellow-subtle "#976f23")
(green "#a6d189")
(green-warmer "#b2d17c")
(green-cooler "#99d195")
(green-faint "#b8daa1")
(green-intense "#a2e574")
(bg-green-intense "#555952")
(bg-green-subtle "#4f7c30")
(teal "#81c8be")
(teal-warmer "#8dc8b1")
(teal-cooler "#74c8ca")
(teal-faint "#97d1c9")
(teal-intense "#6adece")
(bg-teal-intense "#525252")
(bg-teal-subtle "#317269")
(blue "#8caaee")
(blue-warmer "#98aae1")
(blue-cooler "#7faafa")
(blue-faint "#acc2f2")
(blue-intense "#7ba3fe")
(bg-blue-intense "#3e527e")
(bg-blue-subtle "#1843a4")
(sky "#99d1db")
(sky-warmer "#a5d1ce")
(sky-cooler "#8cd1e7")
(sky-faint "#b4dde4")
(sky-intense "#87ddec")
(bg-sky-intense "#556164")
(bg-sky-subtle "#307c89")
(sapphire "#85c1dc")
(sapphire-warmer "#91c1cf")
(sapphire-cooler "#78c1e8")
(sapphire-faint "#a0cee3")
(sapphire-intense "#71c8ef")
(bg-sapphire-intense "#4a5d65")
(bg-sapphire-subtle "#276a89")
(lavender "#babbf1")
(lavender-warmer "#c6bbe4")
(lavender-cooler "#adbbfd")
(lavender-faint "#ddddf8")
(lavender-intense "#afb1fb")
(bg-lavender-intense "#4e4e86")
(bg-lavender-subtle "#2426b1")
;;; remaping colors to properties
(bg-main base)
(bg-dim mantle)
(bg-alt crust)
(fg-main text)
(fg-dim subtext0)
(fg-alt subtext1)
(bg-inactive surface0)
(bg-active surface1)
;;; mauve is replacing magenta
(magenta mauve)
(magenta-warmer mauve-warmer)
(magenta-cooler mauve-cooler)
(magenta-faint mauve-faint)
(bg-magenta-intense bg-mauve-intense)
(bg-magenta-subtle bg-mauve-subtle)
;;; sapphire is replacing cyan
(cyan sapphire)
(cyan-warmer sapphire-warmer)
(cyan-cooler sapphire-cooler)
(cyan-faint sapphire-faint)
(bg-cyan-intense bg-sapphire-intense)
(bg-cyan-subtle bg-sapphire-subtle)
;;; Diffs
(bg-added bg-active)
(bg-added-faint bg-inactive)
(bg-added-refine bg-green-subtle)
(fg-added green)
(bg-changed bg-active)
(bg-changed-faint bg-inactive)
(bg-changed-refine bg-blue-subtle)
(fg-changed blue)
(bg-removed bg-active)
(bg-removed-faint bg-inactive)
(bg-removed-refine bg-red-subtle)
(fg-removed red)
;;; Graphs
(bg-graph-red-0 bg-maroon-subtle)
(bg-graph-red-1 bg-maroon-intense)
(bg-graph-green-0 bg-teal-subtle)
(bg-graph-green-1 bg-teal-intense)
(bg-graph-yellow-0 bg-rosewater-subtle)
(bg-graph-yellow-1 bg-rosewater-intense)
(bg-graph-blue-0 bg-sky-subtle)
(bg-graph-blue-1 bg-sky-intense)
(bg-graph-magenta-0 bg-pink-subtle)
(bg-graph-magenta-1 bg-pink-intense)
(bg-graph-cyan-0 bg-lavender-subtle)
(bg-graph-cyan-1 bg-lavender-intense)
;;; Special hues
(bg-mode-line mantle)
(fg-mode-line text)
(bg-completion overlay0)
(bg-hover overlay1)
(bg-hover-secondary overlay2)
(bg-hl-line crust)
(bg-region overlay2)
(bg-paren surface2)
(bg-err bg-red-intense) ; check with err
(bg-warning bg-yellow-intense) ; check with warning
(bg-info bg-green-intense) ; check with info
(border lavender)
(cursor rosewater)
(fg-intense subtext1)
(modeline-err red)
(modeline-warning yellow)
(modeline-info green)
(underline-err red-intense)
(underline-warning yellow-intense)
(underline-info green-intense)
(bg-char-0 surface0)
(bg-char-1 surface1)
(bg-char-2 surface2)
;;; Conditional hues
(bg-region-intense bg-lavender-intense)
(fg-region crust)
;;; Mappings
;;;; General mappings
(bg-fringe bg-main)
(fg-fringe fg-main)
(err red)
(warning yellow)
(info green)
(link blue)
(link-alt lavender)
(name green)
(keybind teal)
(identifier sapphire)
(prompt flamingo)
;;;; Code mappings
(builtin red)
(comment overlay0)
(constant peach)
(fnname flamingo)
(keyword mauve)
(preprocessor sky)
(docstring sapphire)
(string green)
(type yellow)
(variable green)
(rx-escape rosewater) ; compare with `string'
(rx-construct maroon)
;;;; Accent mappings
(accent-0 blue)
(accent-1 mauve)
(accent-2 green)
(accent-3 red)
;;;; Date mappings
(date-common green-cooler)
(date-deadline red-warmer)
(date-event fg-alt)
(date-holiday mauve-faint)
(date-now fg-main)
(date-range fg-alt)
(date-scheduled yellow)
(date-weekday sapphire)
(date-weekend red-faint)
;;;; Prose mappings
(prose-code mauve-warmer)
(prose-done green)
(prose-macro green-cooler)
(prose-metadata fg-dim)
(prose-metadata-value fg-alt)
(prose-table fg-alt)
(prose-table-formula err)
(prose-tag yellow-faint)
(prose-todo red-warmer)
(prose-verbatim blue)
;;;; Mail mappings
(mail-cite-0 blue)
(mail-cite-1 mauve-warmer)
(mail-cite-2 green-cooler)
(mail-cite-3 yellow-cooler)
(mail-part mauve-faint)
(mail-recipient blue-warmer)
(mail-subject blue-cooler)
(mail-other sapphire)
;;;; Search mappings
(bg-search-match bg-warning)
(bg-search-current bg-yellow-intense)
(bg-search-lazy bg-blue-intense)
(bg-search-replace bg-red-intense)
(bg-search-rx-group-0 bg-magenta-intense)
(bg-search-rx-group-1 bg-green-intense)
(bg-search-rx-group-2 bg-red-subtle)
(bg-search-rx-group-3 bg-cyan-subtle)
;;;; Space mappings
(bg-space unspecified)
(fg-space border)
(bg-space-err bg-maroon-intense)
;;;; Tab mappings
(bg-tab-bar bg-alt)
(bg-tab-current bg-main)
(bg-tab-other bg-active)
;;;; Terminal mappings
(bg-term-black "black")
(fg-term-black "black")
(bg-term-black-bright "gray35")
(fg-term-black-bright "gray35")
(bg-term-red red-cooler)
(fg-term-red red-cooler)
(bg-term-red-bright red-warmer)
(fg-term-red-bright red-warmer)
(bg-term-green green)
(fg-term-green green)
(bg-term-green-bright green-warmer)
(fg-term-green-bright green-warmer)
(bg-term-yellow yellow)
(fg-term-yellow yellow)
(bg-term-yellow-bright yellow-warmer)
(fg-term-yellow-bright yellow-warmer)
(bg-term-blue blue-warmer)
(fg-term-blue blue-warmer)
(bg-term-blue-bright blue-cooler)
(fg-term-blue-bright blue-cooler)
(bg-term-magenta magenta)
(fg-term-magenta magenta)
(bg-term-magenta-bright magenta-cooler)
(fg-term-magenta-bright magenta-cooler)
(bg-term-cyan cyan)
(fg-term-cyan cyan)
(bg-term-cyan-bright cyan-cooler)
(fg-term-cyan-bright cyan-cooler)
(bg-term-white "gray65")
(fg-term-white "gray65")
(bg-term-white-bright "white")
(fg-term-white-bright "white")
;;;; Rainbow mappings
(rainbow-0 marroon)
(rainbow-1 red)
(rainbow-2 peach)
(rainbow-3 yellow)
(rainbow-4 green)
(rainbow-5 sapphire)
(rainbow-6 lavender)
(rainbow-7 sky)
(rainbow-8 teal))
"The `ef-catppuccin-frappe' palette.
Color values have the form (COLOR-NAME HEX-VALUE) with the former
as a symbol and the latter as a string.
Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
with both as symbols. The latter is a color that already exists
in the palette and is associated with a HEX-VALUE.")
(defcustom ef-catppuccin-frappe-palette-overrides nil
"Overrides for `ef-catppuccin-frappe-palette'.
Mirror the elements of the aforementioned palette, overriding
their value.
For overrides that are shared across all of the Ef themes,
refer to `ef-themes-common-palette-overrides'.
To preview the palette entries, use `ef-themes-preview-colors' or
`ef-themes-preview-colors-current' (read the documentation for
further details)."
:group 'ef-themes
:package-version '(ef-themes . "1.0.0")
:type '(repeat (list symbol (choice symbol string)))
:link '(info-link "(ef-themes) Palette overrides"))
(ef-themes-theme ef-catppuccin-frappe ef-catppuccin-frappe-palette ef-catppuccin-frappe-palette-overrides)
(provide-theme 'ef-catppuccin-frappe))
@@ -0,0 +1,439 @@
;;; ef-catppuccin-latte-theme.el --- implementation of catppuccin-latte theme using ef-themes -*- lexical-binding:t -*-
;; Copyright (C) 2022-2024 Free Software Foundation, Inc.
;; Author: Steve Beaulac <steve@beaulac.me>
;; Maintainer: Steve Beaulac <steve@beaulac.me>
;; URL: https://github.com/SjB/ef-catppuccin
;; Keywords: faces, theme, accessibility
;; This file is NOT part of GNU Emacs.
;; GNU Emacs 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.
;;
;; GNU Emacs 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 GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;;
;; The `ef-themes' are a collection of light and dark themes for GNU
;; Emacs whose goal is to provide colorful ("pretty") yet legible
;; options for users who want something with a bit more flair than the
;; `modus-themes' (also designed by me).
;;; Code:
(eval-and-compile
(require 'ef-themes)
(deftheme ef-catppuccin-latte
"ef-themes of the catppuccin-latte palette"
:background-mode 'light
:kind 'color-scheme
:family 'ef)
(defconst ef-catppuccin-latte-palette
'(
;;; Basic values
;;; Basic hues for foreground values
(crust "#DCE0E8")
(mantle "#E6E9EF")
(base "#EFF1F5")
(surface0 "#CCD0DA")
(surface1 "#BCC0CC")
(surface2 "#ACB0BE")
(overlay0 "#9CA0B0")
(overlay1 "#8C8FA1")
(overlay2 "#7C7F93")
(text "#4C4F69")
(subtext0 "#6C6F85")
(subtext1 "#5C5F77")
(rosewater "#DC8A78")
(rosewater-warmer "#e88a6b")
(rosewater-cooler "#cf8a84")
(rosewater-faint "#e3a193")
(rosewater-intense "#f17c62")
(bg-rosewater-intense "#ffffff")
(bg-rosewater-subtle "#ffffff")
(flamingo "#DD7878")
(flamingo-warmer "#e9786b")
(flamingo-cooler "#d07884")
(flamingo-faint "#e39393")
(flamingo-intense "#f26262")
(bg-flamingo-intense "#ffffff")
(bg-flamingo-subtle "#ffffff")
(pink "#EA76CB")
(pink-warmer "#f676be")
(pink-cooler "#dd76d7")
(pink-faint "#ee94d6")
(pink-intense "#fd62d4")
(bg-pink-intense "#fefffe")
(bg-pink-subtle "#ffffff")
(mauve "#8839EF")
(mauve-warmer "#9439e2")
(mauve-cooler "#7b39fb")
(mauve-faint "#9854f1")
(mauve-intense "#8529ff")
(bg-mauve-intense "#ffffff")
(bg-mauve-subtle "#ffffff")
(red "#D20F39")
(red-warmer "#de0f2c")
(red-cooler "#c50f45")
(red-faint "#e7103e")
(red-intense "#e10030")
(bg-red-intense "#dfa8b4")
(bg-red-subtle "#f792a8")
(maroon "#E64553")
(maroon-warmer "#f24546")
(maroon-cooler "#d9455f")
(maroon-faint "#e95f6b")
(maroon-intense "#ff2c3e")
(bg-maroon-intense "#ffffff")
(bg-maroon-subtle "#ffffff")
(peach "#FE640B")
(peach-warmer "#ff6400")
(peach-cooler "#f16417")
(peach-faint "#fe7425")
(peach-intense "#fe630a")
(bg-peach-intense "#f5e3d8")
(bg-peach-subtle "#fee1d0")
(yellow "#DF8E1D")
(yellow-warmer "#eb8e10")
(yellow-cooler "#d28e29")
(yellow-faint "#e49930")
(yellow-intense "#fc9200")
(bg-yellow-intense "#e8ddce")
(bg-yellow-subtle "#f7e0c1")
(green "#40A02B")
(green-warmer "#4ca01e")
(green-cooler "#33a037")
(green-faint "#46b02f")
(green-intense "#2fb911")
(bg-green-intense "#a8bea2")
(bg-green-subtle "#95de85")
(teal "#179299")
(teal-warmer "#23928c")
(teal-cooler "#0a92a5")
(teal-faint "#19a0a8")
(teal-intense "#00a5af")
(bg-teal-intense "#76b7bb")
(bg-teal-subtle "#4fdce4")
(blue "#1E66F5")
(blue-warmer "#2a66e8")
(blue-cooler "#1166ff")
(blue-faint "#3877f6")
(blue-intense "#1462fe")
(bg-blue-intense "#e7edf7")
(bg-blue-subtle "#e3ecfd")
(sky "#04A5E5")
(sky-warmer "#10a5d8")
(sky-cooler "#00a5f1")
(sky-faint "#05b4fa")
(sky-intense "#00a6e9")
(bg-sky-intense "#add7e8")
(bg-sky-subtle "#9ae1fd")
(sapphire "#209FB5")
(sapphire-warmer "#2c9fa8")
(sapphire-cooler "#139fc1")
(sapphire-faint "#23aec7")
(sapphire-intense "#05b1cf")
(bg-sapphire-intense "#a4c7ce")
(bg-sapphire-subtle "#8adcea")
(lavender "#7287FD")
(lavender-warmer "#7e87f0")
(lavender-cooler "#6587ff")
(lavender-faint "#96a5fd")
(lavender-intense "#7085ff")
(bg-lavender-intense "#ffffff")
(bg-lavender-subtle "#ffffff")
;;; remaping colors to properties
(bg-main base)
(bg-dim mantle)
(bg-alt crust)
(fg-main text)
(fg-dim subtext0)
(fg-alt subtext1)
(bg-inactive surface0)
(bg-active surface1)
;;; mauve is replacing magenta
(magenta mauve)
(magenta-warmer mauve-warmer)
(magenta-cooler mauve-cooler)
(magenta-faint mauve-faint)
(bg-magenta-intense bg-mauve-intense)
(bg-magenta-subtle bg-mauve-subtle)
;;; sapphire is replacing cyan
(cyan sapphire)
(cyan-warmer sapphire-warmer)
(cyan-cooler sapphire-cooler)
(cyan-faint sapphire-faint)
(bg-cyan-intense bg-sapphire-intense)
(bg-cyan-subtle bg-sapphire-subtle)
;;; Diffs
(bg-added bg-active)
(bg-added-faint bg-inactive)
(bg-added-refine bg-green-subtle)
(fg-added green)
(bg-changed bg-active)
(bg-changed-faint bg-inactive)
(bg-changed-refine bg-blue-subtle)
(fg-changed blue)
(bg-removed bg-active)
(bg-removed-faint bg-inactive)
(bg-removed-refine bg-red-subtle)
(fg-removed red)
;;; Graphs
(bg-graph-red-0 bg-maroon-subtle)
(bg-graph-red-1 bg-maroon-intense)
(bg-graph-green-0 bg-teal-subtle)
(bg-graph-green-1 bg-teal-intense)
(bg-graph-yellow-0 bg-rosewater-subtle)
(bg-graph-yellow-1 bg-rosewater-intense)
(bg-graph-blue-0 bg-sky-subtle)
(bg-graph-blue-1 bg-sky-intense)
(bg-graph-magenta-0 bg-pink-subtle)
(bg-graph-magenta-1 bg-pink-intense)
(bg-graph-cyan-0 bg-lavender-subtle)
(bg-graph-cyan-1 bg-lavender-intense)
;;; Special hues
(bg-mode-line mantle)
(fg-mode-line text)
(bg-completion overlay0)
(bg-hover overlay1)
(bg-hover-secondary overlay2)
(bg-hl-line crust)
(bg-region overlay2)
(bg-paren surface2)
(bg-err bg-red-intense) ; check with err
(bg-warning bg-yellow-intense) ; check with warning
(bg-info bg-green-intense) ; check with info
(border lavender)
(cursor rosewater)
(fg-intense subtext1)
(modeline-err red)
(modeline-warning yellow)
(modeline-info green)
(underline-err red-intense)
(underline-warning yellow-intense)
(underline-info green-intense)
(bg-char-0 surface0)
(bg-char-1 surface1)
(bg-char-2 surface2)
;;; Conditional hues
(bg-region-intense bg-lavender-intense)
(fg-region crust)
;;; Mappings
;;;; General mappings
(bg-fringe bg-main)
(fg-fringe fg-main)
(err red)
(warning yellow)
(info green)
(link blue)
(link-alt lavender)
(name green)
(keybind teal)
(identifier sapphire)
(prompt flamingo)
;;;; Code mappings
(builtin red)
(comment overlay0)
(constant peach)
(fnname flamingo)
(keyword mauve)
(preprocessor sky)
(docstring sapphire)
(string green)
(type yellow)
(variable green)
(rx-escape rosewater) ; compare with `string'
(rx-construct maroon)
;;;; Accent mappings
(accent-0 blue)
(accent-1 mauve)
(accent-2 green)
(accent-3 red)
;;;; Date mappings
(date-common green-cooler)
(date-deadline red-warmer)
(date-event fg-alt)
(date-holiday mauve-faint)
(date-now fg-main)
(date-range fg-alt)
(date-scheduled yellow)
(date-weekday sapphire)
(date-weekend red-faint)
;;;; Prose mappings
(prose-code mauve-warmer)
(prose-done green)
(prose-macro green-cooler)
(prose-metadata fg-dim)
(prose-metadata-value fg-alt)
(prose-table fg-alt)
(prose-table-formula err)
(prose-tag yellow-faint)
(prose-todo red-warmer)
(prose-verbatim blue)
;;;; Mail mappings
(mail-cite-0 blue)
(mail-cite-1 mauve-warmer)
(mail-cite-2 green-cooler)
(mail-cite-3 yellow-cooler)
(mail-part mauve-faint)
(mail-recipient blue-warmer)
(mail-subject blue-cooler)
(mail-other sapphire)
;;;; Search mappings
(bg-search-match bg-warning)
(bg-search-current bg-yellow-intense)
(bg-search-lazy bg-blue-intense)
(bg-search-replace bg-red-intense)
(bg-search-rx-group-0 bg-magenta-intense)
(bg-search-rx-group-1 bg-green-intense)
(bg-search-rx-group-2 bg-red-subtle)
(bg-search-rx-group-3 bg-cyan-subtle)
;;;; Space mappings
(bg-space unspecified)
(fg-space border)
(bg-space-err bg-maroon-intense)
;;;; Tab mappings
(bg-tab-bar bg-alt)
(bg-tab-current bg-main)
(bg-tab-other bg-active)
;;;; Terminal mappings
(bg-term-black "black")
(fg-term-black "black")
(bg-term-black-bright "gray35")
(fg-term-black-bright "gray35")
(bg-term-red red-cooler)
(fg-term-red red-cooler)
(bg-term-red-bright red-warmer)
(fg-term-red-bright red-warmer)
(bg-term-green green)
(fg-term-green green)
(bg-term-green-bright green-warmer)
(fg-term-green-bright green-warmer)
(bg-term-yellow yellow)
(fg-term-yellow yellow)
(bg-term-yellow-bright yellow-warmer)
(fg-term-yellow-bright yellow-warmer)
(bg-term-blue blue-warmer)
(fg-term-blue blue-warmer)
(bg-term-blue-bright blue-cooler)
(fg-term-blue-bright blue-cooler)
(bg-term-magenta magenta)
(fg-term-magenta magenta)
(bg-term-magenta-bright magenta-cooler)
(fg-term-magenta-bright magenta-cooler)
(bg-term-cyan cyan)
(fg-term-cyan cyan)
(bg-term-cyan-bright cyan-cooler)
(fg-term-cyan-bright cyan-cooler)
(bg-term-white "gray65")
(fg-term-white "gray65")
(bg-term-white-bright "white")
(fg-term-white-bright "white")
;;;; Rainbow mappings
(rainbow-0 marroon)
(rainbow-1 red)
(rainbow-2 peach)
(rainbow-3 yellow)
(rainbow-4 green)
(rainbow-5 sapphire)
(rainbow-6 lavender)
(rainbow-7 sky)
(rainbow-8 teal))
"The `ef-catppuccin-latte' palette.
Color values have the form (COLOR-NAME HEX-VALUE) with the former
as a symbol and the latter as a string.
Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
with both as symbols. The latter is a color that already exists
in the palette and is associated with a HEX-VALUE.")
(defcustom ef-catppuccin-latte-palette-overrides nil
"Overrides for `ef-catppuccin-latte-palette'.
Mirror the elements of the aforementioned palette, overriding
their value.
For overrides that are shared across all of the Ef themes,
refer to `ef-themes-common-palette-overrides'.
To preview the palette entries, use `ef-themes-preview-colors' or
`ef-themes-preview-colors-current' (read the documentation for
further details)."
:group 'ef-themes
:package-version '(ef-themes . "1.0.0")
:type '(repeat (list symbol (choice symbol string)))
:link '(info-link "(ef-themes) Palette overrides"))
(ef-themes-theme ef-catppuccin-latte ef-catppuccin-latte-palette ef-catppuccin-latte-palette-overrides)
(provide-theme 'ef-catppuccin-latte))
@@ -0,0 +1,439 @@
;;; ef-catppuccin-macchiatto-theme.el --- implementation of catppuccin-macchiatto theme using ef-themes -*- lexical-binding:t -*-
;; Copyright (C) 2022-2024 Free Software Foundation, Inc.
;; Author: Steve Beaulac <steve@beaulac.me>
;; Maintainer: Steve Beaulac <steve@beaulac.me>
;; URL: https://github.com/SjB/ef-catppuccin
;; Keywords: faces, theme, accessibility
;; This file is NOT part of GNU Emacs.
;; GNU Emacs 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.
;;
;; GNU Emacs 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 GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;;
;; The `ef-themes' are a collection of light and dark themes for GNU
;; Emacs whose goal is to provide colorful ("pretty") yet legible
;; options for users who want something with a bit more flair than the
;; `modus-themes' (also designed by me).
;;; Code:
(eval-and-compile
(require 'ef-themes)
(deftheme ef-catppuccin-macchiatto
"ef-themes of the catppuccin-macchiatto palette"
:background-mode 'dark
:kind 'color-scheme
:family 'ef)
(defconst ef-catppuccin-macchiatto-palette
'(
;;; Basic values
;;; Basic hues for foreground values
(crust "#181926")
(mantle "#1e2030")
(base "#24273a")
(surface0 "#363A4F")
(surface1 "#494d64")
(surface2 "#5b6078")
(overlay0 "#6e728d")
(overlay1 "#8087A2")
(overlay2 "#939AB7")
(text "#CAD3F5")
(subtext0 "#A5ADCB")
(subtext1 "#B8C0E0")
(rosewater "#F3dbd6")
(rosewater-warmer "#ffdbc9")
(rosewater-cooler "#e6dbe2")
(rosewater-faint "#fdfaf9")
(rosewater-intense "#f9d6cf")
(bg-rosewater-intense "#826561")
(bg-rosewater-subtle "#b04933")
(flamingo "#f0c6c6")
(flamingo-warmer "#fcc6b9")
(flamingo-cooler "#e3c6d2")
(flamingo-faint "#f9e8e8")
(flamingo-intense "#f9bdbd")
(bg-flamingo-intense "#805959")
(bg-flamingo-subtle "#ad2d2d")
(pink "#f5bde6")
(pink-warmer "#ffbdd9")
(pink-cooler "#e8bdf2")
(pink-faint "#fae2f4")
(pink-intense "#feb3ea")
(bg-pink-intense "#8f497b")
(bg-pink-subtle "#bc1c91")
(mauve "#c6a0f6")
(mauve-warmer "#d2a0e9")
(mauve-cooler "#b9a0ff")
(mauve-faint "#dcc5f9")
(mauve-intense "#c497ff")
(bg-mauve-intense "#603990")
(bg-mauve-subtle "#5b11b9")
(red "#ed8796")
(red-warmer "#f98789")
(red-cooler "#e087a2")
(red-faint "#f1a7b2")
(red-intense "#fe7589")
(bg-red-intense "#7c3d46")
(bg-red-subtle "#a1182c")
(maroon "#ee99a0")
(maroon-warmer "#fa9993")
(maroon-cooler "#e199ac")
(maroon-faint "#f3babf")
(maroon-intense "#fc8a93")
(bg-maroon-intense "#804247")
(bg-maroon-subtle "#a71b27")
(peach "#f5a97f")
(peach-warmer "#ffa972")
(peach-cooler "#e8a98b")
(peach-faint "#f7c0a1")
(peach-intense "#ffa675")
(bg-peach-intense "#865032")
(bg-peach-subtle "#ac460d")
(yellow "#eed49f")
(yellow-warmer "#fad492")
(yellow-cooler "#e1d4ab")
(yellow-faint "#f3e3c0")
(yellow-intense "#fcd890")
(bg-yellow-intense "#806d45")
(bg-yellow-subtle "#a87a1d")
(green "#a6da95")
(green-warmer "#b2da88")
(green-cooler "#99daa1")
(green-faint "#bce3b0")
(green-intense "#9ceb83")
(bg-green-intense "#576353")
(bg-green-subtle "#45882f")
(teal "#8bd5ca")
(teal-warmer "#97d5bd")
(teal-cooler "#7ed5d6")
(teal-faint "#a4ded5")
(teal-intense "#77e8d7")
(bg-teal-intense "#515d5b")
(bg-teal-subtle "#2e8174")
(blue "#8aadf4")
(blue-warmer "#96ade7")
(blue-cooler "#7dadff")
(blue-faint "#acc5f7")
(blue-intense "#7fa9ff")
(bg-blue-intense "#365187")
(bg-blue-subtle "#1044ae")
(sky "#91d7e3")
(sky-warmer "#9dd7d6")
(sky-cooler "#84d7ef")
(sky-faint "#aee1ea")
(sky-intense "#7fe3f4")
(bg-sky-intense "#4a696e")
(bg-sky-subtle "#258494")
(sapphire "#7dc4e4")
(sapphire-warmer "#89c4d7")
(sapphire-cooler "#70c4f0")
(sapphire-faint "#9ad1ea")
(sapphire-intense "#69cbf7")
(bg-sapphire-intense "#41606e")
(bg-sapphire-subtle "#1e6e92")
(lavender "#b7bdf8")
(lavender-warmer "#c3bdeb")
(lavender-cooler "#aabdff")
(lavender-faint "#dee1fb")
(lavender-intense "#b0b7ff")
(bg-lavender-intense "#3d4599")
(bg-lavender-subtle "#1323c4")
;;; remaping colors to properties
(bg-main base)
(bg-dim mantle)
(bg-alt crust)
(fg-main text)
(fg-dim subtext0)
(fg-alt subtext1)
(bg-inactive surface0)
(bg-active surface1)
;;; mauve is replacing magenta
(magenta mauve)
(magenta-warmer mauve-warmer)
(magenta-cooler mauve-cooler)
(magenta-faint mauve-faint)
(bg-magenta-intense bg-mauve-intense)
(bg-magenta-subtle bg-mauve-subtle)
;;; sapphire is replacing cyan
(cyan sapphire)
(cyan-warmer sapphire-warmer)
(cyan-cooler sapphire-cooler)
(cyan-faint sapphire-faint)
(bg-cyan-intense bg-sapphire-intense)
(bg-cyan-subtle bg-sapphire-subtle)
;;; Diffs
(bg-added bg-active)
(bg-added-faint bg-inactive)
(bg-added-refine bg-green-subtle)
(fg-added green)
(bg-changed bg-active)
(bg-changed-faint bg-inactive)
(bg-changed-refine bg-blue-subtle)
(fg-changed blue)
(bg-removed bg-active)
(bg-removed-faint bg-inactive)
(bg-removed-refine bg-red-subtle)
(fg-removed red)
;;; Graphs
(bg-graph-red-0 bg-maroon-subtle)
(bg-graph-red-1 bg-maroon-intense)
(bg-graph-green-0 bg-teal-subtle)
(bg-graph-green-1 bg-teal-intense)
(bg-graph-yellow-0 bg-rosewater-subtle)
(bg-graph-yellow-1 bg-rosewater-intense)
(bg-graph-blue-0 bg-sky-subtle)
(bg-graph-blue-1 bg-sky-intense)
(bg-graph-magenta-0 bg-pink-subtle)
(bg-graph-magenta-1 bg-pink-intense)
(bg-graph-cyan-0 bg-lavender-subtle)
(bg-graph-cyan-1 bg-lavender-intense)
;;; Special hues
(bg-mode-line mantle)
(fg-mode-line text)
(bg-completion overlay0)
(bg-hover overlay1)
(bg-hover-secondary overlay2)
(bg-hl-line crust)
(bg-region overlay2)
(bg-paren surface2)
(bg-err bg-red-intense) ; check with err
(bg-warning bg-yellow-intense) ; check with warning
(bg-info bg-green-intense) ; check with info
(border lavender)
(cursor rosewater)
(fg-intense subtext1)
(modeline-err red)
(modeline-warning yellow)
(modeline-info green)
(underline-err red-intense)
(underline-warning yellow-intense)
(underline-info green-intense)
(bg-char-0 surface0)
(bg-char-1 surface1)
(bg-char-2 surface2)
;;; Conditional hues
(bg-region-intense bg-lavender-intense)
(fg-region crust)
;;; Mappings
;;;; General mappings
(bg-fringe bg-main)
(fg-fringe fg-main)
(err red)
(warning yellow)
(info green)
(link blue)
(link-alt lavender)
(name green)
(keybind teal)
(identifier sapphire)
(prompt flamingo)
;;;; Code mappings
(builtin red)
(comment overlay0)
(constant peach)
(fnname flamingo)
(keyword mauve)
(preprocessor sky)
(docstring sapphire)
(string green)
(type yellow)
(variable green)
(rx-escape rosewater) ; compare with `string'
(rx-construct maroon)
;;;; Accent mappings
(accent-0 blue)
(accent-1 mauve)
(accent-2 green)
(accent-3 red)
;;;; Date mappings
(date-common green-cooler)
(date-deadline red-warmer)
(date-event fg-alt)
(date-holiday mauve-faint)
(date-now fg-main)
(date-range fg-alt)
(date-scheduled yellow)
(date-weekday sapphire)
(date-weekend red-faint)
;;;; Prose mappings
(prose-code mauve-warmer)
(prose-done green)
(prose-macro green-cooler)
(prose-metadata fg-dim)
(prose-metadata-value fg-alt)
(prose-table fg-alt)
(prose-table-formula err)
(prose-tag yellow-faint)
(prose-todo red-warmer)
(prose-verbatim blue)
;;;; Mail mappings
(mail-cite-0 blue)
(mail-cite-1 mauve-warmer)
(mail-cite-2 green-cooler)
(mail-cite-3 yellow-cooler)
(mail-part mauve-faint)
(mail-recipient blue-warmer)
(mail-subject blue-cooler)
(mail-other sapphire)
;;;; Search mappings
(bg-search-match bg-warning)
(bg-search-current bg-yellow-intense)
(bg-search-lazy bg-blue-intense)
(bg-search-replace bg-red-intense)
(bg-search-rx-group-0 bg-magenta-intense)
(bg-search-rx-group-1 bg-green-intense)
(bg-search-rx-group-2 bg-red-subtle)
(bg-search-rx-group-3 bg-cyan-subtle)
;;;; Space mappings
(bg-space unspecified)
(fg-space border)
(bg-space-err bg-maroon-intense)
;;;; Tab mappings
(bg-tab-bar bg-alt)
(bg-tab-current bg-main)
(bg-tab-other bg-active)
;;;; Terminal mappings
(bg-term-black "black")
(fg-term-black "black")
(bg-term-black-bright "gray35")
(fg-term-black-bright "gray35")
(bg-term-red red-cooler)
(fg-term-red red-cooler)
(bg-term-red-bright red-warmer)
(fg-term-red-bright red-warmer)
(bg-term-green green)
(fg-term-green green)
(bg-term-green-bright green-warmer)
(fg-term-green-bright green-warmer)
(bg-term-yellow yellow)
(fg-term-yellow yellow)
(bg-term-yellow-bright yellow-warmer)
(fg-term-yellow-bright yellow-warmer)
(bg-term-blue blue-warmer)
(fg-term-blue blue-warmer)
(bg-term-blue-bright blue-cooler)
(fg-term-blue-bright blue-cooler)
(bg-term-magenta magenta)
(fg-term-magenta magenta)
(bg-term-magenta-bright magenta-cooler)
(fg-term-magenta-bright magenta-cooler)
(bg-term-cyan cyan)
(fg-term-cyan cyan)
(bg-term-cyan-bright cyan-cooler)
(fg-term-cyan-bright cyan-cooler)
(bg-term-white "gray65")
(fg-term-white "gray65")
(bg-term-white-bright "white")
(fg-term-white-bright "white")
;;;; Rainbow mappings
(rainbow-0 marroon)
(rainbow-1 red)
(rainbow-2 peach)
(rainbow-3 yellow)
(rainbow-4 green)
(rainbow-5 sapphire)
(rainbow-6 lavender)
(rainbow-7 sky)
(rainbow-8 teal))
"The `ef-catppuccin-macchiatto' palette.
Color values have the form (COLOR-NAME HEX-VALUE) with the former
as a symbol and the latter as a string.
Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
with both as symbols. The latter is a color that already exists
in the palette and is associated with a HEX-VALUE.")
(defcustom ef-catppuccin-macchiatto-palette-overrides nil
"Overrides for `ef-catppuccin-macchiatto-palette'.
Mirror the elements of the aforementioned palette, overriding
their value.
For overrides that are shared across all of the Ef themes,
refer to `ef-themes-common-palette-overrides'.
To preview the palette entries, use `ef-themes-preview-colors' or
`ef-themes-preview-colors-current' (read the documentation for
further details)."
:group 'ef-themes
:package-version '(ef-themes . "1.0.0")
:type '(repeat (list symbol (choice symbol string)))
:link '(info-link "(ef-themes) Palette overrides"))
(ef-themes-theme ef-catppuccin-macchiatto ef-catppuccin-macchiatto-palette ef-catppuccin-macchiatto-palette-overrides)
(provide-theme 'ef-catppuccin-macchiatto))
@@ -0,0 +1,437 @@
;;; ef-catppuccin-mocha-theme.el --- implementation of catppuccin-mocha theme using ef-themes -*- lexical-binding:t -*-
;; Copyright (C) 2022-2024 Free Software Foundation, Inc.
;; Author: Steve Beaulac <steve@beaulac.me>
;; Maintainer: Steve Beaulac <steve@beaulac.me>
;; URL: https://github.com/SjB/ef-catppuccin
;; Keywords: faces, theme, accessibility
;; This file is NOT part of GNU Emacs.
;; GNU Emacs 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.
;;
;; GNU Emacs 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 GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;;
;; The `ef-themes' are a collection of light and dark themes for GNU
;; Emacs whose goal is to provide colorful ("pretty") yet legible
;; options for users who want something with a bit more flair than the
;; `modus-themes' (also designed by me).
;;; Code:
(eval-and-compile
(require 'ef-themes)
(deftheme ef-catppuccin-mocha
"ef-themes of the catppuccin-mocha palette"
:background-mode 'dark
:kind 'color-scheme
:family 'ef)
(defconst ef-catppuccin-mocha-palette
'(
;;; Basic values
;;; Basic hues for foreground values
(crust "#11111b")
(mantle "#181825")
(base "#1e1e2e")
(surface0 "#313244")
(surface1 "#43465a")
(surface2 "#565970")
(overlay0 "#696d86")
(overlay1 "#7B819D")
(overlay2 "#8E95B3")
(text "#C6D0F5")
(subtext0 "#A1A8C9")
(subtext1 "#B3BCDF")
(rosewater "#f5e0dc")
(rosewater-warmer "#ffe0cf")
(rosewater-cooler "#e8e0e8")
(rosewater-faint "#ffffff")
(rosewater-intense "#fadcd6")
(bg-rosewater-intense "#88695f")
(bg-rosewater-subtle "#b44833")
(flamingo "#f2cdcd")
(flamingo-warmer "#fecdc0")
(flamingo-cooler "#e5cdd9")
(flamingo-faint "#fbf0f0")
(flamingo-intense "#f9c5c5")
(bg-flamingo-intense "#845a5a")
(bg-flamingo-subtle "#b12e2e")
(pink "#f5c2e7")
(pink-warmer "#ffc2da")
(pink-cooler "#e8c2f3")
(pink-faint "#fbe7f5")
(pink-intense "#fdb9eb")
(bg-pink-intense "#8e4c7c")
(bg-pink-subtle "#bc1e91")
(mauve "#cba6f7")
(mauve-warmer "#d7a6ea")
(mauve-cooler "#bea6ff")
(mauve-faint "#e1cbfa")
(mauve-intense "#ca9eff")
(bg-mauve-intense "#623a93")
(bg-mauve-subtle "#5f11bd")
(red "#f28ba8")
(red-warmer "#fe8b9b")
(red-cooler "#e58bb4")
(red-faint "#f5adc1")
(red-intense "#ff7ea2")
(bg-red-intense "#85384e")
(bg-red-subtle "#ab133e")
(maroon "#eba0ac")
(maroon-warmer "#f7a09f")
(maroon-cooler "#dea0b8")
(maroon-faint "#f1c0c8")
(maroon-intense "#f991a2")
(bg-maroon-intense "#7a4a51")
(bg-maroon-subtle "#a32236")
(peach "#fab387")
(peach-warmer "#ffb37a")
(peach-cooler "#edb393")
(peach-faint "#fbcaab")
(peach-intense "#ffb182")
(bg-peach-intense "#92532e")
(bg-peach-subtle "#b84b07")
(yellow "#f9e2af")
(yellow-warmer "#ffe2a2")
(yellow-cooler "#ece2bb")
(yellow-faint "#fbf0d6")
(yellow-intense "#ffe4a8")
(bg-yellow-intense "#997b3a")
(bg-yellow-subtle "#c58c0e")
(green "#a6e3a1")
(green-warmer "#b2e394")
(green-cooler "#99e3ad")
(green-faint "#c2ebbe")
(green-intense "#99f291")
(bg-green-intense "#546e53")
(bg-green-subtle "#34952c")
(teal "#94e2d5")
(teal-warmer "#a0e2c8")
(teal-cooler "#87e2e1")
(teal-faint "#b1e9e0")
(teal-intense "#83f2e0")
(bg-teal-intense "#4d6c67")
(bg-teal-subtle "#279381")
(blue "#87b0f9")
(blue-warmer "#93b0ec")
(blue-cooler "#7ab0ff")
(blue-faint "#abc8fa")
(blue-intense "#81aeff")
(bg-blue-intense "#30528f")
(bg-blue-subtle "#0947b6")
(sky "#89dceb")
(sky-warmer "#95dcde")
(sky-cooler "#7cdcf7")
(sky-faint "#a8e5f0")
(sky-intense "#77e7fc")
(bg-sky-intense "#407079")
(bg-sky-subtle "#1a8a9f")
(sapphire "#74c7ec")
(sapphire-warmer "#80c7df")
(sapphire-cooler "#67c7f8")
(sapphire-faint "#92d3f0")
(sapphire-intense "#61ceff")
(bg-sapphire-intense "#386377")
(bg-sapphire-subtle "#15719a")
(lavender "#b4befe")
(lavender-warmer "#c0bef1")
(lavender-cooler "#a7beff")
(lavender-faint "#dee3fe")
(lavender-intense "#b3bdff")
(bg-lavender-intense "#2f40a8")
(bg-lavender-subtle "#021fd6")
;;; remaping colors to properties
(bg-main base)
(bg-dim mantle)
(bg-alt crust)
(fg-main text)
(fg-dim subtext0)
(fg-alt subtext1)
(bg-inactive surface0)
(bg-active surface1)
;;; mauve is replacing magenta
(magenta mauve)
(magenta-warmer mauve-warmer)
(magenta-cooler mauve-cooler)
(magenta-faint mauve-faint)
(bg-magenta-intense bg-mauve-intense)
(bg-magenta-subtle bg-mauve-subtle)
;;; sapphire is replacing cyan
(cyan sapphire)
(cyan-warmer sapphire-warmer)
(cyan-cooler sapphire-cooler)
(cyan-faint sapphire-faint)
(bg-cyan-intense bg-sapphire-intense)
(bg-cyan-subtle bg-sapphire-subtle)
;;; Diffs
(bg-added bg-active)
(bg-added-faint bg-inactive)
(bg-added-refine bg-green-subtle)
(fg-added green)
(bg-changed bg-active)
(bg-changed-faint bg-inactive)
(bg-changed-refine bg-blue-subtle)
(fg-changed blue)
(bg-removed bg-active)
(bg-removed-faint bg-inactive)
(bg-removed-refine bg-red-subtle)
(fg-removed red)
;;; Graphs
(bg-graph-red-0 bg-maroon-subtle)
(bg-graph-red-1 bg-maroon-intense)
(bg-graph-green-0 bg-teal-subtle)
(bg-graph-green-1 bg-teal-intense)
(bg-graph-yellow-0 bg-rosewater-subtle)
(bg-graph-yellow-1 bg-rosewater-intense)
(bg-graph-blue-0 bg-sky-subtle)
(bg-graph-blue-1 bg-sky-intense)
(bg-graph-magenta-0 bg-pink-subtle)
(bg-graph-magenta-1 bg-pink-intense)
(bg-graph-cyan-0 bg-lavender-subtle)
(bg-graph-cyan-1 bg-lavender-intense)
;;; Special hues
(bg-mode-line mantle)
(fg-mode-line text)
(bg-completion overlay0)
(bg-hover overlay1)
(bg-hover-secondary overlay2)
(bg-hl-line crust)
(bg-region overlay2)
(bg-paren surface2)
(bg-err bg-red-intense) ; check with err
(bg-warning bg-yellow-intense) ; check with warning
(bg-info bg-green-intense) ; check with info
(border lavender)
(cursor rosewater)
(fg-intense subtext1)
(modeline-err red)
(modeline-warning yellow)
(modeline-info green)
(underline-err red-intense)
(underline-warning yellow-intense)
(underline-info green-intense)
(bg-char-0 surface0)
(bg-char-1 surface1)
(bg-char-2 surface2)
;;; Conditional hues
(bg-region-intense bg-lavender-intense)
(fg-region crust)
;;; Mappings
;;;; General mappings
(bg-fringe bg-main)
(fg-fringe fg-main)
(err red)
(warning yellow)
(info green)
(link blue)
(link-alt lavender)
(name green)
(keybind teal)
(identifier sapphire)
(prompt flamingo)
;;;; Code mappings
(builtin red)
(comment overlay0)
(constant peach)
(fnname flamingo)
(keyword mauve)
(preprocessor sky)
(docstring sapphire)
(string green)
(type yellow)
(variable green)
(rx-escape rosewater) ; compare with `string'
(rx-construct maroon)
;;;; Accent mappings
(accent-0 blue)
(accent-1 mauve)
(accent-2 green)
(accent-3 red)
;;;; Date mappings
(date-common green-cooler)
(date-deadline red-warmer)
(date-event fg-alt)
(date-holiday mauve-faint)
(date-now fg-main)
(date-range fg-alt)
(date-scheduled yellow)
(date-weekday sapphire)
(date-weekend red-faint)
;;;; Prose mappings
(prose-code mauve-warmer)
(prose-done green)
(prose-macro green-cooler)
(prose-metadata fg-dim)
(prose-metadata-value fg-alt)
(prose-table fg-alt)
(prose-table-formula err)
(prose-tag yellow-faint)
(prose-todo red-warmer)
(prose-verbatim blue)
;;;; Mail mappings
(mail-cite-0 blue)
(mail-cite-1 mauve-warmer)
(mail-cite-2 green-cooler)
(mail-cite-3 yellow-cooler)
(mail-part mauve-faint)
(mail-recipient blue-warmer)
(mail-subject blue-cooler)
(mail-other sapphire)
;;;; Search mappings
(bg-search-match bg-warning)
(bg-search-current bg-yellow-intense)
(bg-search-lazy bg-blue-intense)
(bg-search-replace bg-red-intense)
(bg-search-rx-group-0 bg-magenta-intense)
(bg-search-rx-group-1 bg-green-intense)
(bg-search-rx-group-2 bg-red-subtle)
(bg-search-rx-group-3 bg-cyan-subtle)
;;;; Space mappings
(bg-space unspecified)
(fg-space border)
(bg-space-err bg-maroon-intense)
;;;; Tab mappings
(bg-tab-bar bg-alt)
(bg-tab-current bg-main)
(bg-tab-other bg-active)
;;;; Terminal mappings
(bg-term-black "black")
(fg-term-black "black")
(bg-term-black-bright "gray35")
(fg-term-black-bright "gray35")
(bg-term-red red-cooler)
(fg-term-red red-cooler)
(bg-term-red-bright red-warmer)
(fg-term-red-bright red-warmer)
(bg-term-green green)
(fg-term-green green)
(bg-term-green-bright green-warmer)
(fg-term-green-bright green-warmer)
(bg-term-yellow yellow)
(fg-term-yellow yellow)
(bg-term-yellow-bright yellow-warmer)
(fg-term-yellow-bright yellow-warmer)
(bg-term-blue blue-warmer)
(fg-term-blue blue-warmer)
(bg-term-blue-bright blue-cooler)
(fg-term-blue-bright blue-cooler)
(bg-term-magenta magenta)
(fg-term-magenta magenta)
(bg-term-magenta-bright magenta-cooler)
(fg-term-magenta-bright magenta-cooler)
(bg-term-cyan cyan)
(fg-term-cyan cyan)
(bg-term-cyan-bright cyan-cooler)
(fg-term-cyan-bright cyan-cooler)
(bg-term-white "gray65")
(fg-term-white "gray65")
(bg-term-white-bright "white")
(fg-term-white-bright "white")
;;;; Rainbow mappings
(rainbow-0 marroon)
(rainbow-1 red)
(rainbow-2 peach)
(rainbow-3 yellow)
(rainbow-4 green)
(rainbow-5 sapphire)
(rainbow-6 lavender)
(rainbow-7 sky)
(rainbow-8 teal))
"The `ef-catppuccin-mocha' palette.
Color values have the form (COLOR-NAME HEX-VALUE) with the former
as a symbol and the latter as a string.
Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
with both as symbols. The latter is a color that already exists
in the palette and is associated with a HEX-VALUE.")
(defcustom ef-catppuccin-mocha-palette-overrides nil
"Overrides for `ef-catppuccin-mocha-palette'.
Mirror the elements of the aforementioned palette, overriding
their value.
For overrides that are shared across all of the Ef themes,
refer to `ef-themes-common-palette-overrides'.
To preview the palette entries, use `ef-themes-preview-colors' or
`ef-themes-preview-colors-current' (read the documentation for
further details)."
:group 'ef-themes
:package-version '(ef-themes . "1.0.0")
:type '(repeat (list symbol (choice symbol string)))
:link '(info-link "(ef-themes) Palette overrides"))
(ef-themes-theme ef-catppuccin-mocha ef-catppuccin-mocha-palette ef-catppuccin-mocha-palette-overrides)
(provide-theme 'ef-catppuccin-mocha))
+323
View File
@@ -0,0 +1,323 @@
;; Steve Beaulac implementation of monokai-pro theme using ef-themes
(eval-and-compile
(require 'ef-themes)
(deftheme ef-monokai-pro
"ef-themes of the monokai-pro palette"
:background-mode 'dark
:kind 'color-scheme
:family 'ef)
(defconst ef-monokai-pro-palette
'(
;;; Basic values
(bg-main "#2d2a2e")
(fg-main "#fcfcfa")
(bg-dim "#353236")
(fg-dim "#c1c0c0")
(bg-alt "#403e41")
(fg-alt "#8d7391")
(bg-active "#5b595c")
(bg-inactive "#242124")
;;; Basic hues for foreground values
(red "#ff6188")
(red-warmer "#ff697a")
(red-cooler "#dd61aa")
(red-faint "#ff99b3")
(green "#a9dc76")
(green-warmer "#bbb876")
(green-cooler "#9abf93")
(green-faint "#c7e8a6")
(yellow "#ffd866")
(yellow-warmer "#ffaf66")
(yellow-cooler "#d3b792")
(yellow-faint "#ffe69d")
(blue "#78dce8")
(blue-warmer "#a0b9c0")
(blue-cooler "#78c0e8")
(blue-faint "#a8e9f0")
(magenta "#ff9df2")
(magenta-warmer "#ff9dd4")
(magenta-cooler "#e39df6")
(magenta-faint "#ffc1f7")
(cyan "#fc9867")
(cyan-warmer "#fd8957")
(cyan-cooler "#ff929d")
(cyan-faint "#ffc7aa")
;;; Basic hues for background values
(bg-red-intense "#f27185")
(bg-red-subtle "#d47479")
(bg-green-intense "#a5cf4f")
(bg-green-subtle "#b7d9b1")
(bg-yellow-intense "#ffd879")
(bg-yellow-subtle "#ffbf66")
(bg-blue-intense "#83d2e1")
(bg-blue-subtle "#81c0bb")
(bg-magenta-intense "#ff7afc")
(bg-magenta-subtle "#fb9eff")
(bg-cyan-intense "#f29dcd")
(bg-cyan-subtle "#c06537")
;;; Diffs
(bg-added "#00381f")
(bg-added-faint "#002910")
(bg-added-refine "#034f2f")
(fg-added "#a0e0a0")
(bg-changed "#363300")
(bg-changed-faint "#2a1f00")
(bg-changed-refine "#4a4a00")
(fg-changed "#efef80")
(bg-removed "#4f1119")
(bg-removed-faint "#380a0f")
(bg-removed-refine "#781a1f")
(fg-removed "#ffbfbf")
;;; Graphs
(bg-graph-red-0 "#b52c2c")
(bg-graph-red-1 "#702020")
(bg-graph-green-0 "#0fed00")
(bg-graph-green-1 "#007800")
(bg-graph-yellow-0 "#f1e00a")
(bg-graph-yellow-1 "#b08940")
(bg-graph-blue-0 "#2fafef")
(bg-graph-blue-1 "#1f2f8f")
(bg-graph-magenta-0 "#bf94fe")
(bg-graph-magenta-1 "#5f509f")
(bg-graph-cyan-0 "#a4877a")
(bg-graph-cyan-1 "#611300")
;;; Special hues
(bg-mode-line "#8d7391")
(fg-mode-line "#fcfcfa")
(bg-completion "#5b595c")
(bg-hover "#939293")
(bg-hover-secondary "#5b595c")
(bg-hl-line "#403341")
(bg-region "#403e41")
(bg-paren "#1f2f3f")
(bg-err "#360d09") ; check with err
(bg-warning "#332600") ; check with warning
(bg-info "#002c12") ; check with info
(border "#4f4f5f")
(cursor "#ff76ff")
(fg-intense "#ffffff")
(modeline-err "#ff80af")
(modeline-warning "#dfcf33")
(modeline-info "#2fc82f")
(underline-err "#df2f2f")
(underline-warning "#c0b000")
(underline-info "#22b022")
(bg-char-0 "#0050af")
(bg-char-1 "#7f1f7f")
(bg-char-2 "#625a00")
;;; Conditional hues
(bg-region-intense "#434443")
(fg-region unspecified)
;;; Mappings
;;;; General mappings
(bg-fringe bg-main)
(fg-fringe fg-main)
(err red-warmer)
(warning yellow)
(info green)
(link cyan)
(link-alt magenta)
(name blue-warmer)
(keybind blue-cooler)
(identifier magenta-faint)
(prompt green-cooler)
;;;; Code mappings
(builtin magenta)
(comment yellow-cooler)
(constant magenta-warmer)
(fnname yellow-cooler)
(keyword red-warmer)
(preprocessor magenta-cooler)
(docstring cyan-faint)
(string yellow)
(type blue-cooler)
(variable green)
(rx-escape green-warmer) ; compare with `string'
(rx-construct red)
;;;; Accent mappings
(accent-0 blue)
(accent-1 magenta-warmer)
(accent-2 green-cooler)
(accent-3 red)
;;;; Date mappings
(date-common green-cooler)
(date-deadline red-warmer)
(date-event fg-alt)
(date-holiday magenta)
(date-now fg-main)
(date-range fg-alt)
(date-scheduled yellow)
(date-weekday cyan)
(date-weekend red-faint)
;;;; Prose mappings
(prose-code magenta-warmer)
(prose-done green)
(prose-macro green-cooler)
(prose-metadata fg-dim)
(prose-metadata-value fg-alt)
(prose-table fg-alt)
(prose-table-formula err)
(prose-tag yellow-faint)
(prose-todo red-warmer)
(prose-verbatim blue)
;;;; Mail mappings
(mail-cite-0 blue)
(mail-cite-1 magenta-warmer)
(mail-cite-2 green-cooler)
(mail-cite-3 yellow-cooler)
(mail-part magenta-faint)
(mail-recipient blue-warmer)
(mail-subject blue-cooler)
(mail-other cyan)
;;;; Search mappings
(bg-search-match bg-warning)
(bg-search-current bg-yellow-intense)
(bg-search-lazy bg-blue-intense)
(bg-search-replace bg-red-intense)
(bg-search-rx-group-0 bg-magenta-intense)
(bg-search-rx-group-1 bg-green-intense)
(bg-search-rx-group-2 bg-red-subtle)
(bg-search-rx-group-3 bg-cyan-subtle)
;;;; Space mappings
(bg-space unspecified)
(fg-space border)
(bg-space-err bg-yellow-intense)
;;;; Tab mappings
(bg-tab-bar bg-alt)
(bg-tab-current bg-main)
(bg-tab-other bg-active)
;;;; Terminal mappings
(bg-term-black "black")
(fg-term-black "black")
(bg-term-black-bright "gray35")
(fg-term-black-bright "gray35")
(bg-term-red red-cooler)
(fg-term-red red-cooler)
(bg-term-red-bright red-warmer)
(fg-term-red-bright red-warmer)
(bg-term-green green)
(fg-term-green green)
(bg-term-green-bright green-warmer)
(fg-term-green-bright green-warmer)
(bg-term-yellow yellow)
(fg-term-yellow yellow)
(bg-term-yellow-bright yellow-warmer)
(fg-term-yellow-bright yellow-warmer)
(bg-term-blue blue-warmer)
(fg-term-blue blue-warmer)
(bg-term-blue-bright blue-cooler)
(fg-term-blue-bright blue-cooler)
(bg-term-magenta magenta)
(fg-term-magenta magenta)
(bg-term-magenta-bright magenta-cooler)
(fg-term-magenta-bright magenta-cooler)
(bg-term-cyan cyan)
(fg-term-cyan cyan)
(bg-term-cyan-bright cyan-cooler)
(fg-term-cyan-bright cyan-cooler)
(bg-term-white "gray65")
(fg-term-white "gray65")
(bg-term-white-bright "white")
(fg-term-white-bright "white")
;;;; Rainbow mappings
(rainbow-0 green-cooler)
(rainbow-1 blue)
(rainbow-2 magenta-warmer)
(rainbow-3 cyan-cooler)
(rainbow-4 yellow-cooler)
(rainbow-5 magenta-cooler)
(rainbow-6 red-cooler)
(rainbow-7 green-warmer)
(rainbow-8 yellow))
"The `ef-monokai-pro' palette.
Color values have the form (COLOR-NAME HEX-VALUE) with the former
as a symbol and the latter as a string.
Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
with both as symbols. The latter is a color that already exists
in the palette and is associated with a HEX-VALUE.")
(defcustom ef-monokai-pro-palette-overrides nil
"Overrides for `ef-monokai-pro-palette'.
Mirror the elements of the aforementioned palette, overriding
their value.
For overrides that are shared across all of the Ef themes,
refer to `ef-themes-common-palette-overrides'.
To preview the palette entries, use `ef-themes-preview-colors' or
`ef-themes-preview-colors-current' (read the documentation for
further details)."
:group 'ef-themes
:package-version '(ef-themes . "1.0.0")
:type '(repeat (list symbol (choice symbol string)))
:link '(info-link "(ef-themes) Palette overrides"))
(ef-themes-theme ef-monokai-pro ef-monokai-pro-palette ef-monokai-pro-palette-overrides)
(provide-theme 'ef-monokai-pro))
+2
View File
@@ -0,0 +1,2 @@
TERM=xterm-256color
npm_config_prefix=$HOME/.local
+83
View File
@@ -0,0 +1,83 @@
set -g fish_color_valid_path
if status is-interactive
# theme
# set -g theme_color_scheme terminal-dark
set -g fish_prompt_pwd_dir_length 1
set -g theme_display_user yes
set -g theme_hide_hostname no
set -g theme_hostname always
fish_config prompt choose default
fish_hybrid_key_bindings
fish_add_path "$HOME/.local/bin"
fish_add_path "$HOME/.cargo/bin"
set -gx npm_config_prefix "$HOME/.local"
# fish_config theme choose "kanagawa"
# fish_config theme choose "Dracula"
# Commands to run in interactive sessions can go here
alias ll="exa -l -g --icons"
alias ls="exa -al --color=always --group-directories-first"
alias oo="cd ~/Documents/nca-notes/"
alias on="nvim +Obsidian new"
alias os="nvim +Obsidian search"
alias cat="bat"
alias g=git
command -qv nmcli && alias nmlist "nmcli device wifi list"
command -qv tree && alias tree "tree -L 3 -a -I '.git' --charset X "
command -qv tree && alias dtree "tree -L 3 -a -d -I '.git' --charset X "
command -qv wl-copy && alias cwd "wl-copy \$(pwd)"
command -qv wl-copy && alias copy-cmd "wl-copy \$(echo \$history[1])"
command -qv fabric-ai && alias ai="fabric-ai -p \$(fabric-ai -l | fzf)"
command -qv xdg-open && alias o="xdg-open"
command -qv lazygit && alias lg lazygit
command -qv vi && alias v vi && set -gx EDITOR vi
command -qv vim && alias vi vim && alias v vim && set -gx EDITOR vim
command -qv nvim && alias vim nvim && alias vi nvim && alias v nvim && set -gx EDITOR nvim
command -qv nvim && alias mini "NVIM_APPNAME=mini.nvim nvim"
command -qv jj && alias rev "jj log -G -T 'commit_id.short(8)'"
set -gx VISUAL $EDITOR
if test -x /usr/bin/mise;
/usr/bin/mise activate fish | source
end
if test -x /usr/bin/direnv;
/usr/bin/direnv hook fish | source
end
if test -x /usr/bin/zoxide;
/usr/bin/zoxide init fish | source
end
if test -x /usr/bin/fzf;
/usr/bin/fzf --fish | source
#set -gx FZF_CTRL_T_OPTS "--preview 'bat --color=always -n --line-range :500 {}'"
#set -gx FZF_ALT_C_OPTS "--preview 'eza --icons=always --color=always {} | head -200'"
end
if test -x /usr/bin/jj;
/usr/bin/jj util completion fish | source
end
# NVM
function __check_nvm --on-variable PWD --description 'Do nvm stuff'
status --is-command-substitution; and return
if test -f .nvmrc; and test -r .nvmrc;
nvm use
else
end
end
end
+22
View File
@@ -0,0 +1,22 @@
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- created by lxqt-config-appearance (DO NOT EDIT!) -->
<fontconfig>
<match target="font">
<test name="family" compare="eq" ignore-blanks="false">
<string>Monaspace Neon</string>
</test>
<edit name="fontfeatures" mode="assign_replace">
<string>calt on</string>
<string>dlig on</string>
<string>ss01 on</string>
<string>ss02 on</string>
<string>ss03 on</string>
<string>ss04 on</string>
<string>ss05 on</string>
<string>ss06 on</string>
<string>ss07 on</string>
<string>ss08 on</string>
</edit>
</match>
</fontconfig>
+22
View File
@@ -0,0 +1,22 @@
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- created by lxqt-config-appearance (DO NOT EDIT!) -->
<fontconfig>
<match target="font">
<test name="family" compare="eq" ignore-blanks="false">
<string>Monaspace Radon</string>
</test>
<edit name="fontfeatures" mode="assign_replace">
<string>calt on</string>
<string>dlig on</string>
<string>ss01 on</string>
<string>ss02 on</string>
<string>ss03 on</string>
<string>ss04 on</string>
<string>ss05 on</string>
<string>ss06 on</string>
<string>ss07 on</string>
<string>ss08 on</string>
</edit>
</match>
</fontconfig>
+22
View File
@@ -0,0 +1,22 @@
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- created by lxqt-config-appearance (DO NOT EDIT!) -->
<fontconfig>
<match target="font">
<test name="family" compare="eq" ignore-blanks="false">
<string>Monaspace Xenon</string>
</test>
<edit name="fontfeatures" mode="assign_replace">
<string>calt on</string>
<string>dlig on</string>
<string>ss01 on</string>
<string>ss02 on</string>
<string>ss03 on</string>
<string>ss04 on</string>
<string>ss05 on</string>
<string>ss06 on</string>
<string>ss07 on</string>
<string>ss08 on</string>
</edit>
</match>
</fontconfig>
+22
View File
@@ -0,0 +1,22 @@
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- created by lxqt-config-appearance (DO NOT EDIT!) -->
<fontconfig>
<match target="font">
<test name="family" compare="eq" ignore-blanks="false">
<string>MonaspiceNe Nerd Font</string>
</test>
<edit name="fontfeatures" mode="assign_replace">
<string>calt on</string>
<string>dlig on</string>
<string>ss01 on</string>
<string>ss02 on</string>
<string>ss03 on</string>
<string>ss04 on</string>
<string>ss05 on</string>
<string>ss06 on</string>
<string>ss07 on</string>
<string>ss08 on</string>
</edit>
</match>
</fontconfig>
+22
View File
@@ -0,0 +1,22 @@
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- created by lxqt-config-appearance (DO NOT EDIT!) -->
<fontconfig>
<match target="font">
<test name="family" compare="eq" ignore-blanks="false">
<string>MonaspiceRn Nerd Font</string>
</test>
<edit name="fontfeatures" mode="assign_replace">
<string>calt on</string>
<string>dlig on</string>
<string>ss01 on</string>
<string>ss02 on</string>
<string>ss03 on</string>
<string>ss04 on</string>
<string>ss05 on</string>
<string>ss06 on</string>
<string>ss07 on</string>
<string>ss08 on</string>
</edit>
</match>
</fontconfig>
+22
View File
@@ -0,0 +1,22 @@
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- created by lxqt-config-appearance (DO NOT EDIT!) -->
<fontconfig>
<match target="font">
<test name="family" compare="eq" ignore-blanks="false">
<string>MonaspiceXe Nerd Font</string>
</test>
<edit name="fontfeatures" mode="assign_replace">
<string>calt on</string>
<string>dlig on</string>
<string>ss01 on</string>
<string>ss02 on</string>
<string>ss03 on</string>
<string>ss04 on</string>
<string>ss05 on</string>
<string>ss06 on</string>
<string>ss07 on</string>
<string>ss08 on</string>
</edit>
</match>
</fontconfig>
+4
View File
@@ -0,0 +1,4 @@
#source /usr/share/pwndbg/gdbinit.py
source /usr/share/gef/gef.py
set debuginfod enabled on
+20
View File
@@ -0,0 +1,20 @@
window-decoration = false
gtk-titlebar = false
config-file = "theme"
font-family = "TX-02"
font-family-bold = "TX-02 Bold"
font-family-italic = "TX-02 Oblique"
font-size = 13
#adjust-cell-width = -7%
adjust-cell-height = 5%
font-size = 13
#background-opacity = 0.90
#background-blur-radius = 20
confirm-close-surface = false
font-feature = +calt
quit-after-last-window-closed = true
quit-after-last-window-closed-delay = 5m
keybind = ctrl+c=unbind
keybind = ctrl+comma=unbind
keybind = ctrl+space=unbind
+189
View File
@@ -0,0 +1,189 @@
[include]
path = ~/.config/git/local
[pull]
rebase = true
[init]
defaultBranch = master
[column]
ui = auto
[branch]
autosetupmerge = true
[tag]
sort = version:refname
[diff]
algorithm = histogram
colorMoved = plain
mnemonicPrefix = true
renames = true
[push]
default = tracking
autoSetupRemote = true
followTags = true
[fetch]
prune = true
pruneTags = true
all = true
[commit]
# gpgsign = true
[help]
autocorrect = prompt
[rerere]
enabled = true
autoupdate = true
[rebase]
autoSquash = true
autoStash = true
[format]
pretty = format:%C(blue)%ad%Creset %C(yellow)%h%C(green)%d%Creset %C(blue)%s %C(magenta) [%an]%Creset
[mergetool]
layout = BASE,MERGED + BASE,LOCAL + BASE,REMOTE
[merge]
conflictStyle = diff3
summary = true
verbosity = 1
tool = nvimdiff
[apply]
whitespace = nowarn
[core]
excludesfile = ~/.config/git/gitignore
autocrlf = false
whitespace=fix,-indent-with-non-tab,trailing-space,cr-at-eol
[advice]
statusHints = false
[url "git@github.com:"]
insteadOf = "gh:"
pushInsteadOf = "github:"
pushInsteadOf = "git://github.com/"
[url "git://github.com/"]
insteadOf = "github:"
[url "git@gist.github.com:"]
insteadOf = "gst:"
pushInsteadOf = "gist:"
pushInsteadOf = "git://gist.github.com/"
[alias]
# annex
xl = annex list
xg = annex list
# add
a = add
padd = add --patch
# branch
b = branch -v
br = branch
branches = branch -a
#switch
sw = switch
# commit
c = commit -m
ca = commit -am
ci = commit
cam = commit --amend
cama = commit --amend -a
# clean
cl = clean
cldf = clean -df
# checkout
co = checkout
nb = checkout -b
# cherry-pick
cp = cherry-pick -x # grab a change from a branch
# diff
d = diff
dc = diff --cached
last = diff HEAD^
# log
l = log --graph --date=short
wu = log -p origin..@{0}
changes = log --pretty=format:\"%h %cr %cn %Cgreen%s%Creset\" --name-status
short = log --pretty=format:\"%h %cr %cn %Cgreen%s%Creset\"
changelog = log --pretty=format:\" * %s\"
shortnocolor = log --pretty=format:\"%h %cr %cn %s\"
lg = log --pretty=format:'%Cred%h%Creset - %C(blue bold)[%ad] %Creset%C(yellow)%d %Creset%s %C(green bold)<%an>%Creset' --abbrev-commit --date=short
llg = log --pretty=format:'%Cred%h%Creset - %C(blue bold)[%ad] %Creset%C(yellow)%d %Creset%s %C(green bold)<%an>%Creset' --abbrev-commit --date=short --graph
lls = git log --pretty=format:"[%h] %ae, %ar: %s" --stat
filelog = log -u
lc = log ORIG_HEAD.. --stat --no-merges
# rebase
rc = rebase --continue
rs = rebase --skip
# remote
r = remote -v
# reset
res = reset
unstage = reset -q HEAD --
discard = checkout --
uncommit = reset --mixed HEAD~
undo = reset --hard
# diff
df = diff --summary
staged = diff --cached
diffstat = diff --stat
changes = diff --name-status -r
# stash
stashes = stash list
ss = stash
sl = stash list
sa = stash apply
sd = stash drop
# status
s = status
st = status -s
# tag
t = tag -n
# merge
mt = mergetool
dt = difftools
rv = review
ls = ls-files
gconf = config --global
c = clone --recursive
bc = clone --bare
# worktree
wta = worktree add
wtl = worktree list
wtr = worktree remove
ignore = "!gi() { curl -sL https://www.toptal.com/developers/gitignore/api/$@ ;}; gi"
+30
View File
@@ -0,0 +1,30 @@
general {
lock_cmd = pidof hyprlock || hyprlock
# unlock_cmd = loginctl unlock-session
before_sleep_cmd = loginctl lock-session
after_sleep_cmd = hyprctl displatch dpms on
}
# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight.
listener {
timeout = 150 # 2.5min.
on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight.
on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight.
}
listener {
timeout = 300
on-timeout = brightnessctl -s set 10
on-resume = brightnessctl -r
}
listener {
timeout = 600
on-timeout = loginctl lock-session
}
listener {
timeout = 630
on-timeout = hyprctl dispatch dpms off
on-resume = hyprctl dispatch dpms on
}
+488
View File
@@ -0,0 +1,488 @@
monitor = desc:Lenovo Group Limited 0x41A0, preferred, 0x0, 1.0
monitor = desc:LG Electronics LG HDR 4K 406NTZN74597, preferred, auto-left, 1.333333
monitor = desc:GWD ARZOPA 000000000000, preferred, auto-left, 1.0
monitor = desc:Proteon TYPE-C 8R33926O00QS, preferred, auto-right, 1.0
#monitor = desc:LG Electronics LG HDR WQHD 0x0006530C, 3440x1440@75.05, auto-up, 1.0
monitor = desc:LG Electronics LG HDR WQHD 0x0006530C, preferred, auto-up, 1.0
#monitor = desc:LG Electronics LG HDR WQHD 0x0006530C, preferred, 0x0, 1.0
#monitor = desc:Ancor Communications Inc ASUS MG28U 0x00009B77, 3840x2160@60.00, auto-left, 1.333333
monitor = desc:Ancor Communications Inc ASUS MG28U 0x00009B77, preferred, auto-left, 1.333333
monitor = desc:Stargate Technology TYPE-C, preferred, auto-right, 1.0
monitor = desc:BNQ BenQ EX3501R N4M05650019, preferred, auto-right, 1.0
monitor = desc:Dell Inc. DELL U3818DW 97F8P8AD0HEL, preferred, auto-left, 1.0
monitor = desc:Microstep MSI MAG342CQR DB6H252300057, preferred, auto-right, 1.0
monitor = desc:Ancor Communications Inc ASUS PB238 DCLMTF074371, preferred, auto, 1.0
monitor = eDP-1, highrr, 0x0, 1.0
monitor = desc:BNQ BenQ EX3203R 7CL00509019, preferred, auto, 1.0
monitor = desc:Lenovo Group Limited L15 U133R0A2, preferred, auto-left, 1.0
monitor = desc:Lenovo Group Limited M15 V30F2A15, preferred, auto-left, 1.0
$notifycmd = notify-send
$terminal = uwsm app -- ghostty
$browser = uwsm app -- firefox.desktop
$webapp = uwsm app -- chromium --new-window --ozone-platform=wayland --app
$music = uwsm app -- spotify.desktop
input {
kb_layout = us
kb_variant =
kb_model =
# kb_options = ctrl:nocaps
kb_options = caps:ctrl_modifier,compose:ralt
# kb_options = compose:ralt
follow_mouse = 1
repeat_rate = 40
repeat_delay = 600
touchpad {
natural_scroll = yes
disable_while_typing = true
clickfinger_behavior = true
scroll_factor = 0.7
}
scroll_method = 2
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
}
ecosystem {
no_update_news = true
}
general {
gaps_in = 0
gaps_out = 0
border_size = 2
allow_tearing = true
snap {
enabled = true
}
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
col.inactive_border = rgba(595959aa)
layout = dwindle
}
master {
allow_small_split = true
mfact = 0.50
new_status = master
}
dwindle {
pseudotile = yes
preserve_split = yes
smart_split = no
force_split = 2
# single_window_aspect_ratio = 1 1
}
decoration {
rounding = 3
active_opacity = 1.0
inactive_opacity = 1.0
dim_inactive = false
dim_special = 0.0
dim_strength = 0.2
shadow {
enabled = false
range = 2
render_power = 3
color = rgba(1a1a1aee)
}
blur {
enabled = false
size = 3
passes = 1
vibrancy = 0.1696
}
}
group {
groupbar {
enabled = false
}
}
misc {
disable_hyprland_logo = true
disable_splash_rendering = true
focus_on_activate = true
mouse_move_enables_dpms = true
animate_manual_resizes = true
mouse_move_focuses_monitor = true
enable_swallow = true
enable_anr_dialog = false
force_default_wallpaper = true
vfr = true
}
xwayland {
force_zero_scaling = true
}
animations {
enabled = yes
#animation = borderangle, 1, 50, linear, loop
bezier = generic, 0.05, 0.9, 0.1, 1.08
bezier = almostLinear,0.5,0.5,0.75,1.0
bezier = quick,0.15,0,0.1,1
animation = windows, 1, 3, almostLinear
animation = windowsOut, 1, 3, quick
animation = windowsIn, 1, 3, quick
animation = border, 1, 10, generic
animation = fade, 1, 3, almostLinear
animation = workspaces, 1, 1, quick
animation = layers, 1, 3, quick
}
bindd = SUPER, return, Tmux Terminal, exec, $terminal -e tmux new -A -s main
bindd = SUPER, B, Browser, exec, $browser
bindd = SUPER, T, Activity, exec, $terminal -e btop
bindd = SUPER, S, Finder, exec, uwsm app -- rofi -show recursivebrowser
bindd = SUPER, I, System Status, exec, $notifycmd "$(~/.local/bin/sysinfo)"
bindd = SUPER, slash, Password, exec, ROFI_PASS_BACKEND=wtype ROFI_PASS_CLIPBOARD_BACKEND=wl-clipboard ~/.local/bin/rofi-pass
bindd = SUPER, SPACE, App Launcher, exec, uwsm app -- rofi -show drun
#bindd = SUPER ALT, SPACE, Search Launcher, exec, uwsm app -- rofi -show combi
bind = SUPER SHIFT, SPACE, exec, uwsm app -- ~/.local/bin/hyprland-fetch-client
bind = SUPER CONTROL, SPACE, exec, uwsm app -- ~/.local/bin/hyprland-focus-client
bind = SUPER CONTROL, return, exec, uwsm app -- ~/.local/bin/hyprland-tmux-session
bindd = SUPER CONTROL SHIFT ALT, V, Volume, exec, pavucontrol
bindd = SUPER CONTROL SHIFT ALT, B, Bluetooth, exec, uwsm app blueberry
bindd = SUPER CONTROL SHIFT ALT, semicolon, Update wallpaper, exec, ~/.local/bin/bing-wallpaper
bindd = SUPER CONTROL SHIFT ALT, A, ChatGPT, exec, $webapp="https://chatgpt.com"
bindd = SUPER CONTROL SHIFT ALT, C, Calendar, exec, $webapp="https://outlook.office.com/calendar/view/month"
bindd = SUPER CONTROL SHIFT ALT, E, Email, exec, $webapp="https://outlook.office.com/mail"
bindd = SUPER CONTROL SHIFT ALT, U, UWO Team, exec, $webapp="https://teams.microsoft.com/v2/"
bindd = SUPER CONTROL SHIFT ALT, Y, YouTube, exec, $webapp="https://youtube.com/"
bindd = SUPER CONTROL SHIFT ALT, W, WhatsApp, exec, $webapp="https://web.whatsapp.com/"
bindd = SUPER CONTROL SHIFT ALT, G, Google, exec, $webapp="https://www.gmail.com/"
bindd = SUPER CONTROL SHIFT ALT, M, Music, exec, $music
bindd = SUPER CONTROL SHIFT ALT, F, File manager, exec, uwsm app -- pcmanfm
bindd = SUPER, F, Force full screen, fullscreen, 0
bindd = SUPER CTRL, F, Tiled full screen, fullscreenstate, 0 2
bindd = SUPER ALT, F, Full width, fullscreen, 1
bindd = SUPER, W, Close active window, killactive,
bindd = SUPER, P, Pseudo window, pseudo, # dwindle
bindd = SUPER, V, Toggle floating, togglefloating,
bindd = SUPER, X, Toggle split, togglesplit, # dwindle
bindd = SUPER, A, Bring active to top, alterzorder, top
bindd = SUPER, left, Move focus left, movefocus, l
bindd = SUPER, right, Move focus right, movefocus, r
bindd = SUPER, up, Move focus up, movefocus, u
bindd = SUPER, down, Move focus down, movefocus, d
# Move focus with mainMod + arrow keys
bind = SUPER, H, movefocus, l
bind = SUPER, L, movefocus, r
bind = SUPER, K, movefocus, u
bind = SUPER, J, movefocus, d
# Swap active window with the one next to it with SUPER + SHIFT + arrow keys
bindd = SUPER SHIFT, left, Swap window to the left, swapwindow, l
bindd = SUPER SHIFT, right, Swap window to the right, swapwindow, r
bindd = SUPER SHIFT, up, Swap window up, swapwindow, u
bindd = SUPER SHIFT, down, Swap window down, swapwindow, d
# Move focus with mainMod + arrow keys
bind = SUPER SHIFT, H, swapwindow, l
bind = SUPER SHIFT, L, swapwindow, r
bind = SUPER SHIFT, K, swapwindow, u
bind = SUPER SHIFT, J, swapwindow, d
# Monitor and windows
bind = SUPER SHIFT, period, movewindow, mon:+1
bind = SUPER SHIFT, comma, movewindow, mon:-1
bind = SUPER CONTROL, period, movecurrentworkspacetomonitor, +1
bind = SUPER CONTROL, comma, movecurrentworkspacetomonitor, -1
bindd = SUPER, z, Focus on last, focuscurrentorlast
# Move focus with SUPER + arrow keys
bind = SUPER ALT, period, swapnext
bind = SUPER ALT, comma, swapnext, prev
# Cycle through applications on active workspace
bindd = ALT, Tab, Cycle to next window, cyclenext
bindd = ALT, Tab, Reveal active window on top, alterzorder, top
bind = SUPER ALT, Tab, focusworkspaceoncurrentmonitor, previous
# cycle monitors
bind = SUPER, Tab, focusmonitor, +1
bind = SUPER, Tab, exec, $notifycmd "$(~/.local/bin/active-workspace)"
# arrange split ratio
bind = SUPER, minus, splitratio, -0.2
bind = SUPER SHIFT, equal, splitratio, +0.2
bind = SUPER, equal, splitratio, exact 1.0
bind = SUPER, period, splitratio, exact 0.7
bind = SUPER, comma, splitratio, exact 1.30
bind = SUPER, M, layoutmsg, swapsplit
# bind = SUPER, M, layoutmsg, rollnext
# Change Workspace Mode
bind = SUPER SHIFT, X, workspaceopt, allfloat
bind = SUPER SHIFT, X, exec, $notifycmd "Toggled All Float Mode"
bind = SUPER SHIFT, Z, workspaceopt, allpseudo
bind = SUPER SHIFT, Z, exec, $notifycmd "Toggled All Pseudo Mode"
bind = SUPER, semicolon, togglespecialworkspace
bind = SUPER, semicolon, exec, $notifycmd "Toggled Special Workspace"
bind = SUPER SHIFT, semicolon, movetoworkspacesilent, special
bind = SUPER, C, centerwindow
bind = SUPER SHIFT CONTROL ALT, Z, submap,passthru
submap = passthru
bind = SUPER, Escape,submap,reset
submap = reset
bind = SUPER, Escape, exec, loginctl lock-session
bind = SUPER SHIFT, Escape, exec, systemctl suspend
bind = SUPER ALT, Escape, exec, uwsm stop,
bind = SUPER CTRL, Escape, exec, reboot
bind = SUPER SHIFT CTRL, Escape, exec, systemctl poweroff
bind = SUPER, Y, exec, makoctl dismiss
bind = SUPER, F10, exec, $notifycmd "System Menu"
bind = SUPER, F10, submap, wmmenu
submap = wmmenu
bind = , Q, exit,
bind = , S, exec, makoctl -a do-not-disturb
bind = , N, exec, makoctl -r do-not-disturb
bind = , M, exec, hyprland-toggle-monitor eDP-1
bind = , escape, exec, $notifycmd "Leaving System Menu"
bind = , escape, submap, reset
submap = reset
# window resize
bind = SUPER, F9, exec, $notifycmd "Window Menu"
bind = SUPER, F9, submap, resize
submap = resize
binde = , period, resizeactive, 10 10
binde = , comma, resizeactive, -10 -10
bind = , r, resizeactive, exact 50% 50%
bind = , s, resizeactive, exact 25% 25%
bind = , c, centerwindow, 0 10
bind = , p, pin
bind = , up, movewindow, u
bind = , down, movewindow, d
bind = , left, movewindow, l
bind = , right, movewindow, r
bind = , escape, exec, $notifycmd "Leaving Window Menu"
bind = , escape, submap, reset
submap = reset
# Switch workspaces with SUPER + [0-9]
bindd = SUPER CONTROL, code:10, Switch to workspace 1, workspace, 1
bindd = SUPER CONTROL, code:11, Switch to workspace 2, workspace, 2
bindd = SUPER CONTROL, code:12, Switch to workspace 3, workspace, 3
bindd = SUPER CONTROL, code:13, Switch to workspace 4, workspace, 4
bindd = SUPER CONTROL, code:14, Switch to workspace 5, workspace, 5
bindd = SUPER CONTROL, code:15, Switch to workspace 6, workspace, 6
bindd = SUPER CONTROL, code:16, Switch to workspace 7, workspace, 7
bindd = SUPER CONTROL, code:17, Switch to workspace 8, workspace, 8
bindd = SUPER CONTROL, code:18, Switch to workspace 9, workspace, 9
bindd = SUPER CONTROL, code:19, Switch to workspace 10, workspace, 10
# Switch workspaces with SUPER + [0-9]
bindd = SUPER, code:10, Switch to workspace 1, focusworkspaceoncurrentmonitor, 1
bindd = SUPER, code:11, Switch to workspace 2, focusworkspaceoncurrentmonitor, 2
bindd = SUPER, code:12, Switch to workspace 3, focusworkspaceoncurrentmonitor, 3
bindd = SUPER, code:13, Switch to workspace 4, focusworkspaceoncurrentmonitor, 4
bindd = SUPER, code:14, Switch to workspace 5, focusworkspaceoncurrentmonitor, 5
bindd = SUPER, code:15, Switch to workspace 6, focusworkspaceoncurrentmonitor, 6
bindd = SUPER, code:16, Switch to workspace 7, focusworkspaceoncurrentmonitor, 7
bindd = SUPER, code:17, Switch to workspace 8, focusworkspaceoncurrentmonitor, 8
bindd = SUPER, code:18, Switch to workspace 9, focusworkspaceoncurrentmonitor, 9
bindd = SUPER, code:19, Switch to workspace 10, focusworkspaceoncurrentmonitor, 10
# Move active window to a workspace with SUPER + SHIFT + [0-9]
bindd = SUPER SHIFT, code:10, Move window to workspace 1, movetoworkspace, 1
bindd = SUPER SHIFT, code:11, Move window to workspace 2, movetoworkspace, 2
bindd = SUPER SHIFT, code:12, Move window to workspace 3, movetoworkspace, 3
bindd = SUPER SHIFT, code:13, Move window to workspace 4, movetoworkspace, 4
bindd = SUPER SHIFT, code:14, Move window to workspace 5, movetoworkspace, 5
bindd = SUPER SHIFT, code:15, Move window to workspace 6, movetoworkspace, 6
bindd = SUPER SHIFT, code:16, Move window to workspace 7, movetoworkspace, 7
bindd = SUPER SHIFT, code:17, Move window to workspace 8, movetoworkspace, 8
bindd = SUPER SHIFT, code:18, Move window to workspace 9, movetoworkspace, 9
bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10
# Screenshots
bind = , PRINT, exec, hyprshot -m region
bind = SHIFT, PRINT, exec, hyprshot -m window
bind = CTRL, PRINT, exec, hyprshot -m output
# Color picker
bind = SUPER, PRINT, exec, pkill hyprpicker || hyprpicker -a
# media controls
bindl = , XF86AudioMedia, exec, playerctl play-pause
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPrev, exec, playerctl previous
bindl = , XF86AudioNext, exec, playerctl next
bindle = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
bindle = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindl = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindle = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+
bindle = ,XF86MonBrightnessDown, exec,brightnessctl s 10%-
# Scroll through existing workspaces with SUPER + scroll
bindd = SUPER, mouse_down, Scroll active workspace forward, workspace, e+1
bindd = SUPER, mouse_up, Scroll active workspace backward, workspace, e-1
# Move/resize windows with SUPER + LMB/RMB and dragging
bindmd = SUPER, mouse:272, Move window, movewindow
bindmd = SUPER, mouse:273, Resize window, resizewindow
# Workspace rules
workspace = w[tv1], gapsout:0, gapsin:0
workspace = f[1], gapsout:0, gapsin:0
workspace = special:special, bordersize:3
windowrule = border_size 2, rounding 0, match:float 0, match:workspace w[tv1]
windowrule = border_size 2, rounding 0, match:float 0, match:workspace f[1]
# Define terminal tag to style them uniformly
windowrule = tag +terminal, match:class (Alacritty|kitty|com.mitchellh.ghostty)
windowrule = scroll_touchpad 1.5, match:class (Alacritty|kitty)
windowrule = scroll_touchpad 0.2, match:class com.mitchellh.ghostty
# Picture-in-picture overlays
windowrule = tag +pip, match:title (Picture.?in.?[Pp]icture)
windowrule = float on, pin on, size 600 338, keep_aspect_ratio on, border_size 0, opacity 1 1, move ((monitor_w*1)-window_w-40) ((monitor_h*0.04)), match:tag pip
windowrule = no_shadow on, match:float 0
# Floating windows
windowrule = float on, center on, size 800 600, match:tag floating-window
windowrule = tag +floating-window, match:class (blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|com.gabm.satty|Omarchy|About|TUI.float)
windowrule = tag +floating-window, match:class (xdg-desktop-portal-gtk|sublime_text|DesktopEditors), match:title ^(Open.*Files?|Save.*Files?|Save.*As|All Files|Save)
# Browser types
windowrule = tag +chromium-based-browser, match:class ([cC]hrom(e|ium)|[bB]rave-browser|Microsoft-edge|Vivaldi-stable)
windowrule = tag +firefox-based-browser, match:class (Firefox|zen|librewolf)
# Force chromium-based browsers into a tile to deal with --app bug
windowrule = tile on, match:tag chromium-based-browser
# Some video sites should never have opacity applied to them
# windowrule = opacity 1.0 1.0, match:initial_title (youtube\.com_/|app\.zoom\.us_/wc/home)
# No transparency on media windows
# windowrule = opacity 1 1, match:class ^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$
# Only a subtle opacity change, but not for video sites
# windowrule = opacity 1 0.97, match:tag chromium-based-browser
# windowrule = opacity 1 0.97, match:tag firefox-based-browser
windowrule = float on, size 1024 480, match:class (org.pulseaudio.pavucontrol)
# telegram media viewer
windowrule = float on, match:title ^(Media viewer)$
layerrule = no_anim on, match:namespace rofi
layerrule = no_anim on, match:namespace walker
windowrule = stay_focused on, match:class (rofi)
windowrule = stay_focused on, match:class (walker)
windowrule = stay_focused on, match:class ^(pinentry-) # fix pinentry losing focus
windowrule = dim_around on, stay_focused on, match:class ^(gcr-prompter)$
# Remove 1px border around hyprshot screenshots
layerrule = no_anim on, match:namespace selection
# idle inhibit while watching videos
windowrule = idle_inhibit focus, match:class ^(mpv|.+exe)$
windowrule = idle_inhibit focus, match:class ^(firefox)$, match:title ^(.*YouTube.*)$
windowrule = idle_inhibit fullscreen, match:class ^(firefox)$
windowrule = pseudo on, match:workspace w[-99]
layerrule = blur on, ignore_alpha 0, match:namespace ^(gtk-layer-shell|anyrun)$
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
windowrule = suppress_event maximize, match:class .*
# Fix some dragging issues with XWayland
windowrule = no_focus on, match:class ^$, match:title ^$, match:xwayland 1, match:float 1, match:fullscreen 0, match:pin 0
windowrule {
name = windowrule-28
no_focus = on
match:class = ^$
match:title = ^$
match:xwayland = 1
match:float = 1
match:fullscreen = 0
match:pin = 0
}
# Some default env vars.
# Cursor size
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
# Force all apps to use Wayland
env = GDK_BACKEND,wayland,x11,*
env = QT_QPA_PLATFORM,wayland;xcb
env = QT_STYLE_OVERRIDE,kvantum
env = SDL_VIDEODRIVER,wayland
env = MOZ_ENABLE_WAYLAND,1
env = ELECTRON_OZONE_PLATFORM_HINT,wayland
env = OZONE_PLATFORM,wayland
env = XDG_SESSION_TYPE,wayland
# Allow better support for screen sharing (Google Meet, Discord, etc)
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_DESKTOP,Hyprland
# Use XCompose file
env = XCOMPOSEFILE,~/.XCompose
# Make Chromium use XCompose and all Wayland
env = CHROMIUM_FLAGS,"--enable-features=UseOzonePlatform --ozone-platform=wayland --gtk-version=4"
# Make .desktop files available for wofi
env = XDG_DATA_DIRS,/usr/share:/usr/local/share:~/.local/share
# Source a file (multi-file configs)
source = ~/.local/share/themes/current/theme/hyprland.conf
exec-once = dbus-update-activation-environment --systemd --all
exec-once = systemctl --user start hyprpolkitagent
exec-once = hyprctl setcursor Pop 24
exec-once = uwsm app -- hypridle
exec-once = uwsm app -- mako
exec-once = uwsm app -- fcitx5
exec-once = uwsm app -- udiskie -a -n -T &
exec-once = uwsm app -- swww-daemon
exec-once = gnome-keyring-daemon --replace --daemonize --components=pkcs11,secrets,gpg
# exec-once = systemctl --user import-environment $(env | cut -d'=' -f 1)
exec-once = systemctl --user import-environment DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE XDG_RUNTIME_DIR DBUS_SESSION_BUS_ADDRESS LANG PATH
+44
View File
@@ -0,0 +1,44 @@
source = ~/.local/share/themes/current/theme/hyprlock.conf
# GENERAL
general {
disable_loading_bar = true
hide_cursor = true
}
background {
monitor =
path = ~/.local/share/themes/current/background
color = $color
}
animations {
enabled = false
}
input-field {
monitor =
size = 600, 100
position = 0, 0
halign = center
valign = center
inner_color = $inner_color
outer_color = $outer_color
outline_thickness = 4
font_family = CaskaydiaMono Nerd Font
font_color = $font_color
placeholder_text =   Enter Password 󰈷 
check_color = $check_color
fail_text = <i>$PAMFAIL ($ATTEMPTS)</i>
rounding = 0
shadow_passes = 0
fade_on_empty = false
}
auth {
fingerprint:enabled = true
}
+14
View File
@@ -0,0 +1,14 @@
bind = SUPER, Z, hyprexpo:expo, toggle # can be: toggle, off/disable or on/enable
plugin {
hyprexpo {
columns = 3
gap_size = 10
workspace_method = 1 # center current # [center/first] [workspace] e.g. first 1 or center m+1
enable_gesture = true # laptop touchpad
gesture_fingers = 3 # 3 or 4
gesture_distance = 300 # how far is the "max"
gesture_positive = true # positive = swipe down. Negative = swipe up.
}
}
+76
View File
@@ -0,0 +1,76 @@
#:schema https://docs.jj-vcs.dev/latest/config-schema.json
[ui]
default-command = ["status"]
#conflict-marker-style = "git"
#conflict-marker-style = "snapshot"
conflict-marker-style = "diff"
#diff-formatter = ":git"
diff-editor = ["nvim", "-c", "DiffEditor $left $right $output"]
merge-editor = "diffconflicts"
[colors]
# Highlight hunks with background
#"diff removed token" = { underline = false }
#"diff added token" = { underline = false }
# Alternatively, swap colors
"diff token" = { underline = false }
[templates]
commit_trailers = '''
format_signed_off_by_trailer(self)
++ if(!trailers.contains_key("Change-Id"), format_gerrit_change_id_trailer(self))'''
git_push_bookmark = '"sjb/push-" ++ change_id.short()'
[merge-tools.nvimdiff]
program = "nvim"
merge-args = ["-d", "$left", "$right", "$base", "$output"]
[merge-tools.diffconflicts]
program = "nvim"
merge-args = [
"-c", "let g:jj_diffconflicts_marker_length=$marker_length",
"-c", "JJDiffConflicts!", "$output", "$base", "$left", "$right",
]
merge-tool-edits-conflict-markers = true
[signing]
#behavior = "own"
behavior = "drop"
backend = "gpg"
## You can set `key` to anything accepted by `gpg -u`
## If not set then defaults to the key associated with `user.email`
# key = "4ED556E9729E000F"
key = "8E887C55"
#key = "steve@sagacity.ca"
# Configure signing backend as before, but lazily signing only on push.
[git]
sign-on-push = true
# Prevent pushing work in progress or anything explicitly labeled "private"
private-commits = "description('wip:*') | description('private:*')"
[snapshot]
max-new-file-size = "10MiB"
[aliases]
# `jj l` shows commits on the working-copy commit's (anonymous) bookmark
# compared to the `main` bookmark
l = ["log", "-r", "::"]
lt = ["log", "-r", "(trunk()..@):: | (trunk()..@)-"]
fetch = ["git", "fetch"]
init = ["git", "init", "--colocate"]
mark = ["bookmark", "set", "-r", "@"]
push = ["git", "push", "--allow-new"]
track = ["bookmark", "track"]
wip = ["log", "-r", "bookmarks(wip*)"]
[revset-aliases]
wip = "heads(::@ ~ description(''))::"
[[--scope]]
--when.repositories = ["~/Projects/personal"]
[--scope.user]
email = "steve@sagacity.ca"
+49
View File
@@ -0,0 +1,49 @@
nt_family TX-02
bold_font auto
italic_font auto
bold_italic_font auto
font_size 13
enable_audio_bell no
window_alert_on_bell no
window_padding_width 3
# gruvbox-dark colorscheme for kitty
# snazzy theme used as base
foreground #ebdbb2
background #272727
selection_foreground #655b53
selection_background #ebdbb2
url_color #d65c0d
# black
color0 #272727
color8 #928373
# red
color1 #cc231c
color9 #fb4833
# green
color2 #989719
color10 #b8ba25
# yellow
color3 #d79920
color11 #fabc2e
# blue
color4 #448488
color12 #83a597
# magenta
color5 #b16185
color13 #d3859a
# cyan
color6 #689d69
color14 #8ec07b
# white
color7 #a89983
color15 #ebdbb2
+1
View File
@@ -0,0 +1 @@
/home/sjb/.config/omarchy/current/theme/mako.ini
+251
View File
@@ -0,0 +1,251 @@
vim.g.mapleader = ' '
vim.g.maplocalleader = ' '
vim.g.have_nerd_fonts = true
-- set <space> as my leader key
vim.g.autoformat = true
-- vim.g.root_spec = { "lsp", { ".git", "lua" }, "cwd" }
vim.g.editorconfig = true
vim.wo.number = true
vim.opt.background = "dark"
vim.opt.backup = false
vim.schedule(function()
vim.opt.clipboard = "unnamedplus"
end)
vim.opt.cmdheight = 1
vim.opt.completeopt = "menu,menuone,noselect"
vim.opt.conceallevel = 2
vim.opt.hlsearch = true
vim.opt.breakindent = true
vim.opt.ignorecase = true
vim.opt.formatoptions = "jcroqlnt"
vim.opt.grepformat = "%f:%l:%c:%m"
vim.opt.grepprg = "rg --vimgrep"
vim.opt.ignorecase = true
vim.opt.inccommand = "split"
vim.opt.list = true
vim.opt.listchars = { tab = "» ", trail = "·", nbsp = "␣" }
vim.opt.mouse = "a"
vim.opt.pumblend = 10
vim.opt.pumheight = 10
vim.opt.showmode = false
vim.opt.showtabline = 0
vim.opt.smartcase = true
vim.opt.smartindent = true
vim.opt.splitbelow = true
vim.opt.splitright = true
-- vim.opt.splitkeep = "screen"
vim.opt.swapfile = false
vim.opt.termguicolors = true
vim.opt.undofile = true
vim.opt.undolevels = 10000
-- vim.opt.updatetime = 250 -- default 250
-- vim.opt.timeoutlen = 250 -- default 1000
vim.opt.timeout = false
vim.opt.writebackup = false
vim.opt.expandtab = true
vim.opt.shiftround = true
vim.opt.shiftwidth = 4
vim.opt.shortmess:append({ W = true, I = true, c = true, C = true })
vim.opt.spelllang = { "en" }
vim.opt.tabstop = 4
vim.opt.cursorline = true
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.laststatus = 3
vim.opt.showcmd = false
vim.opt.ruler = false
vim.opt.numberwidth = 4
vim.opt.signcolumn = "yes"
vim.opt.wrap = false
vim.opt.scrolloff = 8
vim.opt.sidescrolloff = 8
vim.opt.shell = "/bin/bash"
vim.opt.sessionoptions = { "blank", "buffers", "curdir", "tabpages", "winsize", "winpos", "terminal", "localoptions", "help", "skiprtp", "folds" }
vim.opt.virtualedit = "block"
vim.opt.wildmode = "longest:full,full"
vim.opt.winminwidth = 5
-- vim.opt.hidden = false
vim.opt.cindent = true
vim.opt.autoindent = true
if vim.fn.has("nvim-0.10") == 1 then
vim.opt.smoothscroll = true
end
vim.opt.foldmethod = "expr"
vim.opt.foldexpr = "v:lua.vim.treesitter.foldexpr()"
vim.opt.foldlevel = 99
vim.opt.nu = true
vim.opt.errorbells = false
vim.opt.belloff = "all"
vim.opt.undodir = vim.fn.stdpath('data') .. "/undodir"
vim.opt.softtabstop = 4
vim.opt.incsearch = true
-- vim.opt.fillchars.eob = " "
-- vim.opt.shortmess:append("c")
-- vim.opt.whichwrap:append("<,>,[,],h,l")
-- vim.opt.iskeyword:append(".")
-- vim.o.isfname:append("@-@")
-- vim.o.colorcolumn = "80"
-- Put this at the top of 'init.lua'
local path_package = vim.fn.stdpath('data') .. '/site'
local mini_path = path_package .. '/pack/deps/start/mini.nvim'
if not vim.loop.fs_stat(mini_path) then
vim.cmd('echo "Installing `mini.nvim`" | redraw')
local clone_cmd = {
'git', 'clone', '--filter=blob:none',
-- Uncomment next line to use 'stable' branch
-- '--branch', 'stable',
'https://github.com/echasnovski/mini.nvim', mini_path
}
vim.fn.system(clone_cmd)
vim.cmd('packadd mini.nvim | helptags ALL')
end
-- add({ 'echasnovski/mini.ai' })
-- add({ 'echasnovski/mini.align' })
-- add({ 'echasnovski/mini.operators' })
-- add({ 'echasnovski/mini.bracketed' })
-- add({ 'echasnovski/mini.operators' })
-- add({ 'echasnovski/mini.surround' })
-- add({ 'echasnovski/mini.statusline' })
-- add({ 'echasnovski/mini.tabline' })
-- add({ 'echasnovski/mini.hipatterns' })
require('mini.extra').setup()
require('mini.ai').setup({
custom_textobjects = {
B = MiniExtra.gen_ai_spec.buffer(),
I = MiniExtra.gen_ai_spec.indent(),
L = MiniExtra.gen_ai_spec.line(),
},
})
require('mini.align').setup()
require('mini.bracketed').setup()
local hi_words = MiniExtra.gen_highlighter.words
require('mini.hipatterns').setup({
highlighters = {
-- Highlight standalone 'FIXME', 'HACK', 'TODO', 'NOTE'
fixme = hi_words({ 'FIXME', 'Fixme', 'fixme' }, "MiniHipatternsFixme"),
hack = hi_words({ 'HACK', 'Hack', 'hack' }, "MiniHipatternsHack"),
todo = hi_words({ 'TODO', 'Todo', 'todo' }, "MiniHipatternsTodo"),
note = hi_words({ 'NOTE', 'Note', 'note' }, "MiniHipatternsNote"),
-- Highlight hex color strings (`#rrggbb`) using that color
-- hex_color = hipatterns.gen_highlighter.hex_color(),
},
})
require("mini.surround").setup({
-- Add custom surroundings to be used on top of builtin ones. For more
-- information with examples, see `:h MiniSurround.config`.
-- custom_surroundings = {
-- s = { input = { '%[%[().-()%]%]' }, output = { left = '[[', right = ']]' } },
-- },
mappings = {
add = 'sa', -- Add surrounding in Normal and Visual modes
delete = 'sd', -- Delete surrounding
find = 'sf', -- Find surrounding (to the right)
find_left = 'sF', -- Find surrounding (to the left)
highlight = 'sh', -- Highlight surrounding
replace = 'sr', -- Replace surrounding
update_n_lines = 'sn', -- Update `n_lines`
suffix_last = 'l', -- Suffix to search with "prev" method
suffix_next = 'n', -- Suffix to search with "next" method
},
})
require("mini.operators").setup({
evaluate = { prefix = 'g=', func = nil, },
exchange = { prefix = 'g.', reindent_linewise = true, },
multiply = { prefix = 'gm', func = nil, },
replace = { prefix = 'gk', reindent_linewise = true, },
sort = { prefix = 'gs', func = nil, }
})
local miniclue = require('mini.clue')
miniclue.setup({
triggers = {
-- Leader triggers
{ mode = 'n', keys = '<Leader>' },
{ mode = 'x', keys = '<Leader>' },
-- Built-in completion
{ mode = 'i', keys = '<C-x>' },
-- `g` key
{ mode = 'n', keys = 'g' },
{ mode = 'x', keys = 'g' },
-- Marks
{ mode = 'n', keys = "'" },
{ mode = 'n', keys = '`' },
{ mode = 'x', keys = "'" },
{ mode = 'x', keys = '`' },
-- Registers
{ mode = 'n', keys = '"' },
{ mode = 'x', keys = '"' },
{ mode = 'i', keys = '<C-r>' },
{ mode = 'c', keys = '<C-r>' },
-- Window commands
{ mode = 'n', keys = '<C-w>' },
-- `z` key
{ mode = 'n', keys = 'z' },
{ mode = 'x', keys = 'z' },
},
clues = {
-- Enhance this by adding descriptions for <Leader> mapping groups
miniclue.gen_clues.builtin_completion(),
miniclue.gen_clues.g(),
miniclue.gen_clues.marks(),
miniclue.gen_clues.registers(),
miniclue.gen_clues.windows(),
miniclue.gen_clues.z(),
},
})
require('mini.bufremove').setup()
require('mini.comment').setup()
require('mini.completion').setup()
require('mini.cursorword').setup()
require('mini.diff').setup()
require('mini.files').setup()
require('mini.fuzzy').setup()
require('mini.git').setup()
require('mini.icons').setup()
require('mini.jump').setup()
require('mini.move').setup()
require('mini.pick').setup()
require('mini.sessions').setup()
require('mini.splitjoin').setup()
require('mini.jump2d').setup()
require('mini.visits').setup()
require('mini.statusline').setup()
require('mini.tabline').setup()
vim.keymap.set('n', '<leader>f', '<cmd>Pick files<cr>', { desc = "Pick files" })
vim.keymap.set('n', '<leader>j', '<cmd>Pick oldfiles<cr>', { desc = "Pick files" })
vim.keymap.set('n', '<leader>/', '<cmd>Pick grep_live<cr>', { desc = "live grep" })
vim.keymap.set('n', '<leader>s/', '<cmd>Pick buf_lines<cr>', { desc = 'search in buffer' })
vim.keymap.set('n', '<leader>sk', '<cmd>Pick keymaps<cr>', { desc = 'search in buffer' })
vim.keymap.set('n', '<leader>sm', '<cmd>Pick marks<cr>', { desc = 'search in buffer' })
vim.keymap.set('n', '<leader><space>', '<cmd>Pick buffers<cr>', { desc = 'find buffer' })
vim.keymap.set('n', '<leader>q', '<cmd>Pick diagnostic<cr>', { desc = 'find diagnostic' })
vim.keymap.set('n', '<leader>-', '<cmd>Pick explorer<cr>', { desc = 'explorer' })
vim.keymap.set('n', '<M-x>', '<cmd>Pick commands<cr>', { desc = 'commands' })
vim.cmd("colorscheme minicyan")
+2
View File
@@ -0,0 +1,2 @@
let current_compiler = "cmake"
CompilerSet makeprg=cmake
+2
View File
@@ -0,0 +1,2 @@
let current_compiler = "npm"
CompilerSet makeprg=npm\ run
+30
View File
@@ -0,0 +1,30 @@
vim.api.nvim_buf_set_keymap(
0,
"n",
"<CR>",
"<cmd>lua require('kulala').run()<cr>",
{ noremap = true, silent = true, desc = "Execute the request" }
)
vim.api.nvim_buf_set_keymap(
0,
"n",
"[",
"<cmd>lua require('kulala').jump_prev()<cr>",
{ noremap = true, silent = true, desc = "Jump to the previous request" }
)
vim.api.nvim_buf_set_keymap(
0,
"n",
"]",
"<cmd>lua require('kulala').jump_next()<cr>",
{ noremap = true, silent = true, desc = "Jump to the next request" }
)
vim.api.nvim_buf_set_keymap(
0,
"n",
"<leader>i",
"<cmd>lua require('kulala').inspect()<cr>",
{ noremap = true, silent = true, desc = "Inspect the current request" }
)
+163
View File
@@ -0,0 +1,163 @@
-- Steve Beaulac nvim configuration using kickstart git: 2ba39c6 --
vim.g.mapleader = ' '
vim.g.maplocalleader = ' '
vim.g.have_nerd_fonts = true
-- set <space> as my leader key
vim.g.autoformat = true
-- vim.g.root_spec = { "lsp", { ".git", "lua" }, "cwd" }
vim.g.editorconfig = true
vim.wo.number = true
vim.opt.background = "dark"
vim.opt.backup = false
vim.opt.clipboard:append("unnamedplus")
vim.opt.modifiable = true
vim.opt.cmdheight = 1
vim.opt.completeopt = { 'menuone', 'noinsert', 'noselect', 'fuzzy', 'popup' }
vim.opt.conceallevel = 0
-- vim.opt.concealcursor = ""
vim.opt.encoding = "UTF-8"
vim.opt.lazyredraw = true
vim.opt.redrawtime = 10000
vim.opt.maxmempattern = 20000
vim.opt.synmaxcol = 300
vim.opt.pumheight = 10
vim.opt.pumblend = 10
vim.opt.winblend = 0
vim.opt.hlsearch = true
vim.opt.breakindent = true
vim.opt.ignorecase = true
vim.opt.backspace = "indent,eol,start"
vim.opt.formatoptions = "jcroqlnt"
vim.opt.grepformat = "%f:%l:%c:%m"
vim.opt.grepprg = "rg --vimgrep"
vim.opt.ignorecase = true
vim.opt.inccommand = "split"
vim.opt.list = true
vim.opt.listchars = { tab = "» ", trail = "·", nbsp = "␣" }
vim.opt.mouse = "a"
vim.opt.pumblend = 10
vim.opt.pumheight = 10
vim.opt.showmode = false
vim.opt.showmatch = true
vim.opt.showtabline = 0
vim.opt.smartcase = true
vim.opt.smartindent = true
vim.opt.splitbelow = true
vim.opt.splitright = true
-- vim.opt.splitkeep = "screen"
vim.opt.swapfile = false
vim.opt.termguicolors = true
vim.opt.undofile = true
vim.opt.undolevels = 10000
vim.opt.updatetime = 250 -- default 250
vim.opt.timeoutlen = 500 -- default 1000
vim.opt.ttimeoutlen = 0
-- vim.opt.timeout = false
vim.opt.autoread = true
vim.opt.autowrite = false
vim.opt.autochdir = false
vim.opt.writebackup = false
vim.opt.expandtab = true
vim.opt.shiftround = true
vim.opt.shiftwidth = 4
vim.opt.softtabstop = 4
vim.opt.tabstop = 4
vim.opt.hidden = true
vim.opt.shortmess:append({ W = true, I = true, c = true, C = true })
vim.opt.spelllang = { "en" }
vim.opt.selection = "inclusive"
vim.opt.cursorline = true
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.laststatus = 3
vim.opt.showcmd = false
vim.opt.ruler = false
vim.opt.numberwidth = 4
vim.opt.signcolumn = "yes"
vim.opt.wrap = false
vim.opt.scrolloff = 8
vim.opt.sidescrolloff = 8
vim.opt.shell = "/bin/bash"
vim.opt.sessionoptions = { "blank", "buffers", "curdir", "tabpages", "winsize", "winpos", "terminal", "localoptions", "help", "skiprtp", "folds" }
vim.opt.virtualedit = "block"
vim.opt.wildmode = "longest:full,full"
vim.opt.diffopt:append("linematch:60")
vim.opt.winminwidth = 5
-- vim.opt.hidden = false
-- vim.opt.cindent = true
-- vim.opt.autoindent = true
if vim.fn.has("nvim-0.10") == 1 then
vim.opt.smoothscroll = true
end
vim.opt.foldmethod = "expr"
vim.opt.foldexpr = "v:lua.vim.treesitter.foldexpr()"
vim.opt.foldlevel = 99
vim.opt.errorbells = false
vim.opt.belloff = "all"
vim.opt.undodir = vim.fn.stdpath('data') .. "/undodir"
vim.opt.incsearch = true
vim.opt.fillchars = { eob = " " }
vim.opt.iskeyword:append("-")
vim.opt.path:append("**")
vim.opt.colorcolumn = "100"
vim.diagnostic.config({
virtual_text = { current_line = true }
})
-- Lazy plugin manager
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = 'https://github.com/folke/lazy.nvim.git'
local out = vim.fn.system { 'git', 'clone', '--filter=blob:none', lazyrepo, '--branch=stable', lazypath }
if vim.v.shell_error ~= 0 then
error('Error cloning lazy.nvim:\n' .. out)
end
end
vim.opt.rtp:prepend(lazypath)
require("lazy").setup({
spec = {
{ import = "plugins" }
},
rocks = {
enabled = false,
hererocks = false,
},
checker = {
enabled = true,
notify = false,
},
change_detection = {
notify = false,
},
})
vim.g.lazyvim_check_order = false
require("config.keymaps")
require("config.scripts")
-- When Nvim is idle or you switch focus/buffers, check if files changed
vim.api.nvim_create_autocmd({ "FocusGained", "BufEnter", "CursorHold", "CursorHoldI" }, {
pattern = "*",
command = "checktime",
})
vim.api.nvim_create_autocmd("User", {
pattern = "VeryLazy",
callback = function()
require("config.autocmds")
end,
})
+10
View File
@@ -0,0 +1,10 @@
{
"gCopyright": {
"prefix": "copy",
"description": "Generic Copyright",
"body": [
"Copyright (c) ${CURRENT_YEAR} ${1:Author} <${2:email}>. All Rights Reserved.",
"$0"
]
}
}
+49
View File
@@ -0,0 +1,49 @@
{
"Starter Template": {
"prefix": "vsTaskHeader",
"body": [
"{",
"\t\"version\": \"2.0.0\",",
"\t\"tasks\": [",
"\t\t$0",
"\t]",
"}"
],
"scope": "json"
},
"Tasks": {
"prefix": "vsTasks",
"body": [
"{",
"\t\"label\": \"$1\",",
"\t\"type\": \"shell\",",
"\t\"command\": \"$2\",",
"\t\"args\": [ $3 ],",
"\t\"group\": {",
"\t\t\"kind\": \"build\",",
"\t\t\"isDefault\": true",
"\t}$0",
"}"
],
"scope": "json"
},
"Presentation": {
"prefix": "presentation",
"body": [
"\"presentation\": {",
"\t\"reveal\": \"always\",",
"\t\"panel\": \"new\",",
"}"
],
"scope": "json"
},
"ProblemMatcher": {
"prefix": "problemMatcher",
"body": [
"\"problemMatcher\": [",
"\t$0",
"]"
],
"scope": "json"
}
}
+21
View File
@@ -0,0 +1,21 @@
{
"name": "sjb_snippets",
"contributes": {
"snippets": [
{
"language": [
"json"
],
"path": "./json.json"
},
{
"language": [
"rust",
"global",
"all"
],
"path": "./copyright.json"
}
]
}
}
+143
View File
@@ -0,0 +1,143 @@
vim.filetype.add({
extension = {
['http'] = 'http',
},
})
-- Check if we need to reload the file when it changed
vim.api.nvim_create_autocmd({ "FocusGained", "TermClose", "TermLeave" }, {
desc = 'Check time',
group = vim.api.nvim_create_augroup("sjb-checktime", { clear = true}),
callback = function()
if vim.o.buftype ~= 'nofile' then
vim.cmd('checktime')
end
end,
})
vim.api.nvim_create_autocmd('TextYankPost', {
desc = 'Highlight when yanking (copying) text',
group = vim.api.nvim_create_augroup('sjb-highlight-yank', { clear = true }),
callback = function()
vim.hl.on_yank()
end,
})
-- windows to close
vim.api.nvim_create_autocmd("FileType", {
pattern = {
"OverseerForm",
"OverseerList",
"floggraph",
"fugitive",
"git",
"help",
"lspinfo",
"man",
"neotest-output",
"neotest-summary",
"qf",
"query",
"spectre_panel",
"startuptime",
"toggleterm",
"tsplayground",
"vim",
},
group = vim.api.nvim_create_augroup('sjb-quick-close', { clear = true }),
callback = function(event)
vim.bo[event.buf].buflisted = false
vim.keymap.set("n", "q", "<cmd>close<cr>", { buffer = event.buf, silent = true })
end,
})
-- wrap and check for spell in text filetypes
vim.api.nvim_create_autocmd("FileType", {
group = vim.api.nvim_create_augroup("sjb-wrap-spell", { clear = true }),
pattern = { "gitcommit", "markdown" },
callback = function()
vim.opt_local.wrap = true
vim.opt_local.spell = true
end,
})
-- Auto create dir when saving a file, in case some intermediate directory does not exist
vim.api.nvim_create_autocmd({ "BufWritePre" }, {
group = vim.api.nvim_create_augroup("sjb-auto-create-dir", { clear = true}),
callback = function(event)
if event.match:match("^%w%w+://") then
return
end
local file = vim.loop.fs_realpath(event.match) or event.match
vim.fn.mkdir(vim.fn.fnamemodify(file, ":p:h"), "p")
end,
})
vim.api.nvim_create_autocmd("BufWritePost", {
pattern = "*",
callback = function()
if vim.fn.isdirectory(".jj") == 1 then
vim.fn.jobstart({"jj", "status"}, {
on_exit = function(_, exit_code)
if exit_code ~= 0 then
vim.notify("jj command failed", vim.log.levels.WARN)
end
end,
})
end
end,
})
local gpgGroup = vim.api.nvim_create_augroup("customGpg", { clear = true })
vim.api.nvim_create_autocmd({ "BufReadPre", "FileReadPre" }, {
pattern = "*.gpg",
group = gpgGroup,
callback = function()
-- Make sure nothing is written to shada file while editing an encrypted file.
vim.opt_local.shada = nil
-- We don't want a swap file, as it writes unencrypted data to disk
vim.opt_local.swapfile = false
-- Switch to binary mode to read the encrypted file
vim.opt_local.bin = true
-- Save the current 'ch' value to a buffer-local variable
vim.b.ch_save = vim.opt_local.ch:get()
vim.cmd "set ch=2"
end,
})
vim.api.nvim_create_autocmd({ "BufReadPost", "FileReadPost" }, {
pattern = "*.gpg",
group = gpgGroup,
callback = function()
vim.cmd "'[,']!gpg --decrypt 2> /dev/null"
-- Switch to normal mode for editing
vim.opt_local.bin = false
-- Restore the 'ch' value from the buffer-local variable
vim.opt_local.ch = vim.b.ch_save
vim.cmd "unlet b:ch_save"
vim.cmd(":doautocmd BufReadPost " .. vim.fn.expand "%:r")
end,
})
-- Convert all text to encrypted text before writing
vim.api.nvim_create_autocmd({ "BufWritePre", "FileWritePre" }, {
pattern = "*.gpg",
group = gpgGroup,
callback = function()
-- Switch to binary mode to write the encrypted file
vim.opt_local.bin = true
-- So we can avoid the armor option
vim.cmd("'[,']!gpg --default-recipient-self -e 2>/dev/null")
end,
})
-- Undo the encryption so we are back in the normal text, directly after the file has been written.
vim.api.nvim_create_autocmd({ "BufWritePost", "FileWritePost" }, {
pattern = "*.gpg",
group = gpgGroup,
callback = function()
vim.cmd("u")
-- Switch to normal mode for editing
vim.opt_local.bin = false
end,
})
+74
View File
@@ -0,0 +1,74 @@
-- Keymaps for better default experience
-- See `:help vim.keymap.set()`
--vim.keymap.set({ 'n', 'v' }, '<Space>', '<Nop>', { silent = true })
-- Remap for dealing with word wrap
vim.keymap.set('n', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true })
vim.keymap.set('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true })
vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv")
vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv")
-- save file
-- vim.keymap.set({ "i", "x", "n", "s" }, "<C-s>", "<cmd>w<cr><esc>", { desc = "Save file" })
-- vim.keymap.set({ "i", "x", "n", "s" }, "<C-x><C-s>", "<cmd>:qall<cr>", { desc = "Save file" })
-- better indenting
vim.keymap.set("v", "<", "<gv")
vim.keymap.set("v", ">", ">gv")
-- better jumps
vim.keymap.set("n", "<C-d>", "<C-d>zz")
vim.keymap.set("n", "<C-u>", "<C-u>zz")
vim.keymap.set("n", "<C-f>", "<C-f>zz")
vim.keymap.set("n", "<C-b>", "<C-b>zz")
vim.keymap.set("i", "<C-f>", "<C-x><C-f>", { noremap = true, silent = true })
vim.keymap.set("i", "<C-b>", "<C-x><C-b>", { noremap = true, silent = true })
vim.keymap.set("i", "<C-l>", "<C-x><C-l>", { noremap = true, silent = true })
-- Paste over currently selected text without yanking it
vim.keymap.set("v", "p", '"_dP')
vim.keymap.set("n", "<leader>p", [["_dP]], { desc = "Paste over currently selected text without yanking it" })
vim.keymap.set("n", "<leader>Y", [["+Y]], { noremap = true, silent = true })
vim.keymap.set({ "n", "v" }, "<leader>y", [["+y]], { noremap = true, silent = true })
vim.keymap.set({"n", "v"}, "<leader>d", [["_d]], { noremap = true, silent = true })
-- new file
vim.keymap.set("n", "<leader>bn", "<cmd>enew<cr>", { desc = "New File" })
-- vim.keymap.set("n", "<leader>bd", "<cmd>bdelete<cr>", { desc = "Unload Buffer" })
vim.keymap.set("n", "<leader>`", "<cmd>e #<cr>", { desc = "Switch to Other Buffer" })
vim.keymap.set("n", "<leader>bc", "<cmd>tabclose<cr>", { desc = "Close Tab" })
-- Clear search with <esc>
vim.keymap.set('n', '<Esc>', '<cmd>nohlsearch<cr>', { desc = "clear hlsearch" })
-- vim.keymap.set("n", "<leader><esc>", "<cmd>nohlsearch<cr>", { desc = "clear hlsearch" })
-- Diagnostic keymaps
vim.keymap.set('n', '<leader>cl', vim.diagnostic.setloclist, { desc = 'Send diagnostic to location list' })
vim.keymap.set("n", "<leader>cq", vim.diagnostic.setqflist, { desc = "Send diagnostic to Quickfix" })
-- vim.keymap.set("n", "<leader>gq", "<cmd>copen<cr>", { desc = "Quickfix List" })
-- vim.keymap.set("n", "<leader>gl", "<cmd>lopen<cr>", { desc = "Location List" })
vim.keymap.set('n', '<leader>eb', "<cmd>.w !bash -e<cr>", { desc = "Send line to bash" })
vim.keymap.set('n', '<leader>eB', "<cmd>%w !bash -e<cr>", { desc = "Send buffer to bash" })
vim.keymap.set('n', '<leader>e.', "<cmd>.!bash -e<cr>", { desc = "Execute current line" })
vim.keymap.set('n', '<leader>e%', "<cmd>% !bash -e<cr>", { desc = "Execute current buffer" })
vim.keymap.set('n', '<leader>ex', "<cmd>!chmod +x %<cr>", { desc = "Make file executable" })
vim.keymap.set('n', "<leader>eL", "<cmd>source %<cr>", { desc = "Source current buffer" })
vim.keymap.set('n', "<leader>el", "<cmd>.lua<cr>", { desc = "Source current line" })
vim.keymap.set('v', "<leader>el", "<cmd>lua<cr>", { desc = "Source current line" })
vim.keymap.set('n', '<leader>xu', '<cmd>Lazy sync<cr>', { desc = 'Lazy sync' })
vim.keymap.set("n", "<leader>cx", function()
local file = vim.fn.expand "%"
local line = vim.fn.line "."
vim.fn.setreg("+", string.format("%s:%d", file, line))
vim.notify "Copied line reference to clipboard"
end, { desc = "Copy line reference to clipboard" })
+33
View File
@@ -0,0 +1,33 @@
function R(name)
require("plenary.reload").reload_module(name)
end
function websearch(url, o)
-- Get visual selection or prompt for search
local search_term
-- Check if there's a visual selection
if vim.fn.mode() == 'v' or vim.fn.mode() == 'V' then
-- Get the visual selection
local start_pos = vim.fn.getpos("'<")
local end_pos = vim.fn.getpos("'>")
local lines = vim.fn.getline(start_pos[2], end_pos[2])
local selected_text = table.concat(lines, " ")
search_term = selected_text
else
search_term = (o and o.args) or vim.fn.input("Search: ")
end
-- Encode the search term for URLs
local escaped = vim.uri_encode(search_term)
-- Construct and execute the search URL
local search_url = (url):format(escaped)
vim.ui.open(search_url)
end
-- Command to call the search function
vim.api.nvim_create_user_command('DuckDuckGo', function(o) websearch('https://duckduckgo.com/?q=%s', o) end, { nargs = 1 })
vim.api.nvim_create_user_command('Docsrs', function(o) websearch('https://docs.rs/%s', o) end, { nargs = 1})
vim.api.nvim_create_user_command('RustStd', function(o) websearch('https://doc.rust-lang.org/std/?search=%s', o) end, { nargs = 1})
vim.keymap.set({ 'n', 'v'}, '<leader>sW', function() websearch('https://duckduckgo.com/?q=%s', null) end, { desc = "Search on DuckDuckGo" })
@@ -0,0 +1,17 @@
return {
name = "CMake Build",
builder = function()
return {
cmd = { "cmake" },
args = { "--build", "build", "--target", "all" },
components = {
{ "on_output_quickfix", set_diagnostics = true },
"on_result_diagnostics",
"default",
},
}
end,
condition = {
filetype = { "cpp", "c" },
},
}
@@ -0,0 +1,17 @@
return {
name = "CMake Create",
builder = function()
return {
cmd = { "cmake" },
args = { "-B", "build", "-S", "." },
components = {
{ "on_output_quickfix", set_diagnostics = true },
"on_result_diagnostics",
"default",
},
}
end,
condition = {
filetype = { "cpp", "c" },
},
}
@@ -0,0 +1 @@
return { "user.cmake_create", "user.cmake_build" }
@@ -0,0 +1,34 @@
local M = {}
M.problem_patterns = {
["$rustc"] = {
{
regexp = "^(error|warning)(\\[E\\d+\\])*:(.*)$",
message = 3
},
{
regexp = "^\\s+-+>\\s*([^:]*):(\\d+):(\\d+)$",
kind = "location",
file = 1,
line = 2,
column = 3
},
{
regexp = "^(\\s|\\d)+(\\||=).*$"
},
{
regexp = "^$"
}
}
}
M.problem_matchers = {
["$rustc"] = {
fileLocation = { "relative", "${cwd}" },
pattern = "$rustc",
}
}
return M
+301
View File
@@ -0,0 +1,301 @@
return {
{
"mfussenegger/nvim-ansible",
lazy = true,
keys = function()
vim.keymap.set('v', '<leader>te', function() require('ansible').run() end, { buffer = true, silent = true })
vim.keymap.set('n', '<leader>te', ":w<CR> :lua require('ansible').run()<CR>", { buffer = true, silent = true })
end,
},
{
"hat0uma/csvview.nvim",
---@module "csvview"
---@type CsvView.Options
opts = {
parser = { comments = { "#", "//" } },
keymaps = {
-- Text objects for selecting fields
textobject_field_inner = { "if", mode = { "o", "x" } },
textobject_field_outer = { "af", mode = { "o", "x" } },
-- Excel-like navigation:
-- Use <Tab> and <S-Tab> to move horizontally between fields.
-- Use <Enter> and <S-Enter> to move vertically between rows and place the cursor at the end of the field.
-- Note: In terminals, you may need to enable CSI-u mode to use <S-Tab> and <S-Enter>.
jump_next_field_end = { "<Tab>", mode = { "n", "v" } },
jump_prev_field_end = { "<S-Tab>", mode = { "n", "v" } },
jump_next_row = { "<Enter>", mode = { "n", "v" } },
jump_prev_row = { "<S-Enter>", mode = { "n", "v" } },
},
},
cmd = { "CsvViewEnable", "CsvViewDisable", "CsvViewToggle" },
},
{
"obsidian-nvim/obsidian.nvim",
lazy = false,
ft = "markdown",
keys = {
{ "<leader>kx", "<cmd>Obsidian extract_note<cr>", desc = "Extract Note", mode = "v" },
{ "<leader>knn", "<cmd>Obsidian new<cr>", desc = "New Obsidian note", mode = "n" },
{ "<leader>knt", "<cmd>Obsidian new_from_template<cr>", desc = "New from template", mode = "n" },
{ "<leader>ksq", "<cmd>Obsidian quick_switch<cr>", desc = "Quick Switch", mode = "n" },
{ "<leader>kss", "<cmd>Obsidian search<cr>", desc = "Search Obsidian notes", mode = "n" },
{ "<leader>kdt", "<cmd>Obsidian today<cr>", desc = "Daily Today", mode = "n" },
{ "<leader>kdy", "<cmd>Obsidian yesterday<cr>", desc = "Daily Yesterday", mode = "n" },
{ "<leader>kdw", "<cmd>Obsidian tomorrow<cr>", desc = "Daily Tomorrow", mode = "n" },
{ "<leader>kdd", "<cmd>Obsidian dailies<cr>", desc = "Dailies", mode = "n" },
{ "<leader>kw", "<cmd>Obsidian workspace<cr>", desc = "Change Workspace", mode = "n" },
},
config = function()
require("obsidian").setup({
legacy_commands = false,
picker = {
name = "snacks.pick",
},
ui = {
enable = true,
},
workspaces = {
{
name = "NCA notes",
path = vim.fn.expand "~" .. "/Documents/nca-notes/",
},
},
notes_subdir = "Inbox",
daily_notes = {
folder = "Dailies",
date_format = "%Y-%m-%d-%a",
alias_fomat = "%B %-d, %Y",
default_tags = { "daily-notes" },
},
new_notes_location = "notes_subdir",
templates = {
subdir = "Templates",
date_format = "%Y-%m-%d-%a",
time_format = "%H:%M",
tags = "",
},
completion = {
nvim_cmp = false,
blink = true,
min_chars = 2,
},
preferred_link_style = "wiki",
note_id_func = function(title)
local suffix = ""
if title ~= nil then
suffix = title:gsub(" ", "-"):gsub("[^A-Za-z0-9-]", ""):lower()
else
for _ = 1, 4 do
suffix = suffix .. string.char(math.random(65, 90))
suffix = tostring(os.time()) .. "-" .. suffix
end
end
return suffix
end,
callbacks = {
enter_note = function(note)
vim.keymap.set('n', '<leader>k.', '<CMD>Obsidian toggle_checkbox<CR>', { desc = 'toggle checkbox', buffer = note.bufnr, silent = true })
vim.keymap.set('n', '<leader>kp', '<CMD>Obsidian paste_img<CR>', { desc = 'paste img', buffer = note.bufnr, silent = true })
vim.keymap.set('n', '<leader>kt', '<CMD>Obsidian tags<CR>', { desc = 'tags', buffer = note.bufnr, silent = true })
vim.keymap.set('n', '<leader>k`', '<CMD>Obsidian backlinks<CR>', { desc = 'backlinks', buffer = note.bufnr, silent = true })
vim.keymap.set('n', '<leader>kx', '<CMD>Obsidian follow_link<CR>', { desc = 'follow link', buffer = note.bufnr, silent = true })
vim.keymap.set('n', '<leader>ksl', '<CMD>Obsidian links<CR>', { desc = 'links', buffer = note.bufnr, silent = true })
vim.keymap.set('n', '<leader>kr', '<CMD>Obsidian rename<CR>', { desc = 'rename', buffer = note.bufnr, silent = true })
vim.keymap.set('n', '<leader>ksc', '<CMD>Obsidian toc<CR>', { desc = 'toc', buffer = note.bufnr, silent = true })
vim.keymap.set('v', '<leader>kx', '<CMD>Obsidian link<CR>', { desc = 'links', buffer = note.bufnr, silent = true })
vim.keymap.set('v', '<leader>kl', '<CMD>Obsidian link_new<CR>', { desc = 'links', buffer = note.bufnr, silent = true })
end,
},
})
end,
},
{
"salkin-mada/openscad.nvim",
lazy = true,
config = function()
vim.g.openscad_load_snippets = true
require("openscad").setup({})
end,
dependencies = { "L3MON4D3/LuaSnip", "junegunn/fzf.vim" },
},
{
-- 'nvim-orgmode/orgmode',
'SjB/orgmode',
branch = 'sjb-wip',
event = 'VeryLazy',
ft = { 'org' },
config = function()
-- Setup orgmode
local org = require('orgmode')
-- org.setup_ts_grammar()
org.setup({
ui = {
input = {
use_vim_ui = true
}
},
org_agenda_files = {'~/Documents/notes/*project*org', '~/Documents/notes/Inbox*org', '~/Documents/journals/*.org'},
org_default_notes_file = "~/Documents/notes/Inbox.org",
org_todo_keywords = { 'TODO(t)', 'NEXT(n)', '|', 'DONE(d)', 'DELEGATED(a)' },
mappings = {
capture = {
org_capture_refile = 'R',
}
},
hyperlinks = {
sources = {
-- require("denote.extensions.orgmode"):new({
-- files = _G.denote.config.directory,
-- }),
},
},
org_capture_templates = {
t = {
description = "Todo item",
template = "* TODO %?\n SCHEDULED: %t\n DEADLINE: %T\n", -- Template content
headline = "Tasks",
},
j = {
description = "Journal entry",
target = "~/Documents/notes/journals/%<%Y-%m-%d>.org",
template = "* %<%Y-%m-%d %H:%M> %?\n",
},
},
})
end,
},
{
"akinsho/org-bullets.nvim",
config = function()
require("org-bullets").setup {
concealcursor = false, -- If false then when the cursor is on a line underlying characters are visible
symbols = {
-- list symbol
list = "•",
-- headlines can be a list
headlines = { "◉", "○", "✸", "✿" },
-- or a function that receives the defaults and returns a list
headlines = function(default_list)
table.insert(default_list, "♥")
return default_list
end,
-- or false to disable the symbol. Works for all symbols
headlines = false,
-- or a table of tables that provide a name
-- and (optional) highlight group for each headline level
headlines = {
{ "◉", "MyBulletL1" },
{ "○", "MyBulletL2" },
{ "✸", "MyBulletL3" },
{ "✿", "MyBulletL4" },
},
checkboxes = {
half = { "", "@org.checkbox.halfchecked" },
done = { "✓", "@org.keyword.done" },
todo = { "˟", "@org.keyword.todo" },
},
}
}
end
},
{
"chipsenkbeil/org-roam.nvim",
lazy = true,
ft = { 'org' },
opts = {
bindings = {
prefix = "<LocalLeader>oO",
},
directory = "~/Documents/notes",
extensions = {
dailies = {
directory = "journals"
},
},
},
},
{
"iamcco/markdown-preview.nvim",
cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" },
ft = { "markdown" },
init = function()
vim.g.mkdp_filetypes = { "markdown" }
end,
keys = function()
vim.keymap.set("n", "<leader>xmp", "<cmd>MarkdownPreview<CR>", { desc ="Markdown Preview" })
vim.keymap.set("n", "<leader>xms", "<cmd>MarkdownPreviewStop<CR>", { desc ="Markdown Preview Stop" })
end,
build = function() vim.fn["mkdp#util#install"]() end,
--build = "cd app && npm install",
},
{
"lervag/vimtex",
ft = "tex", -- Load only for .tex files
config = function()
vim.g.tex_flavor = "latex"
vim.g.vimtex_view_method = "zathura" -- Change to your preferred PDF viewer
vim.g.vimtex_quickfix_mode = 0 -- Disable quickfix window
-- vim.opt.conceallevel = 2 -- Enable concealment for nicer inline math display
vim.g.tex_conceal = "abdmg" -- Conceal accents, bold, delimiters, math, Greek
end,
},
{
'MeanderingProgrammer/render-markdown.nvim',
after = { 'nvim-treesitter' },
requires = { 'nvim-tree/nvim-web-devicons', opt = true },
ft = { 'markdown', 'codecompanion', 'copilot-chat' },
---@module 'render-markdown'
---@type render.md.UserConfig
config = function()
require('render-markdown').setup({
completions = { lsp = { enabled = true } },
-- render_modes = { 'n', 'v' },
render_modes = true,
enabled = true,
anti_conceal = {
enabled = false,
},
quote = { repeat_linebreak = true },
checkbox = {
-- unchecked = { icon = '✘ ' },
checked = { icon = '✔ ', scope_highlight = '@markup.strikethrough' },
custom = {
todo = { raw = '[-]', rendered = '󰥔 ', highlight = 'RenderMarkdownTodo', scope_highlight = nil },
important = { raw = '[~]', rendered = '󰓎 ', highlight = 'DiagnosticWarn', },
},
},
latex = {
enabled = false,
converter = "latex2text",
},
win_options = {
conceallevel = {
default = 0,
rendered = 2, -- Conceal level 2: hide LaTeX code fully
},
concealcursor = {
default = "",
rendered = "n", -- Conceal only in normal mode
},
}
})
end,
},
}
File diff suppressed because it is too large Load Diff
+441
View File
@@ -0,0 +1,441 @@
return {
{ "nvim-lua/plenary.nvim", lazy = true },
{ "nvim-tree/nvim-web-devicons", lazy = true, opts = {} },
{
'nvim-mini/mini.extra',
lazy = true,
},
{
'nvim-mini/mini.ai',
lazy = false,
version = '*',
dependencies = {
'nvim-treesitter/nvim-treesitter-textobjects',
},
config = function()
local MiniExtra = require('mini.extra')
local ai = require('mini.ai')
local spec_treesitter = ai.gen_spec.treesitter
ai.setup({
custom_textobjects = {
B = MiniExtra.gen_ai_spec.buffer(),
I = MiniExtra.gen_ai_spec.indent(),
L = MiniExtra.gen_ai_spec.line(),
N = MiniExtra.gen_ai_spec.number(),
F = spec_treesitter({ a = '@function.outer', i = '@function.inner' }),
C = spec_treesitter({ a = '@comment.outer', i = '@comment.inner' }),
P = spec_treesitter({ a = '@parameter.outer', i = '@parameter.inner' }),
O = spec_treesitter({ a = '@block.outter', i = '@block.inner' }),
k = spec_treesitter({ a = '@class.outer', i = '@class.inner' }),
o = spec_treesitter({
a = { '@conditional.outer', '@loop.outer' },
i = { '@conditional.inner', '@loop.inner' },
})
}
})
end
},
{
'nvim-mini/mini.move',
lazy = false,
version = '*',
opts = {}
},
{
'nvim-mini/mini.align',
lazy = false,
version = '*',
opts = {}
},
{
'nvim-mini/mini.bracketed',
lazy = false,
version = '*',
opts = {}
},
{
'nvim-mini/mini.operators',
lazy = false,
version = '*',
opts = {
evaluate = { prefix = 'g|', func = nil, },
exchange = { prefix = 'g.', reindent_linewise = true, },
multiply = { prefix = 'gm', func = nil, },
replace = { prefix = 'gk', reindent_linewise = true, },
sort = { prefix = 'gs', func = nil, }
}
},
{
'nvim-mini/mini.surround',
lazy = false,
version = '*',
opts = {
-- Add custom surroundings to be used on top of builtin ones. For more
-- information with examples, see `:h MiniSurround.config`.
-- custom_surroundings = {
-- s = { input = { '%[%[().-()%]%]' }, output = { left = '[[', right = ']]' } },
-- },
mappings = {
add = 'sa', -- Add surrounding in Normal and Visual modes
delete = 'sd', -- Delete surrounding
find = 'sf', -- Find surrounding (to the right)
find_left = 'sF', -- Find surrounding (to the left)
highlight = 'sh', -- Highlight surrounding
replace = 'sr', -- Replace surrounding
update_n_lines = 'sn', -- Update `n_lines`
suffix_last = 'l', -- Suffix to search with "prev" method
suffix_next = 'n', -- Suffix to search with "next" method
},
}
},
{
'nvim-mini/mini.splitjoin',
lazy = false,
version = false,
config = function()
require('mini.splitjoin').setup()
end,
},
{
"nvim-mini/mini.hipatterns",
lazy = false,
event = "BufReadPre",
config = function()
local MiniExtra = require("mini.extra")
local hi_words = MiniExtra.gen_highlighter.words
require('mini.hipatterns').setup({
highlighters = {
-- Highlight standalone 'FIXME', 'HACK', 'TODO', 'NOTE'
fixme = hi_words({ 'FIXME', 'Fixme', 'fixme' }, "MiniHipatternsFixme"),
hack = hi_words({ 'HACK', 'Hack', 'hack' }, "MiniHipatternsHack"),
todo = hi_words({ 'TODO', 'Todo', 'todo' }, "MiniHipatternsTodo"),
note = hi_words({ 'NOTE', 'Note', 'note' }, "MiniHipatternsNote"),
done = hi_words({ 'DONE', 'Done', 'done' }, "MiniHipatternsFixme"),
-- Highlight hex color strings (`#rrggbb`) using that color
-- hex_color = hipatterns.gen_highlighter.hex_color(),
},
})
end,
},
{
'nvim-mini/mini.files',
event = 'VeryLazy',
version = '*',
keys = {
{ "-", function() require("mini.files").open(vim.api.nvim_buf_get_name(0)) end, desc = "Open parent directory", mode = "n" },
{ "<leader>-", function() require("mini.files").open() end, desc = "File Explore", mode = "n" },
},
opts = {
mappings = {
go_in = "<CR>", -- Map both Enter and L to enter directories or open files
go_in_plus = "L",
go_out = "-",
go_out_plus = "H",
close = "<Esc>",
},
}
},
{
'nvim-mini/mini.sessions',
version = '*',
lazy = false,
config = function()
require('mini.sessions').setup()
end,
},
{
"folke/snacks.nvim",
priority = 1000,
lazy = false,
---@type snacks.Config
opts = {
animate = {
enabled = false,
duration = { step = 1, total = 1 },
easing = "linear",
},
bigfile = { enabled = true },
dashboard = { enabled = false },
explorer = { enabled = false },
image = {
enabled = true,
inline = false,
scale = 3, -- nil | 1 (default) | 2 | 3 | ...
doc = {
inline = true,
enabled = true,
max_width = nil,
max_height = nil,
conceal = true,
},
math = {
enabled = true,
}
},
terminal = {
bo = {
filetype = "snacks_terminal",
},
win = { style = "terminal" },
wo = {},
keys = {
q = "hide",
gf = function(self)
local f = vim.fn.findfile(vim.fn.expand("<cfile>"), "**")
if f == "" then
Snacks.notify.warn("No file under cursor")
else
self:hide()
vim.schedule(function()
vim.cmd("e " .. f)
end)
end
end,
term_normal = {
"<esc><esc>",
function(self)
self.esc_timer = self.esc_timer or (vim.uv or vim.loop).new_timer()
if self.esc_timer:is_active() then
self.esc_timer:stop()
vim.cmd("stopinsert")
else
self.esc_timer:start(250, 0, function() end)
return "<esc>"
end
end,
mode = "t",
expr = true,
desc = "Double escape to normal mode",
},
},
},
indent = { enabled = false },
notifier = {
enabled = true,
timeout = 1000,
},
picker = {
enabled = true,
layout = { preset = "ivy", layout = { position = "bottom" } },
frecency = true,
history_bonus = true,
projects = {
dev = { "~/Projects", },
},
win = {
input = {
keys = {
['<c-e>'] = { 'layout_right', mode = { 'i', 'n' } },
},
},
},
sources = {
files = {
-- add a custom action
actions = {
create_if_missing = function(picker, item)
-- When typing in the input, item may be nil.
-- We'll use the input text as the intended file path.
local input = picker.input and picker.input:get() or ""
if input == "" then return end
-- Make it relative to picker cwd if it’s not absolute
local cwd = picker.opts.cwd or vim.loop.cwd()
local path = input
if not path:match("^/") and not path:match("^%a:[/\\]") then
path = cwd .. "/" .. path
end
-- Normalize path (optional)
path = vim.fn.fnamemodify(path, ":p")
-- If file exists, just open it
if vim.loop.fs_stat(path) then
picker:close()
vim.cmd.edit(path)
return
end
-- Ensure parent dirs exist (optional but nice)
vim.fn.mkdir(vim.fn.fnamemodify(path, ":h"), "p")
-- Open a new buffer at that path (creates buffer even if file missing)
picker:close()
vim.cmd.edit(path)
-- At this point buffer is new + unnamed-on-disk until you :w
end,
},
-- bind the action to a key in the picker UI
win = {
input = {
keys = {
["<M-n>"] = { "create_if_missing", mode = { "i", "n" }, desc = "Create file from input" },
},
},
list = {
keys = {
["<M-n>"] = { "create_if_missing", mode = { "n" }, desc = "Create file from input" },
},
},
},
},
},
},
scope = { enabled = false },
scratch = {
ft = "markdown",
},
statuscolumn = { enabled = true },
styles = {
notification = {
-- wo = { wrap = true } -- Wrap notifications
}
}
},
keys = {
-- Org Search
{ "<leader>o/", function() Snacks.picker.grep({dirs = { os.getenv("HOME") .. "/Documents/notes" }}) end, desc = "Search Org Files" },
-- { "<leader>o/", function() Snacks.picker.files({ cwd = os.getenv("HOME") .. "/Documents/notes" }) end, desc = "Find Document" },
-- Top Pickers & Explorer
{ "<leader><Space>", function() Snacks.picker.smart() end, desc = "Smart Find Files" },
{ "<leader>j", function() Snacks.picker.files({args = { "--no-require-git" }}) end, desc = "Find Files" },
{ "<leader>,", function() Snacks.picker.buffers() end, desc = "Buffers" },
{ "<leader>/", function() Snacks.picker.grep() end, desc = "Grep" },
{ "<leader>:", function() Snacks.picker.command_history() end, desc = "Command History" },
{ "<leader>n", function() Snacks.picker.notifications() end, desc = "Notification History" },
{ "<leader>i", function() Snacks.picker.lsp_symbols() end, desc = "Symbols" },
{ "<leader>I", function() Snacks.picker.lsp_workspace_symbols() end, desc = "LSP Workspace Symbols" },
-- { "<leader>e", function() Snacks.explorer() end, desc = "File Explorer" },
-- find
{ "<leader>fb", function() Snacks.picker.buffers() end, desc = "Buffers" },
{ "<leader>fc", function() Snacks.picker.files({ cwd = vim.fn.stdpath("config") }) end, desc = "Find Config File" },
{ "<leader>ff", function() Snacks.picker.files() end, desc = "Find Files" },
{ "<leader>fg", function() Snacks.picker.git_files() end, desc = "Find Git Files" },
{ "<leader>fp", function() Snacks.picker.projects() end, desc = "Projects" },
{ "<leader>fr", function() Snacks.picker.recent() end, desc = "Recent" },
-- git
{ "<leader>gb", function() Snacks.picker.git_branches() end, desc = "Git Branches" },
{ "<leader>gl", function() Snacks.picker.git_log() end, desc = "Git Log" },
{ "<leader>gL", function() Snacks.picker.git_log_line() end, desc = "Git Log Line" },
{ "<leader>gs", function() Snacks.picker.git_status() end, desc = "Git Status" },
{ "<leader>gS", function() Snacks.picker.git_stash() end, desc = "Git Stash" },
{ "<leader>gd", function() Snacks.picker.git_diff() end, desc = "Git Diff (Hunks)" },
{ "<leader>gf", function() Snacks.picker.git_log_file() end, desc = "Git Log File" },
-- Grep
{ "<leader>sb", function() Snacks.picker.lines() end, desc = "Buffer Lines" },
{ "<leader>sB", function() Snacks.picker.grep_buffers() end, desc = "Grep Open Buffers" },
{ "<leader>sg", function() Snacks.picker.grep() end, desc = "Grep" },
{ "<leader>sw", function() Snacks.picker.grep_word() end, desc = "Visual selection or word", mode = { "n", "x" } },
-- search
{ '<leader>s"', function() Snacks.picker.registers() end, desc = "Registers" },
{ '<leader>s/', function() Snacks.picker.search_history() end, desc = "Search History" },
{ "<leader>sa", function() Snacks.picker.autocmds() end, desc = "Autocmds" },
{ "<leader>sb", function() Snacks.picker.lines() end, desc = "Buffer Lines" },
{ "<leader>sc", function() Snacks.picker.command_history() end, desc = "Command History" },
{ "<leader>sC", function() Snacks.picker.commands() end, desc = "Commands" },
{ "<leader>sd", function() Snacks.picker.diagnostics() end, desc = "Diagnostics" },
{ "<leader>sD", function() Snacks.picker.diagnostics_buffer() end, desc = "Buffer Diagnostics" },
{ "<leader>sh", function() Snacks.picker.help() end, desc = "Help Pages" },
{ "<leader>sH", function() Snacks.picker.highlights() end, desc = "Highlights" },
{ "<leader>si", function() Snacks.picker.icons() end, desc = "Icons" },
{ "<leader>sj", function() Snacks.picker.jumps() end, desc = "Jumps" },
{ "<leader>sk", function() Snacks.picker.keymaps() end, desc = "Keymaps" },
{ "<leader>sl", function() Snacks.picker.loclist() end, desc = "Location List" },
{ "<leader>sm", function() Snacks.picker.marks() end, desc = "Marks" },
{ "<leader>sM", function() Snacks.picker.man() end, desc = "Man Pages" },
{ "<leader>sp", function() Snacks.picker.lazy() end, desc = "Search for Plugin Spec" },
{ "<leader>sq", function() Snacks.picker.qflist() end, desc = "Quickfix List" },
{ "<leader>sR", function() Snacks.picker.resume() end, desc = "Resume" },
{ "<leader>su", function() Snacks.picker.undo() end, desc = "Undo History" },
{ "<leader>sz", function() Snacks.picker.zoxide() end, desc = "Zoxide" },
{ "<leader>uC", function() Snacks.picker.colorschemes() end, desc = "Colorschemes" },
-- LSP
{ "gd", function() Snacks.picker.lsp_definitions() end, desc = "Goto Definition" },
{ "gD", function() Snacks.picker.lsp_declarations() end, desc = "Goto Declaration" },
{ "grr", function() Snacks.picker.lsp_references() end, nowait = true, desc = "References" },
{ "gri", function() Snacks.picker.lsp_implementations() end, desc = "Goto Implementation" },
{ "gy", function() Snacks.picker.lsp_type_definitions() end, desc = "Goto T[y]pe Definition" },
{ "<leader>ss", function() Snacks.picker.lsp_symbols() end, desc = "LSP Symbols" },
{ "<leader>sS", function() Snacks.picker.lsp_workspace_symbols() end, desc = "LSP Workspace Symbols" },
-- Other
{ "<leader>Z", function() Snacks.zen() end, desc = "Toggle Zen Mode" },
{ "<leader>z", function() Snacks.zen.zoom() end, desc = "Toggle Zoom" },
{ "<leader>.", function() Snacks.scratch() end, desc = "Toggle Scratch Buffer" },
{ "<leader>S", function() Snacks.scratch.select() end, desc = "Select Scratch Buffer" },
-- { "<leader>n", function() Snacks.notifier.show_history() end, desc = "Notification History" },
{ "<leader>bd", function() Snacks.bufdelete() end, desc = "Delete Buffer" },
{ "<leader>bR", function() Snacks.rename.rename_file() end, desc = "Rename File" },
{ "<leader>gB", function() Snacks.gitbrowse() end, desc = "Git Browse", mode = { "n", "v" } },
{ "<leader>gg", function() Snacks.lazygit() end, desc = "Lazygit" },
{ "<leader>un", function() Snacks.notifier.hide() end, desc = "Dismiss All Notifications" },
{ "<c-_>", function() Snacks.terminal.toggle() end, desc = "Toggle Terminal", mode = { "n", "t" } },
-- { "<Esc>", "<C-\\><C-n>", desc = "Exit Terminal Mode", mode = { "t" } },
{ "]]", function() Snacks.words.jump(vim.v.count1) end, desc = "Next Reference", mode = { "n", "t" } },
{ "[[", function() Snacks.words.jump(-vim.v.count1) end, desc = "Prev Reference", mode = { "n", "t" } },
{
"<leader>xN",
desc = "Neovim News",
function()
Snacks.win({
file = vim.api.nvim_get_runtime_file("doc/news.txt", false)[1],
width = 0.6,
height = 0.6,
wo = {
spell = false,
wrap = false,
signcolumn = "yes",
statuscolumn = " ",
conceallevel = 3,
},
})
end,
}
},
init = function()
vim.api.nvim_create_autocmd("User", {
pattern = "VeryLazy",
callback = function()
-- Setup some globals for debugging (lazy-loaded)
_G.dd = function(...)
Snacks.debug.inspect(...)
end
_G.bt = function()
Snacks.debug.backtrace()
end
vim.print = _G.dd -- Override print to use snacks for `:=` command
-- Create some toggle mappings
Snacks.toggle.option("spell", { name = "Spelling" }):map("<leader>us")
Snacks.toggle.option("wrap", { name = "Wrap" }):map("<leader>uw")
Snacks.toggle.option("relativenumber", { name = "Relative Number" }):map("<leader>uL")
Snacks.toggle.diagnostics():map("<leader>ud")
Snacks.toggle.line_number():map("<leader>ul")
Snacks.toggle.option("conceallevel", { off = 0, on = vim.o.conceallevel > 0 and vim.o.conceallevel or 2 }):map("<leader>uc")
Snacks.toggle.treesitter():map("<leader>uT")
Snacks.toggle.option("background", { off = "light", on = "dark", name = "Dark Background" }):map("<leader>ub")
Snacks.toggle.inlay_hints():map("<leader>uh")
Snacks.toggle.indent():map("<leader>ug")
Snacks.toggle.dim():map("<leader>uD")
end,
})
end,
},
}
+355
View File
@@ -0,0 +1,355 @@
return {
{
'Civitasv/cmake-tools.nvim',
lazy = true,
config = function ()
local osys = require("cmake-tools.osys")
require("cmake-tools").setup {
cmake_command = "cmake", -- this is used to specify cmake command path
ctest_command = "ctest", -- this is used to specify ctest command path
cmake_use_preset = true,
cmake_regenerate_on_save = true, -- auto generate when save CMakeLists.txt
cmake_generate_options = { "-DCMAKE_EXPORT_COMPILE_COMMANDS=1" }, -- this will be passed when invoke `CMakeGenerate`
cmake_build_options = {}, -- this will be passed when invoke `CMakeBuild`
-- support macro expansion:
-- ${kit}
-- ${kitGenerator}
-- ${variant:xx}
cmake_build_directory = function()
if osys.iswin32 then
return "out\\${variant:buildType}"
end
return "out/${variant:buildType}"
end, -- this is used to specify generate directory for cmake, allows macro expansion, can be a string or a function returning the string, relative to cwd.
cmake_soft_link_compile_commands = true, -- this will automatically make a soft link from compile commands file to project root dir
cmake_compile_commands_from_lsp = false, -- this will automatically set compile commands file location using lsp, to use it, please set `cmake_soft_link_compile_commands` to false
cmake_kits_path = nil, -- this is used to specify global cmake kits path, see CMakeKits for detailed usage
cmake_variants_message = {
short = { show = true }, -- whether to show short message
long = { show = true, max_length = 40 }, -- whether to show long message
},
cmake_dap_configuration = { -- debug settings for cmake
name = "cpp",
type = "codelldb",
request = "launch",
stopOnEntry = false,
runInTerminal = true,
console = "integratedTerminal",
},
cmake_executor = { -- executor to use
name = "quickfix", -- name of the executor
opts = {}, -- the options the executor will get, possible values depend on the executor type. See `default_opts` for possible values.
default_opts = { -- a list of default and possible values for executors
quickfix = {
show = "always", -- "always", "only_on_error"
position = "belowright", -- "vertical", "horizontal", "leftabove", "aboveleft", "rightbelow", "belowright", "topleft", "botright", use `:h vertical` for example to see help on them
size = 10,
encoding = "utf-8", -- if encoding is not "utf-8", it will be converted to "utf-8" using `vim.fn.iconv`
auto_close_when_success = true, -- typically, you can use it with the "always" option; it will auto-close the quickfix buffer if the execution is successful.
},
toggleterm = {
direction = "float", -- 'vertical' | 'horizontal' | 'tab' | 'float'
close_on_exit = false, -- whether close the terminal when exit
auto_scroll = true, -- whether auto scroll to the bottom
singleton = true, -- single instance, autocloses the opened one, if present
},
overseer = {
new_task_opts = {
strategy = {
"toggleterm",
direction = "horizontal",
autos_croll = true,
quit_on_exit = "success"
}
}, -- options to pass into the `overseer.new_task` command
on_new_task = function(task)
require("overseer").open(
{ enter = false, direction = "right" }
)
end, -- a function that gets overseer.Task when it is created, before calling `task:start`
},
terminal = {
name = "Main Terminal",
prefix_name = "[CMakeTools]: ", -- This must be included and must be unique, otherwise the terminals will not work. Do not use a simple spacebar " ", or any generic name
split_direction = "horizontal", -- "horizontal", "vertical"
split_size = 11,
-- Window handling
single_terminal_per_instance = true, -- Single viewport, multiple windows
single_terminal_per_tab = true, -- Single viewport per tab
keep_terminal_static_location = true, -- Static location of the viewport if avialable
auto_resize = true, -- Resize the terminal if it already exists
-- Running Tasks
start_insert = false, -- If you want to enter terminal with :startinsert upon using :CMakeRun
focus = false, -- Focus on terminal when cmake task is launched.
do_not_add_newline = false, -- Do not hit enter on the command inserted when using :CMakeRun, allowing a chance to review or modify the command before hitting enter.
}, -- terminal executor uses the values in cmake_terminal
},
},
cmake_runner = { -- runner to use
name = "terminal", -- name of the runner
opts = {}, -- the options the runner will get, possible values depend on the runner type. See `default_opts` for possible values.
default_opts = { -- a list of default and possible values for runners
quickfix = {
show = "always", -- "always", "only_on_error"
position = "belowright", -- "bottom", "top"
size = 10,
encoding = "utf-8",
auto_close_when_success = true, -- typically, you can use it with the "always" option; it will auto-close the quickfix buffer if the execution is successful.
},
toggleterm = {
direction = "float", -- 'vertical' | 'horizontal' | 'tab' | 'float'
close_on_exit = false, -- whether close the terminal when exit
auto_scroll = true, -- whether auto scroll to the bottom
singleton = true, -- single instance, autocloses the opened one, if present
},
overseer = {
new_task_opts = {
strategy = {
"toggleterm",
direction = "horizontal",
autos_croll = true,
quit_on_exit = "success"
}
}, -- options to pass into the `overseer.new_task` command
on_new_task = function(task)
end, -- a function that gets overseer.Task when it is created, before calling `task:start`
},
terminal = {
name = "Main Terminal",
prefix_name = "[CMakeTools]: ", -- This must be included and must be unique, otherwise the terminals will not work. Do not use a simple spacebar " ", or any generic name
split_direction = "horizontal", -- "horizontal", "vertical"
split_size = 11,
-- Window handling
single_terminal_per_instance = true, -- Single viewport, multiple windows
single_terminal_per_tab = true, -- Single viewport per tab
keep_terminal_static_location = true, -- Static location of the viewport if avialable
auto_resize = true, -- Resize the terminal if it already exists
-- Running Tasks
start_insert = false, -- If you want to enter terminal with :startinsert upon using :CMakeRun
focus = false, -- Focus on terminal when cmake task is launched.
do_not_add_newline = false, -- Do not hit enter on the command inserted when using :CMakeRun, allowing a chance to review or modify the command before hitting enter.
},
},
},
cmake_notifications = {
runner = { enabled = true },
executor = { enabled = true },
spinner = { "⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏" }, -- icons used for progress display
refresh_rate_ms = 100, -- how often to iterate icons
},
cmake_virtual_text_support = true, -- Show the target related to current file using virtual text (at right corner)
}
end,
},
{
'mistweaverco/kulala.nvim',
ft = {"http", "rest"},
},
{
"HakonHarnes/img-clip.nvim",
event = "VeryLazy",
opts = {
-- add options here
-- or leave it empty to use the default settings
},
keys = {
-- suggested keymap
{ "<leader>kp", "<cmd>PasteImage<cr>", desc = "Paste image from system clipboard" },
},
},
{
"uhs-robert/sshfs.nvim",
opts = {
mounts = {
base_dir = vim.fn.expand("$HOME") .. "/Public", -- where remote mounts are created
},
-- Refer to the configuration section below
-- or leave empty for defaults
},
},
{
"esmuellert/codediff.nvim",
dependencies = { "MunifTanjim/nui.nvim" },
cmd = "CodeDiff",
},
{
"ejrichards/mise.nvim",
keys = {
{ "<leader>xm", "<cmd>Lazy reload mise.nvim<cr>", desc = "Reload mise environment" }
},
opts = {
unset_vars = true,
load_on_setup = true,
force_run = true,
}
},
{
'NeogitOrg/neogit',
dependencies = {
'nvim-lua/plenary.nvim', -- required
'sindrets/diffview.nvim',
},
lazy = true,
keys = {
{ '<leader>gn', "<cmd>Neogit kind=auto<cr>", desc = 'Neogit'},
{ '<leader>gN', "<cmd>Neogit kind=floating<cr>", desc = 'Neogit'}
},
opts = {
-- disable_context_highlighting = true,
disable_commit_confirmation = true,
disable_insert_on_commit = false,
disable_signs = true,
integrations = { diffview = true, fz_lua = false },
auto_refresh = false,
console_timeout = 5000,
auto_show_console = false,
sections = {
stashes = {
folded = false,
},
recent = { folded = false },
},
}
},
{
'stevearc/overseer.nvim',
keys = {
{ "<leader>xo", "<cmd>OverseerOpen<CR>", desc = "Open Overseer" },
{ "<leader>to", "<cmd>OverseerToggle<CR>", desc = "Overseer Toggle" },
{ "<F5>", "<cmd>OverseerRun<CR>", desc = "Run Overseer" },
{ "<F6>", "<cmd>OverseerToggle<CR>", desc = "Overseer Toggle" },
},
config = function()
require("overseer").setup({
templates = { "builtin", "user" },
component_aliases = {
default = {
{ 'display_duration', detail_level = 2 },
'on_output_summarize',
'on_exit_set_status',
'on_result_diagnostics_quickfix',
'on_complete_notify',
{ "on_complete_dispose", require_view = { "SUCCESS", "FAILURE" } },
},
default_vscode = {
'default',
'on_result_diagnostics',
'on_result_diagnostics_quickfix',
'on_complete_notify',
},
}
})
-- local pm = require("overseer.template.vscode.problem_matcher")
-- pm.register_problem_matcher("$rustc", {
-- fileLocation = { "autoDetect", "${cwd}" },
-- pattern = {
-- --regexp = "^(.*?)-->\\s+(.*?):(\\d+):(\\d+)$",
-- -- vim_regexp = "\\v^(.*?)-->\\s+(.*?):(\\d+):(\\d+)$",
-- regexp = "^\\s+-->\\s*([^:]*):(\\d+):(\\d+)$",
-- vim_regexp = "\\v^\\s+-->\\s*([^:]*):(\\d+):(\\d+)$",
-- file = 1,
-- line = 2,
-- column = 3,
-- }
-- })
end,
},
{
'stevearc/quicker.nvim',
event = "FileType qf",
---@module "quicker"
---@type quicker.SetupOptions
opts = {},
},
{
"saxon1964/neovim-tips",
version = "*", -- Only update on tagged releases
lazy = false, -- Load on startup (recommended for daily tip feature)
dependencies = {
"MunifTanjim/nui.nvim",
-- OPTIONAL: Choose your preferred markdown renderer (or omit for raw markdown)
"MeanderingProgrammer/render-markdown.nvim", -- Clean rendering
-- OR: "OXY2DEV/markview.nvim", -- Rich rendering with advanced features
},
opts = {
-- OPTIONAL: Location of user defined tips (default value shown below)
user_file = vim.fn.stdpath("config") .. "/neovim_tips/user_tips.md",
-- OPTIONAL: Prefix for user tips to avoid conflicts (default: "[User] ")
user_tip_prefix = "[User] ",
-- OPTIONAL: Show warnings when user tips conflict with builtin (default: true)
warn_on_conflicts = true,
-- OPTIONAL: Daily tip mode (default: 1)
-- 0 = off, 1 = once per day, 2 = every startup
daily_tip = 1,
-- OPTIONAL: Bookmark symbol (default: "🌟 ")
bookmark_symbol = "🌟 ",
},
},
{
"nvim-pack/nvim-spectre",
lazy = true,
cmd = { "Spectre" },
keys = {
{ "<leader>sr", function() require("spectre").open() end, desc = "Replace in files (Spectre)" },
},
opts = {
open_cmd = "noswapfile vnew",
highlight = {
search = "SpectreSearch",
replace = "SpectreReplace",
},
mapping = {
["send_to_qf"] = {
map = "<C-q>",
cmd = "<cmd>lua require('spectre.actions').send_to_qf()<CR>",
desc = "send all items to quickfix",
},
},
}
},
{
"thunder-coding/zincoxide",
opts = {
-- name of zoxide binary in your "$PATH" or path to the binary
-- the command is executed using vim.fn.system()
-- eg. "zoxide" or "/usr/bin/zoxide"
zincoxide_cmd = "zoxide",
-- Kinda experimental as of now
complete = true,
-- Available options { "tabs", "window", "global" }
behaviour = "tabs",
},
cmd = { "Z", "Zg", "Zt", "Zw" },
},
{
"folke/persistence.nvim",
event = "BufReadPre",
opts = { options = { "buffers", "curdir", "tabpages", "winsize", "help", "globals", "skiprtp" } },
-- stylua: ignore
keys = {
{ "<leader>xr", function() require("persistence").load() end, desc = "Restore Session" },
{ "<leader>xs", function() require("persistence").save() end, desc = "Save Session" },
{ "<leader>xl", function() require("persistence").load({ last = true }) end, desc = "Restore Last Session" },
{ "<leader>xd", function() require("persistence").stop() end, desc = "Don't Save Current Session" },
},
},
}
+336
View File
@@ -0,0 +1,336 @@
return {
{
"otavioschwanck/arrow.nvim",
dependencies = {
{
"nvim-tree/nvim-web-devicons"
},
-- or if using `mini.icons`
-- { "echasnovski/mini.icons" },
},
opts = {
show_icons = true,
leader_key = ';', -- Recommended to be a single key
buffer_leader_key = '<leader>;', -- Per Buffer Mappings
}
},
{
"utilyre/barbecue.nvim",
dependencies = {
{ 'SmiteshP/nvim-navic', lazy = true },
},
event = "VeryLazy",
opts = {},
},
{
"folke/flash.nvim",
event = "VeryLazy",
---@type Flash.Config
opts = {
modes = {
char = {
jump_labels = true,
search = { wrap = true },
highlight = { backdrop = false },
},
search = {
-- when `true`, flash will be activated during regular search by default.
-- You can always toggle when searching with `require("flash").toggle()`
enabled = true,
highlight = { backdrop = false },
jump = { history = true, register = true, nohlsearch = true, autojump = true },
search = {
wrap = true,
-- `forward` will be automatically set to the search direction
-- `mode` is always set to `search`
-- `incremental` is set to `true` when `incsearch` is enabled
},
},
treesitter = {
search = { wrap = true },
}
},
},
-- stylua: ignore
keys = {
{ "<leader>/", mode = { "n" }, function() require("flash").treesitter() end, desc = "Flash Treesitter" },
{ "s", mode = { "x", "o" }, function() require("flash").treesitter() end, desc = "Flash Treesitter" },
{ "r", mode = "o", function() require("flash").remote() end, desc = "Remote Flash" },
{ "R", mode = { "o", "x" }, function() require("flash").treesitter_search() end, desc = "Treesitter Search" },
{ "<c-s>", mode = { "c" }, function() require("flash").toggle() end, desc = "Toggle Flash Search" },
},
},
{
"folke/snacks.nvim",
opts = {
notifier = {
timeout = 4000,
},
picker = {
win = {
input = {
keys = {
["<a-s>"] = { "flash", mode = { "n", "i" } },
["s"] = { "flash" },
},
},
},
actions = {
flash = function(picker)
require("flash").jump({
pattern = "^",
label = { after = { 0, 0 } },
search = {
mode = "search",
exclude = {
function(win)
return vim.bo[vim.api.nvim_win_get_buf(win)].filetype ~= "snacks_picker_list"
end,
},
},
action = function(match)
local idx = picker.list:row2idx(match.pos[1])
picker.list:_move(idx, true, true)
end,
})
end,
},
},
},
},
{
'nvim-lualine/lualine.nvim',
event = "VeryLazy",
config = function()
local function truncate_branch_name(branch)
if not branch or branch == "" then
return ""
end
-- Match the branch name to the specified format
local _, _, ticket_number = string.find(branch, "skdillon/sko%-(%d+)%-")
-- If the branch name matches the format, display sko-{ticket_number}, otherwise display the full branch name
if ticket_number then
return "sko-" .. ticket_number
else
return branch
end
end
require("lualine").setup({
options = {
-- theme = "rose-pine",
globalstatus = true,
-- component_separators = { left = "", right = "" },
-- section_separators = { left = "█", right = "█" },
icons_enabled = true,
component_separators = { left = '', right = ''},
section_separators = { left = '', right = ''},
tabline = {
lualine_a = {},
lualine_b = {'branch'},
lualine_c = {'filename'},
lualine_x = {},
lualine_y = {},
lualine_z = {}
},
},
sections = {
lualine_b = {
{ "branch", icon = "", fmt = truncate_branch_name },
"diff",
"diagnostics",
},
lualine_c = {
{ 'lsp_progress' },
{
'buffers',
show_filename_only = true, -- Shows shortened relative path when set to false.
hide_filename_extension = false, -- Hide filename extension when set to true.
show_modified_status = true, -- Shows indicator when the buffer is modified.
mode = 0,
max_length = vim.o.columns * 2 / 3,
filetype_names = {
TelescopePrompt = '',
},
-- it can also be a function that returns
-- the value of `max_length` dynamically.
use_mode_colors = false,
symbols = {
modified = ' ●', -- Text to show when the buffer is modified
alternate_file = '#', -- Text to show to identify the alternate file
directory = '', -- Text to show when the buffer is a directory
},
},
},
lualine_x = {
"windows",
"fileformat",
"filetype",
},
},
})
end,
},
{
"hedyhli/outline.nvim",
lazy = true,
cmd = { "Outline", "OutlineOpen" },
keys = { -- Example mapping to toggle outline
{ "<leader>so", "<cmd>Outline<CR>", desc = "Toggle outline" },
},
opts = {
symbol_folding = {
-- Unfold entire symbol tree by default with false, otherwise enter a
-- number starting from 1
autofold_depth = false,
-- autofold_depth = 1,
},
},
},
{
'stevearc/quicker.nvim',
ft = "qf",
---@module "quicker"
---@type quicker.SetupOptions
opts = {},
},
{
"christoomey/vim-tmux-navigator",
cmd = {
"TmuxNavigateLeft",
"TmuxNavigateDown",
"TmuxNavigateUp",
"TmuxNavigateRight",
"TmuxNavigatePrevious",
},
keys = {
{ "<c-h>", "<cmd><C-U>TmuxNavigateLeft<cr>" },
{ "<c-j>", "<cmd><C-U>TmuxNavigateDown<cr>" },
{ "<c-k>", "<cmd><C-U>TmuxNavigateUp<cr>" },
{ "<c-l>", "<cmd><C-U>TmuxNavigateRight<cr>" },
-- { "<c-\\>", "<cmd><C-U>TmuxNavigatePrevious<cr>" },
},
},
{
'akinsho/toggleterm.nvim',
lazy = false,
config = function()
require("toggleterm").setup({
-- highlights = require("rose-pine.plugins.toggleterm"),
size = 20,
open_mapping = [[<c-\>]],
hide_numbers = true,
shade_terminals = true,
shading_factor = 2,
start_in_insert = true,
insert_mappings = true,
persiste_size = true,
direction = 'horizontal',
close_on_exit = true,
float_opts = {
border = "curved",
}
})
end,
keys = {
{ "<Esc><Esc>", "<c-\\><c-n>", desc = "Escape input", mode = { "t" } }
},
},
{
'ten3roberts/window-picker.nvim',
opts = {
-- Default keys to annotate, keys will be used in order. The default uses the
-- most accessible keys from the home row and then top row.
keys = 'alskdjfhgwoeiruty',
-- Swap windows by holding shift + letter
swap_shift = true,
-- Windows containing filetype to exclude
exclude = { qf = true, NvimTree = true, aerial = true },
-- Flash the cursor line of the newly focused window for 300ms.
-- Set to 0 or false to disable.
flash_duration = 300,
},
keys = {
{ "<leader>a", "<cmd>WindowPick<cr>", desc = "Windows Pick"},
{ "<C-w>a", "<cmd>WindowPick<cr>", desc = "Windows Pick"},
{ "<C-w>D", "<cmd>WindowZap<cr>", desc = "Windows Delete"},
{ "<C-w>S", "<cmd>WindowSwap<cr>", desc = "Windows Swap"},
},
},
{
"folke/which-key.nvim",
event = "VimEnter",
opts = {
icons = {
-- set icon mappings to true if you have a Nerd Font
mappings = vim.g.have_nerd_font,
-- If you are using a Nerd Font: set icons.keys to an empty table which will use the
-- default whick-key.nvim defined Nerd Font icons, otherwise define a string table
keys = vim.g.have_nerd_font and {} or {
Up = '<Up> ',
Down = '<Down> ',
Left = '<Left> ',
Right = '<Right> ',
C = '<C-…> ',
M = '<M-…> ',
D = '<D-…> ',
S = '<S-…> ',
CR = '<CR> ',
Esc = '<Esc> ',
ScrollWheelDown = '<ScrollWheelDown> ',
ScrollWheelUp = '<ScrollWheelUp> ',
NL = '<NL> ',
BS = '<BS> ',
Space = '<Space> ',
Tab = '<Tab> ',
F1 = '<F1>',
F2 = '<F2>',
F3 = '<F3>',
F4 = '<F4>',
F5 = '<F5>',
F6 = '<F6>',
F7 = '<F7>',
F8 = '<F8>',
F9 = '<F9>',
F10 = '<F10>',
F11 = '<F11>',
F12 = '<F12>',
},
},
spec = {
{ "g", group = "+goto" },
{ "]", group = "+next" },
{ "[", group = "+prev" },
{ "<leader>c", group = "+code", mode = { 'n', 'x' } },
{ "<leader>b", group = "+buffer" },
{ "<leader>f", group = "+find" },
{ "<leader>g", group = "+goto" },
{ "<leader>k", group = "+obsidian" },
{ "<leader>l", group = "+lsp" },
{ "<leader>m", group = "+bookmark" },
{ "<leader>o", group = "+notes" },
{ "<leader>r", group = "+ai" },
{ "<leader>s", group = "+search" },
{ "<leader>t", group = "+trouble" },
{ "<leader>v", group = "+vcs", mode = { 'n', 'v' } },
{ "<leader>w", group = "+workspace" },
{ "<leader>x", group = "+extra" },
{ "<leader>u", group = "+toggle" },
},
},
},
}
+16
View File
@@ -0,0 +1,16 @@
local ls = require("luasnip")
local s = ls.snippet
local t = ls.text_node
local i = ls.insert_node
-- local f = ls.function_node
return {
s({ trig = "fn", name = "Function", dscr = "Function" }, {
t("fn "),
i(1),
t("() "),
t("{\n"),
t("\t"),
i(0),
t("\n}\n"),
})
}
+18
View File
@@ -0,0 +1,18 @@
append_path () {
case ":$PATH:" in
*:"$1":*)
;;
*)
PATH="${PATH:+$PATH:}$1"
esac
}
append_path "$HOME/.local/bin"
append_path "$HOME/.cargo/bin"
export PATH
if [ -z "$SSH_CONNECTION" ]; then
export SSH_AUTH_SOCK="/run/user/$UID/gnupg/S.gpg-agent.ssh"
fi
+22
View File
@@ -0,0 +1,22 @@
configuration{
combi-modes: [window,drun];
icon-theme: "Oranchelo";
show-icons: true;
terminal: "ghostty";
drun-display-format: "{icon} {name}";
location: 0;
disable-history: false;
hide-scrollbar: true;
display-drun: "  Apps ";
display-run: "  Run ";
display-window: "  Window";
display-Network: " 󰤨 Network";
sidebar-mode: true;
}
@theme "gruvbox"
listview {
columns: 1;
lines: 10;
}
+27
View File
@@ -0,0 +1,27 @@
SetEnv TERM=xterm-256color
Host dupont
HostName 172.25.11.30
user sjb
ForwardAgent yes
RemoteForward /run/user/1000/gnupg/S.gpg-agent /run/user/1000/gnupg/S.gpg-agent.extra
StreamLocalBindUnlink yes
RequestTTY yes
Host haddock-tmux
User sjb
Hostname 129.100.33.96
ForwardAgent yes
RemoteForward /run/user/1000/gnupg/S.gpg-agent /run/user/1000/gnupg/S.gpg-agent.extra
StreamLocalBindUnlink yes
RequestTTY yes
RemoteCommand tmux -l new -A
Host risc-v
User sjb
Hostname 172.25.11.31
ForwardAgent yes
RemoteForward /run/user/1001/gnupg/S.gpg-agent /run/user/1000/gnupg/S.gpg-agent.extra
StreamLocalBindUnlink yes
RequestTTY yes
+157
View File
@@ -0,0 +1,157 @@
#set-option -g default-terminal 'screen-256color'
set-option -g terminal-overrides ',xterm-256color:RGB'
# set -g default-terminal "tmux-256color"
set -as terminal-feature ",foot*:RGB"
# screen mode
#set -g default-terminal "${TERM}"
#set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",xterm-256color:RGB"
# colors
# set -ag terminal-overrides ",xterm*:Tc"
# undercurl support
set -as terminal-overrides ',*:Smulx=\E[4::%p1%dm'
# underscore colours - needs tmux-3.0
set -as terminal-overrides ',*:Setulc=\E[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m'
# allow terminal scrolling
#set -g terminal-overrides 'xterm*:smcup@:rmcup@'
# default shell
set -g default-shell "/usr/bin/fish"
# auto rename windows
set -g automatic-rename on
set -g allow-rename on
# start with window 1 (instead of 0)
set -g base-index 1
# start with pane 1
setw -g pane-base-index 1
# history
set -g history-limit 5000
# loud or quiet?
set -g visual-activity off
set -g visual-bell off
set -g visual-silence off
set -g monitor-activity on
set -g bell-action none
set -g allow-passthrough on
#set -g bell-on-alert on
set -s escape-time 1
setw -g aggressive-resize on
set -g status-keys vi
set-window-option -g mode-keys vi
set-option -g focus-events on # TODO: learn how this works
set-option -g extended-keys on
set-option -g set-titles on
set-option -g detach-on-destroy off
set-option -g renumber-windows on
set-option -g set-clipboard on
set-option -g set-titles-string "#S:#{pane_title}"
unbind C-Space
set -g prefix C-Space
bind C-Space send-prefix
#unbind C-s
unbind C-b
#set -g prefix C-s
#bind C-s send-prefix
# Reload the config.
bind r source-file ~/.config/tmux/tmux.conf \; display "Reloaded ~/.config/tmux/tmux.conf"
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel
bind c new-window -c "#{pane_current_path}"
bind e run "tmux split -h /usr/bin/nvim"
bind o display-popup -w 80% -h 80% -E /usr/bin/opencode
bind g display-popup -w 80% -h 80% -E /usr/bin/lazygit
# split windows like vim
# vim's definition of a horizontal/vertical split is reversed from tmux's
bind v split-window -h -c "#{pane_current_path}"
bind s split-window -v -c "#{pane_current_path}"
# Rotate windows
bind -r , select-window -t :-
bind -r . select-window -t :+
bind Space choose-tree
bind -r < previous-layout
bind -r > next-layout
# open man page in new window
bind / command-prompt "split window 'exec man %%'"
bind B command-prompt -p "New Session:" "new-session -A -s '%%'"
bind Tab switch-client -l
bind a run-shell -b "~/.local/bin/t"
bind Enter run-shell -b "~/.local/bin/s"
bind Q confirm kill-session
bind P pipe-pane -o "cat >>~/#W.log" \; display "Toggled logging to ~/#W.log"
# join pane
bind-key C-h choose-window 'join-pane -h -s "%%"'
bind-key C-v choose-window 'join-pane -s "%%"'
bind -r h select-pane -L
bind -r j select-pane -D
bind -r k select-pane -U
bind -r l select-pane -R
# resize panes like vim
# feel free to change the "1" to however many lines you want to resize by, only
# one at a time can be slow
bind -r H resize-pane -L 5
bind -r L resize-pane -R 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
# bind : to command-prompt like vim
# this is the default in tmux already
# bind : command-prompt
# Alt+number to select window
bind -n M-1 select-window -t 1
bind -n M-2 select-window -t 2
bind -n M-3 select-window -t 3
bind -n M-4 select-window -t 4
bind -n M-5 select-window -t 5
bind -n M-6 select-window -t 6
bind -n M-7 select-window -t 7
bind -n M-8 select-window -t 8
bind -n M-9 select-window -t 9
set -g @continuum-restore 'on'
set -g status-position top
# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @plugin 'tmux-plugins/tmux-copycat'
set -g @plugin 'christoomey/vim-tmux-navigator'
set -g @plugin 'sainnhe/tmux-fzf'
set -g @plugin 'joshmedeski/tmux-fzf-url'
set -g @plugin 'aserowy/tmux.nvim'
set -g status-left ""
source-file ~/.config/tmux/theme
#set -ag status-right '#(bash ~/.config/tmux/battery.sh) '
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.config/tmux/plugins/tpm/tpm'
+1
View File
@@ -0,0 +1 @@
XDG_TERMINAL = ghostty
+12
View File
@@ -0,0 +1,12 @@
[Desktop Entry]
Version=1.0
Name=emacsclient
GenericName=Text Editor
Comment=View and edit files
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
Exec="/home/sjb/.dotfiles/bin/ec" %F
Icon=/usr/share/icons/hicolor/scalable/apps/emacs24.svg
Type=Application
Terminal=false
Categories=Utility;Development;TextEditor;
StartupWMClass=Emacs24
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More