23 Commits

Author SHA1 Message Date
Michael Chalupiak
6dc71d4ae9 Merge branch 'master' into arch-desktop 2026-02-03 23:21:15 -05:00
Michael Chalupiak
6d26754462 Aerc mail client and chawan browser 2026-02-03 23:21:15 -05:00
Michael Chalupiak
b6fe1d9f38 Merge branch 'master' into arch-desktop 2026-01-30 19:24:57 -05:00
Michael Chalupiak
a2c7b5033a Add way more to the 'macs 2026-01-30 19:24:25 -05:00
Michael Chalupiak
6650ab1d5c Merge branch 'master' into arch-desktop 2026-01-26 01:05:47 -05:00
Michael Chalupiak
cc5246f38b Updated doom emacs 2026-01-26 01:05:03 -05:00
Michael Chalupiak
cb21d62153 Merge branch 'master' into arch-desktop 2026-01-24 21:32:43 -05:00
Michael Chalupiak
f2fa6c1267 updates 2026-01-24 21:32:30 -05:00
Michael Chalupiak
e104c9b8ce Merge branch 'master' into arch-desktop 2026-01-18 00:55:07 -05:00
Michael Chalupiak
ce01877872 Merge remote-tracking branch 'origin/master' 2026-01-18 00:54:38 -05:00
Michael Chalupiak
a3412c9fdf more emacs tweaks 2026-01-18 00:51:56 -05:00
Michael Chalupiak
66ab2ea83e updated doom config 2026-01-17 02:13:20 -05:00
Michael Chalupiak
e99901146d Merge branch 'master' into arch-desktop 2026-01-17 02:11:18 -05:00
Michael Chalupiak
2d1a11ea40 new emacs config! 2026-01-17 02:09:04 -05:00
Michael Chalupiak
dc51e2b8d8 Merge branch 'master' into arch-desktop 2026-01-10 01:51:19 -05:00
Michael Chalupiak
e6a0d0892f fixed doom indenting 2026-01-10 01:51:08 -05:00
Michael Chalupiak
9fd41c75ef Merge branch 'master' into arch-desktop 2026-01-09 00:48:07 -05:00
Michael Chalupiak
d9d0c8fe3e emacs config 2026-01-09 00:47:51 -05:00
Michael Chalupiak
adcecd9d62 Merge branch 'master' into arch-desktop 2026-01-07 23:07:20 -05:00
Michael Chalupiak
ef1981d06b multicursor (good this time) 2025-12-26 11:40:48 -05:00
Michael Chalupiak
f60dd72912 Small vim config changes 2025-12-19 14:25:00 -05:00
Michael Chalupiak
ade4c9f47c Merge branch 'master' into arch-desktop 2025-11-14 12:58:25 -05:00
Michael Chalupiak
458a2dd1d6 auto colorscheme for kakoune 2025-11-14 12:54:18 -05:00
40 changed files with 3783 additions and 2818 deletions

39
.gitignore vendored Normal file
View File

@@ -0,0 +1,39 @@
config/.config/dconf/*
config/.themes/*
config/**/*.uuid
config/.icons/*
config/.config/KDE/*
config/.config/falkon/*
config/.config/ghostty/iTerm2-Color-Schemes/*
config/.config/ghostty/themes/*
config/.config/helix/runtime/*
config/.config/kak/colors/*
config/.config/kak/plugins/*
config/.config/mutt/chalupmc@rose-hulman
config/.config/mutt/mikecchalupiak@outlook
config/.config/mutt/spamreciver1@outlook
config/.config/qt5ct/colors/*
config/.config/qutebrowser/autoconfig.yml
config/.config/qutebrowser/rosepine/*
config/.config/zathura/colors
config/.doom.d/flycheck_config.el
config/.scripts/kkse
config/.scripts/mlvwm-alert
config/.scripts/mlvwm-confirm
config/.scripts/mlvwm-message
config/.scripts/mlvwm-powerdown
config/.scripts/mlvwm-restart
config/.scripts/mlvwm-screenshot
config/.scripts/pipewire-launch
/config/.emacs.d/undo-fu-session/
/config/.emacs.d/tree-sitter/
/config/.emacs.d/tramp
/config/.emacs.d/straight/
/config/.emacs.d/recentf
/config/.emacs.d/places
/config/.emacs.d/parinfer-rust/
/config/.emacs.d/history
/config/.emacs.d/eshell/
/config/.emacs.d/elpa/
/config/.emacs.d/eln-cache/
/config/.emacs.d/auto-save-list/

View File

@@ -139,10 +139,10 @@ alias zf='z $(flirt)'
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
# if [ -z "$EDITOR" ]; then
# export EDITOR='kak'
if [ -z "$EDITOR" ]; then
# export EDITOR=kak
export EDITOR='nvim'
# fi
fi
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
@@ -225,3 +225,5 @@ export DCONF_PROFILE
# --color=border:#403d52,header:#31748f,gutter:#191724
# --color=spinner:#f6c177,info:#9ccfd8
# --color=pointer:#c4a7e7,marker:#eb6f92,prompt:#908caa"
[ -n "$EAT_SHELL_INTEGRATION_DIR" ] && \
source "$EAT_SHELL_INTEGRATION_DIR/bash"

View File

@@ -0,0 +1,35 @@
[mchalupiak]
source = imaps://mikec@mail.mchalupiak.com
outgoing = smtp://mikec%40mchalupiak.com@www.mchalupiak.com
default = INBOX
from = Michael Chalupiak <mikec@mchalupiak.com>
cache-headers = true
source-cred-cmd = pass mikec@mchalupiak.com
outgoing-cred-cmd = pass mikec@mchalupiak.com
[mikecchalupiak]
source = imaps+xoauth2://mikecchalupiak%40outlook.com@outlook.office365.com?
outgoing = smtp+xoauth2://mikecchalupiak%40outlook.com@outlook.office365.com:587
from = "Michael Chalupiak" <mikecchalupiak@outlook.com>
default = INBOX
cache-headers = true
source-cred-cmd = oama access mikecchalupiak@outlook.com
outgoing-cred-cmd = oama access mikecchalupiak@outlook.com
[spamreciver1]
source = imaps+xoauth2://spamreciver1%40outlook.com@outlook.office365.com?
outgoing = smtp+xoauth2://spamreciver1%40outlook.com@outlook.office365.com:587
from = "Mike Jeff" <spamreciver1@outlook.com>
default = INBOX
cache-headers = true
source-cred-cmd = oama access spamreciver1@outlook.com
outgoing-cred-cmd = oama access spamreciver1@outlook.com
[chalupmc]
source = imaps+xoauth2://chalupmc%40rose-hulman.edu@outlook.office365.com?
outgoing = smtp+xoauth2://chalupmc%40rose-hulman.edu@outlook.office365.com:587
from = "Michael Chalupiak" <chalupmc@rose-hulman.edu>
default = INBOX
cache-headers = true
source-cred-cmd = oama access chalupmc@rose-hulman.edu
outgoing-cred-cmd = oama access chalupmc@rose-hulman.edu

View File

@@ -0,0 +1,862 @@
#
# aerc main configuration
[general]
#
# Used as a default path for save operations if no other path is specified.
# ~ is expanded to the current user home dir.
#
#default-save-path=
# If set to "gpg", aerc will use system gpg binary and keystore for all crypto
# operations. If set to "internal", the internal openpgp keyring will be used.
# If set to "auto", the system gpg will be preferred unless the internal
# keyring already exists, in which case the latter will be used.
#
# Default: auto
#pgp-provider=auto
# By default, the file permissions of accounts.conf must be restrictive and
# only allow reading by the file owner (0600). Set this option to true to
# ignore this permission check. Use this with care as it may expose your
# credentials.
#
# Default: false
#unsafe-accounts-conf=false
# Output log messages to specified file. A path starting with ~/ is expanded to
# the user home dir. When redirecting aerc's output to a file using > shell
# redirection, this setting is ignored and log messages are printed to stdout.
#
#log-file=
# Only log messages above the specified level to log-file. Supported levels
# are: trace, debug, info, warn and error. When redirecting aerc's output to
# a file using > shell redirection, this setting is ignored and the log level
# is forced to trace.
#
# Default: info
#log-level=info
# Disable IPC entirely. Don't run commands (including mailto:... and mbox:...)
# in an existing aerc instance, and don't start an IPC server to allow
# subsequent aerc instances to run commands in the current one.
#
# Default: false
#disable-ipc=false
# Don't run mailto:... commands over IPC; start a new aerc instance with the
# composer instead.
#
# Default: false
#disable-ipc-mailto=false
#
# Don't run mbox:... commands over IPC; start a new aerc instance with the mbox
# file instead.
#
# Default: false
#disable-ipc-mbox=false
# Set the $TERM environment variable used for the embedded terminal.
#
# Default: xterm-256color
#term=xterm-256color
# Display OSC8 strings in the embedded terminal
#
# Default: false
#enable-osc8=false
# Default shell command to use for :menu. This will be executed with sh -c and
# will run in an popover dialog.
#
# Any occurrence of %f will be replaced by a temporary file path where the
# command is expected to write output lines to be consumed by :menu. Otherwise,
# the lines will be read from the command's standard output.
#
# Examples:
# default-menu-cmd=fzf
# default-menu-cmd=fzf --multi
# default-menu-cmd=dmenu -l 20
# default-menu-cmd=ranger --choosefiles=%f
#
#default-menu-cmd=
[ui]
#
# Describes the format for each row in a mailbox view. This is a comma
# separated list of column names with an optional align and width suffix. After
# the column name, one of the '<' (left), ':' (center) or '>' (right) alignment
# characters can be added (by default, left) followed by an optional width
# specifier. The width is either an integer representing a fixed number of
# characters, or a percentage between 1% and 99% representing a fraction of the
# terminal width. It can also be one of the '*' (auto) or '=' (fit) special
# width specifiers. Auto width columns will be equally attributed the remaining
# terminal width. Fit width columns take the width of their contents. If no
# width specifier is set, '*' is used by default.
#
# Default: flags:4,name<20%,subject,date>=
#index-columns=flags:4,name<20%,subject,date>=
#
# Each name in index-columns must have a corresponding column-$name setting.
# All column-$name settings accept golang text/template syntax. See
# aerc-templates(7) for available template attributes and functions.
#
# Here are some examples to show the To field instead of the From field for
# an email (modifying column-name):
#
# 1. a generic one
# column-name={{ .Peer | names | join ", " }}
# 2. based upon the selected folder
# column-name={{if match .Folder "^(Gesendet|Sent)$"}}{{index (.To | names) 0}}{{else}}{{index (.From | names) 0}}{{end}}
#
# Default settings
#column-flags={{.Flags | join ""}}
#column-name={{index (.From | names) 0}}
#column-subject={{.ThreadPrefix}}{{.Subject}}
#column-date={{.DateAutoFormat .Date.Local}}
#
# String separator inserted between columns. When the column width specifier is
# an exact number of characters, the separator is added to it (i.e. the exact
# width will be fully available for the column contents).
#
# Default: " "
#column-separator=" "
#
# See time.Time#Format at https://godoc.org/time#Time.Format
#
# Default: 2006 Jan 02
#timestamp-format=2006 Jan 02
#
# Index-only time format for messages that were received/sent today.
# If this is empty, timestamp-format is used instead.
#
# Default: 15:04
#this-day-time-format=15:04
#
# Index-only time format for messages that were received/sent within the last
# 7 days. If this is empty, timestamp-format is used instead.
#
# Default: Jan 02
#this-week-time-format=Jan 02
#
# Index-only time format for messages that were received/sent this year.
# If this is empty, timestamp-format is used instead.
#
#Default: Jan 02
#this-year-time-format=Jan 02
#
# Overrides timestamp-format for the message view.
#
# Default: 2006 Jan 02, 15:04 GMT-0700
#message-view-timestamp-format=2006 Jan 02, 15:04 GMT-0700
#
# If set, overrides timestamp-format in the message view for messages
# that were received/sent today.
#
#message-view-this-day-time-format=
# If set, overrides timestamp-format in the message view for messages
# that were received/sent within the last 7 days.
#
#message-view-this-week-time-format=
#
# If set, overrides *timestamp-format* in the message view for messages
# that were received/sent this year.
#
#message-view-this-year-time-format=
#
# Width of the sidebar, including the border.
#
# Default: 22
#sidebar-width=22
#
# Default split layout for message list tabs. The syntax is:
#
# [<direction>] <size>
#
# <direction> is optional and defaults to horizontal. It can take one
# of the following values: h, horiz, horizontal, v, vert, vertical.
#
# <size> is a positive integer representing the size (in terminal cells)
# of the message list window.
#
#message-list-split=
#
# Message to display when viewing an empty folder.
#
# Default: (no messages)
#empty-message=(no messages)
# Message to display when no folders exists or are all filtered
#
# Default: (no folders)
#empty-dirlist=(no folders)
#
# Value to set {{.Subject}} template to when subject is empty.
#
# Default: (no subject)
#empty-subject=(no subject)
# Enable mouse events in the ui, e.g. clicking and scrolling with the mousewheel
#
# Default: false
#mouse-enabled=false
#
# Ring the bell when new messages are received
#
# Default: true
#new-message-bell=true
#
# Template to use for Account tab titles
#
# Default: {{.Account}}
#tab-title-account={{.Account}}
#
# Template to use for Composer tab titles
#
# Default: {{if .To}}to:{{index (.To | shortmboxes) 0}} {{end}}{{.SubjectBase}}
#tab-title-composer={{if .To}}to:{{index (.To | shortmboxes) 0}} {{end}}{{.SubjectBase}}
#
# Template to use for Message Viewer tab titles
#
# Default: {{.Subject}}
#tab-title-viewer={{.Subject}}
# Marker to show before a pinned tab's name.
#
# Default: `
#pinned-tab-marker='`'
# Template for the left side of the directory list.
# See aerc-templates(7) for all available fields and functions.
#
# Default: {{.Folder}}
#dirlist-left={{.Folder}}
# Template for the right side of the directory list.
# See aerc-templates(7) for all available fields and functions.
#
# Default: {{if .Unread}}{{humanReadable .Unread}}{{end}}
#dirlist-right={{if .Unread}}{{humanReadable .Unread}}{{end}}
# Delay after which the messages are actually listed when entering a directory.
# This avoids loading messages when skipping over folders and makes the UI more
# responsive. If you do not want that, set it to 0s.
#
# Default: 200ms
#dirlist-delay=200ms
# Display the directory list as a foldable tree that allows to collapse and
# expand the folders.
#
# Default: false
#dirlist-tree=false
# If dirlist-tree is enabled, set level at which folders are collapsed by
# default. Set to 0 to disable.
#
# Default: 0
#dirlist-collapse=0
# List of space-separated criteria to sort the messages by, see *sort*
# command in *aerc*(1) for reference. Prefixing a criterion with "-r "
# reverses that criterion.
#
# Example: "from -r date"
#
#sort=
# Moves to next message when the current message is deleted
#
# Default: true
#next-message-on-delete=true
# Automatically set the "seen" flag when a message is opened in the message
# viewer.
#
# Default: true
#auto-mark-read=true
# The directories where the stylesets are stored. It takes a colon-separated
# list of directories. If this is unset or if a styleset cannot be found, the
# following paths will be used as a fallback in that order:
#
# ${XDG_CONFIG_HOME:-~/.config}/aerc/stylesets
# ${XDG_DATA_HOME:-~/.local/share}/aerc/stylesets
# /usr/local/share/aerc/stylesets
# /usr/share/aerc/stylesets
#
#stylesets-dirs=
# Uncomment to use box-drawing characters for vertical and horizontal borders.
#
# Default: "│" and "─"
#border-char-vertical="│"
#border-char-horizontal="─"
# Sets the styleset to use for the aerc ui elements.
#
# Default: default
#styleset-name=default
# Activates fuzzy search in commands and their arguments: the typed string is
# searched in the command or option in any position, and need not be
# consecutive characters in the command or option.
#
# Default: false
fuzzy-complete=true
# How long to wait after the last input before auto-completion is triggered.
#
# Default: 250ms
#completion-delay=250ms
# The minimum required characters to allow auto-completion to be triggered after
# completion-delay.
#
# Setting this to "manual" disables automatic completion, leaving only the
# manually triggered completion with the $complete key (see aerc-binds(5) for
# more details).
#
# Default: 1
#completion-min-chars=1
#
# Global switch for completion popovers
#
# Default: true
#completion-popovers=true
# Uncomment to use UTF-8 symbols to indicate PGP status of messages
#
# Default: ASCII
#icon-unencrypted=
#icon-encrypted=✔
#icon-signed=✔
#icon-signed-encrypted=✔
#icon-unknown=✘
#icon-invalid=⚠
# Reverses the order of the message list. By default, the message list is
# ordered with the newest (highest UID) message on top. Reversing the order
# will put the oldest (lowest UID) message on top. This can be useful in cases
# where the backend does not support sorting.
#
# Default: false
#reverse-msglist-order = false
# Reverse display of the message threads. Default order is the initial
# message is on the top with all the replies being displayed below. The
# reverse option will put the initial message at the bottom with the
# replies on top.
#
# Default: false
#reverse-thread-order=false
# Positions the cursor on the last message in the message list (at the
# bottom of the view) when opening a new folder.
#
# Default: false
#select-last-message=false
# Sort the thread siblings according to the sort criteria for the messages. If
# sort-thread-siblings is false, the thread siblings will be sorted based on
# the message UID in ascending order. This option is only applicable for
# client-side threading with a backend that enables sorting. Note that there's
# a performance impact when sorting is activated.
#
# Default: false
#sort-thread-siblings=false
# Set the scroll offset in number of lines from the top and bottom of the
# message list.
#
# Default: 0
#msglist-scroll-offset = 0
#
# Enable a threaded view of messages. If this is not supported by the backend
# (IMAP server or notmuch), threads will be built by the client.
#
# Default: false
#threading-enabled=false
# Force client-side thread building
#
# Default: false
#force-client-threads=false
# If no References nor In-Reply-To headers can be matched to build client side
# threads, fallback to similar subjects.
#
# Default: false
#threading-by-subject=false
# Show thread context enables messages which do not match the current query (or
# belong to the current mailbox) to be shown for context. These messages can be
# styled separately using "msglist_thread_context" in a styleset. This feature
# is not supported by all backends
#
# Default: false
#show-thread-context=false
# Debounce client-side thread building
#
# Default: 50ms
#client-threads-delay=50ms
#
# Thread prefix customization:
#
# Customize the thread prefix appearance by selecting the arrow head.
#
# Default: ">"
#thread-prefix-tip = ">"
#
# Customize the thread prefix appearance by selecting the arrow indentation.
#
# Default: " "
#thread-prefix-indent = " "
#
# Customize the thread prefix appearance by selecting the vertical extension of
# the arrow.
#
# Default: "│"
#thread-prefix-stem = "│"
#
# Customize the thread prefix appearance by selecting the horizontal extension
# of the arrow.
#
# Default: ""
#thread-prefix-limb = ""
#
# Customize the thread prefix appearance by selecting the folded thread
# indicator.
#
# Default: "+"
#thread-prefix-folded = "+"
#
# Customize the thread prefix appearance by selecting the unfolded thread
# indicator.
#
# Default: ""
#thread-prefix-unfolded = ""
#
# Customize the thread prefix appearance by selecting the first child connector.
#
# Default: ""
#thread-prefix-first-child = ""
#
# Customize the thread prefix appearance by selecting the connector used if
# the message has siblings.
#
# Default: "├─"
#thread-prefix-has-siblings = "├─"
#
# Customize the thread prefix appearance by selecting the connector used if the
# message has no parents and no children.
#
# Default: ""
#thread-prefix-lone = ""
#
# Customize the thread prefix appearance by selecting the connector used if the
# message has no parents and has children.
#
# Default: ""
#thread-prefix-orphan = ""
#
# Customize the thread prefix appearance by selecting the connector for the last
# sibling.
#
# Default: "└─"
#thread-prefix-last-sibling = "└─"
#
# Customize the reversed thread prefix appearance by selecting the connector for
# the last sibling.
#
# Default: "┌─"
#thread-prefix-last-sibling-reverse = "┌─"
#
# Customize the thread prefix appearance by selecting the connector for dummy
# thread.
#
# Default: "┬─"
#thread-prefix-dummy = "┬─"
#
# Customize the reversed thread prefix appearance by selecting the connector for
# dummy thread.
#
# Default: "┴─"
#thread-prefix-dummy-reverse = "┴─"
#
# Customize the reversed thread prefix appearance by selecting the first child
# connector.
#
# Default: ""
#thread-prefix-first-child-reverse = ""
#
# Customize the reversed thread prefix appearance by selecting the connector
# used if the message has no parents and has children.
#
# Default: ""
#thread-prefix-orphan-reverse = ""
[statusline]
#
# Describes the format for the status line. This is a comma separated list of
# column names with an optional align and width suffix. See [ui].index-columns
# for more details. To completely mute the status line except for push
# notifications, explicitly set status-columns to an empty string.
#
# Default: left<*,center:=,right>*
#status-columns=left<*,center:=,right>*
#
# Each name in status-columns must have a corresponding column-$name setting.
# All column-$name settings accept golang text/template syntax. See
# aerc-templates(7) for available template attributes and functions.
#
# Default settings
#column-left=[{{.Account}}] {{.StatusInfo}}
#column-center={{.PendingKeys}}
#column-right={{.TrayInfo}} | {{cwd}}
#
# String separator inserted between columns.
# See [ui].column-separator for more details.
#
#column-separator=" "
# Specifies the separator between grouped statusline elements.
#
# Default: " | "
#separator=" | "
# Defines the mode for displaying the status elements.
# Options: text, icon
#
# Default: text
#display-mode=text
[viewer]
#
# Specifies the pager to use when displaying emails. Note that some filters
# may add ANSI codes to add color to rendered emails, so you may want to use a
# pager which supports ANSI codes.
#
# Default: less -Rc
pager=less -Rc
#
# If an email offers several versions (multipart), you can configure which
# mimetype to prefer. For example, this can be used to prefer plaintext over
# html emails.
#
# Default: text/plain,text/html
alternatives=text/html,text/plain
#
# Default setting to determine whether to show full headers or only parsed
# ones in message viewer.
#
# Default: false
#show-headers=false
#
# Layout of headers when viewing a message. To display multiple headers in the
# same row, separate them with a pipe, e.g. "From|To". Rows will be hidden if
# none of their specified headers are present in the message.
#
# Default: From|To,Cc|Bcc,Date,Subject
#header-layout=From|To,Cc|Bcc,Date,Subject
# Whether to always show the mimetype of an email, even when it is just a single part
#
# Default: false
#always-show-mime=false
# Define the maximum height of the mimetype switcher before a scrollbar is used.
# The height of the mimetype switcher is restricted to half of the display
# height. If the provided value for the height is zero, the number of parts will
# be used as the height of the type switcher.
#
# Default: 0
#max-mime-height = 0
# Parses and extracts http links when viewing a message. Links can then be
# accessed with the open-link command.
#
# Default: true
#parse-http-links=true
[compose]
#
# Specifies the command to run the editor with. It will be shown in an embedded
# terminal, though it may also launch a graphical window if the environment
# supports it. Defaults to $EDITOR, or vi.
#editor=
#
# When set, aerc will create and read .eml files for composing that have
# non-standard \n linebreaks. This is only relevant if the used editor does not
# support CRLF linebreaks.
#
#lf-editor=false
#
# Default header fields to display when composing a message. To display
# multiple headers in the same row, separate them with a pipe, e.g. "To|From".
#
# Default: To|From,Subject
#header-layout=To|From,Subject
#
# Edit headers into the text editor instead than separate fields.
#
# When this is true, address-book-cmd is not supported and address completion
# is left to the editor itself. Also, displaying multiple headers on the same
# line is not possible.
#
# Default: false
#edit-headers=false
#
# Specifies the command to be used to tab-complete email addresses. Any
# occurrence of "%s" in the address-book-cmd will be replaced with what the
# user has typed so far.
#
# The command must output the completions to standard output, one completion
# per line. Each line must be tab-delimited, with an email address occurring as
# the first field. Only the email address field is required. The second field,
# if present, will be treated as the contact name. Additional fields are
# ignored.
#
# This parameter can also be set per account in accounts.conf.
#address-book-cmd=
# Specifies the command to be used to select attachments. Any occurrence of
# '%s' in the file-picker-cmd will be replaced with the argument <arg>
# to :attach -m <arg>. Any occurence of '%f' will be replaced by the
# location of a temporary file, from which aerc will read the selected files.
#
# If '%f' is not present, the command must output the selected files to
# standard output, one file per line. If it is present, then aerc does not
# capture the standard output and instead reads the files from the temporary
# file which should have the same format.
#file-picker-cmd=
#
# Allow to address yourself when replying
#
# Default: true
#reply-to-self=true
# Warn before sending an email with an empty subject.
#
# Default: false
#empty-subject-warning=false
#
# Warn before sending an email that matches the specified regexp but does not
# have any attachments. Leave empty to disable this feature.
#
# Uses Go's regexp syntax, documented at https://golang.org/s/re2syntax. The
# "(?im)" flags are set by default (case-insensitive and multi-line).
#
# Example:
# no-attachment-warning=^[^>]*attach(ed|ment)
#
#no-attachment-warning=
#
# When set, aerc will generate "format=flowed" bodies with a content type of
# "text/plain; format=flowed" as described in RFC3676. This format is easier to
# handle for some mailing software, and generally just looks like ordinary
# text. To actually make use of this format's features, you'll need support in
# your editor.
#
#format-flowed=false
[multipart-converters]
#
# Converters allow to generate multipart/alternative messages by converting the
# main text/plain part into any other MIME type. Only exact MIME types are
# accepted. The commands are invoked with sh -c and are expected to output
# valid UTF-8 text.
#
# Example (obviously, this requires that you write your main text/plain body
# using the markdown syntax):
#text/html=pandoc -f markdown -t html --standalone
[filters]
#
# Filters allow you to pipe an email body through a shell command to render
# certain emails differently, e.g. highlighting them with ANSI escape codes.
#
# The commands are invoked with sh -c. The following folders are prepended to
# the system $PATH to allow referencing filters from their name only:
#
# ${XDG_CONFIG_HOME:-~/.config}/aerc/filters
# ~/.local/libexec/aerc/filters
# ${XDG_DATA_HOME:-~/.local/share}/aerc/filters
# $PREFIX/libexec/aerc/filters
# $PREFIX/share/aerc/filters
# /usr/libexec/aerc/filters
# /usr/share/aerc/filters
#
# If you want to run a program in your default $PATH which has the same name
# as a builtin filter (e.g. /usr/bin/colorize), use its absolute path.
#
# The following variables are defined in the filter command environment:
#
# AERC_MIME_TYPE the part MIME type/subtype
# AERC_FORMAT the part content type format= parameter
# AERC_FILENAME the attachment filename (if any)
# AERC_SUBJECT the message Subject header value
# AERC_FROM the message From header value
#
# The first filter which matches the email's mimetype will be used, so order
# them from most to least specific.
#
# You can also match on non-mimetypes, by prefixing with the header to match
# against (non-case-sensitive) and a comma, e.g. subject,text will match a
# subject which contains "text". Use header,~regex to match against a regex.
#
text/plain=colorize
text/calendar=calendar
message/delivery-status=colorize
message/rfc822=colorize
text/html=cha -T text/html -d -o display.color-mode="true-color" -o buffer.mark-links=true
# text/html=! html-unsafe -sixel
#text/html=pandoc -f html -t plain | colorize
#text/html=html | colorize
#text/*=bat -fP --file-name="$AERC_FILENAME"
#application/x-sh=bat -fP -l sh
#image/*=catimg -w $(tput cols) -
#subject,~Git(hub|lab)=lolcat -f
#from,thatguywhodoesnothardwraphismessages=wrap -w 100 | colorize
# This special filter is only used to post-process email headers when
# [viewer].show-headers=true
# By default, headers are piped directly into the pager.
#
.headers=colorize
[openers]
#
# Openers allow you to specify the command to use for the :open and :open-link
# actions on a per-MIME-type basis. The :open-link URL scheme is used to
# determine the MIME type as follows: x-scheme-handler/<scheme>.
#
# {} is expanded as the temporary filename or URL to be opened with proper
# shell quoting. If it is not encountered in the command, the filename/URL will
# be appended to the end of the command. The command will then be executed with
# `sh -c`.
#
# Like [filters], openers support basic shell globbing. The first opener which
# matches the part's MIME type (or URL scheme handler MIME type) will be used,
# so order them from most to least specific.
#
# Examples:
# x-scheme-handler/irc=hexchat
# x-scheme-handler/http*=printf '%s' {} | wl-copy
# text/html=surf -dfgms
text/html=cha
# text/plain=gvim {} +125
# message/rfc822=thunderbird
[hooks]
#
# Hooks are triggered whenever the associated event occurs.
#
# Executed when a new email arrives in the selected folder
#mail-received=notify-send "[$AERC_ACCOUNT/$AERC_FOLDER] New mail from $AERC_FROM_NAME" "$AERC_SUBJECT"
#
# Executed when mail is deleted from a folder
#mail-deleted=mbsync "$AERC_ACCOUNT:$AERC_FOLDER" &
#
# Executed when aerc adds mail to a folder
#mail-added=mbsync "$AERC_ACCOUNT:$AERC_FOLDER" &
#
# Executed when aerc starts
#aerc-startup=aerc :terminal calcurse && aerc :next-tab
#
# Executed when aerc shuts down.
#aerc-shutdown=
#
# Executed when notmuch tags are modified.
#tag-modified=
#
# Executed when flags are changed on a message.
#flag-changed=mbsync "$AERC_ACCOUNT:$AERC_FOLDER" &
[templates]
# Templates are used to populate email bodies automatically.
#
# The directories where the templates are stored. It takes a colon-separated
# list of directories. If this is unset or if a template cannot be found, the
# following paths will be used as a fallback in that order:
#
# ${XDG_CONFIG_HOME:-~/.config}/aerc/templates
# ${XDG_DATA_HOME:-~/.local/share}/aerc/templates
# /usr/local/share/aerc/templates
# /usr/share/aerc/templates
#
#template-dirs=
# The default template to be used for new messages.
#
# default: new_message
#new-message=new_message
# The default template to be used for quoted replies.
#
# default: quoted_reply
#quoted-reply=quoted_reply
# The default template to be used for forward as body.
#
# default: forward_as_body
#forwards=forward_as_body

View File

@@ -0,0 +1,184 @@
# Binds are of the form <key sequence> = <command to run>
# To use '=' in a key sequence, substitute it with "Eq": "<Ctrl+Eq>"
# If you wish to bind #, you can wrap the key sequence in quotes: "#" = quit
<C-p> = :prev-tab<Enter>
<C-PgUp> = :prev-tab<Enter>
<C-n> = :next-tab<Enter>
<C-PgDn> = :next-tab<Enter>
\[t = :prev-tab<Enter>
\]t = :next-tab<Enter>
<C-t> = :term<Enter>
? = :help keys<Enter>
<C-c> = :prompt 'Quit?' quit<Enter>
<C-q> = :prompt 'Quit?' quit<Enter>
<C-z> = :suspend<Enter>
[messages]
q = :prompt 'Quit?' quit<Enter>
j = :next<Enter>
<Down> = :next<Enter>
<C-d> = :next 50%<Enter>
<C-f> = :next 100%<Enter>
<PgDn> = :next 100%<Enter>
k = :prev<Enter>
<Up> = :prev<Enter>
<C-u> = :prev 50%<Enter>
<C-b> = :prev 100%<Enter>
<PgUp> = :prev 100%<Enter>
g = :select 0<Enter>
G = :select -1<Enter>
J = :next-folder<Enter>
<C-Down> = :next-folder<Enter>
K = :prev-folder<Enter>
<C-Up> = :prev-folder<Enter>
H = :collapse-folder<Enter>
<C-Left> = :collapse-folder<Enter>
L = :expand-folder<Enter>
<C-Right> = :expand-folder<Enter>
v = :mark -t<Enter>
<Space> = :mark -t<Enter>:next<Enter>
V = :mark -v<Enter>
T = :toggle-threads<Enter>
zc = :fold<Enter>
zo = :unfold<Enter>
za = :fold -t<Enter>
zM = :fold -a<Enter>
zR = :unfold -a<Enter>
<tab> = :fold -t<Enter>
zz = :align center<Enter>
zt = :align top<Enter>
zb = :align bottom<Enter>
<Enter> = :view<Enter>
d = :choose -o y 'Really delete this message' delete-message<Enter>
D = :delete<Enter>
a = :archive flat<Enter>
A = :unmark -a<Enter>:mark -T<Enter>:archive flat<Enter>
C = :compose<Enter>
m = :compose<Enter>
b = :bounce<space>
rr = :reply -a<Enter>
rq = :reply -aq<Enter>
Rr = :reply<Enter>
Rq = :reply -q<Enter>
c = :cf<space>
$ = :term<space>
! = :term<space>
| = :pipe<space>
/ = :search<space>
\ = :filter<space>
n = :next-result<Enter>
N = :prev-result<Enter>
<Esc> = :clear<Enter>
s = :split<Enter>
S = :vsplit<Enter>
pl = :patch list<Enter>
pa = :patch apply <Tab>
pd = :patch drop <Tab>
pb = :patch rebase<Enter>
pt = :patch term<Enter>
ps = :patch switch <Tab>
[messages:folder=Drafts]
<Enter> = :recall<Enter>
[view]
/ = :toggle-key-passthrough<Enter>/
q = :close<Enter>
O = :open<Enter>
o = :open<Enter>
S = :save<space>
| = :pipe<space>
D = :delete<Enter>
A = :archive flat<Enter>
<C-l> = :open-link <space>
f = :forward<Enter>
rr = :reply -a<Enter>
rq = :reply -aq<Enter>
Rr = :reply<Enter>
Rq = :reply -q<Enter>
H = :toggle-headers<Enter>
<C-k> = :prev-part<Enter>
<C-Up> = :prev-part<Enter>
<C-j> = :next-part<Enter>
<C-Down> = :next-part<Enter>
J = :next<Enter>
<C-Right> = :next<Enter>
K = :prev<Enter>
<C-Left> = :prev<Enter>
[view::passthrough]
$noinherit = true
$ex = <C-x>
<Esc> = :toggle-key-passthrough<Enter>
[compose]
# Keybindings used when the embedded terminal is not selected in the compose
# view
$noinherit = true
$ex = <C-x>
$complete = <C-o>
<C-k> = :prev-field<Enter>
<C-Up> = :prev-field<Enter>
<C-j> = :next-field<Enter>
<C-Down> = :next-field<Enter>
<A-p> = :switch-account -p<Enter>
<C-Left> = :switch-account -p<Enter>
<A-n> = :switch-account -n<Enter>
<C-Right> = :switch-account -n<Enter>
<tab> = :next-field<Enter>
<backtab> = :prev-field<Enter>
<C-p> = :prev-tab<Enter>
<C-PgUp> = :prev-tab<Enter>
<C-n> = :next-tab<Enter>
<C-PgDn> = :next-tab<Enter>
[compose::editor]
# Keybindings used when the embedded terminal is selected in the compose view
$noinherit = true
$ex = <C-x>
<C-k> = :prev-field<Enter>
<C-Up> = :prev-field<Enter>
<C-j> = :next-field<Enter>
<C-Down> = :next-field<Enter>
<C-p> = :prev-tab<Enter>
<C-PgUp> = :prev-tab<Enter>
<C-n> = :next-tab<Enter>
<C-PgDn> = :next-tab<Enter>
[compose::review]
# Keybindings used when reviewing a message to be sent
# Inline comments are used as descriptions on the review screen
y = :send<Enter> # Send
n = :abort<Enter> # Abort (discard message, no confirmation)
v = :preview<Enter> # Preview message
p = :postpone<Enter> # Postpone
q = :choose -o d discard abort -o p postpone postpone<Enter> # Abort or postpone
e = :edit<Enter> # Edit
a = :attach<space> # Add attachment
d = :detach<space> # Remove attachment
[terminal]
$noinherit = true
$ex = <C-x>
<C-p> = :prev-tab<Enter>
<C-n> = :next-tab<Enter>
<C-PgUp> = :prev-tab<Enter>
<C-PgDn> = :next-tab<Enter>

View File

@@ -0,0 +1,3 @@
[buffer]
images = true
scripting = true

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,127 @@
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
;; Place your private configuration here! Remember, you do not need to run 'doom
;; sync' after modifying this file!
;; Some functionality uses this to identify you, e.g. GPG configuration, email
;; clients, file templates and snippets. It is optional.
;; (setq user-full-name "John Doe"
;; user-mail-address "john@doe.com")
;; Doom exposes five (optional) variables for controlling fonts in Doom:
;;
;; - `doom-font' -- the primary font to use
;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable)
;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for
;; presentations or streaming.
;; - `doom-symbol-font' -- for symbols
;; - `doom-serif-font' -- for the `fixed-pitch-serif' face
;;
;; See 'C-h v doom-font' for documentation and more examples of what they
;; accept. For example:
;;
;; (setq doom-font (font-spec :family "Fira Code" :size 12 :weight 'semi-light)
;; doom-variable-pitch-font (font-spec :family "Fira Sans" :size 13))
(setq doom-font (font-spec :family "Iosevka Term SS12" :size 18))
;;
;; If you or Emacs can't find your font, use 'M-x describe-font' to look them
;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
;; refresh your font settings. If Emacs still can't find your font, it likely
;; wasn't installed correctly. Font issues are rarely Doom issues!
;; There are two ways to load a theme. Both assume the theme is installed and
;; available. You can either set `doom-theme' or manually load a theme with the
;; `load-theme' function. This is the default:
;; (setq doom-theme 'doom-one)
;; This determines the style of line numbers in effect. If set to `nil', line
;; numbers are disabled. For relative line numbers, set this to `relative'.
(setq display-line-numbers-type 'relative)
;; If you use `org' and don't want your org files in the default location below,
;; change `org-directory'. It must be set before org loads!
(setq org-directory "~/org/")
;; Whenever you reconfigure a package, make sure to wrap your config in an
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
;;
;; (after! PACKAGE
;; (setq x y))
;;
;; The exceptions to this rule:
;;
;; - Setting file/directory variables (like `org-directory')
;; - Setting variables which explicitly tell you to set them before their
;; package is loaded (see 'C-h v VARIABLE' to look up their documentation).
;; - Setting doom variables (which start with 'doom-' or '+').
;;
;; Here are some additional functions/macros that will help you configure Doom.
;;
;; - `load!' for loading external *.el files relative to this one
;; - `use-package!' for configuring packages
;; - `after!' for running code after a package has loaded
;; - `add-load-path!' for adding directories to the `load-path', relative to
;; this file. Emacs searches the `load-path' when you load packages with
;; `require' or `use-package'.
;; - `map!' for binding new keys
;;
;; To get information about any of these functions/macros, move the cursor over
;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
;; This will open documentation for it, including demos of how they are used.
;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces,
;; etc).
;;
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
;; they are implemented.
;; (setq! tab-always-indent nil)
(after! corfu
(setq! tab-always-indent nil))
;; (map! :map corfu-map :i "TAB" nil)
;; (map! :map corfu-map "TAB" nil)
;; (map! :map corfu-map :i "S-TAB" nil)
;; (map! :map corfu-map "S-TAB" nil)
;; (map! :map corfu-map :i "C-n" #'corfu-next)
;; (map! :map corfu-map :i "C-p" #'corfu-previous)
;; (map! :map corfu-map "C-n" #'corfu-next)
;; (map! :map corfu-map "C-p" #'corfu-previous)
;; (map! :map corfu-map "ESC" #'corfu-reset)
;; (map! :map corfu-map :i "ESC" #'corfu-reset)
;; (map! :map corfu-map "C-g" #'corfu-reset)
;; (map! :map corfu-map :i "C-g" #'corfu-reset)
;; (setq +corfu-want-ret-to-confirm nil)
(use-package! auto-dark
:defer t
:init
;; Configure themes
(setq! auto-dark-themes '((doom-gruvbox) (doom-gruvbox-light)))
;; Disable doom's theme loading mechanism (just to make sure)
(setq! doom-theme nil)
;; Declare that all themes are safe to load.
;; Be aware that setting this variable may have security implications if you
;; get tricked into loading untrusted themes (via auto-dark-mode or manually).
;; See the documentation of custom-safe-themes for details.
(setq! custom-safe-themes t)
;; Enable auto-dark-mode at the right point in time.
;; This is inspired by doom-ui.el. Using server-after-make-frame-hook avoids
;; issues with an early start of the emacs daemon using systemd, which causes
;; problems with the DBus connection that auto-dark mode relies upon.
(defun my-auto-dark-init-h ()
(auto-dark-mode)
(remove-hook 'server-after-make-frame-hook #'my-auto-dark-init-h)
(remove-hook 'after-init-hook #'my-auto-dark-init-h))
(let ((hook (if (daemonp)
'server-after-make-frame-hook
'after-init-hook)))
;; Depth -95 puts this before doom-init-theme-h, which sounds like a good
;; idea, if only for performance reasons.
(add-hook hook #'my-auto-dark-init-h -95)))
(add-to-list 'auto-mode-alist '("\\.odin\\'" . odin-ts-mode))
(defvar treesit-language-source-alist '((odin "https://github.com/tree-sitter-grammars/tree-sitter-odin")))
;; (add-to-list treesit-language-source-alist '(odin "https://github.com/tree-sitter-grammars/tree-sitter-odin"))
(setq lsp-inlay-hint-enable 't)

198
config/.config/doom/init.el Normal file
View File

@@ -0,0 +1,198 @@
;;; init.el -*- lexical-binding: t; -*-
;; This file controls what Doom modules are enabled and what order they load
;; in. Remember to run 'doom sync' after modifying it!
;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
;; documentation. There you'll find a link to Doom's Module Index where all
;; of our modules are listed, including what flags they support.
;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
;; 'C-c c k' for non-vim users) to view its documentation. This works on
;; flags as well (those symbols that start with a plus).
;;
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
;; directory (for easy access to its source code).
(doom! :input
;;bidi ; (tfel ot) thgir etirw uoy gnipleh
;;chinese
;;japanese
;;layout ; auie,ctsrnm is the superior home row
:completion
;;company ; the ultimate code completion backend
(corfu +orderless) ; complete with cap(f), cape and a flying feather!
;;helm ; the *other* search engine for love and life
;;ido ; the other *other* search engine...
;; ivy ; a search engine for love and life
vertico ; the search engine of the future
:ui
;;deft ; notational velocity for Emacs
doom ; what makes DOOM look the way it does
doom-dashboard ; a nifty splash screen for Emacs
;;doom-quit ; DOOM quit-message prompts when you quit Emacs
;;(emoji +unicode) ; 🙂
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
indent-guides ; highlighted indent columns
;;ligatures ; ligatures and symbols to make your code pretty again
;;minimap ; show a map of the code on the side
;; modeline ; snazzy, Atom-inspired modeline, plus API
;;nav-flash ; blink cursor line after big motions
;;neotree ; a project drawer, like NERDTree for vim
ophints ; highlight the region an operation acts on
(popup +defaults) ; tame sudden yet inevitable temporary windows
smooth-scroll ; So smooth you won't believe it's not butter
;;tabs ; a tab bar for Emacs
;;treemacs ; a project drawer, like neotree but cooler
unicode ; extended unicode support for various languages
(vc-gutter +pretty) ; vcs diff in the fringe
vi-tilde-fringe ; fringe tildes to mark beyond EOB
;;window-select ; visually switch windows
;; workspaces ; tab emulation, persistence & separate workspaces
zen ; distraction-free coding or writing
:editor
(evil +everywhere); come to the dark side, we have cookies
file-templates ; auto-snippets for empty files
fold ; (nigh) universal code folding
(format +onsave) ; automated prettiness
;;god ; run Emacs commands without modifier keys
;;lispy ; vim for lisp, for people who don't like vim
multiple-cursors ; editing in many places at once
;;objed ; text object editing for the innocent
parinfer ; turn lisp into python, sort of
;;rotate-text ; cycle region at point between text candidates
snippets ; my elves. They type so I don't have to
;; (whitespace +guess +trim) ; a butler for your whitespace
word-wrap ; soft wrapping with language-aware indent
:emacs
dired ; making dired pretty [functional]
electric ; smarter, keyword-based electric-indent
;;eww ; the internet is gross
ibuffer ; interactive buffer management
tramp ; remote files at your arthritic fingertips
undo ; persistent, smarter undo for your inevitable mistakes
vc ; version-control and Emacs, sitting in a tree
:term
eshell ; the elisp shell that works everywhere
;;shell ; simple shell REPL for Emacs
;;term ; basic terminal emulator for Emacs
;; vterm ; the best terminal emulation in Emacs
:checkers
syntax ; tasing you for every semicolon you forget
(spell +flyspell) ; tasing you for misspelling mispelling
;;grammar ; tasing grammar mistake every you make
:tools
;;ansible
;;biblio ; Writes a PhD for you (citation needed)
;;collab ; buffers with friends
;;debugger ; FIXME stepping through code, to help you add bugs
;;direnv
;;docker
;;editorconfig ; let someone else argue about tabs vs spaces
;;ein ; tame Jupyter notebooks with emacs
(eval +overlay) ; run code, run (also, repls)
(lookup +dictionary +offline) ; navigate your code and its documentation
;;llm ; when I said you needed friends, I didn't mean...
(lsp +eglot) ; M-x vscode
(magit +forge) ; a git porcelain for Emacs
;;make ; run make tasks from Emacs
;;pass ; password manager for nerds
;;pdf ; pdf enhancements
;;terraform ; infrastructure as code
;;tmux ; an API for interacting with tmux
tree-sitter ; syntax and parsing, sitting in a tree...
;;upload ; map local to remote projects via ssh/ftp
:os
(:if (featurep :system 'macos) macos) ; improve compatibility with macOS
tty ; improve the terminal Emacs experience
:lang
;;ada ; In strong typing we (blindly) trust
;;agda ; types of types of types of types...
;;beancount ; mind the GAAP
(cc +lsp +tree-sitter) ; C > C++ == 1
;;clojure ; java with a lisp
common-lisp ; if you've seen one lisp, you've seen them all
;;coq ; proofs-as-programs
;;crystal ; ruby at the speed of c
;;csharp ; unity, .NET, and mono shenanigans
;;data ; config/data formats
;;(dart +flutter) ; paint ui and not much else
;;dhall
;;elixir ; erlang done right
;;elm ; care for a cup of TEA?
emacs-lisp ; drown in parentheses
;;erlang ; an elegant language for a more civilized age
;;ess ; emacs speaks statistics
;;factor
;;faust ; dsp, but you get to keep your soul
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
;;fsharp ; ML stands for Microsoft's Language
;;fstar ; (dependent) types and (monadic) effects and Z3
;;gdscript ; the language you waited for
;;(go +lsp) ; the hipster dialect
;;(graphql +lsp) ; Give queries a REST
;;(haskell +lsp) ; a language that's lazier than I am
;;hy ; readability of scheme w/ speed of python
;;idris ; a language you can depend on
;;json ; At least it ain't XML
;;janet ; Fun fact: Janet is me!
;;(java +lsp) ; the poster child for carpal tunnel syndrome
;;javascript ; all(hope(abandon(ye(who(enter(here))))))
;;julia ; a better, faster MATLAB
;;kotlin ; a better, slicker Java(Script)
;;latex ; writing papers in Emacs has never been so fun
;;lean ; for folks with too much to prove
;;ledger ; be audit you can be
;;lua ; one-based indices? one-based indices
(markdown +grip +tree-sitter) ; writing docs for people to ignore
;;nim ; python + lisp at the speed of c
;;nix ; I hereby declare "nix geht mehr!"
;;ocaml ; an objective camel
org ; organize your plain life in plain text
;;php ; perl's insecure younger brother
;;plantuml ; diagrams for confusing people more
;;graphviz ; diagrams for confusing yourself even more
;;purescript ; javascript, but functional
;;python ; beautiful is better than ugly
;;qt ; the 'cutest' gui framework ever
;;racket ; a DSL for DSLs
;;raku ; the artist formerly known as perl6
;;rest ; Emacs as a REST client
;;rst ; ReST in peace
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
(rust +lsp +tree-sitter) ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
;;scala ; java, but good
;;(scheme +guile) ; a fully conniving family of lisps
sh ; she sells {ba,z,fi}sh shells on the C xor
;;sml
;;solidity ; do you need a blockchain? No.
(swift +lsp +tree-sitter); who asked for emoji variables?
;;terra ; Earth and Moon in alignment for performance.
(web +lsp +tree-sitter) ; the tubes
;;yaml ; JSON, but readable
(zig +lsp +tree-sitter) ; C, but simpler
:email
;;(mu4e +org +gmail)
;;notmuch
;;(wanderlust +gmail)
:app
;;calendar
;;emms
;;everywhere ; *leave* Emacs!? You must be joking
;;irc ; how neckbeards socialize
;;(rss +org) ; emacs as an RSS reader
:config
;;literate
(default +bindings +smartparens))

View File

@@ -0,0 +1,57 @@
;; -*- no-byte-compile: t; -*-
;;; $DOOMDIR/packages.el
;; To install a package:
;;
;; 1. Declare them here in a `package!' statement,
;; 2. Run 'doom sync' in the shell,
;; 3. Restart Emacs.
;;
;; Use 'C-h f package\!' to look up documentation for the `package!' macro.
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
;; (package! some-package)
;; To install a package directly from a remote git repo, you must specify a
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
;; https://github.com/radian-software/straight.el#the-recipe-format
;; (package! another-package
;; :recipe (:host github :repo "username/repo"))
;; If the package you are trying to install does not contain a PACKAGENAME.el
;; file, or is located in a subdirectory of the repo, you'll need to specify
;; `:files' in the `:recipe':
;; (package! this-package
;; :recipe (:host github :repo "username/repo"
;; :files ("some-file.el" "src/lisp/*.el")))
;; If you'd like to disable a package included with Doom, you can do so here
;; with the `:disable' property:
;; (package! builtin-package :disable t)
;; You can override the recipe of a built in package without having to specify
;; all the properties for `:recipe'. These will inherit the rest of its recipe
;; from Doom or MELPA/ELPA/Emacsmirror:
;; (package! builtin-package :recipe (:nonrecursive t))
;; (package! builtin-package-2 :recipe (:repo "myfork/package"))
;; Specify a `:branch' to install a package from a particular branch or tag.
;; This is required for some packages whose default branch isn't 'master' (which
;; our package manager can't deal with; see radian-software/straight.el#279)
;; (package! builtin-package :recipe (:branch "develop"))
;; Use `:pin' to specify a particular commit to install.
;; (package! builtin-package :pin "1a2b3c4d5e")
;; Doom's packages are pinned to a specific commit and updated from release to
;; release. The `unpin!' macro allows you to unpin single packages...
;; (unpin! pinned-package)
;; ...or multiple packages
;; (unpin! pinned-package another-pinned-package)
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
;; (unpin! t)
(package! auto-dark)
(package! odin-ts-mode
:recipe (:host github :repo "Sampie159/odin-ts-mode"))

View File

@@ -0,0 +1,237 @@
;;; doom-rose-pine-dawn-theme.el --- A light port of Rose Piné Dawn theme -*- lexical-binding: t; no-byte-compile: t; -*-
;;
;; Author: mvllow
;; Ported by: donniebreve
;; Keywords: custom themes, faces
;; Homepage: https://github.com/donniebreve/rose-pine-doom-emacs
;; Package-Requires: ((emacs "25.1") (cl-lib "0.5") (doom-themes "2.2.1"))
;;
;;; Commentary:
;;
;; Thanks to mvllow (https://github.com/rose-pine)
;; Thanks to hlissner (https://github.com/doomemacs/themes)
;;
;;; Code:
(require 'doom-themes)
;;; Variables
(defgroup doom-rose-pine-dawn-theme nil
"Options for the `doom-rose-pine-dawn' theme."
:group 'doom-themes)
(defcustom doom-rose-pine-dawn-brighter-modeline nil
"If non-nil, more vivid colors will be used to style the mode-line."
:group 'doom-rose-pine-dawn-theme
:type 'boolean)
(defcustom doom-rose-pine-dawn-brighter-comments nil
"If non-nil, comments will be highlighted in more vivid colors."
:group 'doom-rose-pine-dawn-theme
:type 'boolean)
(defcustom doom-rose-pine-dawn-padded-modeline doom-themes-padded-modeline
"If non-nil, adds a 4px padding to the mode-line. Can be an integer to determine the exact padding."
:group 'doom-rose-pine-dawn-theme
:type '(choice integer boolean))
;;; Theme definition
(def-doom-theme doom-rose-pine-dawn
"A light port of Rosé Pine Dawn theme"
;; Main theme colors
(
;; name default 256 16
(base '("#faf4ed" "#faf4ed" "black" ))
(surface '("#fffaf3" "#fffaf3" "brightblack" ))
(overlay '("#f2e9de" "#f2e9de" "brightblack" ))
(muted '("#9893a5" "#9893a5" "brightblack" ))
(subtle '("#797593" "#797593" "brightblack" ))
(text '("#575279" "#575279" "brightblack" ))
(love '("#b4637a" "#b4637a" "red" ))
(gold '("#ea9d34" "#ea9d34" "white" ))
(rose '("#d7827e" "#d7827e" "white" ))
(pine '("#286983" "#286983" "white" ))
(foam '("#56949f" "#56949f" "white" ))
(iris '("#907aa9" "#907aa9" "white" ))
(highlightL '("#f4ede8" "#f4ede8" "grey" ))
(highlightM '("#dfdad9" "#dfdad9" "grey" ))
(highlightH '("#cecacd" "#cecacd" "grey" ))
;; Variables required by doom theme
(bg base)
(fg text)
;; These are off-color variants of bg/fg, used primarily for `solaire-mode',
;; but can also be useful as a basis for subtle highlights (e.g. for hl-line
;; or region), especially when paired with the `doom-darken', `doom-lighten',
;; and `doom-blend' helper functions.
(bg-alt surface)
(fg-alt text)
;; These should represent a spectrum from bg to fg, where base0 is a starker
;; bg and base8 is a starker fg. For example, if bg is light grey and fg is
;; dark grey, base0 should be white and base8 should be black.
(base0 surface)
(base1 base)
(base2 highlightL)
(base3 overlay)
(base4 highlightM)
(base5 highlightH)
(base6 muted)
(base7 subtle)
(base8 text)
(grey muted)
(red love)
(orange gold)
(green pine)
(teal pine)
(yellow rose)
(blue pine)
(dark-blue pine)
(magenta iris)
(violet iris)
(cyan foam)
(dark-cyan foam)
;; Variables required by doom theme ends here
;; Required face categories for syntax highlighting
(highlight subtle) ; cursor
(selection base) ; can't figure out where this is used
(region overlay) ; visual selection
(vertical-bar surface) ; window split
(comments (if doom-rose-pine-dawn-brighter-comments subtle muted))
(doc-comments (if doom-rose-pine-dawn-brighter-comments subtle muted))
(builtin pine)
(constants iris)
(functions pine)
(keywords pine)
(methods foam)
(numbers rose)
(operators gold)
(strings gold)
(type rose)
(variables iris)
(error love)
(success foam)
(warning gold)
(vc-added foam)
(vc-deleted love)
(vc-modified gold)
;; Other categories
;; Modeline
(modeline-bg (if doom-rose-pine-dawn-brighter-modeline overlay surface))
(modeline-fg text)
(modeline-bg-alt (if doom-rose-pine-dawn-brighter-modeline muted overlay))
(modeline-fg-alt text) ; should this be darker or lighter?
(modeline-bg-inactive base)
(modeline-fg-inactive subtle)
(modeline-bg-inactive-alt base)
(modeline-fg-inactive-alt subtle)
(modeline-pad
(when doom-rose-pine-dawn-padded-modeline
if (integerp doom-rose-pine-dawn-padded-modeline) doom-rose-pine-padded-modeline 4)))
;; Base theme face overrides
(
;; Font
((font-lock-comment-face &override)
:slant 'italic
:background (if doom-rose-pine-dawn-brighter-comments (doom-blend teal base 0.07)))
((font-lock-type-face &override) :slant 'italic)
((font-lock-builtin-face &override) :slant 'italic)
((font-lock-function-name-face &override) :foreground type)
((font-lock-keyword-face &override) :weight 'bold)
((font-lock-constant-face &override) :weight 'bold)
;; Highlight line
(hl-line
:background highlightL)
;; Line numbers
((line-number &override) :foreground muted)
((line-number-current-line &override) :foreground text)
;; Mode line
(mode-line
:background modeline-bg
:foreground modeline-fg
:box (if modeline-pad `(:line-width ,modeline-pad :color ,modeline-bg)))
(mode-line-inactive
:background modeline-bg-inactive
:foreground modeline-fg-inactive
:box (if modeline-pad `(:line-width ,modeline-pad :color ,modeline-bg-inactive)))
(mode-line-emphasis
:foreground (if doom-rose-pine-dawn-brighter-modeline text subtle))
;; Company
(company-tooltip-selection :background blue :foreground muted)
;; CSS mode <built-in> / scss-mode
(css-proprietary-property :foreground orange)
(css-property :foreground green)
(css-selector :foreground green)
;; Doom mode line
(doom-modeline-bar :background green) ; The line to the left
(doom-modeline-evil-emacs-state :foreground magenta) ; The dot color when in emacs mode
(doom-modeline-evil-normal-state :foreground green) ; The dot color when in normal mode
(doom-modeline-evil-visual-state :foreground magenta) ; The dot color when in visual mode
(doom-modeline-evil-insert-state :foreground orange) ; The dot color when in insert mode
;; Helm
(helm-selection :foreground base :weight 'bold :background blue)
;; Ivy
(ivy-current-match :background highlightL :distant-foreground fg)
(ivy-minibuffer-match-face-1 :foreground pine :background nil :weight 'bold)
(ivy-minibuffer-match-face-2 :foreground iris :background nil :weight 'bold)
(ivy-minibuffer-match-face-3 :foreground gold :background nil :weight 'bold)
(ivy-minibuffer-match-face-4 :foreground rose :background nil :weight 'bold)
(ivy-minibuffer-match-highlight :foreground magenta :weight 'bold)
(ivy-posframe :background modeline-bg-alt)
;; Markdown mode
(markdown-markup-face :foreground text)
(markdown-header-face :inherit 'bold :foreground red)
((markdown-code-face &override) :background surface)
;; org <built-in>
(org-block :background (doom-blend yellow bg 0.04) :extend t)
(org-block-background :background (doom-blend yellow bg 0.04))
(org-block-begin-line :background (doom-blend yellow bg 0.08) :foreground comments :extend t)
(org-block-end-line :background (doom-blend yellow bg 0.08) :foreground comments :extend t)
(org-level-1 :foreground gold)
(org-level-2 :foreground rose)
(org-level-3 :foreground pine)
(org-level-4 :foreground iris)
(org-level-5 :foreground gold)
(org-level-6 :foreground rose)
(org-level-7 :foreground pine)
(org-level-8 :foreground iris)
;; Solaire mode line
(solaire-mode-line-face
:inherit 'mode-line
:background modeline-bg-alt
:box (if modeline-pad `(:line-width ,modeline-pad :color ,modeline-bg-alt)))
(solaire-mode-line-inactive-face
:inherit 'mode-line-inactive
:background modeline-bg-inactive-alt
:box (if modeline-pad `(:line-width ,modeline-pad :color ,modeline-bg-inactive-alt)))
;; Widget
(widget-field :foreground fg :background muted)
(widget-single-line-field :foreground fg :background muted)
;; Swiper
(swiper-line-face :background highlightM)
(swiper-match-face-1 :inherit 'ivy-minibuffer-match-face-1)
(swiper-match-face-2 :inherit 'ivy-minibuffer-match-face-2)
(swiper-match-face-3 :inherit 'ivy-minibuffer-match-face-3)
(swiper-match-face-4 :inherit 'ivy-minibuffer-match-face-4)))
;;; doom-rose-pine-dawn-theme.el ends here

View File

@@ -0,0 +1,244 @@
;;; doom-rose-pine-moon-theme.el --- A medium port of Rosé Pine Moon theme -*- lexical-binding: t; no-byte-compile: t; -*-
;;
;; Author: mvllow
;; Ported by: donniebreve
;; Keywords: custom themes, faces
;; Homepage: https://github.com/donniebreve/rose-pine-doom-emacs
;; Package-Requires: ((emacs "25.1") (cl-lib "0.5") (doom-themes "2.2.1"))
;;
;;; Commentary:
;;
;; Thanks to mvllow (https://github.com/rose-pine)
;; Thanks to hlissner (https://github.com/doomemacs/themes)
;;
;;; Code:
(require 'doom-themes)
;;; Variables
(defgroup doom-rose-pine-moon-theme nil
"Options for the `doom-rose-pine-moon' theme."
:group 'doom-themes)
(defcustom doom-rose-pine-moon-brighter-modeline nil
"If non-nil, more vivid colors will be used to style the mode-line."
:group 'doom-rose-pine-moon-theme
:type 'boolean)
(defcustom doom-rose-pine-moon-brighter-comments nil
"If non-nil, comments will be highlighted in more vivid colors."
:group 'doom-rose-pine-moon-theme
:type 'boolean)
(defcustom doom-rose-pine-moon-brighter-text nil
"If non-nil, default text will be brighter."
:group 'doom-rose-pine-moon-theme
:type 'boolean)
(defcustom doom-rose-pine-moon-padded-modeline doom-themes-padded-modeline
"If non-nil, adds a 4px padding to the mode-line. Can be an integer to determine the exact padding."
:group 'doom-rose-pine-moon-theme
:type '(choice integer boolean))
;;; Theme definition
(def-doom-theme doom-rose-pine-moon
"A medium port of Rosé Pine Moon theme"
;; Main theme colors
(
;; name default 256 16
(base '("#232136" "#232136" "black" ))
(surface '("#2a273f" "#2a273f" "brightblack" ))
(overlay '("#393552" "#393552" "brightblack" ))
(muted '("#6e6a86" "#6e6a86" "brightblack" ))
(subtle '("#908caa" "#908caa" "brightblack" ))
(text '("#e0def4" "#e0def4" "brightblack" ))
(love '("#eb6f92" "#eb6f92" "red" ))
(gold '("#f6c177" "#f6c177" "white" ))
(rose '("#ea9a97" "#ea9a97" "white" ))
(pine '("#3e8fb0" "#3e8fb0" "white" ))
(foam '("#9ccfd8" "#9ccfd8" "white" ))
(iris '("#c4a7e7" "#c4a7e7" "white" ))
(highlightL '("#2a283e" "#2a283e" "white" ))
(highlightM '("#44415a" "#44415a" "white" ))
(highlightH '("#56526e" "#56526e" "white" ))
;; Variables required by doom theme
;; These are required by doom theme and used in various places
(bg base)
(fg text)
;; These are off-color variants of bg/fg, used primarily for `solaire-mode',
;; but can also be useful as a basis for subtle highlights (e.g. for hl-line
;; or region), especially when paired with the `doom-darken', `doom-lighten',
;; and `doom-blend' helper functions.
(bg-alt surface)
(fg-alt text)
;; These should represent a spectrum from bg to fg, where base0 is a starker
;; bg and base8 is a starker fg. For example, if bg is light grey and fg is
;; dark grey, base0 should be white and base8 should be black.
(base0 base)
(base1 surface)
(base2 highlightL)
(base3 overlay)
(base4 highlightM)
(base5 highlightH)
(base6 muted)
(base7 subtle)
(base8 text)
(grey muted)
(red love)
(orange gold)
(green pine)
(teal foam)
(yellow rose)
(pink rose)
(blue pine)
(dark-blue pine)
(magenta iris)
(violet iris)
(cyan foam)
(dark-cyan pine)
;; Variables required by doom theme ends here
;; Required face categories for syntax highlighting
(highlight subtle) ; cursor
(selection base) ; can't figure out where this is used
(region overlay) ; visual selection
(vertical-bar surface) ; window split
(comments (if doom-rose-pine-moon-brighter-comments subtle muted))
(doc-comments (if doom-rose-pine-moon-brighter-comments subtle muted))
(builtin pine)
(constants iris)
(functions pine)
(keywords pine)
(methods foam)
(numbers rose)
(operators gold)
(strings gold)
(type rose)
(variables iris)
(error love)
(success foam)
(warning gold)
(vc-added foam)
(vc-deleted love)
(vc-modified gold)
;; Other categories
;; Modeline
(modeline-bg (if doom-rose-pine-moon-brighter-modeline overlay surface))
(modeline-fg text)
(modeline-bg-alt (if doom-rose-pine-moon-brighter-modeline muted overlay))
(modeline-fg-alt text) ; should this be darker or lighter?
(modeline-bg-inactive base)
(modeline-fg-inactive subtle)
(modeline-bg-inactive-alt base)
(modeline-fg-inactive-alt subtle)
(modeline-pad
(when doom-rose-pine-moon-padded-modeline
if (integerp doom-rose-pine-moon-padded-modeline) doom-rose-pine-padded-modeline 4)))
;; Base theme face overrides
(
;; Font
((font-lock-comment-face &override)
:slant 'italic
:background (if doom-rose-pine-moon-brighter-comments (doom-blend teal base 0.07)))
((font-lock-type-face &override) :slant 'italic)
((font-lock-builtin-face &override) :slant 'italic)
((font-lock-function-name-face &override) :foreground type)
((font-lock-keyword-face &override) :weight 'bold)
((font-lock-constant-face &override) :weight 'bold)
;; Highlight line
(hl-line
:background surface)
;; Line numbers
((line-number &override) :foreground muted)
((line-number-current-line &override) :foreground text)
;; Mode line
(mode-line
:background modeline-bg
:foreground modeline-fg
:box (if modeline-pad `(:line-width ,modeline-pad :color ,modeline-bg)))
(mode-line-inactive
:background modeline-bg-inactive
:foreground modeline-fg-inactive
:box (if modeline-pad `(:line-width ,modeline-pad :color ,modeline-bg-inactive)))
(mode-line-emphasis
:foreground (if doom-rose-pine-moon-brighter-modeline text subtle))
;; Company
(company-tooltip-selection :background blue :foreground muted)
;; CSS mode <built-in> / scss-mode
(css-proprietary-property :foreground orange)
(css-property :foreground green)
(css-selector :foreground green)
;; Doom mode line
(doom-modeline-bar :background green) ; The line to the left
(doom-modeline-evil-emacs-state :foreground magenta) ; The dot color when in emacs mode
(doom-modeline-evil-normal-state :foreground green) ; The dot color when in normal mode
(doom-modeline-evil-visual-state :foreground magenta) ; The dot color when in visual mode
(doom-modeline-evil-insert-state :foreground orange) ; The dot color when in insert mode
;; Helm
(helm-selection :foreground base :weight 'bold :background blue)
;; Ivy
(ivy-current-match :background overlay :distant-foreground fg)
(ivy-minibuffer-match-face-1 :foreground pine :background nil :weight 'bold)
(ivy-minibuffer-match-face-2 :foreground iris :background nil :weight 'bold)
(ivy-minibuffer-match-face-3 :foreground gold :background nil :weight 'bold)
(ivy-minibuffer-match-face-4 :foreground rose :background nil :weight 'bold)
(ivy-minibuffer-match-highlight :foreground magenta :weight 'bold)
(ivy-posframe :background modeline-bg-alt)
;; Markdown mode
(markdown-markup-face :foreground text)
(markdown-header-face :inherit 'bold :foreground red)
((markdown-code-face &override) :background surface)
;; org <built-in>
(org-block :background (doom-blend yellow bg 0.04) :extend t)
(org-block-background :background (doom-blend yellow bg 0.04))
(org-block-begin-line :background (doom-blend yellow bg 0.08) :foreground comments :extend t)
(org-block-end-line :background (doom-blend yellow bg 0.08) :foreground comments :extend t)
(org-level-1 :foreground gold)
(org-level-2 :foreground rose)
(org-level-3 :foreground pine)
(org-level-4 :foreground iris)
(org-level-5 :foreground gold)
(org-level-6 :foreground rose)
(org-level-7 :foreground pine)
(org-level-8 :foreground iris)
;; Solaire mode line
(solaire-mode-line-face
:inherit 'mode-line
:background modeline-bg-alt
:box (if modeline-pad `(:line-width ,modeline-pad :color ,modeline-bg-alt)))
(solaire-mode-line-inactive-face
:inherit 'mode-line-inactive
:background modeline-bg-inactive-alt
:box (if modeline-pad `(:line-width ,modeline-pad :color ,modeline-bg-inactive-alt)))
;; Widget
(widget-field :foreground fg :background muted)
(widget-single-line-field :foreground fg :background muted)
;; Swiper
(swiper-line-face :background highlightM)
(swiper-match-face-1 :inherit 'ivy-minibuffer-match-face-1)
(swiper-match-face-2 :inherit 'ivy-minibuffer-match-face-2)
(swiper-match-face-3 :inherit 'ivy-minibuffer-match-face-3)
(swiper-match-face-4 :inherit 'ivy-minibuffer-match-face-4)))
;;; doom-rose-pine-moon-theme.el ends here

View File

@@ -0,0 +1,242 @@
;;; doom-rose-pine-theme.el --- A dark port of Rosé Pine theme -*- lexical-binding: t; no-byte-compile: t; -*-
;;
;; Author: mvllow
;; Ported by: donniebreve
;; Keywords: custom themes, faces
;; Homepage: https://github.com/donniebreve/rose-pine-doom-emacs
;; Package-Requires: ((emacs "25.1") (cl-lib "0.5") (doom-themes "2.2.1"))
;;
;;; Commentary:
;;
;; Thanks to mvllow (https://github.com/rose-pine)
;; Thanks to hlissner (https://github.com/doomemacs/themes)
;;
;;; Code:
(require 'doom-themes)
;;; Variables
(defgroup doom-rose-pine-theme nil
"Options for the `doom-rose-pine' theme."
:group 'doom-themes)
(defcustom doom-rose-pine-brighter-modeline nil
"If non-nil, more vivid colors will be used to style the mode-line."
:group 'doom-rose-pine-theme
:type 'boolean)
(defcustom doom-rose-pine-brighter-comments nil
"If non-nil, comments will be highlighted in more vivid colors."
:group 'doom-rose-pine-theme
:type 'boolean)
(defcustom doom-rose-pine-brighter-text nil
"If non-nil, default text will be brighter."
:group 'doom-rose-pine-theme
:type 'boolean)
(defcustom doom-rose-pine-padded-modeline doom-themes-padded-modeline
"If non-nil, adds a 4px padding to the mode-line. Can be an integer to determine the exact padding."
:group 'doom-rose-pine-theme
:type '(choice integer boolean))
;;; Theme definition
(def-doom-theme doom-rose-pine
"A dark port of Rosé Pine theme"
;; Main theme colors
(
;; name default 256 16
(base '("#191724" "#191724" "black" ))
(surface '("#1f1d2e" "#1f1d2e" "brightblack" ))
(overlay '("#26233a" "#26233a" "brightblack" ))
(muted '("#6e6a86" "#6e6a86" "brightblack" ))
(subtle '("#908caa" "#908caa" "brightblack" ))
(text '("#e0def4" "#e0def4" "brightblack" ))
(love '("#eb6f92" "#eb6f92" "red" ))
(gold '("#f6c177" "#f6c177" "white" ))
(rose '("#ebbcba" "#ebbcba" "white" ))
(pine '("#31748f" "#31748f" "white" ))
(foam '("#9ccfd8" "#9ccfd8" "white" ))
(iris '("#c4a7e7" "#c4a7e7" "white" ))
(highlightL '("#21202e" "#21202e" "grey" ))
(highlightM '("#403d52" "#403d52" "grey" ))
(highlightH '("#524f67" "#524f67" "grey" ))
;; Variables required by doom theme
;; These are required by doom theme and used in various places
(bg base)
(fg text)
;; These are off-color variants of bg/fg, used primarily for `solaire-mode',
;; but can also be useful as a basis for subtle highlights (e.g. for hl-line
;; or region), especially when paired with the `doom-darken', `doom-lighten',
;; and `doom-blend' helper functions.
(bg-alt surface)
(fg-alt text)
;; These should represent a spectrum from bg to fg, where base0 is a starker
;; bg and base8 is a starker fg. For example, if bg is light grey and fg is
;; dark grey, base0 should be white and base8 should be black.
(base0 base)
(base1 surface)
(base2 highlightL)
(base3 overlay)
(base4 highlightM)
(base5 highlightH)
(base6 muted)
(base7 subtle)
(base8 text)
(grey muted)
(red love)
(orange gold)
(green pine)
(teal pine)
(yellow rose)
(blue pine)
(dark-blue pine)
(magenta iris)
(violet iris)
(cyan foam)
(dark-cyan foam)
;; Variables required by doom theme ends here
;; Required face categories for syntax highlighting
(highlight subtle) ; cursor
(selection base) ; can't figure out where this is used
(region overlay) ; visual selection
(vertical-bar surface) ; window split
(comments (if doom-rose-pine-brighter-comments subtle muted))
(doc-comments (if doom-rose-pine-brighter-comments subtle muted))
(builtin pine)
(constants iris)
(functions pine)
(keywords pine)
(methods foam)
(numbers rose)
(operators gold)
(strings gold)
(type rose)
(variables iris)
(error love)
(success foam)
(warning gold)
(vc-added foam)
(vc-deleted love)
(vc-modified gold)
;; Other categories
;; Modeline
(modeline-bg (if doom-rose-pine-brighter-modeline overlay surface))
(modeline-fg text)
(modeline-bg-alt (if doom-rose-pine-brighter-modeline muted overlay))
(modeline-fg-alt text) ; should this be darker or lighter?
(modeline-bg-inactive base)
(modeline-fg-inactive subtle)
(modeline-bg-inactive-alt base)
(modeline-fg-inactive-alt subtle)
(modeline-pad
(when doom-rose-pine-padded-modeline
if (integerp doom-rose-pine-padded-modeline) doom-rose-pine-padded-modeline 4)))
;; Base theme face overrides
(
;; Font
((font-lock-comment-face &override)
:slant 'italic
:background (if doom-rose-pine-brighter-comments (doom-blend teal base 0.07)))
((font-lock-type-face &override) :slant 'italic)
((font-lock-builtin-face &override) :slant 'italic)
((font-lock-function-name-face &override) :foreground type)
((font-lock-keyword-face &override) :weight 'bold)
((font-lock-constant-face &override) :weight 'bold)
;; Highlight line
(hl-line
:background surface)
;; Line numbers
((line-number &override) :foreground muted)
((line-number-current-line &override) :foreground text)
;; Mode line
(mode-line
:background modeline-bg
:foreground modeline-fg
:box (if modeline-pad `(:line-width ,modeline-pad :color ,modeline-bg)))
(mode-line-inactive
:background modeline-bg-inactive
:foreground modeline-fg-inactive
:box (if modeline-pad `(:line-width ,modeline-pad :color ,modeline-bg-inactive)))
(mode-line-emphasis
:foreground (if doom-rose-pine-brighter-modeline text subtle))
;; Company
(company-tooltip-selection :background blue :foreground muted)
;; CSS mode <built-in> / scss-mode
(css-proprietary-property :foreground orange)
(css-property :foreground green)
(css-selector :foreground green)
;; Doom mode line
(doom-modeline-bar :background green) ; The line to the left
(doom-modeline-evil-emacs-state :foreground magenta) ; The dot color when in emacs mode
(doom-modeline-evil-normal-state :foreground green) ; The dot color when in normal mode
(doom-modeline-evil-visual-state :foreground magenta) ; The dot color when in visual mode
(doom-modeline-evil-insert-state :foreground orange) ; The dot color when in insert mode
;; Helm
(helm-selection :foreground base :weight 'bold :background blue)
;; Ivy
(ivy-current-match :background overlay :distant-foreground fg)
(ivy-minibuffer-match-face-1 :foreground pine :background nil :weight 'bold)
(ivy-minibuffer-match-face-2 :foreground iris :background nil :weight 'bold)
(ivy-minibuffer-match-face-3 :foreground gold :background nil :weight 'bold)
(ivy-minibuffer-match-face-4 :foreground rose :background nil :weight 'bold)
(ivy-minibuffer-match-highlight :foreground magenta :weight 'bold)
(ivy-posframe :background modeline-bg-alt)
;; Markdown mode
(markdown-markup-face :foreground text)
(markdown-header-face :inherit 'bold :foreground red)
((markdown-code-face &override) :background surface)
;; org <built-in>
(org-block :background (doom-blend yellow bg 0.04) :extend t)
(org-block-background :background (doom-blend yellow bg 0.04))
(org-block-begin-line :background (doom-blend yellow bg 0.08) :foreground comments :extend t)
(org-block-end-line :background (doom-blend yellow bg 0.08) :foreground comments :extend t)
(org-level-1 :foreground gold)
(org-level-2 :foreground rose)
(org-level-3 :foreground pine)
(org-level-4 :foreground iris)
(org-level-5 :foreground gold)
(org-level-6 :foreground rose)
(org-level-7 :foreground pine)
(org-level-8 :foreground iris)
;; Solaire mode line
(solaire-mode-line-face
:inherit 'mode-line
:background modeline-bg-alt
:box (if modeline-pad `(:line-width ,modeline-pad :color ,modeline-bg-alt)))
(solaire-mode-line-inactive-face
:inherit 'mode-line-inactive
:background modeline-bg-inactive-alt
:box (if modeline-pad `(:line-width ,modeline-pad :color ,modeline-bg-inactive-alt)))
;; Widget
(widget-field :foreground fg :background muted)
(widget-single-line-field :foreground fg :background muted)
;; Swiper
(swiper-match-face-1 :inherit 'ivy-minibuffer-match-face-1)
(swiper-match-face-2 :inherit 'ivy-minibuffer-match-face-2)
(swiper-match-face-3 :inherit 'ivy-minibuffer-match-face-3)
(swiper-match-face-4 :inherit 'ivy-minibuffer-match-face-4)))
;;; doom-rose-pine-theme.el ends here

View File

@@ -18,5 +18,7 @@ font-thicken = true
theme = light:Dawnfox,dark:Carbonfox
# theme = Monokai Classic
# window-decoration = false
# gtk-adwaita = false
# gtk-adwaita = true
window-decoration = true
shell-integration-features = true
mouse-scroll-multiplier = 1

View File

@@ -1,9 +1,9 @@
# lua
[language.lua.grammar.source.git]
[lua.grammar.source.git]
url = "https://github.com/tree-sitter-grammars/tree-sitter-lua"
pin = "88e446476a1e97a8724dff7a23e2d709855077f2"
[language.lua.grammar]
[lua.grammar]
path = "src"
compile = "cc"
compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."]
@@ -44,11 +44,11 @@ path = "runtime/queries/lua"
# path = "runtime/queries/clojure"
#ocaml
[language.ocaml.grammar.source.git]
[ocaml.grammar.source.git]
url = "https://github.com/tree-sitter/tree-sitter-ocaml"
pin = "ef6ed4a773a260545f0b03c43d2ca78235e9a488"
[language.ocaml.grammar]
[ocaml.grammar]
path = "grammars/ocaml/src"
compile = "cc"
compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."]
@@ -65,11 +65,11 @@ pin = "6bedca80646ce7350fb73029adf802ce7d9e241d"
path = "runtime/queries/ocaml"
# typst
[language.typst.grammar.source.git]
[typst.grammar.source.git]
url = "https://github.com/uben0/tree-sitter-typst"
pin = "46cf4ded12ee974a70bf8457263b67ad7ee0379d"
[language.typst.grammar]
[typst.grammar]
path = "src"
compile = "cc"
compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."]
@@ -86,11 +86,11 @@ pin = "46cf4ded12ee974a70bf8457263b67ad7ee0379d"
path = "queries/typst"
# swift
[language.swift.grammar.source.git]
[swift.grammar.source.git]
url = "https://github.com/alex-pinkus/tree-sitter-swift"
pin = "57c1c6d6ffa1c44b330182d41717e6fe37430704"
[language.swift.grammar]
[swift.grammar]
path = "src"
compile = "cc"
compile_args = ["-c", "-fpic", "../scanner.c", "-I", ".."]

View File

@@ -112,39 +112,6 @@ add-highlighter global/ wrap -word -indent
# }
# }
# hook global -group autofmt BufSetOption filetype=(javascript) %{
# set-option buffer formatcmd 'prettier --tab-width 4 --parser typescript'
#
# hook -group autofmt buffer BufOpenFile .* %{
# format
# }
#
# hook -group autofmt buffer BufWritePre .* %{
# format
# }
# }
#
# hook global -group autofmt BufSetOption filetype=(go) %{
# set-option buffer formatcmd 'gofmt'
#
# hook -group autofmt buffer BufOpenFile .* %{
# format
# }
#
# hook -group autofmt buffer BufWritePre .* %{
# format
# }
# }
# }
#
# define-command disable-autofmt -docstring 'disable autoformatting of buffer' %{
# remove-hooks global autofmt
# }
#
# enable-autofmt
#
#
#
## Indentation ##
set global tabstop 4
set global indentwidth 4
@@ -453,7 +420,7 @@ define-command -docstring 'paste from clipboard' xpaste %{
declare-user-mode config
map -docstring 'enter config mode' global user e ':enter-user-mode config<ret>'
map -docstring 'edit kakoune config' global config k ':cd ~/.config/kak/<ret>:e ./kakrc<ret>'
map -docstring 'edit kakoune config' global config k ':e ~/.config/kak/kakrc<ret>'
map -docstring 'edit tmux config' global config t ':e ~/.tmux.conf<ret>'
map -docstring 'edit bash config' global config b ':e ~/.bashrc<ret>'
map -docstring 'edit scripts folder' global config s ':cd ~/.scripts<ret>:fzf-edit<ret>'
@@ -517,4 +484,10 @@ map -docstring 'next spell check' global spell n ':spell-next<ret>'
map -docstring 'spell check replacements' global spell r ':spell-replace<ret>'
map -docstring 'quit kakoune' global user q ':q!<ret>'
try %{
colorscheme %sh{
ruby -e "time = Time.new; if time.hour < 20 and time.hour > 6 then puts 'dawnfox' else puts 'carbonfox' end"
}
} catch %{
colorscheme carbonfox
}

View File

@@ -18,6 +18,8 @@ bind-key G end
podlist-format "%2i %b %> %S [%dMB / %tMB] [%p %%] [%K]"
download-filename-format "%t | %n [%F].%e"
download-path "~/podcasts/%n/"
browser "cha %u"
html-renderer "cha -T text/html -d -o display.color-mode=\"true-color\" -o buffer.mark-links=true"
macro 1 set browser "curl %u --output /tmp/image && sxiv /tmp/image && rm /tmp/image"; one; set browser lynx
macro 2 set browser "mpv --vid=no -- %u"; one; set browser lynx

View File

@@ -1,4 +1,5 @@
https://phaazon.net/blog/feed
https://port19.xyz/rss.xml
https://danielde.dev/rss.xml
https://sizeof.cat/index.xml
https://pkolaczk.github.io/feed.xml

View File

@@ -51,12 +51,11 @@
"oceanic-next": { "branch": "master", "commit": "09833f72d5ba23de2e8bcae18f479f326f5f677a" },
"oil.nvim": { "branch": "master", "commit": "7e1cd7703ff2924d7038476dcbc04b950203b902" },
"one-nvim": { "branch": "main", "commit": "faf6fb3f98fccbe009c3466f657a8fff84a5f956" },
"onedark.nvim": { "branch": "master", "commit": "de495fabe171d48aed5525f002d14414efcecbb2" },
"pathlib.nvim": { "branch": "main", "commit": "57e5598af6fe253761c1b48e0b59b7cd6699e2c1" },
"onedark.nvim": { "branch": "master", "commit": "6c10964f91321c6a0f09bcc41dd64e7a6602bc4f" },
"plantuml-syntax": { "branch": "master", "commit": "9d4900aa16674bf5bb8296a72b975317d573b547" },
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
"range-highlight.nvim": { "branch": "master", "commit": "f54aec737f138e52c187a8bea77b41347fd86f12" },
"rose-pine": { "branch": "main", "commit": "72a04c4065345b51b56aed4859ea1d884f734097" },
"rose-pine": { "branch": "main", "commit": "eb3ff49a4f2b4e8b06d27de529e44fa52a60ab8a" },
"sherbet.nvim": { "branch": "master", "commit": "5c4166eff70ec551ae0023edfb89141b25cc18c6" },
"snacks.nvim": { "branch": "main", "commit": "59c5545e91878c1f6218b032a881832bc98a46f3" },
"telescope-tabs": { "branch": "vim_ui_select", "commit": "f01bc722582fdcaa58ea37492b382ff109893d95" },

View File

@@ -5,7 +5,7 @@ end
setnx('<leader>ff', Snacks.picker.files, 'Find files')
setnx('<leader>f/', Snacks.picker.grep_word, 'Search current word')
setnx('<leader>f?', Snacks.picker.grep, 'Search in files')
setnx('<leader>fg', Snacks.picker.grep, 'Search in files')
setnx('<leader>fr', Snacks.picker.recent, 'Find recent files')
setnx('<leader>b', Snacks.picker.buffers, 'List buffers')
setnx('<leader>h', Snacks.picker.help, 'Search help')
@@ -42,7 +42,7 @@ setnx('`', '\'', 'Goto mark without column')
setnx('<leader>x', '<CMD>bd!<CR>', 'Close Current Buffer')
setnx('grR', Snacks.picker.lsp_references, 'Search lsp references')
setnx('grr', Snacks.picker.lsp_references, 'Search lsp references')
-- setnx('grI', tele.lsp_incoming_calls, 'Find incoming function calls')
-- setnx('grO', tele.lsp_outgoing_calls, 'Find outgoing function calls')
setnx('grd', Snacks.picker.diagnostics, 'Show LSP diagnostics')

View File

@@ -44,7 +44,7 @@ vim.g.mapleader = ' '
vim.g.neovide_scale_factor = 1.0
vim.g.neovide_theme = 'auto'
vim.g.neovide_transparency = 1.0
vim.g.neovide_opacity = 1.0
function ChangeScaleFactor(delta)
vim.g.neovide_scale_factor = vim.g.neovide_scale_factor * delta
end
@@ -56,7 +56,7 @@ vim.keymap.set('n', '<C-->', function()
ChangeScaleFactor(1 / 1.25)
end)
vim.opt.guifont = { 'Iosevka Term SS12', ':h12' }
vim.opt.guifont = { 'Iosevka Term SS12', ':h14' }
vim.opt.termguicolors = true
vim.g.netrw_keepdir = 0

View File

@@ -49,5 +49,16 @@ return {
version = "*", -- Pin Neorg to the latest stable release
config = true,
},
-- {
-- "Olical/conjure"
-- },
{
"vlime/vlime",
config = function(plugin)
vim.opt.rtp:append(plugin.dir .. '/vim/')
end
},
}

View File

@@ -71,6 +71,9 @@ return {
},
-- (Default) Only show the documentation popup when manually triggered
completion = {
trigger = {
show_on_insert = true
},
documentation = { auto_show = false },
list = {
selection = {

View File

@@ -8,6 +8,14 @@ return {
config = function()
require'nvim-treesitter.configs'.setup {
textobjects = {
select = {
enable = true,
lookahead = true,
keymaps = {
["af"] = "@function.outer",
["if"] = "@function.inner",
}
},
move = {
enable = true,
set_jumps = false,

View File

@@ -157,6 +157,10 @@ return {
-- `z` key
{ mode = 'n', keys = 'z' },
{ mode = 'x', keys = 'z' },
-- Localleader
{ mode = 'n', keys = '<Localleader>'},
{ mode = 'x', keys = '<Localleader>'},
},
clues = {
@@ -189,6 +193,8 @@ return {
triggers = {
{ 'g', mode = { 'n', 'x' } },
},
skip_confirm_for_simple_edits = true,
prompt_save_on_select_new_entry = false,
},
-- Optional dependencies
dependencies = { "nvim-tree/nvim-web-devicons" }, -- use if you prefer nvim-web-devicons
@@ -245,85 +251,98 @@ return {
event = 'VeryLazy',
},
-- {
-- "jake-stewart/multicursor.nvim",
-- branch = "1.0",
-- config = function()
-- local mc = require("multicursor-nvim")
-- mc.setup()
--
-- local set = vim.keymap.set
--
-- -- Add or skip cursor above/below the main cursor.
-- set({"n", "x"}, "<up>", function() mc.lineAddCursor(-1) end)
-- set({"n", "x"}, "<down>", function() mc.lineAddCursor(1) end)
-- -- set({"n", "x"}, "<leader><up>", function() mc.lineSkipCursor(-1) end)
-- -- set({"n", "x"}, "<leader><down>", function() mc.lineSkipCursor(1) end)
--
-- -- Add or skip adding a new cursor by matching word/selection
-- -- set({"n", "x"}, "<leader>n", function() mc.matchAddCursor(1) end)
-- -- set({"n", "x"}, "<leader>s", function() mc.matchSkipCursor(1) end)
-- -- set({"n", "x"}, "<leader>N", function() mc.matchAddCursor(-1) end)
-- -- set({"n", "x"}, "<leader>S", function() mc.matchSkipCursor(-1) end)
--
-- -- Add cursor at next argument treesitter
-- set({'n', 'x'}, ']A', function()
-- if vim.v.count < 1 then
-- mc.addCursor(']a')
-- else
-- for i=1, vim.v.count - 1 do
-- mc.addCursor(']a')
-- end
-- end
-- end, { desc = 'Create multicursor on next argument'})
-- set({'n', 'x'}, '[A', function()
-- if vim.v.count < 1 then
-- mc.addCursor('[a')
-- else
-- for i=1, vim.v.count - 1 do
-- mc.addCursor('[a')
-- end
-- end
-- end, { desc = 'Create multicursor on previous argument'})
--
-- -- Add and remove cursors with control + left click.
-- set("n", "<c-leftmouse>", mc.handleMouse)
-- set("n", "<c-leftdrag>", mc.handleMouseDrag)
-- set("n", "<c-leftrelease>", mc.handleMouseRelease)
--
-- -- Disable and enable cursors.
-- set({"n", "x"}, "<c-q>", mc.toggleCursor)
--
-- -- Mappings defined in a keymap layer only apply when there are
-- -- multiple cursors. This lets you have overlapping mappings.
-- mc.addKeymapLayer(function(layerSet)
--
-- -- Select a different cursor as the main one.
-- layerSet({"n", "x"}, "<left>", mc.prevCursor)
-- layerSet({"n", "x"}, "<right>", mc.nextCursor)
--
-- -- Delete the main cursor.
-- layerSet({"n", "x"}, "<leader>x", mc.deleteCursor)
--
-- -- Enable and clear cursors using escape.
-- layerSet("n", "<esc>", function()
-- if not mc.cursorsEnabled() then
-- mc.enableCursors()
-- else
-- mc.clearCursors()
-- end
-- end)
-- end)
--
-- -- Customize how cursors look.
-- local hl = vim.api.nvim_set_hl
-- hl(0, "MultiCursorCursor", { reverse = true })
-- hl(0, "MultiCursorVisual", { link = "Visual" })
-- hl(0, "MultiCursorSign", { link = "SignColumn"})
-- hl(0, "MultiCursorMatchPreview", { link = "Search" })
-- hl(0, "MultiCursorDisabledCursor", { reverse = true })
-- hl(0, "MultiCursorDisabledVisual", { link = "Visual" })
-- hl(0, "MultiCursorDisabledSign", { link = "SignColumn"})
-- end
-- },
{
"jake-stewart/multicursor.nvim",
branch = "1.0",
config = function()
local mc = require("multicursor-nvim")
mc.setup()
local set = vim.keymap.set
-- Add or skip cursor above/below the main cursor.
set({"n", "x"}, "<localleader>k", function() mc.lineAddCursor(-1) end, { desc = "Add cursor to previous line" })
set({"n", "x"}, "<localleader>j", function() mc.lineAddCursor(1) end, { desc = "Add cursor to next line" })
set({"n", "x"}, "<up>", function() mc.lineAddCursor(-1) end, { desc = "Add cursor to previous line" })
set({"n", "x"}, "<down>", function() mc.lineAddCursor(1) end, { desc = "Add cursor to next line" })
set({"n", "x"}, "<localleader>K", function() mc.lineSkipCursor(-1) end, { desc = "Skip previous line to add cursor" })
set({"n", "x"}, "<localleader>J", function() mc.lineSkipCursor(1) end, { desc = "Skip next line to add cursor" })
-- Add or skip adding a new cursor by matching word/selection
set({"n", "x"}, "<localleader>n", function() mc.matchAddCursor(1) end, { desc = "Add cursor to next currently selected word" })
set({"n", "x"}, "<localleader>s", function() mc.matchSkipCursor(1) end, { desc = "Skip next instance of current word to add cursor" })
set({"n", "x"}, "<localleader>N", function() mc.matchAddCursor(-1) end, { desc = "Add cursor to previous currently selected word" })
set({"n", "x"}, "<localleader>S", function() mc.matchSkipCursor(-1) end, { desc = "Skip previous instance of current word to add cursor" })
set({"n", "x"}, "<localleader>m", mc.operator, { desc = "Add cursors to text object" })
set("n", "<localleader>s", function()
vim.ui.input({prompt = "Match: "}, function(input) mc.operator({pattern = input}) end)
end, { desc = "Add cursors to regex match inside text object " })
set("n", "<localleader>*", function()
mc.operator({pattern = vim.fn.expand("<cword>")})
end, { desc = "Add cursors to current word inside text object" })
set("x", "<localleader>s", mc.matchCursors, { desc = "Add cursors to regex match inside visual selection" })
-- Add cursor at next argument treesitter
set({'n', 'x'}, ']A', function()
if vim.v.count < 1 then
mc.addCursor(']a')
else
for _=1, vim.v.count - 1 do
mc.addCursor(']a')
end
end
end, { desc = 'Create multicursor on next argument'})
set({'n', 'x'}, '[A', function()
if vim.v.count < 1 then
mc.addCursor('[a')
else
for _=1, vim.v.count - 1 do
mc.addCursor('[a')
end
end
end, { desc = 'Create multicursor on previous argument'})
-- Add and remove cursors with control + left click.
set("n", "<c-leftmouse>", mc.handleMouse)
set("n", "<c-leftdrag>", mc.handleMouseDrag)
set("n", "<c-leftrelease>", mc.handleMouseRelease)
-- Disable and enable cursors.
set({"n", "x"}, "<c-q>", mc.toggleCursor, { desc = "Toggle multiple cursors" })
-- Mappings defined in a keymap layer only apply when there are
-- multiple cursors. This lets you have overlapping mappings.
mc.addKeymapLayer(function(layerSet)
-- Select a different cursor as the main one.
layerSet({"n", "x"}, "<localleader>h", mc.prevCursor, { desc = "Make previous cursor primary" })
layerSet({"n", "x"}, "<localleader>l", mc.nextCursor, { desc = "Make next cursor primary" })
layerSet({"n", "x"}, "<left>", mc.prevCursor, { desc = "Make previous cursor primary" })
layerSet({"n", "x"}, "<right>", mc.nextCursor, { desc = "Make next cursor primary" })
-- Delete the main cursor.
layerSet({"n", "x"}, "<localleader>x", mc.deleteCursor)
-- Enable and clear cursors using escape.
layerSet("n", "<esc>", function()
if not mc.cursorsEnabled() then
mc.enableCursors()
else
mc.clearCursors()
end
end)
end)
-- Customize how cursors look.
local hl = vim.api.nvim_set_hl
hl(0, "MultiCursorCursor", { reverse = true })
hl(0, "MultiCursorVisual", { link = "Visual" })
hl(0, "MultiCursorSign", { link = "SignColumn"})
hl(0, "MultiCursorMatchPreview", { link = "Search" })
hl(0, "MultiCursorDisabledCursor", { reverse = true })
hl(0, "MultiCursorDisabledVisual", { link = "Visual" })
hl(0, "MultiCursorDisabledSign", { link = "SignColumn"})
end
},
}

View File

@@ -0,0 +1,83 @@
## oama version 0.22.0 - 2025-08-29 0290.e419ef10
## This is a YAML configuration file, indentation matters.
## Double ## indicates comments while single # default values.
## Not all defaults are shown, for full list run `oama printenv`
## and look at the `services:` section.
## Possible options for keeping refresh and access tokens:
## GPG - in a gpg encrypted file $XDG_STATE_HOME/oama/<email-address>.oauth
## (XDG_STATE_HOME defaults to ~/.local/state)
## GPG - in a gpg encrypted file ~/.local/state/oama/<email-address>.oauth
## KEYRING - in the keyring of a password manager with Secret Service API
##
## Choose exactly one.
encryption:
tag: KEYRING
# encryption:
# tag: GPG
# contents: your-KEY-ID
## Builtin service providers
## - google
## - microsoft
## Required fields: client_id, client_secret
##
services:
google:
client_id: application-CLIENT-ID
client_secret: application-CLIENT-SECRET
## Alternatively get them from a password manager using a shell command.
## If both variants are present then the _cmd versions get the priority.
## For example:
# client_id_cmd: |
# pass email/my-app | head -1
# client_secret_cmd: |
# pass email/my-app | head -2 | tail -1
# auth_scope: https://mail.google.com/
# microsoft:
# client_id: 08162f7c-0fd2-4200-a84a-f25a4db0b584 # notsecret
# client_secret: 'TxRBilcHdC6WGBee]fs?QR:SJ8nI[g82' # notsecret
# auth_scope: https://outlook.365office.com/IMAP.AccessAsUser.All
# https://outlook.365office.com/SMTP.Send
# offline_access
# tenant: common
# prompt: select_account
#
microsoft:
# client_id: 08162f7c-0fd2-4200-a84a-f25a4db0b584 # notsecret
# client_secret: 'TxRBilcHdC6WGBee]fs?QR:SJ8nI[g82' # notsecret
client_id: '9e5f94bc-e8a4-4e73-b8be-63364c29d753'
auth_scope: https://outlook.office.com/IMAP.AccessAsUser.All
https://outlook.office.com/POP.AccessAsUser.All
https://outlook.office.com/SMTP.Send
offline_access
tenant: common
prompt: select_account
## client_secret is not needed for device code flow
# auth_endpoint: https://login.microsoftonline.com/common/oauth2/v2.0/devicecode
##
## client_secret might be needed for other authorization flows
# client_secret: application-CLIENT_SECRET
## auth_endpoint: https://login.microsoftonline.com/common/oauth2/v2.0/authorize
#
# auth_scope: https://outlook.office.com/IMAP.AccessAsUser.All
# https://outlook.office.com/SMTP.Send
# offline_access
# tenant: common
## User configured providers
## Required fields: client_id, client_secret, auth_endpoint, auth_scope, token_endpoint
##
## For example:
# yahoo:
# client_id: application-CLIENT-ID
# client_id_cmd: |
# password manager command ...
# client_secret: application-CLIENT_SECRET
# client_secret_cmd: |
# password manager command ...
# auth_endpoint: EDIT-ME!
# auth_scope: EDIT-ME!
# token_endpoint: EDIT-ME!

View File

@@ -10,8 +10,8 @@
## qute://help/configuring.html
## qute://help/settings.htm
##
import rosepine
rosepine.setup(c, 'rose-pine-moon', True)
# import rosepine
# rosepine.setup(c, 'rose-pine-moon', True)
## This is here so configs done via the GUI are still loaded.
## Remove it to not load settings done via the GUI.

View File

@@ -0,0 +1 @@
;;; -*- lexical-binding: t -*-

View File

@@ -0,0 +1,69 @@
;;; emacs.el --- Description -*- lexical-binding: t; -*-
;;
;; Copyright (C) 2026 Michael Chalupiak
;;
;; Author: Michael Chalupiak <mikec@archbox>
;; Maintainer: Michael Chalupiak <mikec@archbox>
;; Created: January 15, 2026
;; Modified: January 15, 2026
;; Version: 0.0.1
;; Keywords: abbrev bib c calendar comm convenience data docs emulations extensions faces files frames games hardware help hypermedia i18n internal languages lisp local maint mail matching mouse multimedia news outlines processes terminals tex text tools unix vc wp
;; Homepage: https://github.com/mikec/emacs
;; Package-Requires: ((emacs "30.1"))
;;
;; This file is not part of GNU Emacs.
;;
;;; Commentary:
;;
;; Description
;;
;;; Code:
(set-face-attribute 'default nil
:width 'normal :weight 'normal
:slant 'normal :font (font-spec :family "Iosevka Term SS12" :size 18))
(set-face-attribute 'fixed-pitch nil
:width 'normal :weight 'normal
:slant 'normal :font (font-spec :family "Iosevka Term SS12" :size 18))
(set-face-attribute 'variable-pitch nil
:width 'normal :weight 'normal
:slant 'normal :font (font-spec :family "Gentium Plus" :size 18))
(defconst default-mode-line-format (copy-sequence mode-line-format))
(setq history-length 100
global-auto-revert-non-file-buffers t
use-dialog-box nil
custom-safe-themes t
make-backup-files nil
read-file-name-completion-ignore-case t
tab-always-indent nil
display-buffer-alist '(
("\\*elfeed-.*\\*" (display-buffer-same-window))))
(setq-default
indent-tabs-mode nil
tab-width 4
tab-stop-list (number-sequence 4 400 4))
(customize-set-variable 'treesit-font-lock-level 4)
(column-number-mode t)
(global-display-line-numbers-mode t)
;(global-display-fill-column-indicator-mode t)
(recentf-mode 1)
(savehist-mode 1)
(save-place-mode 1)
(global-auto-revert-mode 1)
(context-menu-mode 1)
(electric-pair-mode 1)
(electric-indent-mode 1)
;; (enable-recursive-minibuffers t)
;; (read-extended-command-predicate #'command-completion-default-include-p)
;; Disable line numbers for some modes
;; (dolist (mode '(org-mode-hook
;; eshell-mode-hook))
;; (add-hook mode (lambda ()
;; (display-line-numbers-mode 0)
;; (display-fill-column-indicator-mode 0)
;; ())))
(provide 'emacs)
;;; emacs.el ends here

View File

@@ -0,0 +1,44 @@
;;; -*- lexical-binding: t; -*-
(global-set-key (kbd "C-c f") #'consult-fd)
(global-set-key (kbd "C-c C-f") #'find-file-at-point)
(global-set-key (kbd "C-c r") #'recentf)
(global-set-key (kbd "C-c x") #'kill-current-buffer)
(global-set-key (kbd "C-c X") (lambda () (interactive) (other-window 1) (kill-buffer-and-window)))
(global-set-key (kbd "C-c g") #'consult-ripgrep)
(global-set-key (kbd "C-c L") #'consult-line)
(global-set-key (kbd "C-c i") #'consult-info)
(global-set-key (kbd "C-c s") #'ispell-word)
(global-set-key (kbd "C-c t") #'load-theme)
(global-set-key (kbd "C-c C-c") #'compile)
(global-set-key (kbd "C-c d") #'dictionary-define-word)
(global-set-key (kbd "C-c D") #'dictionary)
(global-set-key (kbd "C-c l a") #'eglot-code-actions)
(global-set-key (kbd "C-c l f") #'apheleia-format-buffer)
(global-set-key (kbd "C-c l n") #'eglot-rename)
(global-set-key (kbd "C-c l s") #'consult-eglot-symbols)
(global-set-key (kbd "C-c l r") #'xref-find-references)
(global-set-key (kbd "C-c l d") #'xref-find-definitions)
(global-set-key (kbd "C-c l D") #'eglot-find-declaration)
(global-set-key (kbd "C-c l i") #'eglot-find-implementation)
(global-set-key (kbd "C-c l t") #'eglot-find-typeDefinition)
(global-set-key (kbd "C-c b") #'ibuffer)
(global-set-key (kbd "C-c k") #'eldoc)
(global-set-key (kbd "C-c m") #'man)
(global-set-key (kbd "C-c o c") (lambda () (interactive) (dired user-init-dir)))
(global-set-key (kbd "C-c o t") (lambda () (interactive) (eshell 'N)))
(global-set-key (kbd "C-c o g") #'magit)
(global-set-key (kbd "C-c o e") #'mu4e)
(global-set-key (kbd "C-c o r") #'elfeed-summary)
(global-set-key (kbd "C-c o m") #'mpdel-browser-open)
(global-set-key (kbd "C-c o p") #'mpdel-playlist-open)
;; multi-cursor
(global-set-key (kbd "C-c c w") #'mc/mark-next-like-this-word)
(global-set-key (kbd "C-c c W") #'mc/mark-previous-like-this-word)
(global-set-key (kbd "C-c c s") #'mc/mark-next-like-this-symbol)
(global-set-key (kbd "C-c c S") #'mc/mark-previous-next-like-this-symbol)
(global-set-key (kbd "C-c c a") #'mc/mark-all-like-this-dwim)
(global-set-key (kbd "C-c c f") #'mc/mark-all-symbols-like-this-in-defun)

View File

@@ -0,0 +1,30 @@
;;; util.el --- Description -*- lexical-binding: t; -*-
;;
;; Copyright (C) 2026 Michael Chalupiak
;;
;; Author: Michael Chalupiak <mikec@archbox>
;; Maintainer: Michael Chalupiak <mikec@archbox>
;; Created: January 16, 2026
;; Modified: January 16, 2026
;; Version: 0.0.1
;; Keywords: abbrev bib c calendar comm convenience data docs emulations extensions faces files frames games hardware help hypermedia i18n internal languages lisp local maint mail matching mouse multimedia news outlines processes terminals tex text tools unix vc wp
;; Homepage: https://github.com/mikec/util
;; Package-Requires: ((emacs "30.1"))
;;
;; This file is not part of GNU Emacs.
;;
;;; Commentary:
;;
;; Description
;;
;;; Code:
;; which-key
(which-key-mode)
;; eglot
;; treesit
(provide 'util)
;;; util.el ends here

View File

@@ -0,0 +1,42 @@
;;; early-init.el --- Description -*- lexical-binding: t; -*-
;;
;; Copyright (C) 2026 Michael Chalupiak
;;
;; Author: Michael Chalupiak <mikec@archbox>
;; Maintainer: Michael Chalupiak <mikec@archbox>
;; Created: January 15, 2026
;; Modified: January 15, 2026
;; Version: 0.0.1
;; Keywords: abbrev bib c calendar comm convenience data docs emulations extensions faces files frames games hardware help hypermedia i18n internal languages lisp local maint mail matching mouse multimedia news outlines processes terminals tex text tools unix vc wp
;; Homepage: https://github.com/mikec/early-init
;; Package-Requires: ((emacs "24.3"))
;;
;; This file is not part of GNU Emacs.
;;
;;; Commentary:
;;
;; Description
;;
;;; Code:
(setq gc-cons-threshold (* 50 1000 1000)
inhibit-startup-message t
ring-bell-function 'ignore
package-enable-at-startup nil
auto-save-default nil
custom-file (locate-user-emacs-file "config/custom.el"))
;; (load custom-file 'noerror 'nomessage)
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
(defun efs/display-startup-time ()
(message "Emacs loaded in %s with %d garbage collections."
(format "%.2f seconds"
(float-time
(time-subtract after-init-time before-init-time)))
gcs-done))
(add-hook 'emacs-startup-hook #'efs/display-startup-time)
(provide 'early-init)
;;; early-init.el ends here

46
config/.emacs.d/init.el Normal file
View File

@@ -0,0 +1,46 @@
;;; init.el --- Description -*- lexical-binding: t; -*-
;;
;; Copyright (C) 2026 Michael Chalupiak
;;
;; Author: Michael Chalupiak <mikec@mchalupiak.com>
;; Maintainer: Michael Chalupiak <mikec@mchalupiak.com>
;; Created: January 15, 2026
;; Modified: January 15, 2026
;; Version: 0.0.1
;; Keywords: abbrev bib c calendar comm convenience data docs emulations extensions faces files frames games hardware help hypermedia i18n internal languages lisp local maint mail matching mouse multimedia news outlines processes terminals tex text tools unix vc wp
;; Homepage: https://github.com/mikec/init
;; Package-Requires: ((emacs "24.3"))
;;
;; This file is not part of GNU Emacs.
;;
;;; Commentary:
;;
;; Description
;;
;;; Code:
(defconst user-init-dir
(cond ((boundp 'user-emacs-directory)
user-emacs-directory)
((boundp 'user-init-directory)
user-init-directory)
(t "~/.emacs.d/")))
(defconst config-dirs '("config" "plugins"))
(defun load-user-config ()
(let*
((expanded-dirs (mapcar
(lambda (dir) (concat (expand-file-name dir user-init-dir) "/*.el"))
config-dirs))
(config-files (seq-filter (lambda (file) (not (string= file (expand-file-name "plugins/straight.el" user-init-dir)))) (mapcan (lambda (expanded-dir) (file-expand-wildcards expanded-dir)) expanded-dirs))))
(progn
(load-file (expand-file-name "plugins/straight.el" user-init-dir))
(mapc (lambda (file) (load-file file)) config-files))))
(load-user-config)
(setq gc-cons-threshold (* 2 1000 1000))
(provide 'init)
;;; init.el ends here

View File

@@ -0,0 +1,404 @@
;;; apps.el --- Description -*- lexical-binding: t; -*-
;;
;; Copyright (C) 2026 Michael Chalupiak
;;
;; Author: Michael Chalupiak <mikec@archbox>
;; Maintainer: Michael Chalupiak <mikec@archbox>
;; Created: January 16, 2026
;; Modified: January 16, 2026
;; Version: 0.0.1
;; Keywords: Symbols value as variable is void: finder-known-keywords
;; Homepage: https://github.com/mikec/apps
;; Package-Requires: ((emacs "24.3"))
;;
;; This file is not part of GNU Emacs.
;;
;;; Commentary:
;;
;; Description
;;
;;; Code:
(straight-use-package
'(eat :type git
:host codeberg
:repo "akib/emacs-eat"
:files ("*.el" ("term" "term/*.el") "*.texi"
"*.ti" ("terminfo/e" "terminfo/e/*")
("terminfo/65" "terminfo/65/*")
("integration" "integration/*")
(:exclude ".dir-locals.el" "*-tests.el"))
:defer t))
(add-hook 'eshell-load-hook #'eat-eshell-mode)
(use-package magit
:ensure t
:defer t)
(use-package libmpdel
:ensure t
:demand t)
(use-package mpdel
:ensure t
:demand t
:after libmpdel
:bind (:map mpdel-playlist-mode-map
("h" . mpdel-song-normal-decrement)
("l" . mpdel-song-normal-increment)
("b" . libmpdel-playback-next)
("z" . libmpdel-playback-next)
("c" . libmpdel-playback-play-pause)
("C" . mpdel/connect-with-ip)
("v" . libmpdel-stop)
("x" . (lambda () (interactive) (libmpdel-playback-seek 0)))
("i" . mpdel-song-open)
("s" . (lambda () (interactive) (if (libmpdel-get-state 'random #'identity) (libmpdel-playback-unset-random) (libmpdel-playback-set-random))))
("r" . (lambda () (interactive) (if (libmpdel-get-state 'repeat #'identity) (libmpdel-playback-unset-repeat) (libmpdel-playback-set-repeat))))
("X" . (lambda () (interactive (libmpdel-send-command "clear"))))
("RET" . mpdel-playlist-play)
(";" . mpdel/switch-context-i))
:init
(setq mpdel-prefix-key (kbd "C-c z"))
:config
(add-to-list 'libmpdel-profiles '("Desktop" "127.0.0.1" 6600 ipv4))
(add-to-list 'libmpdel-profiles '("Laptop" "127.0.0.1" 6600 ipv4))
(keymap-set global-map "C-c z" mpdel-playlist-mode-map)
(defun mpdel/connect-with-ip ()
(interactive)
(let* ((profile (completing-read "Connect to: " (mapcar #'car libmpdel-profiles) nil t))
(ip (completing-read "IP: " nil)))
(setf (alist-get profile libmpdel-profiles nil nil #'equal) `(,ip ,6600 ipv4))
(libmpdel-connect-profile (assoc-string profile libmpdel-profiles))))
(defun mpdel/add-all-to-queue ()
(interactive)
(libmpdel-send-command "clear")
(libmpdel-send-command "add /"))
(defun mpdel/start-all-music ()
(interactive)
(mpdel/add-all-to-queue)
(mpdel-playlist-open)
(libmpdel-play))
(defun mpdel/music-status ()
(interactive)
(funcall mpdel/music-status))
(defvar mpdel/music-status nil)
(let ((status nil))
(setq mpdel/music-status
(lambda ()
(require 'libmpdel)
(if (libmpdel-connected-p)
(let* ((song (libmpdel-current-song))
(volume (libmpdel-get-state 'volume #'identity))
(song-name (if song (libmpdel-entity-name song) nil))
(shuffle (or (libmpdel-get-state 'random (lambda (state) (if state "S" ""))) ""))
(repeat (or (libmpdel-get-state 'repeat (lambda (state) (if state "R" ""))) ""))
(progress ""))
(libmpdel-send-command "status" (lambda (s)
(setq status (copy-alist s))))
(when status
(let ((elapsed (libmpdel-time-to-string (cdr (assoc 'elapsed status))))
(duration (libmpdel-time-to-string (cdr (assoc 'duration status)))))
(setq progress (format " - %s/%s" elapsed duration))))
(cond
((libmpdel-playing-p) (format "> %s%s %s%s %s%%%%" song-name progress repeat shuffle volume))
((libmpdel-paused-p) (format "| %s%s %s%s %s%%%%" song-name progress repeat shuffle volume))
((libmpdel-stopped-p) "")))))))
(setq-default mode-line-format (append default-mode-line-format '((:eval (mpdel/music-status)))))
(defconst mpdel/contexts
`((podcasts . ((enter-hooks . ,(lambda (context) (libmpdel-send-commands '("clear"
"load podcasts"
"random 0"
"repeat 0"
"consume 1"
"single 0"))))
(song-change . ,(lambda (context) (libmpdel-send-commands '("rm podcasts"
"save podcasts"))))
(exit-hooks . ,(lambda (context) (libmpdel-send-commands '("rm podcasts"
"save podcasts"
"consume 0"))))))
(allmusic . ((enter-hooks . ,(lambda (context)
(libmpdel-send-commands '("random 1"
"repeat 1"
"consume 0"
"single 0"))
(mpdel/add-all-to-queue)))))
(playlist . ())))
(defvar mpdel/current-context (assq 'allmusic mpdel/contexts))
(defun mpdel/run-context-hooks (hook-name context)
(let ((hook (cdr (assq hook-name (cdr context)))))
(when hook
(funcall hook context))))
(add-to-list 'savehist-additional-variables 'mpdel/current-context)
(add-hook 'libmpdel-current-song-changed-hook (lambda ()
(let ((context mpdel/current-context))
(mpdel/run-context-hooks 'song-change context))))
(defun mpdel/is-current-context (context)
(eq context (car mpdel/current-context)))
(defun mpdel/switch-context-i ()
(interactive)
(mpdel/switch-context (intern (completing-read "Context: " (mapcar #'car mpdel/contexts) nil t))))
(defun mpdel/switch-context (context)
(interactive)
(libmpdel-ensure-connection)
(unless (eq (car mpdel/current-context) context)
(libmpdel-send-command "stop")
(mpdel/run-context-hooks 'exit-hooks mpdel/current-context)
(setq mpdel/current-context (assq context mpdel/contexts))
(mpdel/run-context-hooks 'enter-hooks mpdel/current-context))))
(use-package org
:ensure t
:defer t)
(use-package org-msg
:ensure t
:defer t
:hook ((mu4e-main-mode . org-msg-mode)
(mu4e-compose-mode . org-msg-mode))
:config
(setq mail-user-agent 'mu4e-user-agent)
(setq org-msg-options "html-postamble:nil H:5 num:nil ^:{} toc:nil author:nil email:nil \\n:t"
org-msg-startup "hidestars indent inlineimages"
org-msg-default-alternatives '((new . (text html))
(reply-to-html . (text html))
(reply-to-text . (text)))
org-msg-convert-citation t))
(use-package mu4e
:ensure t
:commands (mu4e)
:config
(setq mu4e-mu-binary (executable-find "mu"))
(setq mu4e-read-option-use-builtin nil
mu4e-completing-read-function 'completing-read)
;; this is the directory we created before:
(setq mu4e-maildir "~/.local/share/mail/")
;; this command is called to sync imap servers:
(setq mu4e-get-mail-command (concat (executable-find "mbsync") " -a"))
;; how often to call it in seconds:
(setq mu4e-update-interval 300)
;; save attachment to desktop by default
;; or another choice of yours:
(setq mu4e-attachment-dir "~/Downloads")
;; rename files when moving - needed for mbsync:
(setq mu4e-change-filenames-when-moving t)
;; list of your email adresses:
(setq mu4e-user-mail-address-list '("mikecchalupiak@outlook.com"
"chalupmc@rose-hulman.edu"
"mikec@mchalupiak.com"
"spamreciver1@outlook.com"))
; the following is to show shortcuts in the main view.
(setq mu4e-bookmarks ())
(add-to-list 'mu4e-bookmarks
'(:name "spamreciver"
:query "maildir:/spamreciver1@outlook.com/INBOX"
:key ?s))
(add-to-list 'mu4e-bookmarks
'(:name "mchalupiak.com"
:query "maildir:/mikec@mchalupiak.com/INBOX"
:key ?h))
(add-to-list 'mu4e-bookmarks
'(:name "rose"
:query "maildir:/chalupmc@rose-hulman.edu/INBOX"
:key ?r))
(add-to-list 'mu4e-bookmarks
'(:name "outlook"
:query "maildir:/mikecchalupiak@outlook.com/INBOX"
:key ?o))
(setq mu4e-contexts
`(,(make-mu4e-context
:name "outlook"
:match-func
(lambda (msg)
(when msg
(mu4e-message-contact-field-matches msg
:to "mikecchalupiak@outlook.com")))
:vars '((user-mail-address . "mikecchalupiak@outlook.com")
(user-full-name . "Michael Chalupiak")
(mu4e-drafts-folder . "/mikecchalupiak@outlook.com/Drafts")
(mu4e-refile-folder . "/mikecchalupiak@outlook.com/Archive")
(mu4e-sent-folder . "/mikecchalupiak@outlook.com/Sent")
(mu4e-trash-folder . "/mikecchalupiak@outlook.com/Trash")))
,(make-mu4e-context
:name "rose"
:match-func
(lambda (msg)
(when msg
(mu4e-message-contact-field-matches msg
:to "chalupmc@rose-hulman.edu")))
:vars '((user-mail-address . "chalupmc@rose-hulman.edu")
(user-full-name . "Michael Chalupiak")
(mu4e-drafts-folder . "/chalupmc@rose-hulman.edu/Drafts")
(mu4e-refile-folder . "/chalupmc@rose-hulman.edu/Archive")
(mu4e-sent-folder . "/chalupmc@rose-hulman.edu/Sent")
(mu4e-trash-folder . "/chalupmc@rose-hulman.edu/Trash")))
,(make-mu4e-context
:name "hosted"
:match-func
(lambda (msg)
(when msg
(mu4e-message-contact-field-matches msg
:to "mikec@mchalupiak.com")))
:vars '((user-mail-address . "mikec@mchalupiak.com")
(user-full-name . "Michael Chalupiak")
;; check your ~/.maildir to see how the subdirectories are called
;; e.g `ls ~/.maildir/example'
(mu4e-drafts-folder . "/mikec@mchalupiak.com/Drafts")
(mu4e-refile-folder . "/mikec@mchalupiak.com/Archive")
(mu4e-sent-folder . "/mikec@mchalupiak.com/Sent")
(mu4e-trash-folder . "/mikec@mchalupiak.com/Trash")))
,(make-mu4e-context
:name "spam"
:match-func
(lambda (msg)
(when msg
(mu4e-message-contact-field-matches msg
:to "spamreciver1@outlook.com")))
:vars '((user-mail-address . "spamreciver1@outlook.com")
(user-full-name . "spamreciver")
;; check your ~/.maildir to see how the subdirectories are called
;; e.g `ls ~/.maildir/example'
(mu4e-drafts-folder . "/spamreciver1@outlook.com/Drafts")
(mu4e-refile-folder . "/spamreciver1@outlook.com/Archive")
(mu4e-sent-folder . "/spamreciver1@outlook.com/Sent")
(mu4e-trash-folder . "/spamreciver1@outlook.com/Trash")))))
(setq mu4e-context-policy 'pick-first) ;; start with the first (default) context;
(setq mu4e-compose-context-policy 'ask)
; gpg encryptiom & decryption:
;; this can be left alone
(require 'epa-file)
(epa-file-enable)
(setq epa-pinentry-mode 'loopback)
(auth-source-forget-all-cached)
;; don't keep message compose buffers around after sending:
(setq message-kill-buffer-on-exit t)
;; send function:
(setq send-mail-function 'message-send-mail-with-sendmail
message-send-mail-function 'message-send-mail-with-sendmail)
;; send program:
;; this is exeranal. remember we installed it before.
(setq sendmail-program (executable-find "msmtp"))
;; select the right sender email from the context.
(setq message-sendmail-envelope-from 'header)
;; chose from account before sending
;; this is a custom function that works for me.
;; well I stole it somewhere long ago.
;; I suggest using it to make matters easy
;; of course adjust the email adresses and account descriptions
(defun timu/set-msmtp-account ()
(if (message-mail-p)
(save-excursion
(let*
((from (save-restriction
(message-narrow-to-headers)
(message-fetch-field "from")))
(account
(cond
((string-match "mikecchalupiak@outlook.com" from) "outlook")
((string-match "chalupmc@rose-hulman.edu" from) "rose")
((string-match "mikec@mchalupiak.com" from) "hosted")
((string-match "spamreciver1@outlook.com" from) "spam"))))
(setq message-sendmail-extra-arguments (list '"-a" account)))))
(add-hook 'message-send-mail-hook 'timu/set-msmtp-account)
;; mu4e cc & bcc
;; this is custom as well
(add-hook 'mu4e-compose-mode-hook
(defun timu/add-cc-and-bcc ()
"My Function to automatically add Cc & Bcc: headers.
This is in the mu4e compose mode."
(save-excursion (message-add-header "Cc:\n"))
(save-excursion (message-add-header "Bcc:\n"))))))
;; ask for context if no context matches;)))
(use-package elfeed
:ensure t
:defer t
:commands (elfeed)
:bind (:map elfeed-show-mode-map
("a" . elfeed/add-to-playlist)
("A" . (lambda () (interactive)
(elfeed/add-to-playlist)
(mpdel/switch-context 'podcasts)
(libmpdel-play)))
("P" . (lambda () (interactive)
(mpdel/switch-context 'podcasts)
(libmpdel-play))))
:bind (:map elfeed-search-mode-map
("a" . elfeed/add-to-playlist)
("A" . (lambda () (interactive)
(elfeed/add-to-playlist)
(mpdel/switch-context 'podcasts)
(libmpdel-play)))
("P" . (lambda () (interactive)
(mpdel/switch-context 'podcasts)
(libmpdel-play))))
:config
(setq-default elfeed-search-filter " ")
(setq elfeed-feeds
'( ("https://phaazon.net/blog/feed")
("https://irreal.org/blog/?feed=rss2")
("https://port19.xyz/rss.xml")
("https://lukesmith.xyz/index.xml")
("https://notrelated.xyz/rss")
("https://karl-voit.at/feeds/lazyblorg-all.atom_1.0.links-and-content.xml")
;("https://sizeof.cat/index.xml")
("https://www.youtube.com/feeds/videos.xml?channel_id=UCkKmeTinUEU27syZPKrzWQQ")
("https://www.youtube.com/feeds/videos.xml?playlist_id=PLq1vmb-z7PpQt2PDNUr7XOzBjWAOWf0Rt")
("https://danielde.dev/rss.xml")
("https://pkolaczk.github.io/feed.xml")
("https://joeyh.name/blog/index.rss")
("https://kagifeedback.org/atom/t/release-notes")
("https://api.substack.com/feed/podcast/462466.rss")
("https://www.dailywire.com/feeds/rss.xml")
("https://feeds.simplecast.com/6c2VScgo")
("https://feeds.simplecast.com/pp_b9xO6")))
(defun elfeed/add-to-playlist ()
(interactive
(let* ((entry (if (eq major-mode 'elfeed-show-mode)
elfeed-show-entry
(elfeed-search-selected :ignore-region)))
(link (elfeed-entry-link entry))
(enclosure (elt (car (elfeed-entry-enclosures entry)) 0)) ; fragile?)))
(command (if (mpdel/is-current-context 'podcasts) (format "add \"%s\"" enclosure)
(format "playlistadd podcasts \"%s\"" enclosure))))
(when enclosure
(libmpdel-ensure-connection)
(libmpdel-send-command command (lambda (s) (pp s))))))))
(use-package elfeed-summary
:straight t
:defer t
:commands (elfeed-summary)
:bind (:map elfeed-summary-mode-map
("p" . magit-section-backward))
:config
(setq-default elfeed-summary-default-filter " ")
(setq-default elfeed-summary-look-back most-positive-fixnum)
(setq elfeed-summary--search-show-read t)
(setq elfeed-summary-settings
'((query . :all))))
(provide 'apps)
;;; apps.el ends here

View File

@@ -0,0 +1,97 @@
;;; lang.el --- Description -*- lexical-binding: t; -*-
;;
;; Copyright (C) 2026 Michael Chalupiak
;;
;; Author: Michael Chalupiak <mikec@archbox>
;; Maintainer: Michael Chalupiak <mikec@archbox>
;; Created: January 16, 2026
;; Modified: January 16, 2026
;; Version: 0.0.1
;; Keywords: abbrev bib c calendar comm convenience data docs emulations extensions faces files frames games hardware help hypermedia i18n internal languages lisp local maint mail matching mouse multimedia news outlines processes terminals tex text tools unix vc wp
;; Homepage: https://github.com/mikec/lang
;; Package-Requires: ((emacs "29.1"))
;;
;; This file is not part of GNU Emacs.
;;
;;; Commentary:
;;
;; Description
;;
;;; Code:
(use-package treesit-auto
:ensure t
;; :defer t
:custom
(treesit-auto-install t)
:config
(treesit-auto-add-to-auto-mode-alist 'all)
(global-treesit-auto-mode))
;; (use-package gitconfig-mode
;; :ensure t
;; :defer t)
;; (use-package gitignore-mode
;; :ensure t
;; :defer t)
(use-package odin-ts-mode
:ensure t
:defer t
:straight '(:type git :host github :repo "Sampie159/odin-ts-mode"))
(use-package zig-ts-mode
:ensure t
:defer t
:straight '(:type git :host codeberg :repo "meow_king/zig-ts-mode"))
(use-package haskell-ts-mode
:ensure t
:custom
(haskell-ts-font-lock-level 4)
(haskell-ts-use-indent t)
(haskell-ts-ghci "ghci")
(haskell-ts-use-indent t)
:config
(add-to-list 'treesit-language-source-alist
'(haskell . ("https://github.com/tree-sitter/tree-sitter-haskell" "v0.23.1"))))
;; (unless (treesit-grammar-location 'haskell)
;; (treesit-install-language-grammar 'haskell)))
(use-package eglot-x
:ensure t
:defer t
:straight '(:type git :host github :repo "nemethf/eglot-x"))
(use-package sly
:ensure t
:defer t
:hook common-lisp-mode
:config
(setq inferior-lisp-program "sbcl"))
(dolist (mode '(c-ts-mode-hook
rust-ts-mode-hook
odin-ts-mode-hook
zig-ts-mode-hook))
(add-hook mode 'eglot-ensure))
(with-eval-after-load 'eglot
(require 'eglot-x)
(eglot-x-setup))
(with-eval-after-load 'eglot
(add-to-list 'eglot-server-programs
'(zig-ts-mode . ("zls")))
(add-to-list 'eglot-server-programs
'(haskell-ts-mode . ("haskell-language-server-wrapper" "--lsp"))))
(add-to-list 'auto-mode-alist '("\\.odin\\'" . odin-ts-mode))
(add-to-list 'auto-mode-alist '("\\.zig\\(?:\\.zon\\)?\\'" . zig-ts-mode))
(defvar treesit-language-source-alist '())
(add-to-list 'treesit-language-source-alist '(odin "https://github.com/tree-sitter-grammars/tree-sitter-odin"))
(add-to-list 'treesit-language-source-alist '(zig "https://github.com/tree-sitter-grammars/tree-sitter-zig"))
(provide 'lang)
;;; lang.el ends here

View File

@@ -0,0 +1,42 @@
;;; straight.el --- Description -*- lexical-binding: t; -*-
;;
;; Copyright (C) 2026 Michael Chalupiak
;;
;; Author: Michael Chalupiak <mikec@archbox>
;; Maintainer: Michael Chalupiak <mikec@archbox>
;; Created: January 15, 2026
;; Modified: January 15, 2026
;; Version: 0.0.1
;; Keywords: abbrev bib c calendar comm convenience data docs emulations extensions faces files frames games hardware help hypermedia i18n internal languages lisp local maint mail matching mouse multimedia news outlines processes terminals tex text tools unix vc wp
;; Homepage: https://github.com/mikec/straight
;; Package-Requires: ((emacs "24.3"))
;;
;; This file is not part of GNU Emacs.
;;
;;; Commentary:
;;
;; Description
;;
;;; Code:
(setq straight-use-package-by-default t
straight-check-for-modifications nil) ; can also be set to check-on-save
(defvar bootstrap-version)
(let ((bootstrap-file
(expand-file-name
"straight/repos/straight.el/bootstrap.el"
(or (bound-and-true-p straight-base-dir)
user-emacs-directory)))
(bootstrap-version 7))
(unless (file-exists-p bootstrap-file)
(with-current-buffer
(url-retrieve-synchronously
"https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
'silent 'inhibit-cookies)
(goto-char (point-max))
(eval-print-last-sexp)))
(load bootstrap-file nil 'nomessage))
(provide 'straight)
;;; straight.el ends here

View File

@@ -0,0 +1,76 @@
;;; themes.el --- Description -*- lexical-binding: t; -*-
;;
;; Copyright (C) 2026 Michael Chalupiak
;;
;; Author: Michael Chalupiak <mikec@archbox>
;; Maintainer: Michael Chalupiak <mikec@archbox>
;; Created: January 16, 2026
;; Modified: January 16, 2026
;; Version: 0.0.1
;; Keywords: abbrev bib c calendar comm convenience data docs emulations extensions faces files frames games hardware help hypermedia i18n internal languages lisp local maint mail matching mouse multimedia news outlines processes terminals tex text tools unix vc wp
;; Homepage: https://github.com/mikec/themes
;; Package-Requires: ((emacs "29.1"))
;;
;; This file is not part of GNU Emacs.
;;
;;; Commentary:
;;
;; Description
;;
;;; Code:
(use-package doom-themes
:ensure t
:defer t
:custom
;; Global settings (defaults)
(doom-themes-enable-bold t) ; if nil, bold is universally disabled
(doom-themes-enable-italic t) ; if nil, italics is universally disabled
;; for treemacs users
;; (doom-themes-treemacs-theme "doom-atom") ; use "doom-colors" for less minimal icon theme
:config
;; (load-theme 'doom-one t)
;; Enable flashing mode-line on errors
;; (doom-themes-visual-bell-config)
;; Enable custom neotree theme (nerd-icons must be installed!)
;; (doom-themes-neotree-config)
;; or for treemacs users
;; (doom-themes-treemacs-config)
;; Corrects (and improves) org-mode's native fontification.
(doom-themes-org-config))
(straight-use-package '(nano-theme :type git :host github
:repo "rougier/nano-theme"))
(use-package kaolin-themes)
(use-package auto-dark
:defer t
:init
;; Configure themes
(setq auto-dark-themes '((kaolin-dark) (kaolin-light)))
;; Disable doom's theme loading mechanism (just to make sure)
;; (setq! doom-theme nil)
;; Declare that all themes are safe to load.
;; Be aware that setting this variable may have security implications if you
;; get tricked into loading untrusted themes (via auto-dark-mode or manually).
;; See the documentation of custom-safe-themes for details.
;; (setq! custom-safe-themes t)
;; Enable auto-dark-mode at the right point in time.
;; This is inspired by doom-ui.el. Using server-after-make-frame-hook avoids
;; issues with an early start of the emacs daemon using systemd, which causes
;; problems with the DBus connection that auto-dark mode relies upon.
(defun my-auto-dark-init-h ()
(auto-dark-mode)
(remove-hook 'server-after-make-frame-hook #'my-auto-dark-init-h)
(remove-hook 'after-init-hook #'my-auto-dark-init-h))
(let ((hook (if (daemonp)
'server-after-make-frame-hook
'after-init-hook)))
;; Depth -95 puts this before doom-init-theme-h, which sounds like a good
;; idea, if only for performance reasons.
(add-hook hook #'my-auto-dark-init-h -95)))
(provide 'themes)
;;; themes.el ends here

View File

@@ -0,0 +1,352 @@
;;; ui.el --- Description -*- lexical-binding: t; -*-
;;
;; Copyright (C) 2026 Michael Chalupiak
;;
;; Author: Michael Chalupiak <mikec@archbox>
;; Maintainer: Michael Chalupiak <mikec@archbox>
;; Created: January 16, 2026
;; Modified: January 16, 2026
;; Version: 0.0.1
;; Keywords: abbrev bib c calendar comm convenience data docs emulations extensions faces files frames games hardware help hypermedia i18n internal languages lisp local maint mail matching mouse multimedia news outlines processes terminals tex text tools unix vc wp
;; Homepage: https://github.com/mikec/ui
;; Package-Requires: ((emacs "29.1"))
;;
;; This file is not part of GNU Emacs.
;;
;;; Commentary:
;;
;; Description
;;
;;; Code:
(use-package corfu
;; Optional customizations
:custom
(corfu-cycle t) ;; Enable cycling for `corfu-next/previous'
;; (corfu-quit-at-boundary nil) ;; Never quit at completion boundary
;; (corfu-quit-no-match nil) ;; Never quit, even if there is no match
;; (corfu-preview-current nil) ;; Disable current candidate preview
;; (corfu-preselect 'prompt) ;; Preselect the prompt
;; (corfu-on-exact-match 'insert) ;; Configure handling of exact matches
;; Enable Corfu only for certain modes. See also `global-corfu-modes'.
;; :hook ((prog-mode . corfu-mode)
;; (shell-mode . corfu-mode)
;; (eshell-mode . corfu-mode))
:init
(setq corfu-auto t
corfu-auto-delay 0.05
corfu-auto-prefix 1
corfu-auto-trigger "." ;; Custom trigger characters
corfu-quit-no-match 'separator) ;; or t
;; Recommended: Enable Corfu globally. Recommended since many modes provide
;; Capfs and Dabbrev can be used globally (M-/). See also the customization
;; variable `global-corfu-modes' to exclude certain modes.
(global-corfu-mode)
;; Enable optional extension modes:
(corfu-history-mode)
(corfu-popupinfo-mode))
;; Add extensions
(use-package cape
;; Bind prefix keymap providing all Cape commands under a mnemonic key.
;; Press C-c p ? to for help.
:bind ("C-c p" . cape-prefix-map) ;; Alternative key: M-<tab>, M-p, M-+
;; Alternatively bind Cape commands individually.
;; :bind (("C-c p d" . cape-dabbrev)
;; ("C-c p h" . cape-history)
;; ("C-c p f" . cape-file)
;; ...)
:init
;; Add to the global default value of `completion-at-point-functions' which is
;; used by `completion-at-point'. The order of the functions matters, the
;; first function returning a result wins. Note that the list of buffer-local
;; completion functions takes precedence over the global list.
(add-hook 'prog-mode-hook
(defun +corfu-add-cape-file-h ()
(add-hook 'completion-at-point-functions #'cape-file -10 t)))
;; (add-hook 'completion-at-point-functions #'cape-dict -10 t)
;; (add-hook 'completion-at-point-functions #'cape-dabbrev -10 t)))
(add-hook 'text-mode-hook
(defun +corfu-add-cape-file-h ()
(add-hook 'completion-at-point-functions #'cape-file -10 t)))
;; (add-hook 'completion-at-point-functions #'cape-dict -10 t)
;; (add-hook 'completion-at-point-functions #'cape-dabbrev -10 t)))
(add-hook 'conf-mode-hook
(defun +corfu-add-cape-file-h ()
(add-hook 'completion-at-point-functions #'cape-file -10 t)))
;; (add-hook 'completion-at-point-functions #'cape-dict -10 t)
;; (add-hook 'completion-at-point-functions #'cape-dabbrev -10 t)))
;; (add-hook 'completion-at-point-functions #'cape-file)
;; (add-hook 'completion-at-point-functions #'cape-dabbrev)
;; (add-hook 'completion-at-point-functions #'cape-dict)
;; (add-hook 'completion-at-point-functions #'cape-emoji)
;; (add-hook 'completion-at-point-functions #'cape-elisp-block)
;; (add-hook 'completion-at-point-functions #'cape-history)
;; ...
)
(use-package vertico
:custom
;; (vertico-scroll-margin 0) ;; Different scroll margin
;; (vertico-count 20) ;; Show more candidates
;; (vertico-resize t) ;; Grow and shrink the Vertico minibuffer
(vertico-cycle t) ;; Enable cycling for `vertico-next/previous'
:init
(vertico-multiform-mode)
(vertico-mode)
(define-key vertico-map (kbd "DEL") #'vertico-directory-delete-char))
(defvar +vertico-transform-functions nil)
(cl-defmethod vertico--format-candidate :around
(cand prefix suffix index start &context ((not +vertico-transform-functions) null))
(dolist (fun (ensure-list +vertico-transform-functions))
(setq cand (funcall fun cand)))
(cl-call-next-method cand prefix suffix index start))
(defun +vertico-highlight-directory (file)
"If FILE ends with a slash, highlight it as a directory."
(if (string-suffix-p "/" file)
(propertize file 'face 'marginalia-file-priv-dir) ; or face 'dired-directory
file))
;; function to highlight enabled modes similar to counsel-M-x
(defun +vertico-highlight-enabled-mode (cmd)
"If MODE is enabled, highlight it as font-lock-constant-face."
(let ((sym (intern cmd)))
(if (or (eq sym major-mode)
(and
(memq sym minor-mode-list)
(boundp sym)))
(propertize cmd 'face 'font-lock-constant-face)
cmd)))
;; add-to-list works if 'file isn't already in the alist
;; setq can be used but will overwrite all existing values
(add-to-list 'vertico-multiform-categories
'(file
;; this is also defined in the wiki, uncomment if used
;; (vertico-sort-function . vertico-sort-directories-first)
(+vertico-transform-functions . +vertico-highlight-directory)))
(add-to-list 'vertico-multiform-commands
'(execute-extended-command
(+vertico-transform-functions . +vertico-highlight-enabled-mode)))
;; Enable rich annotations using the Marginalia package
(use-package marginalia
;; Bind `marginalia-cycle' locally in the minibuffer. To make the binding
;; available in the *Completions* buffer, add it to the
;; `completion-list-mode-map'.
:bind (:map minibuffer-local-map
("M-A" . marginalia-cycle))
;; The :init section is always executed.
:init
;; Marginalia must be activated in the :init section of use-package such that
;; the mode gets enabled right away. Note that this forces loading the
;; package.
(marginalia-mode))
;; Example configuration for Consult
(use-package consult
;; Replace bindings. Lazily loaded by `use-package'.
;; :bind (;; C-c bindings in `mode-specific-map'
;; ("C-c M-x" . consult-mode-command)
;; ("C-c h" . consult-history)
;; ("C-c k" . consult-kmacro)
;; ("C-c m" . consult-man)
;; ("C-c i" . consult-info)
;; ([remap Info-search] . consult-info)
;; ;; C-x bindings in `ctl-x-map'
;; ("C-x M-:" . consult-complex-command) ;; orig. repeat-complex-command
;; ("C-x b" . consult-buffer) ;; orig. switch-to-buffer
;; ("C-x 4 b" . consult-buffer-other-window) ;; orig. switch-to-buffer-other-window
;; ("C-x 5 b" . consult-buffer-other-frame) ;; orig. switch-to-buffer-other-frame
;; ("C-x t b" . consult-buffer-other-tab) ;; orig. switch-to-buffer-other-tab
;; ("C-x r b" . consult-bookmark) ;; orig. bookmark-jump
;; ("C-x p b" . consult-project-buffer) ;; orig. project-switch-to-buffer
;; ;; Custom M-# bindings for fast register access
;; ("M-#" . consult-register-load)
;; ("M-'" . consult-register-store) ;; orig. abbrev-prefix-mark (unrelated)
;; ("C-M-#" . consult-register)
;; ;; Other custom bindings
;; ("M-y" . consult-yank-pop) ;; orig. yank-pop
;; ;; M-g bindings in `goto-map'
;; ("M-g e" . consult-compile-error)
;; ("M-g r" . consult-grep-match)
;; ("M-g f" . consult-flymake) ;; Alternative: consult-flycheck
;; ("M-g g" . consult-goto-line) ;; orig. goto-line
;; ("M-g M-g" . consult-goto-line) ;; orig. goto-line
;; ("M-g o" . consult-outline) ;; Alternative: consult-org-heading
;; ("M-g m" . consult-mark)
;; ("M-g k" . consult-global-mark)
;; ("M-g i" . consult-imenu)
;; ("M-g I" . consult-imenu-multi)
;; ;; M-s bindings in `search-map'
;; ("M-s d" . consult-find) ;; Alternative: consult-fd
;; ("M-s c" . consult-locate)
;; ("M-s g" . consult-grep)
;; ("M-s G" . consult-git-grep)
;; ("M-s r" . consult-ripgrep)
;; ("M-s l" . consult-line)
;; ("M-s L" . consult-line-multi)
;; ("M-s k" . consult-keep-lines)
;; ("M-s u" . consult-focus-lines)
;; ;; Isearch integration
;; ("M-s e" . consult-isearch-history)
;; :map isearch-mode-map
;; ("M-e" . consult-isearch-history) ;; orig. isearch-edit-string
;; ("M-s e" . consult-isearch-history) ;; orig. isearch-edit-string
;; ("M-s l" . consult-line) ;; needed by consult-line to detect isearch
;; ("M-s L" . consult-line-multi) ;; needed by consult-line to detect isearch
;; ;; Minibuffer history
;; :map minibuffer-local-map
;; ("M-s" . consult-history) ;; orig. next-matching-history-element
;; ("M-r" . consult-history)) ;; orig. previous-matching-history-element
;; The :init configuration is always executed (Not lazy)
:init
;; Tweak the register preview for `consult-register-load',
;; `consult-register-store' and the built-in commands. This improves the
;; register formatting, adds thin separator lines, register sorting and hides
;; the window mode line.
(advice-add #'register-preview :override #'consult-register-window)
(setq register-preview-delay 0.5)
(setq consult-async-min-input 1)
;; Use Consult to select xref locations with preview
(setq xref-show-xrefs-function #'consult-xref
xref-show-definitions-function #'consult-xref)
;; Configure other variables and modes in the :config section,
;; after lazily loading the package.
:config
;; Optionally configure preview. The default value
;; is 'any, such that any key triggers the preview.
;; (setq consult-preview-key 'any)
;; (setq consult-preview-key "M-.")
;; (setq consult-preview-key '("S-<down>" "S-<up>"))
;; For some commands and buffer sources it is useful to configure the
;; :preview-key on a per-command basis using the `consult-customize' macro.
(consult-customize
consult-theme :preview-key '(:debounce 0.2 any)
consult-ripgrep consult-git-grep consult-grep consult-man
consult-bookmark consult-recent-file consult-xref
consult-source-bookmark consult-source-file-register
consult-source-recent-file consult-source-project-recent-file
;; :preview-key "M-."
:preview-key '(:debounce 0.4 any))
;; Optionally configure the narrowing key.
;; Both < and C-+ work reasonably well.
(setq consult-narrow-key "<") ;; "C-+"
;; Optionally make narrowing help available in the minibuffer.
;; You may want to use `embark-prefix-help-command' or which-key instead.
;; (keymap-set consult-narrow-map (concat consult-narrow-key " ?") #'consult-narrow-help)
)
(use-package consult-eglot
:ensure t
:defer t)
(use-package marginalia
:ensure t
:config
(marginalia-mode))
(use-package embark
:ensure t
:bind
(("C-." . embark-act) ;; pick some comfortable binding
("C-;" . embark-dwim) ;; good alternative: M-.
("C-h B" . embark-bindings)) ;; alternative for `describe-bindings'
:init
;; Optionally replace the key help with a completing-read interface
(setq prefix-help-command #'embark-prefix-help-command)
;; Show the Embark target at point via Eldoc. You may adjust the
;; Eldoc strategy, if you want to see the documentation from
;; multiple providers. Beware that using this can be a little
;; jarring since the message shown in the minibuffer can be more
;; than one line, causing the modeline to move up and down:
;; (add-hook 'eldoc-documentation-functions #'embark-eldoc-first-target)
;; (setq eldoc-documentation-strategy #'eldoc-documentation-compose-eagerly)
;; Add Embark to the mouse context menu. Also enable `context-menu-mode'.
;; (context-menu-mode 1)
;; (add-hook 'context-menu-functions #'embark-context-menu 100)
:config
;; Hide the mode line of the Embark live/completions buffers
(add-to-list 'display-buffer-alist
'("\\`\\*Embark Collect \\(Live\\|Completions\\)\\*"
nil
(window-parameters (mode-line-format . none)))))
;; Consult users will also want the embark-consult package.
(use-package embark-consult
:ensure t ; only need to install it, embark loads it after consult if found
:hook
(embark-collect-mode . consult-preview-at-point-mode))
;; Optionally use the `orderless' completion style.
(use-package orderless
:custom
;; Configure a custom style dispatcher (see the Consult wiki)
;; (orderless-style-dispatchers '(+orderless-consult-dispatch orderless-affix-dispatch))
;; (orderless-component-separator #'orderless-escapable-split-on-space)
(completion-styles '(orderless basic))
(completion-category-overrides '((file (styles partial-completion))))
(completion-category-defaults nil) ;; Disable defaults, use our settings
(completion-pcm-leading-wildcard t)) ;; Emacs 31: partial-completion behaves like substring
;; Persist history over Emacs restarts. Vertico sorts by history position.
(use-package savehist
:init
(savehist-mode))
(use-package indent-bars
:config
(setq
;; Show indent guides starting from the first column.
indent-bars-starting-column 0
;; Make indent guides subtle; the default is too distractingly colorful.
indent-bars-width-frac 0.15 ; make bitmaps thinner
indent-bars-color-by-depth nil
indent-bars-color '(font-lock-comment-face :face-bg nil :blend 0.425)
;; Don't highlight current level indentation; it's distracting and is
;; unnecessary overhead for little benefit.
indent-bars-highlight-current-depth nil)
:custom
(indent-bars-no-descend-lists t) ; no extra bars in continued func arg lists
(indent-bars-treesit-support t)
(indent-bars-treesit-ignore-blank-lines-types '("module"))
;; Add other languages as needed
;; (indent-bars-treesit-scope '((python function_definition class_definition for_statement
;; if_statement with_statement while_statement)))
;; Note: wrap may not be needed if no-descend-list is enough
;;(indent-bars-treesit-wrap '((python argument_list parameters ; for python, as an example
;; list list_comprehension
;; dictionary dictionary_comprehension
;; parenthesized_expression subscript)))
:hook ((prog-mode text-mode) . indent-bars-mode))
(use-package dashboard
:ensure t
:config
(dashboard-setup-startup-hook))
(provide 'ui)
;;; ui.el ends here

View File

@@ -0,0 +1,109 @@
;;; utils.el --- Description -*- lexical-binding: t; -*-
;;
;; Copyright (C) 2026 Michael Chalupiak
;;
;; Author: Michael Chalupiak <mikec@archbox>
;; Maintainer: Michael Chalupiak <mikec@archbox>
;; Created: January 16, 2026
;; Modified: January 16, 2026
;; Version: 0.0.1
;; Keywords: abbrev bib c calendar comm convenience data docs emulations extensions faces files frames games hardware help hypermedia i18n internal languages lisp local maint mail matching mouse multimedia news outlines processes terminals tex text tools unix vc wp
;; Homepage: https://github.com/mikec/utils
;; Package-Requires: ((emacs "29.1"))
;;
;; This file is not part of GNU Emacs.
;;
;;; Commentary:
;;
;; Description
;;
;;; Code:
(use-package surround
:ensure t
:defer t
:bind-keymap ("M-'" . surround-keymap))
(use-package dirvish
:ensure t
:defer t
:init
(dirvish-peek-mode 1))
; (dirvish-override-dired-mode 1))
(use-package multiple-cursors
:ensure t
:defer t)
(use-package hl-todo
:ensure t
:defer t)
(use-package dtrt-indent
:ensure t
:defer 5
:config
(dtrt-indent-global-mode 1))
(use-package undo-fu
:ensure t
:defer 5
:bind (("C-_" . 'undo-fu-only-undo)
("C-/" . 'undo-fu-only-redo)))
(use-package undo-fu-session
:config
(setq undo-fu-session-incompatible-files '("/COMMIT_EDITMSG\\'" "/git-rebase-todo\\'"))
(undo-fu-session-global-mode))
(use-package blamer
:ensure t
; :bind (("s-i" . blamer-show-commit-info)
; ("C-c i" . blamer-show-posframe-commit-info))
:defer 10
:custom
(blamer-idle-time 0.2)
(blamer-min-offset 70)
:config
(global-blamer-mode 1))
(use-package git-gutter
:defer 10
:hook (prog-mode . git-gutter-mode)
:config
(setq git-gutter:update-interval 0.02))
(use-package git-gutter-fringe
:defer 10
:config
(define-fringe-bitmap 'git-gutter-fr:added [224] nil nil '(center repeated))
(define-fringe-bitmap 'git-gutter-fr:modified [224] nil nil '(center repeated))
(define-fringe-bitmap 'git-gutter-fr:deleted [128 192 224 240] nil nil 'bottom))
(use-package visual-replace
:ensure t
:defer 5
:config
(visual-replace-global-mode 1))
;; :bind (("C-c r" . visual-replace)
;; :map isearch-mode-map
;; ("C-c r" . visual-replace-from-isearch)))
(use-package parinfer-rust-mode
:ensure t
:defer t
:hook ((emacs-lisp-mode common-lisp-mode lisp-mode scheme-mode) . parinfer-rust-mode)
:config
(electric-pair-mode -1))
(use-package apheleia
:ensure t
:defer t)
;; (use-package zoxide
;; :ensure t
;; :defer t
;; :hook eshell-mode
;; :straight '(:type git host: sourcehut :repo "vonfry/zoxide.el"))
(provide 'utils)
;;; utils.el ends here

View File

@@ -1,4 +1,4 @@
rg --uu --color=always --line-number --no-heading --smart-case -H "${*:-}" | tr -d '\r' |
rg -uu --color=always --line-number --no-heading --smart-case -H "${*:-}" | tr -d '\r' |
fzf-tmux --cycle -p 80%,90% --ansi \
--color "hl:-1:underline,hl+:-1:underline:reverse" \
--delimiter : \