diff options
Diffstat (limited to 'tw/home/files')
35 files changed, 0 insertions, 5143 deletions
diff --git a/tw/home/files/XCompose b/tw/home/files/XCompose deleted file mode 100644 index cb73e833..00000000 --- a/tw/home/files/XCompose +++ /dev/null @@ -1,161 +0,0 @@ -# -*- mode: conf-colon -*- -## Locale defaults -include "%S/en_US.UTF-8/Compose" -# This file apparently doesn't exist for all locales, including en_GB. -# Most useful things live in en_US, included above. -include "%L" - -## Dashes -<Multi_key> <minus> <minus> <period> : "–" U2013 # EN DASH -<Multi_key> <minus> <minus> <space> : "–" U2013 # EN DASH -<Multi_key> <minus> <n> : "–" U2013 # EN DASH -<Multi_key> <minus> <minus> <minus> : "—" U2014 # EM DASH -<Multi_key> <minus> <m> : "—" U2014 # EM DASH -<Multi_key> <minus> <1> : "—" U2014 # EM DASH -<Multi_key> <minus> <2> : "⸺" U2E3A # TWO-EM DASH -<Multi_key> <minus> <3> : "⸻" U2E3B # THREE-EM DASH -<Multi_key> <minus> <b> : "―" U2015 # HORIZONTAL BAR -<Multi_key> <minus> <h> <b> : "―" U2015 # HORIZONTAL BAR - -## Mathematical operators -<Multi_key> <minus> <x> : "−" U2212 # MINUS SIGN -<Multi_key> <minus> <plus> : "−" U2212 # MINUS SIGN -<Multi_key> <minus> <equal> <equal> : "≡" U2261 # IDENTICAL TO -<Multi_key> <minus> <equal> <slash> : "≢" U2262 # NOT IDENTICAL TO -<Multi_key> <asciitilde> <asciitilde> : "≈" U2248 # ALMOST EQUAL TO -<Multi_key> <asciitilde> <equal> : "≃" similarequal # ASYMPTOTICALLY EQUAL TO -<Multi_key> <equal> <asciitilde> : "≃" similarequal # ASYMPTOTICALLY EQUAL TO -<Multi_key> <asciitilde> <less> : "≲" U2272 # LESS-THAN OR EQUIVALENT TO -<Multi_key> <less> <asciitilde> : "≲" U2272 # LESS-THAN OR EQUIVALENT TO -<Multi_key> <asciitilde> <greater> : "≳" U2273 # GREATER-THAN OR EQUIVALENT TO -<Multi_key> <greater> <asciitilde> : "≳" U2273 # GREATER-THAN OR EQUIVALENT TO -<Multi_key> <less> <slash> <minus> : "↚" U219A # LEFTWARDS ARROW WITH STROKE -<Multi_key> <minus> <slash> <greater> : "↛" U219B # RIGHTWARDS ARROW WITH STROKE -<Multi_key> <less> <slash> <greater> : "↮" U21AE # LEFT RIGHT ARROW WITH STROKE -<Multi_key> <slash> <E> : "∄" U2204 # THERE DOES NOT EXIST -<Multi_key> <e> <slash> : "∉" U2209 # NOT AN ELEMENT OF -<Multi_key> <slash> <e> : "∌" U220C # DOES NOT CONTAIN AS MEMBER -<Multi_key> <slash> <bar> : "∤" U2224 # DOES NOT DIVIDE -<Multi_key> <bar> <slash> : "∤" U2224 # DOES NOT DIVIDE -<Multi_key> <backslash> <slash> <slash> : "∦" U2226 # NOT PARALLEL TO -<Multi_key> <slash> <backslash> <slash> : "∦" U2226 # NOT PARALLEL TO -<Multi_key> <asciitilde> <slash> : "≁" U2241 # NOT TILDE -<Multi_key> <slash> <asciitilde> : "≁" U2241 # NOT TILDE - -## Symbols -<Multi_key> <d> <i> : "⌀" U2300 # DIAMETER SIGN -# Note: also defined as <Multi_key> <N> <o>, but that's hard to remember! -<Multi_key> <n> <o> : "№" numerosign # NUMERO SIGN -# <Multi_key> <minus> <O> is already reserved for Ō -<Multi_key> <O> <minus> : "⊖" U2296 # ○ - CIRCLED MINUS -# <Multi_key> <period> <O> is already reserved for Ȯ -<Multi_key> <O> <period> : "⊙" U2299 # ○ - CIRCLED DOT - -## Whitespace -<Multi_key> <space> <b> : " " U00A0 # NO-BREAK SPACE (~) -<Multi_key> <space> <n> : " " U2002 # EN SPACE (\enspace) -<Multi_key> <space> <m> : " " U2003 # EM SPACE (\quad) -<Multi_key> <space> <3> : " " U2004 # THREE-PER-EM SPACE -<Multi_key> <space> <4> : " " U2005 # FOUR-PER-EM SPACE -<Multi_key> <space> <6> : " " U2006 # SIX-PER-EM SPACE -<Multi_key> <space> <f> : " " U2007 # FIGURE SPACE -<Multi_key> <space> <p> : " " U2008 # PUNCTUATION SPACE -<Multi_key> <space> <t> : " " U2009 # THIN SPACE (\,) -<Multi_key> <space> <h> : " " U200A # HAIR SPACE -<Multi_key> <space> <x> : " " U205F # MEDIUM MATHEMATICAL SPACE (may be used around operators) - -## Greek uppercase -<Multi_key> <g> <A> : "Α" U0391 -<Multi_key> <g> <B> : "Β" U0392 -<Multi_key> <g> <G> : "Γ" U0393 -<Multi_key> <g> <D> : "Δ" U0394 -<Multi_key> <g> <E> : "Ε" U0395 -<Multi_key> <g> <Z> : "Ζ" U0396 -<Multi_key> <g> <H> : "Η" U0397 -<Multi_key> <G> <T> : "Θ" U0398 -<Multi_key> <g> <I> : "Ι" U0399 -<Multi_key> <g> <K> : "Κ" U039A -<Multi_key> <g> <L> : "Λ" U039B -<Multi_key> <g> <M> : "Μ" U039C -<Multi_key> <g> <N> : "Ν" U039D -<Multi_key> <g> <C> : "Ξ" U039E -<Multi_key> <g> <O> : "Ο" U039F -<Multi_key> <g> <P> : "Π" U03A0 -<Multi_key> <g> <R> : "Ρ" U03A1 -<Multi_key> <g> <S> : "Σ" U03A3 -<Multi_key> <g> <T> : "Τ" U03A4 -<Multi_key> <g> <Y> : "Υ" U03A5 -<Multi_key> <g> <F> : "Φ" U03A6 -<Multi_key> <g> <X> : "Χ" U03A7 -<Multi_key> <g> <U> : "Ψ" U03A8 -<Multi_key> <g> <W> : "Ω" U03A9 - -## Greek lowercase -<Multi_key> <g> <a> : "α" U03B1 -<Multi_key> <g> <b> : "β" U03B2 -<Multi_key> <g> <g> : "γ" U03B3 -<Multi_key> <g> <d> : "δ" U03B4 -<Multi_key> <g> <e> : "ε" U03B5 -<Multi_key> <g> <z> : "ζ" U03B6 -<Multi_key> <g> <h> : "η" U03B7 -<Multi_key> <G> <t> : "θ" U03B8 -<Multi_key> <g> <i> : "ι" U03B9 -<Multi_key> <g> <k> : "κ" U03BA -<Multi_key> <g> <l> : "λ" U03BB -<Multi_key> <g> <m> : "μ" U03BC -<Multi_key> <g> <n> : "ν" U03BD -<Multi_key> <g> <c> : "ξ" U03BE -<Multi_key> <g> <o> : "ο" U03BF -<Multi_key> <g> <p> : "π" U03C0 -<Multi_key> <g> <r> : "ρ" U03C1 -<Multi_key> <G> <s> : "ς" U03C2 -<Multi_key> <g> <s> : "σ" U03C3 -<Multi_key> <g> <t> : "τ" U03C4 -<Multi_key> <g> <y> : "υ" U03C5 -<Multi_key> <g> <f> : "φ" U03C6 -<Multi_key> <G> <f> : "ɸ" U03D5 -<Multi_key> <g> <x> : "χ" U03C7 -<Multi_key> <g> <u> : "ψ" U03C8 -<Multi_key> <g> <w> : "ω" U03C9 - -## Weird symbols -# TODO: give these typeable names! -<Multi_key> <U2243> <U0338> : "≄" U2244 # NOT ASYMPTOTICALLY EQUAL TO -<Multi_key> <approximate> <U0338> : "≇" U2247 # NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO -<Multi_key> <U2248> <U0338> : "≉" U2249 # NOT ALMOST EQUAL TO -<Multi_key> <U224D> <U0338> : "≭" U226D # NOT EQUIVALENT TO -<Multi_key> <less> <U0338> : "≮" U226E # NOT LESS-THAN -<Multi_key> <leftcaret> <U0338> : "≮" U226E # NOT LESS-THAN -<Multi_key> <greater> <U0338> : "≯" U226F # NOT GREATER-THAN -<Multi_key> <rightcaret> <U0338> : "≯" U226F # NOT GREATER-THAN -<Multi_key> <lessthanequal> <U0338> : "≰" U2270 # NEITHER LESS-THAN NOR EQUAL TO -<Multi_key> <greaterthanequal> <U0338> : "≱" U2271 # NEITHER GREATER-THAN NOR EQUAL TO -<Multi_key> <U2272> <U0338> : "≴" U2274 # NEITHER LESS-THAN NOR EQUIVALENT TO -<Multi_key> <U2273> <U0338> : "≵" U2275 # NEITHER GREATER-THAN NOR EQUIVALENT TO -<Multi_key> <U2276> <U0338> : "≸" U2278 # NEITHER LESS-THAN NOR GREATER-THAN -<Multi_key> <U2277> <U0338> : "≹" U2279 # NEITHER GREATER-THAN NOR LESS-THAN -<Multi_key> <U227A> <U0338> : "⊀" U2280 # DOES NOT PRECEDE -<Multi_key> <U227B> <U0338> : "⊁" U2281 # DOES NOT SUCCEED -<Multi_key> <includedin> <U0338> : "⊄" U2284 # NOT A SUBSET OF -<Multi_key> <leftshoe> <U0338> : "⊄" U2284 # NOT A SUBSET OF -<Multi_key> <includes> <U0338> : "⊅" U2285 # NOT A SUPERSET OF -<Multi_key> <rightshoe> <U0338> : "⊅" U2285 # NOT A SUPERSET OF -<Multi_key> <U2286> <U0338> : "⊈" U2288 # NEITHER A SUBSET OF NOR EQUAL TO -<Multi_key> <U2287> <U0338> : "⊉" U2289 # NEITHER A SUPERSET OF NOR EQUAL TO -<Multi_key> <righttack> <U0338> : "⊬" U22AC # DOES NOT PROVE -<Multi_key> <U22A8> <U0338> : "⊭" U22AD # NOT TRUE -<Multi_key> <U22A9> <U0338> : "⊮" U22AE # DOES NOT FORCE -<Multi_key> <U22AB> <U0338> : "⊯" U22AF # NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE -<Multi_key> <U227C> <U0338> : "⋠" U22E0 # DOES NOT PRECEDE OR EQUAL -<Multi_key> <U227D> <U0338> : "⋡" U22E1 # DOES NOT SUCCEED OR EQUAL -<Multi_key> <U2291> <U0338> : "⋢" U22E2 # NOT SQUARE IMAGE OF OR EQUAL TO -<Multi_key> <U2292> <U0338> : "⋣" U22E3 # NOT SQUARE ORIGINAL OF OR EQUAL TO -<Multi_key> <U22B2> <U0338> : "⋪" U22EA # NOT NORMAL SUBGROUP OF -<Multi_key> <U22B3> <U0338> : "⋫" U22EB # DOES NOT CONTAIN AS NORMAL SUBGROUP -<Multi_key> <U22B4> <U0338> : "⋬" U22EC # NOT NORMAL SUBGROUP OF OR EQUAL TO -<Multi_key> <U22B5> <U0338> : "⋭" U22ED # DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL -<Multi_key> <U2ADD> <U0338> : "⫝̸" U2ADC # FORKING -<Multi_key> <underscore> <U2282> : "⊆" U2286 # _ ⊂ SUBSET OF OR EQUAL TO -<Multi_key> <U2282> <underscore> : "⊆" U2286 # ⊂ _ SUBSET OF OR EQUAL TO -<Multi_key> <underscore> <U2283> : "⊇" U2287 # _ ⊃ SUPERSET OF OR EQUAL TO -<Multi_key> <U2283> <underscore> : "⊇" U2287 # ⊃ _ SUPERSET OF OR EQUAL TO diff --git a/tw/home/files/Xresources b/tw/home/files/Xresources deleted file mode 100644 index ba534392..00000000 --- a/tw/home/files/Xresources +++ /dev/null @@ -1,13 +0,0 @@ -!! ~/.Xresources: X resources and settings - -*TkTheme: clam - -Xft.antialias: true -Xft.dpi: 96 -Xft.hinting: true -Xft.hintstyle: hintfull -Xft.lcdfilter: lcddefault -Xft.rgba: rgb - -Xcursor.theme: Catppuccin-Mocha-Dark-Cursors -Xcursor.size: 16 diff --git a/tw/home/files/aerc/accounts.conf b/tw/home/files/aerc/accounts.conf deleted file mode 100644 index 5325ee03..00000000 --- a/tw/home/files/aerc/accounts.conf +++ /dev/null @@ -1,97 +0,0 @@ -# Note: when adding/removing/editing an account name here, edit -# [messages:account=] and [messages:folder=] sections in binds.conf to match! - -[Mythic] -source = imaps://timo%40twilken.net@oncilla.mythic-beasts.com -outgoing = smtps+plain://timo%40twilken.net@smtp-auth.mythic-beasts.com -source-cred-cmd = pass www/mythic-beasts/email/timo | head -1 -outgoing-cred-cmd = pass www/mythic-beasts/email/timo | head -1 -default = INBOX -from = Timo Wilken <timo@twilken.net> -archive = Archive -copy-to = Sent -postpone = Drafts -folders-sort = INBOX,Archive,Sent,Drafts -cache-headers = true -pgp-auto-sign = true -pgp-key-id = 53EC3C06856883DD92355BC22FC78504681F69B0 -pgp-opportunistic-encrypt = true - -[CERN] -# https://man.sr.ht/~rjarry/aerc/providers/microsoft.md#office365-with-xoauth2 -source = imaps+xoauth2://timo.wilken%40cern.ch@outlook.office365.com?client_id=9e5f94bc-e8a4-4e73-b8be-63364c29d753&token_endpoint=https://login.microsoftonline.com/common/oauth2/v2.0/token&scope=https://outlook.office.com/SMTP.Send https://outlook.office.com/IMAP.AccessAsUser.All offline_access -outgoing = smtp+xoauth2://timo.wilken%40cern.ch@smtp.office365.com:587?client_id=9e5f94bc-e8a4-4e73-b8be-63364c29d753&token_endpoint=https://login.microsoftonline.com/common/oauth2/v2.0/token&scope=https://outlook.office.com/SMTP.Send https://outlook.office.com/IMAP.AccessAsUser.All offline_access -# To authorize for the first time (to get refresh token): -# mutt_oauth2.py ~/.local/share/aerc/cern.tokens --authorize --authflow authcode --provider microsoft \ -# --email timo.wilken@cern.ch --client-id 9e5f94bc-e8a4-4e73-b8be-63364c29d753 --client-secret '' \ -# --encryption-pipe 'gpg --encrypt --recipient timo@twilken.net' -# Confirm empty client secret. When done, copy-paste ?code= value from final URL to the command-line. -# Then, to store the refresh token: -# gpg --decrypt ~/.local/share/aerc/cern.tokens | jq -r .refresh_token | pass insert -e -f cern/exol/refresh-token -source-cred-cmd = pass cern/exol/refresh-token -outgoing-cred-cmd = pass cern/exol/refresh-token -default = INBOX -from = Timo Wilken <timo.wilken@cern.ch> -aliases = twilken@cern.ch -archive = Archive -copy-to = Sent Items -postpone = Drafts -folders-sort = INBOX,Archive,Sent Items,Drafts -folders-exclude = Calendar,~Calendar/.*,Contacts,Conversation History,Journal,Notes,Tasks -cache-headers = true -pgp-auto-sign = true -pgp-key-id = C2249BBE5E8761C943A0CFA1B7B3914BF63ACD7C -# Don't auto-encrypt mail, even if we have the keys of all recipients. -pgp-opportunistic-encrypt = false - -[Gmail] -source = imaps://timo.21.wilken%40gmail.com@imap.gmail.com -outgoing = smtps+login://timo.21.wilken%40gmail.com@smtp.gmail.com -source-cred-cmd = pass www/google/app-passwords/mutt | head -1 -outgoing-cred-cmd = pass www/google/app-passwords/mutt | head -1 -default = INBOX -from = Timo Wilken <timo.21.wilken@gmail.com> -archive = [Gmail]/All Mail -copy-to = [Gmail]/Sent Mail -postpone = [Gmail]/Drafts -folders-sort = INBOX,[Gmail]/All Mail,[Gmail]/Sent Mail,[Gmail]/Drafts -folders-exclude = [Gmail],[Gmail]/Chats,[Gmail]/Important -cache-headers = true -trusted-authres = mx.google.com -pgp-auto-sign = true -pgp-key-id = 53EC3C06856883DD92355BC22FC78504681F69B0 -pgp-opportunistic-encrypt = true - -[Cantab] -source = imaps+xoauth2://tw466%40cantab.ac.uk@outlook.office365.com?client_id=9e5f94bc-e8a4-4e73-b8be-63364c29d753&token_endpoint=https://login.microsoftonline.com/common/oauth2/v2.0/token&scope=https://outlook.office.com/SMTP.Send https://outlook.office.com/IMAP.AccessAsUser.All offline_access -outgoing = smtp+xoauth2://tw466%40cantab.ac.uk@smtp-mail.outlook.com:587?client_id=9e5f94bc-e8a4-4e73-b8be-63364c29d753&token_endpoint=https://login.microsoftonline.com/common/oauth2/v2.0/token&scope=https://outlook.office.com/SMTP.Send https://outlook.office.com/IMAP.AccessAsUser.All offline_access -source-cred-cmd = pass cambridge/exol-refresh-token -outgoing-cred-cmd = pass cambridge/exol-refresh-token -default = INBOX -from = Timo Wilken <tw466@cantab.ac.uk> -archive = Archive -copy-to = Sent Items -postpone = Drafts -folders-sort = INBOX,Archive,Sent Items,Drafts -folders-exclude = Calendar,~Calendar/.*,Contacts,Conversation History,Journal,Notes,Tasks -cache-headers = true -pgp-auto-sign = true -pgp-key-id = 53EC3C06856883DD92355BC22FC78504681F69B0 -pgp-opportunistic-encrypt = true - -[Outlook] -source = imaps+xoauth2://timo_wilken%40live.co.uk@outlook.office365.com?client_id=9e5f94bc-e8a4-4e73-b8be-63364c29d753&token_endpoint=https://login.microsoftonline.com/common/oauth2/v2.0/token&scope=https://outlook.office.com/SMTP.Send https://outlook.office.com/IMAP.AccessAsUser.All offline_access -outgoing = smtp+xoauth2://timo_wilken%40live.co.uk@smtp-mail.outlook.com:587?client_id=9e5f94bc-e8a4-4e73-b8be-63364c29d753&token_endpoint=https://login.microsoftonline.com/common/oauth2/v2.0/token&scope=https://outlook.office.com/SMTP.Send https://outlook.office.com/IMAP.AccessAsUser.All offline_access -source-cred-cmd = pass www/microsoft/exol-refresh-token -outgoing-cred-cmd = pass www/microsoft/exol-refresh-token -default = INBOX -from = Timo Wilken <timo_wilken@live.co.uk> -archive = Archive -copy-to = Sent -postpone = Drafts -folders-sort = INBOX,Archive,Sent,Drafts -folders-exclude = Notes -cache-headers = true -pgp-auto-sign = true -pgp-key-id = 53EC3C06856883DD92355BC22FC78504681F69B0 -pgp-opportunistic-encrypt = true diff --git a/tw/home/files/aerc/accounts.work.conf b/tw/home/files/aerc/accounts.work.conf deleted file mode 100644 index 5d2fa7c7..00000000 --- a/tw/home/files/aerc/accounts.work.conf +++ /dev/null @@ -1,26 +0,0 @@ -[CERN] -# https://man.sr.ht/~rjarry/aerc/providers/microsoft.md#office365-with-xoauth2 -source = imaps+xoauth2://timo.wilken%40cern.ch@outlook.office365.com?client_id=9e5f94bc-e8a4-4e73-b8be-63364c29d753&token_endpoint=https://login.microsoftonline.com/common/oauth2/v2.0/token&scope=https://outlook.office.com/SMTP.Send https://outlook.office.com/IMAP.AccessAsUser.All offline_access -outgoing = smtp+xoauth2://timo.wilken%40cern.ch@smtp.office365.com:587?client_id=9e5f94bc-e8a4-4e73-b8be-63364c29d753&token_endpoint=https://login.microsoftonline.com/common/oauth2/v2.0/token&scope=https://outlook.office.com/SMTP.Send https://outlook.office.com/IMAP.AccessAsUser.All offline_access -# To authorize for the first time (to get refresh token): -# mutt_oauth2.py ~/.local/share/aerc/twilken.tokens --authorize --authflow authcode --provider microsoft \ -# --email timo.wilken@cern.ch --client-id 9e5f94bc-e8a4-4e73-b8be-63364c29d753 --client-secret '' \ -# --encryption-pipe 'gpg --encrypt --recipient C2249BBE5E8761C943A0CFA1B7B3914BF63ACD7C' -# Confirm empty client secret. When done, copy-paste ?code= value from final URL to the command-line. -# Then, to store the refresh token: -# gpg --decrypt ~/.local/share/aerc/twilken.tokens | jq -r .refresh_token | pass insert -e -f cern/exol/refresh-token -source-cred-cmd = pass cern/exol/refresh-token -outgoing-cred-cmd = pass cern/exol/refresh-token -default = INBOX -from = Timo Wilken <timo.wilken@cern.ch> -aliases = twilken@cern.ch -archive = Archive -copy-to = Sent Items -postpone = Drafts -folders-sort = INBOX,Archive,Sent Items,Drafts -folders-exclude = Calendar,~Calendar/.*,Contacts,Conversation History,Journal,Notes,Tasks -cache-headers = true -pgp-auto-sign = true -pgp-key-id = C2249BBE5E8761C943A0CFA1B7B3914BF63ACD7C -# Don't auto-encrypt mail, even if we have the keys of all recipients. -pgp-opportunistic-encrypt = false diff --git a/tw/home/files/aerc/aerc.conf b/tw/home/files/aerc/aerc.conf deleted file mode 100644 index 7473bc8b..00000000 --- a/tw/home/files/aerc/aerc.conf +++ /dev/null @@ -1,157 +0,0 @@ -# aerc main configuration - -[general] -#default-save-path= -# Allow world-readable accounts.conf. This is fine as I don't store any -# passwords there, only "pass" commands. -unsafe-accounts-conf=true - -[ui] -# Describes the format for each row in a mailbox view. This field is compatible -# with mutt's printf-like syntax. -index-columns=num>4,flags>4,date<21,peers<17,subject<* -column-num={{.Number}} -column-flags={{.Flags | join ""}} -column-date={{.DateAutoFormat .Date.Local}} -column-peers={{.Peer | names | join ", "}} -column-subject={{.ThreadPrefix}}{{.Subject}} - -# See time.Time#Format at https://godoc.org/time#Time.Format -timestamp-format=Mon _2 Jan 2006 15:04 - -# 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. -sort=-r date - -threading-enabled=true - -next-message-on-delete=false - -sidebar-width=24 - -styleset-name=catppuccin -pinned-tab-marker='📌' -# Use box-drawing characters for vertical and horizontal borders. -border-char-vertical=│ -border-char-horizontal=─ -# Use UTF-8 symbols to indicate PGP status of messages -icon-unencrypted= -icon-encrypted=🔒 -icon-signed=✔ -icon-signed-encrypted=✔🔒 -icon-unknown=✘ -icon-invalid=⚠ - -# 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. -#fuzzy-complete=false - -[statusline] -status-columns=left<*,centre>=,right>* -column-left=[{{.Account}}] {{.StatusInfo}} -column-centre={{.PendingKeys}} -column-right={{.ContentInfo}} {{.TrayInfo}} - -# Defines the mode for displaying the status elements. -# Options: text, icon -display-mode=icon - -[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. -pager='env LESSKEYIN=/dev/null less -iRM' - -# 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. -alternatives=text/plain,text/html - -# 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. -#header-layout=From|To,Cc|Bcc,Date,Subject - -[compose] -# 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". -#header-layout=To|From,Subject - -# 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=khard email --parsable %s - -# Allow to address yourself when replying -reply-to-self=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). -no-attachment-warning=^[^>]*(attach|Anhang|angehängt) - -[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 appended to -# the system $PATH to allow referencing filters from their name only: -# -# ${XDG_CONFIG_HOME:-~/.config}/aerc/filters -# ${XDG_DATA_HOME:-~/.local/share}/aerc/filters -# $PREFIX/share/aerc/filters -# /usr/share/aerc/filters -# -# The following variables are defined in the filter command environment: -# -# AERC_MIME_TYPE the part MIME type/subtype -# AERC_FILENAME the attachment filename (if any) -# -# 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.ansi -text/calendar=calendar -message/delivery-status=colorize.ansi -message/rfc822=colorize.ansi -#text/html=pandoc -f html -t plain | colorize -#text/html=html | colorize -text/html=lynx -display_charset=UTF-8 -force_html -dump -stdin -#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=fmt -w 72 | colorize - -[openers] -# Openers allow you to specify the command to use for the :open action on a -# per-MIME-type basis. -# -# {} is expanded as the temporary filename to be opened. If it is not -# encountered in the command, the temporary filename will be appened to the end -# of the command. -# -# Examples: -# text/html=surf -dfgms -# text/plain=gvim {} +125 -# message/rfc822=thunderbird -application/pdf=zathura -image/*=imv - -[hooks] -# Executed when a new email arrives in the selected folder -new-email=dunstify -a aerc -i mail-unread "New mail from $AERC_FROM_NAME" "$AERC_SUBJECT" diff --git a/tw/home/files/aerc/binds.conf b/tw/home/files/aerc/binds.conf deleted file mode 100644 index 0e88b571..00000000 --- a/tw/home/files/aerc/binds.conf +++ /dev/null @@ -1,194 +0,0 @@ -# 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-n> = :next-tab<Enter> -<C-t> = :term<Enter> -? = :help keys<Enter> - -[messages] -q = :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> -"#" = :select<space> - -J = :next-folder<Enter> -K = :prev-folder<Enter> -H = :collapse-folder<Enter> -L = :expand-folder<Enter> - -"*" = :mark -a<Enter> -v = :mark -t<Enter> -V = :mark -T<Enter> -F = :flag -tx Flagged<Enter> -<C-r> = :read -t<Enter> -<semicolon> = :remark<Enter> - -T = :toggle-threads<Enter> - -<Enter> = :view<Enter> -A = :archive flat<Enter> -p = :split 25<Enter> -e = :envelope<Enter> - -m = :compose<Enter> -M = :mkdir<space> - -f = :forward -F<Enter> -a = :reply -aq<Enter> -r = :reply -q<Enter> - -C = :copy<space> -S = :save<space> -s = :move<space> -E = :export-mbox<space> -I = :import-mbox<space> - -c = :cf<space> -$ = :check-mail<Enter> -! = :term<space> -| = :pipe<space> - -/ = :search<space> -l = :filter<space> -n = :next-result<Enter> -N = :prev-result<Enter> -<Esc> = :clear<Enter>:unmark -a<Enter> - -[messages:folder=Drafts] -<Enter> = :recall<Enter> - -[view:account=Mythic] -D = :move Rubbish<Enter> -[messages:account=Mythic] -d = :move Rubbish<Enter> -D = :move Rubbish<Enter> -# We can't use both :account= and :folder= at the same time, unfortunately. -[messages:folder=Rubbish] -d = :delete<Enter> -D = :delete<Enter> - -[view:account=Wilken] -D = :move Rubbish<Enter> -[messages:account=Wilken] -d = :move Rubbish<Enter> -D = :move Rubbish<Enter> -[messages:folder=Rubbish] -d = :delete<Enter> -D = :delete<Enter> - -[view:account=CERN] -D = :move Deleted Items<Enter> -[messages:account=CERN] -d = :move Deleted Items<Enter> -D = :move Deleted Items<Enter> -[messages:folder=Deleted Items] -d = :delete<Enter> -D = :delete<Enter> - -[view:account=Gmail] -D = :move [Gmail]/Bin<Enter> -[messages:account=Gmail] -d = :move [Gmail]/Bin<Enter> -D = :move [Gmail]/Bin<Enter> -[messages:folder=[Gmail]/Bin] -d = :delete<Enter> -D = :delete<Enter> -[messages:folder=[Gmail]/Drafts] -<Enter> = :recall<Enter> - -[view:account=Cantab] -D = :move Deleted Items<Enter> -[messages:account=Cantab] -d = :move Deleted Items<Enter> -D = :move Deleted Items<Enter> -[messages:folder=Deleted Items] -d = :delete<Enter> -D = :delete<Enter> - -[view:account=Outlook] -D = :move Deleted<Enter> -[messages:account=Outlook] -d = :move Deleted<Enter> -D = :move Deleted<Enter> -[messages:folder=Deleted] -d = :delete<Enter> -D = :delete<Enter> - -[view] -/ = :toggle-key-passthrough<Enter>/ -q = :close<Enter> -O = :open<Enter> -S = :save<space> -| = :pipe<space> -A = :archive flat<Enter> - -<C-l> = :open-link <space> -<C-v> = :toggle-key-passthrough<Enter> - -f = :forward -F<Enter> -a = :reply -aq<Enter> -r = :reply -q<Enter> - -H = :toggle-headers<Enter> -<C-k> = :prev-part<Enter> -<C-j> = :next-part<Enter> -J = :next<Enter> -K = :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> -<C-k> = :prev-field<Enter> -<C-j> = :next-field<Enter> -<A-p> = :switch-account -p<Enter> -<A-n> = :switch-account -n<Enter> -<tab> = :next-field<Enter> -<C-p> = :prev-tab<Enter> -<C-n> = :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-j> = :next-field<Enter> -<C-p> = :prev-tab<Enter> -<C-n> = :next-tab<Enter> - -[compose::review] -# Keybindings used when reviewing a message to be sent -y = :send<Enter> -n = :abort<Enter> -p = :postpone<Enter> -q = :choose -o d discard abort -o p postpone postpone<Enter> -e = :edit<Enter> -a = :attach<space> -d = :detach<space> -v = :preview<Enter> -s = :sign<Enter> -c = :encrypt<Enter> - -[terminal] -$noinherit = true -$ex = <C-x> -<C-p> = :prev-tab<Enter> -<C-n> = :next-tab<Enter> diff --git a/tw/home/files/aerc/filters/colorize.ansi b/tw/home/files/aerc/filters/colorize.ansi deleted file mode 100755 index c21fd804..00000000 --- a/tw/home/files/aerc/filters/colorize.ansi +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env -S awk -f -# Copyright (c) 2022 Robin Jarry -# Adapted for standard ANSI colors (for catppuccin theme) by Timo Wilken. - -BEGIN { - url = "\033[32m" # green - header = "\033[35m" # pink - signature = "\033[38m" # Surface 2 - diff_meta = "\033[1;37m" # bold white - diff_chunk = "\033[36m" # teal - diff_add = "\033[32m" # green - diff_del = "\033[31m" # red - quote_1 = "\033[38;5;15m" # Subtext 0 - quote_2 = "\033[37m" # Subtext 1 - quote_3 = "\033[38m" # Surface 2 - quote_4 = "\033[30m" # Surface 1 - quote_x = "\033[30m" # Surface 1 - bold = "\033[1m" - reset = "\033[0m" - # state - in_diff = 0 - in_signature = 0 - in_headers = 0 - in_body = 0 - # patterns - header_pattern = @/^[A-Z][[:alnum:]-]+:/ - url_pattern = @/[a-z]{2,6}:\/\/[[:graph:]]+|(mailto:)?[[:alnum:]_\+\.~\/-]*[[:alnum:]_]@[[:lower:]][[:alnum:]\.-]*[[:lower:]]/ - meta_pattern = @/^(diff --git|(new|deleted) file|similarity index|(rename|copy) (to|from)|index|---|\+\+\+) / -} -function color_quote(line) { - level = 0 - quotes = "" - while (line ~ /^>/) { - level += 1 - quotes = quotes ">" - line = substr(line, 2) - while (line ~ /^ /) { - quotes = quotes " " - line = substr(line, 2) - } - } - if (level == 1) { - color = quote_1 - } else if (level == 2) { - color = quote_2 - } else if (level == 3) { - color = quote_3 - } else if (level == 4) { - color = quote_4 - } else { - color = quote_x - } - if (line ~ meta_pattern) { - return color quotes bold line reset - } else if (line ~ /^\+/) { - return color quotes diff_add line reset - } else if (line ~ /^-/) { - return color quotes diff_del line reset - } - gsub(url_pattern, url "&" color, line) - return color quotes line reset -} -{ - # Strip carriage returns from line - sub(/\r$/, "") - - if (in_diff) { - if ($0 ~ /^-- ?$/) { - in_diff = 0 - in_signature = 1 - $0 = signature $0 reset - } else if ($0 ~ /^@@ /) { - gsub(/^@@[^@]+@@/, diff_chunk "&" reset) - } else if ($0 ~ meta_pattern) { - $0 = diff_meta $0 reset - } else if ($0 ~ /^\+/) { - $0 = diff_add $0 reset - } else if ($0 ~ /^-/) { - $0 = diff_del $0 reset - } else if ($0 !~ /^ / && $0 !~ /^$/) { - in_diff = 0 - in_body = 1 - if ($0 ~ /^>/) { - $0 = color_quote($0) - } else { - gsub(url_pattern, url "&" reset) - } - } - } else if (in_signature) { - gsub(url_pattern, url "&" signature) - $0 = signature $0 reset - } else if (in_headers) { - if ($0 ~ /^$/) { - in_headers = 0 - in_body = 1 - } else { - sub(header_pattern, header "&" reset) - gsub(url_pattern, url "&" reset) - } - } else if (in_body) { - if ($0 ~ /^>/) { - $0 = color_quote($0) - } else if ($0 ~ /^diff --git /) { - in_body = 0 - in_diff = 1 - $0 = diff_meta $0 reset - } else if ($0 ~ /^-- ?$/) { - in_body = 0 - in_signature = 1 - $0 = signature $0 reset - } else { - gsub(url_pattern, url "&" reset) - } - } else if ($0 ~ /^diff --git /) { - in_diff = 1 - $0 = diff_meta $0 reset - } else if ($0 ~ /^-- ?$/) { - in_signature = 1 - $0 = signature $0 reset - } else if ($0 ~ header_pattern) { - in_headers = 1 - sub(header_pattern, header "&" reset) - gsub(url_pattern, url "&" reset) - } else { - in_body = 1 - if ($0 ~ /^>/) { - $0 = color_quote($0) - } else { - gsub(url_pattern, url "&" reset) - } - } - - print -} diff --git a/tw/home/files/cursors.ini b/tw/home/files/cursors.ini deleted file mode 100644 index c4eb9cdb..00000000 --- a/tw/home/files/cursors.ini +++ /dev/null @@ -1,4 +0,0 @@ -[Icon Theme] -Name=Default -Comment=Default Cursor Theme -Inherits=Catppuccin-Mocha-Dark-Cursors diff --git a/tw/home/files/dunstrc b/tw/home/files/dunstrc deleted file mode 100644 index c64d374f..00000000 --- a/tw/home/files/dunstrc +++ /dev/null @@ -1,98 +0,0 @@ -# See dunst(5) for all configuration options -*- mode: conf -*- - -[global] - ### Display ### - - # Display notification on focused monitor. Possible modes are: - # mouse: follow mouse pointer - # keyboard: follow window with keyboard focus - # none: don't follow anything - # - # "keyboard" needs a window manager that exports the - # _NET_ACTIVE_WINDOW property. - # This should be the case for almost all modern window managers. - # - # If this option is set to mouse or keyboard, the monitor option - # will be ignored. - follow = mouse - - ### Geometry ### - - # dynamic width from 0 to 300 - # width = (0, 300) - # constant width of 300 - width = 300 - - # The maximum height of a single notification, excluding the frame. - height = 300 - - # Offset from the origin - # Leave 24pt space for polybar. - offset = 16x40 - - # Don't remove messages, if the user is idle (no mouse or keyboard input) - # for longer than idle_threshold seconds. - # Set to 0 to disable. - # A client can set the 'transient' hint to bypass this. See the rules - # section for how to disable this if necessary - idle_threshold = 120 - - ### Text ### - - font = Fira Sans 12 - - # The format of the message. Possible variables are: - # %a appname - # %s summary - # %b body - # %i iconname (including its path) - # %I iconname (without its path) - # %p progress value if set ([ 0%] to [100%]) or nothing - # %n progress value if set without any extra characters - # %% Literal % - # Markup is allowed - # format = "<b>%s</b>\n%b" - format = "<span size='x-small'>%a %p</span>\n<b>%s</b>\n%b" - - ### Icons ### - - # Recursive icon lookup. You can set a single theme, instead of having to - # define all lookup paths. - enable_recursive_icon_lookup = true - - # Set icon theme (only used for recursive icon lookup) - # You can also set multiple icon themes, with the leftmost one being used first. - # icon_theme = "Adwaita, breeze" - icon_theme = "Papirus-Dark, hicolor" - - ### History ### - - # Maximum amount of notifications kept in history - history_length = 100 - - ### Misc/Advanced ### - - # dmenu path. - dmenu = /usr/bin/env rofi -dmenu -p dunst: - - # Browser for opening urls in context menu. - browser = /usr/bin/env xdg-open - - ### mouse - - # Defines list of actions for each mouse event - # Possible values are: - # * none: Don't do anything. - # * do_action: Invoke the action determined by the action_name rule. If there is no - # such action, open the context menu. - # * open_url: If the notification has exactly one url, open it. If there are multiple - # ones, open the context menu. - # * close_current: Close current notification. - # * close_all: Close all notifications. - # * context: Open context menu for the notification. - # * context_all: Open context menu for all notifications. - # These values can be strung together for each mouse event, and - # will be executed in sequence. - mouse_left_click = close_current - mouse_middle_click = do_action, close_current - mouse_right_click = close_all diff --git a/tw/home/files/emacs-init.el b/tw/home/files/emacs-init.el deleted file mode 100644 index 0f20782d..00000000 --- a/tw/home/files/emacs-init.el +++ /dev/null @@ -1,1027 +0,0 @@ -;;; init.el --- Emacs configuration. -*- lexical-binding: t -*- -;;; Commentary: -;;; Code: - -(startup-redirect-eln-cache - (expand-file-name "emacs/eln" (or (getenv "XDG_CACHE_HOME") "~/.cache/"))) -(add-hook 'after-init-hook #'native-compile-prune-cache) - -;; Load settings set through Custom. -;; (setq custom-file (locate-user-emacs-file "custom.el")) -;; (when (file-readable-p custom-file) -;; (load custom-file)) - -(defun tw/xdg-emacs-subdir (type name &optional create) - "Get the name of a file or directory called NAME under $XDG_<TYPE>_HOME/emacs. -If CREATE is true and the resulting directory does not exist, create it." - (let ((dir (expand-file-name - (concat "emacs/" (string-trim-right name "/")) - (pcase type - ('cache (or (getenv "XDG_CACHE_HOME") "~/.cache/")) - ('config (or (getenv "XDG_CONFIG_HOME") "~/.config/")) - ('data (or (getenv "XDG_DATA_HOME") "~/.local/share/")) - ;; The following two are Guix/GuixSD extensions. - ('log (or (getenv "XDG_LOG_HOME") "~/.local/var/log/")) - ('state (or (getenv "XDG_STATE_HOME") "~/.local/var/lib/")) - (_ (error "Unknown XDG directory type: %S" type)))))) - (when (and create (not (file-accessible-directory-p dir))) - (make-directory dir t)) - dir)) - -;; Global/built-in Custom settings -;; Apply these as early as possible so that e.g. the native-comp files go to the right place. -(mapc (apply-partially #'apply #'customize-set-variable) - `((native-comp-async-report-warnings-errors silent "Don't pop up Warnings buffer for native compilation.") - ;; Emacs GUI customization. - (inhibit-startup-screen t "Don't show the startup screen with help links.") - (menu-bar-mode nil "Hide the menu bar globally.") - (tool-bar-mode nil "Hide the tool bar globally.") - (tooltip-mode nil "Show tooltips in the echo area instead.") - (max-mini-window-height 3 "Let the echo area grow to a maximum of 3 lines, e.g. when using `eldoc-mode'.") - (scroll-up-aggressively 0.0 "Don't recenter the window if the point moves off the page.") - (scroll-down-aggressively 0.0 "Don't recenter the window if the point moves off the page.") - (pixel-scroll-precision-mode t "Enable pixel-by-pixel scrolling, e.g. to handle inline images.") - ;; Niceties. - (tramp-default-method "scpx" "ssh and scp hang forever. scpx is faster than sshx for large files.") - (global-hl-line-mode t "Highlight the current line in all buffers.") - (indicate-empty-lines t "Show a little marker in the margin for lines past EOF.") - (column-number-mode t "Show the column number in the statusline.") - (electric-pair-mode t "Auto-pair suitable characters like parentheses.") - (tab-always-indent complete "Enable completion-on-tab.") - (completion-cycle-threshold 6 "Allow cycling through completions if there are 6 or fewer of them.") - (completion-styles (basic partial-completion) "Enable fast completion styles.") - (shell-kill-buffer-on-exit t "Kill *shell* buffers as soon as their shell session exits.") - ;; Indentation, formatting. - (indent-tabs-mode nil "Always use spaces to indent.") - (sentence-end-double-space nil "Use a single space after a sentence.") - (fill-column 78 "Make hard-wrapped text a bit wider.") - (require-final-newline t "Always add a final newline on save, if there is none.") - ;; Make Emacs a good Guix citizen. - (package-archives nil "Don't fetch packages from the internet; only get them from Guix.") - ;; Default mode. - (major-mode text-mode "Use `text-mode' by default in new buffers, not `fundamental-mode'.") - ;; Recent files and history. Keep them out of ~/.config. - (package-user-dir ,(tw/xdg-emacs-subdir 'data "elpa") "Save ELPA-related files here.") - (auto-save-list-file-prefix ,(tw/xdg-emacs-subdir 'data "auto-save-list/saves-") "Put auto-save lists here.") - (make-backup-files nil "Don't create backup files. They're annoying.") - (backup-directory-alist (("." . ,(tw/xdg-emacs-subdir 'data "backup"))) "Put backup files in a sensible place.") - (backup-by-copying t "Avoid breaking hardlinks when making backup files.") - (auto-save-file-name-transforms - ;; `file-name-as-directory' is important, since Emacs takes the directory part when UNIQUIFY is t. - ((".*" ,(file-name-as-directory (tw/xdg-emacs-subdir 'data "auto-save" t)) t)) - "Put auto-save #files# in a sensible directory.") - (recentf-max-saved-items 1000 "Save lots of recently-opened files.") - (recentf-save-file ,(tw/xdg-emacs-subdir 'data "recentf.el") "Save recently-opened files here.") - (recentf-mode t "Save recently-opened files.") - (savehist-file ,(tw/xdg-emacs-subdir 'data "savehist.el") "Save minibuffer history here.") - (savehist-mode t "Save minibuffer history on quit."))) - -(defalias 'yes-or-no-p #'y-or-n-p - "Always use `y-or-n-p' when asking for confirmation.") - -;; Custom modes depending on file names. -(mapc (apply-partially #'add-to-list 'auto-mode-alist) - `((,(rx (or bos "/") "PKGBUILD" eos) . bash-ts-mode) - (,(rx ".install" eos) . bash-ts-mode) - (,(rx (or bos "/") "COMMIT_EDITMSG" eos) . diff-mode) ; useful for `git commit -v' - (,(rx bos "/tmp/neomutt-") . mail-mode) - (,(rx ".eml" eos) . mail-mode) - (,(rx "." (1+ anything) "rc" eos) . conf-unix-mode))) - -(add-to-list 'magic-mode-alist - `(,(rx "#!" (* (not space)) - (? "env" (+ space) (? "-S" (+ space))) - (or "guile" "racket")) - . scheme-mode)) - -(add-hook 'mail-mode-hook #'auto-fill-mode) - -(defun tw/show-trailing-whitespace () - "Highlight trailing spaces in the current buffer." - (setq-local show-trailing-whitespace t)) - -(mapc (lambda (hook) - (add-hook hook #'tw/show-trailing-whitespace)) - '(prog-mode-hook conf-mode-hook yaml-mode-hook alidist-mode-hook)) - -(defun tw/enable-word-wrap () - "Enable word wrapping." - (toggle-word-wrap +1)) -(add-hook 'markdown-mode-hook #'tw/enable-word-wrap) -(add-hook 'org-mode-hook #'tw/enable-word-wrap) - -;; `use-package' requirements. -(require 'package) -(package-initialize t) -(eval-when-compile - (require 'use-package)) -(use-package diminish) ; for using :diminish later -(use-package bind-key) ; for using :bind later - -;; Some packages below have `:commands (...) :demand t'. -;; We need :commands for the byte-compiler, but we want to load the package immediately. - -(use-package gcmh ; "garbage collector magic hack": run GC when not in focus - :config (gcmh-mode +1) - :diminish gcmh-mode) - -;; Look and feel -(set-face-attribute 'default nil :family "Hermit" :height 100) -;; For some reason, Emacs doesn't detect italic support, and falls back to -;; underlining. Stop it from doing this and use italics instead. -(set-face-attribute 'italic nil :slant 'italic :underline nil) - -(use-package catppuccin-theme - :load-path "./" - :custom - (catppuccin-flavor 'mocha "Use the darkest Catppuccin theme.") - (catppuccin-italic-comments t "Make comments italic. It looks nicer.") - (catppuccin-italic-variables t "Make variable names italic. It looks nicer.") - :config (catppuccin-reload)) - -(use-package smart-mode-line - :hook (after-init . sml/setup) - :custom - (sml/no-confirm-load-theme t "Stop Emacs from constantly asking for user confirmation.") - (sml/mode-width 'right "Move the minor-mode list to the right of the modeline.") - (sml/theme 'respectful "Make `smart-mode-line' blend in with the active theme.")) - -;; General editor behaviour. -;; TODO: Move from ivy + counsel to vertico + orderless + consult + marginalia -;; (+ embark?), to integrate better with vanilla Emacs and `completing-read'. -;; https://github.com/minad/vertico -- light completion engine -;; https://github.com/minad/vertico#child-frames-and-popups -;; https://github.com/minad/vertico#complementary-packages -;; https://github.com/minad/marginalia -- docstrings in M-x menu -;; https://github.com/oantolin/orderless -- regex search for vertico -;; https://github.com/minad/consult -- collection of commands using vertico -;; https://github.com/oantolin/embark -- make vertico better depending on thing at point - -(use-package ivy - :commands (ivy-mode) :demand t - :custom - (ivy-use-selectable-prompt t "Allow selecting the ivy input as-is.") - (ivy-use-virtual-buffers t "Show recentf and bookmarks in buffers list.") - :config (ivy-mode +1) - :diminish ivy-mode) - -(use-package counsel ; extra niceties for `ivy-mode' - :after (ivy evil) ; evil for :bind-ing to <leader> - :bind (("<leader>SPC" . counsel-M-x) ; <leader><leader> doesn't work - ("<leader>fr" . counsel-buffer-or-recentf) - :map evil-visual-state-map - ("<leader>SPC" . counsel-M-x)) - :commands (counsel-mode) :demand t - :config (counsel-mode +1) - :diminish counsel-mode) - -(use-package dash-docs - :custom - (dash-docs-docsets-path - (file-name-as-directory (tw/xdg-emacs-subdir 'data "dash-docsets" t)) - "Store docsets in the XDG data directory.") - (dash-docs-browser-func 'eww "Open documentation pages using `eww' instead of an external browser.") - (dash-docs-enable-debugging nil "Disable popping up useless warnings.")) - -(defun tw/counsel-dash-is-help () - "Install `counsel-dash-at-point' as `evil-lookup-func'." - ;; Note: `evil-lookup-func' is already set to something else by - ;; `tw/help-is-eldoc' for `eglot-mode'. - (setq-local evil-lookup-func #'counsel-dash-at-point - counsel-dash-docsets - (cl-case major-mode - (lisp-mode '("Common Lisp")) - ((python-mode python-ts-mode) '("Python 3")) - (c++-mode '("C++")) - (cmake-mode '("CMake")) - (puppet-mode '("Puppet")) - (yaml-mode '("Ansible")) - (tcl-mode '("Tcl")) - (html-mode '("HTML" "CSS")) - ((css-mode css-ts-mode) '("CSS")) - (web-mode '("HTML" "CSS"))))) - -(use-package counsel-dash - :after (dash-docs which-key) - :commands (counsel-dash-at-point) :demand t - :init (which-key-add-key-based-replacements - "<leader>d" '("docs" . "Documentation")) - :bind (("<leader>K" . counsel-dash-at-point) - ("<leader>dK" . counsel-dash) - ("<leader>di" . counsel-dash-install-docset) - ("<leader>da" . counsel-dash-activate-docset) - ("<leader>dd" . counsel-dash-deactivate-docset)) - :hook (( lisp-mode python-mode python-ts-mode cmake-mode c++-mode puppet-mode yaml-mode - tcl-mode html-mode css-mode css-ts-mode web-mode) - . tw/counsel-dash-is-help) - :config - ;; Activate all installed docsets by default. - (setq counsel-dash-common-docsets (dash-docs-installed-docsets))) - -(use-package rainbow-mode - :after (evil) - :bind (("<leader>tR" . rainbow-mode))) - -(use-package form-feed - :commands (global-form-feed-mode) :demand t - :config (global-form-feed-mode +1) - :diminish form-feed-mode) - -(use-package display-line-numbers - ;; Included in Emacs >= 26. Better than `linum-mode'. - ;; There is also `global-display-line-numbers-mode', but that also - ;; enables line numbers in help windows, which I don't want. - :hook (prog-mode conf-mode yaml-mode alidist-mode)) - -(use-package which-key - :commands (which-key-mode) :demand t - :config (which-key-mode +1) - :diminish which-key-mode) - -(use-package undo-tree - :after (evil) ; for our :bind-ing - :bind (("<leader>U" . undo-tree-visualize)) - :custom - (undo-tree-history-directory-alist - `(("." . ,(file-name-as-directory (tw/xdg-emacs-subdir 'data "undo-tree-history")))) - "Store all `undo-tree' history in a single directory, instead of next to the associated file.") - :commands (global-undo-tree-mode) - :demand t ; this is required so that the :config stanza is actually run asap despite :bind - :config (global-undo-tree-mode +1) - :diminish undo-tree-mode) - -;; IDE-like features. -(use-package project - :after (which-key evil) - :init - (which-key-add-key-based-replacements - "<leader>p" '("project" . "Project")) - (evil-define-key '(normal visual) 'global - (kbd "<leader>fp") #'project-find-file) ; also <leader>pf - :bind-keymap ("<leader>p" . project-prefix-map)) - -(use-package vc - :after (which-key evil) - :init (which-key-add-key-based-replacements - "<leader>v" '("vc" . "Version control") - "<leader>vM" '("merge" . "Version control merging")) - :bind-keymap ("<leader>v" . vc-prefix-map)) - -(use-package log-edit - :after (evil vc) - :config - (evil-define-key '(normal visual) log-edit-mode-map - (kbd "<localleader>\\") #'log-edit-done - (kbd "<localleader>a") #'log-edit-insert-changelog - (kbd "<localleader>d") #'log-edit-show-diff - (kbd "<localleader>f") #'log-edit-show-files - (kbd "<localleader>k") #'log-edit-kill-buffer - (kbd "<localleader>w") #'log-edit-generate-changelog-from-diff)) - -(use-package company - :config (global-company-mode +1) - :diminish company-mode) - -(use-package company-quickhelp - :after (company) - :config (company-quickhelp-mode +1) - :diminish company-quickhelp-mode) - -(use-package company-posframe - :after (company) - :config (company-posframe-mode +1) - :diminish company-posframe-mode) - -(use-package flyspell - :hook mail-mode) - -(use-package flymake - :after (evil which-key) - :demand t ; needed for `flymake-collection' - :hook (prog-mode yaml-mode alidist-mode) - :init (which-key-add-key-based-replacements - "<leader>e" '("errors" . "Flymake")) - :bind (("<leader>eb" . flymake-start) - ("<leader>ec" . display-local-help) ; Show the error message at point in the minibuffer. - ; `flymake' also shows it using `eldoc', but documentation - ; seems to override error messages. - ; `flymake-show-diagnostic' only says "Nothing at point". - ("<leader>el" . flymake-show-buffer-diagnostics) - ("<leader>ep" . flymake-show-project-diagnostics) - ("<leader>en" . flymake-goto-next-error) - ("<leader>eN" . flymake-goto-prev-error) - ("<leader>ev" . flymake-running-backends) - ("<leader>eV" . flymake-disabled-backends)) - :custom - (flymake-suppress-zero-counters nil "Show severity counters even when they are zero.")) - -(use-package flymake-collection - :after (flymake) - :demand t ; we need it loaded now - ;; This needs to be called in `after-init-hook' so that all other - ;; packages' `:flymake-hook's are processed before f-c-hook-setup is - ;; called. See https://github.com/mohkale/flymake-collection. - :hook (after-init . flymake-collection-hook-setup)) - -;; Language Server Protocol. -(defun tw/help-is-eldoc (&rest _) - "Set up `evil-lookup-func' to display the `eldoc' buffer." - (when (eglot-managed-p) - (setq-local evil-lookup-func #'eldoc-doc-buffer))) - -(use-package eglot - ;; I have clang (for clangd) and python-lsp-server installed. - ;; `:hook' adds `-mode' to the package name, but `eglot-mode' doesn't exist. - :hook (((python-mode python-ts-mode c-mode c++-mode c-or-c++-ts-mode) . eglot-ensure) - (eglot-managed-mode . tw/help-is-eldoc)) - :commands (eglot) - :functions (eglot-managed-p) - :custom - (eglot-autoshutdown t "Shut down language servers after deleting their last associated buffer.") - (eglot-sync-connect 0.1 "Wait for the language server in the background if it takes longer than 100ms.")) - -;; Tree-sitter -;; TODO: Try any/all of the following new tree-sitter-based major modes. -;; Enable them using the following, replacing the relevant "old" major mode: -;; (add-to-list 'major-mode-remap-alist '(ruby-mode . ruby-ts-mode)) -;; New major mode 'css-ts-mode'. -;; New major mode 'dockerfile-ts-mode'. -;; New major mode 'ruby-ts-mode'. - -(mapc (lambda (dir) - (add-to-list 'treesit-extra-load-path (file-name-as-directory (expand-file-name dir)))) - '("/run/current-system/profile/lib/tree-sitter" - "~/.guix-home/profile/lib/tree-sitter" - "~/.guix-profile/lib/tree-sitter")) - -(use-package treesit - :custom - (treesit-font-lock-level 4 "Enable Angry Fruit Salad mode.")) - -;; Non-LSP language modes. -(use-package c-ts-mode - :init - (add-to-list 'major-mode-remap-alist '(c-mode . c-ts-mode)) - (add-to-list 'major-mode-remap-alist '(c++-mode . c++-ts-mode)) - (add-to-list 'major-mode-remap-alist '(c-or-c++-mode . c-or-c++-ts-mode))) - -(use-package cmake-ts-mode - :mode (rx (or (: (or bos "/") "CMakeLists.txt") ".cmake") eos)) - -(use-package json-ts-mode - :mode (rx ".json" eos) - :config - (evil-define-key '(normal visual) json-ts-mode-map - (kbd "<localleader>==") #'json-pretty-print - (kbd "<localleader>=b") #'json-pretty-print-buffer - (kbd "<localleader>=o") #'json-pretty-print-ordered - (kbd "<localleader>=B") #'json-pretty-print-buffer-ordered)) - -(use-package gnuplot - :commands (gnuplot-mode gnuplot-make-buffer) - :mode ((rx ".gnuplot" eos) . gnuplot-mode)) - -(use-package graphviz-dot-mode - :mode (rx ".dot" eos) - :custom (graphviz-dot-view-command "xdot %s" "Use xdot for previewing graphviz files.")) - -(use-package haskell-mode - :mode (rx (or ".hs" ".lhs" ".hsc" ".cpphs" ".c2hs") eos)) - -(use-package hcl-mode - :mode (rx "." (or "hcl" "nomad") eos)) - -(use-package mmm-mode - :commands (mmm-mode) - ;; Don't highlight submodes specially at all. The default background is annoying. - :custom-face (mmm-default-submode-face ((t (:background unspecified))))) - -(use-package puppet-mode - :mode (rx ".pp" eos)) - -(use-package python - :after (flymake-collection) - :commands (python-mode python-ts-mode) - :mode (((rx ".py" (? (or ?\i ?\w)) eos) . python-ts-mode) - ((rx ".aurora" eos) . python-ts-mode)) - :config - ;; Disable all flymake-collection linters in Python modes, since eglot/pylsp - ;; should take care of it. It doesn't do type checking, so enable mypy. - (cl-dolist (mode '(python-ts-mode python-mode)) - (add-to-list 'flymake-collection-config `(,mode flymake-mypy)))) - -(use-package rec-mode - :mode (rx ".rec" eos)) - -(use-package sh-script ; built-in - ;; Use `bash-ts-mode' instead of `sh-mode' if possible. - ;; `bash-ts-mode' falls back to `sh-mode' if necessary. - ;; Manually configuring :mode etc would be annoying, since there are a lot of entries. - :config (add-to-list 'major-mode-remap-alist '(sh-mode . bash-ts-mode)) - :custom (sh-basic-offset 2 "Use 2 spaces for `sh-mode' indents.")) - -(use-package tcl - :mode ((rx ".tcl" eos) . tcl-mode) - :magic ((rx "#%Module1.0") . tcl-mode)) - -(use-package web-mode - :mode (rx "." (or "htm" "html" "js" "css" "scss") eos) - :custom - (web-mode-css-indent-offset 2 "Indent CSS by two spaces.")) - -(use-package yaml-mode - :mode (rx (or (seq ".y" (? "a") "ml") - (seq "aliPublish" (* (not ?/)) ".conf")) - eos)) - -(defun tw/ledger-format-on-save () - "Re-indent the entire file." - ;; Subset of `ledger-mode-clean-buffer'. That also sorts the buffer, which I don't want. - (save-excursion - (let ((start (point-min-marker)) - (end (point-max-marker))) - (untabify start end) - (ledger-post-align-postings start end) - (ledger-mode-remove-extra-lines)))) - -(defun tw/enable-ledger-format-on-save () - "Enable reformating the open file on save." - (add-hook 'before-save-hook #'tw/ledger-format-on-save 0 t)) - -(use-package ledger-mode - :after (evil) - :commands (ledger-mode) - :mode (rx ".journal" eos) - :hook (ledger-mode . tw/enable-ledger-format-on-save) - :custom - (ledger-default-date-format ledger-iso-date-format "Use hledger-style dates.") - (ledger-reconcile-default-date-format ledger-iso-date-format "Use hledger-style dates.") - (ledger-reconcile-default-commodity "€" "Make euros the default currency.") - (ledger-post-account-alignment-column 2 "Use 2-space indents.") - (ledger-post-amount-alignment-at :decimal "Align amounts at decimal points/commas.") - (ledger-post-amount-alignment-column 52 "Align amounts' decimal points to the 52nd column.") - (ledger-highlight-xact-under-point nil "Don't highlight the transaction at point.") - :config - (evil-define-key 'normal ledger-mode-map - (kbd "TAB") #'ledger-indent-line)) - -(use-package lisp - :init (which-key-add-key-based-replacements - "<leader>k" '("sexp-nav" . "S-expression navigation")) - :bind (("<leader>kl" . forward-sexp) - ("<leader>kh" . backward-sexp) - ("<leader>kL" . forward-list) - ("<leader>kH" . backward-list) - ("<leader>kj" . down-list) - ("<leader>kk" . up-list) - ("<leader>kK" . backward-up-list) - ("<leader>kd" . kill-sexp) - ("<leader>kD" . backward-kill-sexp) - ("<leader>kb" . beginning-of-defun) - ("<leader>kB" . beginning-of-defun-comments) - ("<leader>ke" . end-of-defun) - ("<leader>kv" . mark-sexp) - ("<leader>kV" . mark-defun) - ("<leader>kN" . narrow-to-defun) - ("<leader>ks" . insert-pair) - ("<leader>kr" . raise-sexp) - ("<leader>kc" . check-parens))) - -(defun tw/resize-repl-window () - "Make the REPL window small, so it stays out of the way." - (shrink-window (- (window-height) 5))) - -(use-package geiser - :after (evil) - :commands (geiser - geiser-eval-buffer geiser-eval-definition geiser-eval-region - geiser-eval-last-sexp geiser-mode-switch-to-repl - geiser-mode-switch-to-repl-and-enter) - :hook ((scheme-mode . geiser-autodoc-mode) - (geiser-repl-mode . tw/resize-repl-window)) - :config - (evil-define-key '(normal visual) scheme-mode-map - (kbd "<localleader>z") #'geiser-mode-switch-to-repl - (kbd "<localleader>Z") #'geiser-mode-switch-to-repl-and-enter - (kbd "<localleader>eb") #'geiser-eval-buffer - (kbd "<localleader>ef") #'geiser-eval-definition - (kbd "<localleader>er") #'geiser-eval-region - (kbd "<localleader>el") #'geiser-eval-last-sexp) - :defines scheme-mode-map) - -(use-package geiser-guile - :after (geiser)) - -(use-package sly - :after (evil) - :hook ((lisp-mode . sly-mode) ; `common-lisp-mode' is `lisp-mode'. - (sly-mrepl-mode . tw/resize-repl-window)) - :config - (evil-define-key '(normal visual) lisp-mode-map - (kbd "<localleader>C-c") #'sly-interrupt - (kbd "<localleader>z") #'sly - (kbd "<localleader>Z") #'sly-mrepl-sync - (kbd "<localleader>i") #'sly-inspect - (kbd "<localleader>D") #'sly-disassemble-symbol - (kbd "<localleader>E") #'sly-edit-value - (kbd "<localleader>eT") #'sly-list-threads ; eval requests get a new thread each - (kbd "<localleader>e:") #'sly-interactive-eval - (kbd "<localleader>el") #'sly-eval-last-expression - (kbd "<localleader>ep") #'sly-pprint-eval-last-expression - (kbd "<localleader>eb") #'sly-eval-buffer - (kbd "<localleader>ef") #'sly-eval-defun - (kbd "<localleader>er") #'sly-eval-region - (kbd "<localleader>eF") #'sly-compile-defun - (kbd "<localleader>eB") #'sly-compile-file - (kbd "<localleader>eL") #'sly-compile-and-load-file - (kbd "<localleader>eR") #'sly-compile-region - (kbd "<localleader>eU") #'sly-undefine-function - (kbd "<localleader>eM") #'sly-remove-method - (kbd "<localleader>dd") #'sly-describe-symbol - (kbd "<localleader>df") #'sly-describe-function - (kbd "<localleader>da") #'sly-apropos - (kbd "<localleader>dA") #'sly-apropos-all - (kbd "<localleader>dg") #'sly-edit-definition - (kbd "<localleader>dC-o") #'sly-pop-find-definition-stack - (kbd "<localleader>dG") #'sly-edit-uses - (kbd "<localleader>dwc") #'sly-who-calls - (kbd "<localleader>dwC") #'sly-calls-who - (kbd "<localleader>dwr") #'sly-who-references - (kbd "<localleader>dwb") #'sly-who-binds - (kbd "<localleader>dws") #'sly-who-sets - (kbd "<localleader>dwm") #'sly-who-macroexpands - (kbd "<localleader>dwS") #'sly-who-specializes - (kbd "<localleader>dhs") #'hyperspec-lookup ; hyperspec.el is bundled with sly; opens in browser - (kbd "<localleader>dhf") #'hyperspec-lookup-format - (kbd "<localleader>dhm") #'hyperspec-lookup-reader-macro - (kbd "<localleader>cl") #'sly-list-connections - (kbd "<localleader>cn") #'sly-next-connection - (kbd "<localleader>cp") #'sly-prev-connection - (kbd "<localleader>m1") #'sly-expand-1 - (kbd "<localleader>mm") #'sly-macroexpand-all - (kbd "<localleader>mf") #'sly-format-string-expand - (kbd "<localleader>tt") #'sly-trace-dialog-toggle-trace - (kbd "<localleader>ts") #'sly-trace-dialog - (kbd "<localleader>tf") #'sly-toggle-trace-fdefinition - (kbd "<localleader>tF") #'sly-untrace-all - (kbd "<localleader>ss") #'sly-stickers-dwim ; an ephemeral `print' around the thing at point - (kbd "<localleader>sr") #'sly-stickers-replay - (kbd "<localleader>sb") #'sly-stickers-toggle-break-on-stickers - (kbd "<localleader>sf") #'sly-stickers-fetch - (kbd "<localleader>sn") #'sly-stickers-next-sticker - (kbd "<localleader>sp") #'sly-stickers-prev-sticker - (kbd "<localleader>ta") #'sly-autodoc-mode) - :custom - (sly-mrepl-history-file-name (tw/xdg-emacs-subdir 'data "sly-mrepl-history"))) - -;; Org-mode -(use-package org - :commands (org-mode) - :mode ((rx ".org" eos) . org-mode) - :custom - (org-latex-src-block-backend 'minted "Colourise source code.") - (org-latex-packages-alist - '(("" "svg") - ("" "minted")) - "Use svg and syntax highlighting packages.") - (org-latex-pdf-process - '("latexmk -shell-escape -f -pdf -%latex -interaction=nonstopmode -output-directory=%o %f") - "Allow -shell-escape needed by svg and minted packages.")) - -(use-package ob ; org-babel - :after (org) - :custom - (org-confirm-babel-evaluate nil "Allow running code blocks without confirmation.") - ;; List of supported languages: - ;; https://orgmode.org/worg/org-contrib/babel/languages/index.html - (org-babel-load-languages - '((emacs-lisp . t) - (lisp . t) - (dot . t) - (python . t) - (gnuplot . t) - (rec . t)) ; see `ob-rec' below - "Load bindings for more languages for use in #+begin_src blocks.")) - -(defun tw/latex-section-commands (name) - "Create a pair of section commands like (\"\\NAME{%s}\" . \"\\NAME*{%s}\"). -For use in `org-latex-classes'." - (cons (format "\\%s{%%s}" name) (format "\\%s*{%%s}" name))) -(defconst tw/latex-part (tw/latex-section-commands "part") - "Part LaTeX commands for `org-latex-classes'.") -(defconst tw/latex-chapter (tw/latex-section-commands "chapter") - "Chapter LaTeX commands for `org-latex-classes'.") -(defconst tw/latex-section-and-below - (mapcar #'tw/latex-section-commands - '("section" "subsection" "subsubsection" "paragraph" "subparagraph")) - "Section to subparagraph LaTeX commands for `org-latex-classes'.") - -(use-package ox-latex ; org-export-latex - :after (org) - :custom - (org-latex-classes - `(("paperlike" "\\documentclass{paperlike}" . ,tw/latex-section-and-below) - ("examtext" "\\documentclass{examtext}" . ,tw/latex-section-and-below) - ("minutes" "\\documentclass{minutes}" . ,tw/latex-section-and-below) - ("mapreport" "\\documentclass{mapreport}" ,tw/latex-chapter . ,tw/latex-section-and-below) - ("pt3report" "\\documentclass{pt3report}" ,tw/latex-chapter . ,tw/latex-section-and-below) - ("article" "\\documentclass{article}" . ,tw/latex-section-and-below) - ("scrartcl" "\\documentclass{scrartcl}" . ,tw/latex-section-and-below) - ("report" "\\documentclass{report}" ,tw/latex-part ,tw/latex-chapter . ,tw/latex-section-and-below) - ("report-noparts" "\\documentclass{report}" ,tw/latex-chapter . ,tw/latex-section-and-below) - ("book" "\\documentclass{book}" ,tw/latex-part ,tw/latex-chapter . ,tw/latex-section-and-below) - ("book-noparts" "\\documentclass{book}" ,tw/latex-chapter . ,tw/latex-section-and-below) - ("checklist" "\\documentclass{checklist}" . ,tw/latex-section-and-below)) - "Define more documentclasses for org-latex.")) - -(use-package outline - :commands (outline-mode outline-minor-mode) - :custom - ;; Mirror the default "C-c @" binding for `outline-minor-mode'. - (outline-minor-mode-prefix (kbd "<localleader>@") "Use localleader for `outline-minor-mode' keybindings.")) - -;; My own custom packages, and stuff that isn't on MELPA. -(use-package actionlint - :after (flymake) - :load-path "include/" - :hook ((yaml-mode yaml-ts-mode) . actionlint-setup)) - -(use-package alidist-mode - :after (flymake) - :load-path "include/" - :commands (alidist-mode) - :mode (rx (or bot "/") "alidist/" (1+ (not ?\/)) ".sh" eot)) - -(use-package flymake-guile - :after (flymake) - :load-path "include/" - :hook (scheme-mode . flymake-guile-enable)) - -(use-package bemscript-mode - :load-path "include/" - :mode (rx ".bem" eos)) - -(use-package ifm-mode - :load-path "include/" - :mode (rx ".ifm" eos)) - -(use-package pam-env-mode - :load-path "include/" - :mode (rx (or bos "/") (or "pam_env.conf" ".pam_environment") eos)) - -(use-package environmentd-mode - :load-path "include/" - :mode (rx (or bos "/") - (or (: (? "etc/") "environment") - (: ".environment.d/" (1+ (not ?\/)) ".conf")) - eos)) - -(use-package ob-rec - ;; `org-babel' hooks for `rec-mode' - :after (org ob rec-mode) - :load-path "include/") - -(use-package vcard-mode - :load-path "include/" - :mode (rx "." (or "vcf" "vcard") eos)) - -;; Vim keybindings. -(defun tw/switch-to-other-buffer () - "Switch to the last-used buffer." - (interactive) - (switch-to-buffer (other-buffer))) - -(defun tw/new-buffer () - "Open a new, empty buffer." - (interactive) - (switch-to-buffer (generate-new-buffer "untitled"))) - -(defun tw/delete-current-buffer-file () - "Ask for confirmation, then delete the file associated with the current buffer." - (interactive) - (let ((buffer (current-buffer))) - (when (yes-or-no-p (concat "Delete `" (buffer-file-name buffer) "'?")) - (delete-file (buffer-file-name buffer)) - (kill-buffer buffer)))) - -(use-package evil - :after (which-key) - :commands (evil-mode evil-ex-nohighlight) - :init (setq evil-want-keybinding nil) ; evil-collection needs this - :custom - (evil-echo-state nil "Don't show the '--- INSERT ---' string in the echo area on evil state changes.") - (evil-undo-system 'undo-tree "Use `undo-tree' for evil's undo-redo function.") - (evil-search-module 'evil-search "Use evil's built-in search function, for search history support.") - (evil-want-minibuffer t "Use evil bindings in the minibuffer too.") - (evil-want-C-u-scroll t "Scroll on C-u in normal mode, not `universal-argument'.") - (evil-want-C-u-delete t "Delete line on C-u in insert mode, not `universal-argument'.") - (evil-want-Y-yank-to-eol t "Yank from point to end-of-line on Y.") - (evil-symbol-word-search t "Always search by full variable names when using * and #.") - :config - (evil-mode +1) - (evil-set-leader '(normal visual) (kbd "SPC")) ; <leader> - (evil-set-leader '(normal visual) (kbd "\\") t) ; <localleader> - (evil-define-key '(normal motion) diff-mode-shared-map ; not `diff-mode-map', else toggling `read-only-mode' destroys the binding - (kbd "<localleader>\\") #'read-only-mode) ; mirror default binding from evil-collection - (evil-define-key '(normal insert visual replace) 'global - (kbd "C-s") #'save-buffer) - ;; Global major-mode-independent keys should be defined here. Major - ;; mode-dependent keys (e.g. for launching a REPL) should go under - ;; <localleader> instead. Use `use-package' `:bind' for those. - (evil-define-key '(normal visual) 'global - ;; These keybindings mirror the default Spacemacs ones because I have - ;; muscle memory of those. - (kbd "<leader>:") #'eval-expression - (kbd "<leader>TAB") #'tw/switch-to-other-buffer - (kbd "<leader>bb") #'switch-to-buffer - (kbd "<leader>bd") #'kill-current-buffer - (kbd "<leader>bn") #'tw/new-buffer - (kbd "<leader>br") #'revert-buffer-quick - (kbd "<leader>bs") #'scratch-buffer - (kbd "<leader>bw") #'read-only-mode - (kbd "<leader>bx") #'kill-buffer-and-window - (kbd "<leader>fd") #'tw/delete-current-buffer-file - (kbd "<leader>ff") #'find-file - (kbd "<leader>fR") #'rename-visited-file - (kbd "<leader>fs") #'save-buffer - (kbd "<leader>h") help-map - (kbd "<leader>hw") #'which-key-show-top-level - (kbd "<leader>sc") #'evil-ex-nohighlight - (kbd "<leader>td") #'toggle-debug-on-error - (kbd "<leader>tf") #'auto-fill-mode - (kbd "<leader>tl") #'toggle-truncate-lines - (kbd "<leader>tn") #'display-line-numbers-mode - (kbd "<leader>u") #'universal-argument - (kbd "<leader>w") evil-window-map - (kbd "<leader>wd") #'evil-window-delete ; analogous to "<leader>bd" - (kbd "<leader>wx") #'kill-buffer-and-window) ; analogous to "<leader>bx" - (which-key-add-key-based-replacements - ;; Names are a `cons' of a short name and a long name. - ;; E.g. for <leader>b, "buffer" is shown under "b" in the "<leader>" menu, - ;; while "Buffers" is shown as the title in the "<leader>b" menu. - "<leader>b" '("buffer" . "Buffers") - "<leader>f" '("file" . "Files") - "<leader>h" '("help" . "General help and documentation") - "<leader>q" '("quit" . "Finish editing the current buffer in emacsclient") - "<leader>s" '("search" . "Search operations and options") - "<leader>t" '("toggle" . "Toggles and quick settings") - "<leader>w" '("window" . "Windows")) - :functions (evil-define-key evil-set-leader - evil-define-key* evil-window-delete evil-delay) - :defines (evil-visual-state-map)) - -(use-package evil-collection - :after (evil) - :commands (evil-collection-init) :demand t - :config (evil-collection-init) - :diminish evil-collection-unimpaired-mode - :custom - ;; Without `evil-collection-key-blacklist', in `diff-mode', space isn't - ;; assigned to the leader key automatically, unlike in other modes. - (evil-collection-key-blacklist '("SPC" "\\") "Don't bind to our leader keys at all.") - (evil-collection-setup-minibuffer t "Use evil-collection in minibuffer to match `evil-want-minibuffer'.")) - -(use-package evil-org - :after (evil org) - :hook org-mode - :config - (evil-define-key '(normal visual) org-mode-map - (kbd "<localleader>\\") #'org-ctrl-c-ctrl-c - (kbd "<localleader>ib") #'org-insert-structure-template - (kbd "<localleader>id") #'org-insert-drawer - (kbd "<localleader>iD") #'org-insert-time-stamp - (kbd "<localleader>ih") #'org-insert-heading - (kbd "<localleader>iH") #'org-insert-subheading - (kbd "<localleader>it") #'org-insert-todo-heading - (kbd "<localleader>iT") #'org-insert-todo-subheading - (kbd "<localleader>ii") #'org-insert-item - (kbd "<localleader>il") #'org-insert-link - (kbd "<localleader>p") #'org-set-property - (kbd "<localleader>t") #'org-set-tags - ;; Source code block editing - (kbd "<localleader>'") #'org-edit-src-code - (kbd "<localleader>e") #'org-export-dispatch) - (evil-define-key '(normal visual) org-src-mode-map - (kbd "<localleader>'") #'org-edit-src-exit - (kbd "<localleader>\\") #'org-edit-src-save - (kbd "<localleader>a") #'org-edit-src-abort)) - -(use-package evil-replace-with-register - :after (evil) - :commands (evil-replace-with-register-install) :demand t - ;; :custom (evil-replace-with-register-key "gR" "Use the default key.") - :config (evil-replace-with-register-install)) - -(use-package evil-commentary ; e.g. "gcc" / "gcap" to comment out blocks of text - :after (evil) - :commands (evil-commentary-mode) :demand t - :config (evil-commentary-mode +1) - :diminish evil-commentary-mode) - -(use-package evil-expat ; for :reverse, :remove, :rename, :colo, :g*, ... ex commands - :after (evil)) - -(use-package evil-surround - :after (evil) - :commands (global-evil-surround-mode) :demand t - :config (global-evil-surround-mode +1)) - -(use-package smartparens ; required by evil-cleverparens - ;; :custom - ;; (sp-sexp-prefix '() "Set up Guix gexp-related sexp prefixes.") - ) - -(use-package evil-cleverparens - :after (evil smartparens) - :hook ((lisp-mode lisp-data-mode scheme-mode) . evil-cleverparens-mode) - :custom - (evil-cleverparens-use-additional-movement-keys nil "Disable overriding of standard vim bracket navigation keys.")) - -(use-package evil-multiedit - ;; See: https://github.com/hlissner/evil-multiedit#usage - :commands (evil-multiedit-default-keybinds) :demand t - :config (evil-multiedit-default-keybinds)) - -(use-package evil-args - :after (evil) - :config - ;; Bind evil-args text objects only. - ;; See https://github.com/wcsmith/evil-args for more bindings. - (define-key evil-inner-text-objects-map "a" 'evil-inner-arg) - (define-key evil-outer-text-objects-map "a" 'evil-outer-arg)) - -(use-package evil-numbers - :after (evil) - :bind (("<leader>+" . evil-numbers/inc-at-pt) - ("<leader>-" . evil-numbers/dec-at-pt))) - -(use-package evil-goggles ; visual previews for edit operations - :after (evil) - :commands (evil-goggles-mode evil-goggles-use-diff-faces) :demand t - :config - (evil-goggles-mode +1) - (evil-goggles-use-diff-faces) - :diminish evil-goggles-mode) - -(use-package evil-traces ; visual previews for :ex commands - :after (evil) - :commands (evil-traces-mode evil-traces-use-diff-faces) :demand t - :config - (evil-traces-mode +1) - (evil-traces-use-diff-faces) - :diminish evil-traces-mode) - -(use-package evil-markdown - :after (evil markdown-mode) - :hook markdown-mode) - -;; Lots of useful text objects and keybinds: -;; https://github.com/iyefrat/evil-tex#incomplete-showcase -(use-package evil-tex - :after (evil tex-mode) - :hook TeX-mode) - -(use-package evil-text-object-python - :after (evil python) - :hook (python-mode . evil-text-object-python-add-bindings)) - -;; Lisp features -(use-package aggressive-indent - :hook (scheme-mode emacs-lisp-mode lisp-mode sh-mode bash-ts-mode)) - -(defun tw/find-asd-systems (directory) - "Return a list of Common Lisp .asd systems found in DIRECTORY." - (let ((asd-rx (rx ".asd" eos))) - ;; `locate-dominating-file' will call this function once with the original - ;; file name as DIRECTORY, but `directory-files' fails if its argument is - ;; a regular file, so protect against this. - (and (directory-name-p directory) - (mapcar (lambda (file) - (string-trim-right file asd-rx)) - (directory-files directory nil asd-rx))))) - -(defun tw/lisp-project-setup () - "Set up a Lisp REPL for the current project." - (when-let ((fname (buffer-file-name)) - (project-directory - (or (locate-dominating-file fname "guix.scm") - (locate-dominating-file fname #'tw/find-asd-systems) - (project-current nil (file-name-directory fname))))) - (cd project-directory) - (setq-local - inferior-lisp-program - `(;; If a guix.scm file exists, run Lisp in a Guix shell to get dependencies. - ,@(and (file-exists-p (file-name-concat project-directory "guix.scm")) - '("guix" "shell" "-Df" "guix.scm" "--")) - "sbcl" "--noinform" - ;; Load all defined asdf systems. - ,@(mapcan (lambda (system) - (list "--load" (format "%s.asd" system) - "--eval" (format "(require '%s)" system))) - ;; Heuristic: shorter names are earlier in the dependency tree. - ;; For example, X-test.asd depends on X.asd. - (sort (tw/find-asd-systems project-directory) - (lambda (s1 s2) - (< (length s1) (length s2))))) - ;; Assume the project directory name is the name of the main package. - "--eval" ,(format "(in-package #:%s)" - (file-name-base - (directory-file-name project-directory))))))) - -(use-package inf-lisp - :after (lisp-mode) - :hook (lisp-mode . tw/lisp-project-setup) - :custom - (inferior-lisp-program "sbcl")) - -(defun tw/lisp-evil-setup () - "Set up evil in general `lisp-mode' buffers." - ;; https://github.com/wcsmith/evil-args#customization - (setq-local evil-args-delimiters '(" "))) - -;; Sadly, not all Lisp modes derive from `lisp-mode'. -(add-hook 'lisp-mode-hook #'tw/lisp-evil-setup) -(add-hook 'lisp-data-mode-hook #'tw/lisp-evil-setup) ; for elisp -(add-hook 'scheme-mode-hook #'tw/lisp-evil-setup) - -;; buffer-locally set `evil-lookup-func' (used on K keys) for -;; languages where something better than man pages is available -;; (e.g. `describe-symbol' for elisp). -(defun tw/elisp-lookup-func () - "Show help in `emacs-lisp-mode' buffers." - (let ((sym (symbol-at-point))) - (if sym (describe-symbol sym) - (call-interactively #'describe-symbol)))) - -(defun tw/emacs-lisp-evil-setup () - "Set up evil in `emacs-lisp-mode' buffers." - (setq-local evil-lookup-func #'tw/elisp-lookup-func)) - -(add-hook 'emacs-lisp-mode-hook #'tw/emacs-lisp-evil-setup) - -(evil-define-key '(normal visual) emacs-lisp-mode-map - (kbd "<localleader>eb") #'eval-buffer - (kbd "<localleader>ef") #'eval-defun - (kbd "<localleader>er") #'eval-region - (kbd "<localleader>el") #'eval-last-sexp - (kbd "<localleader>ep") #'eval-print-last-sexp) - -;; Guix-related .dir-locals.el entries. These are fine; don't prompt every time. -(add-to-list 'safe-local-variable-values '(geiser-repl-per-project-p . t)) -(add-to-list 'safe-local-variable-values '(geiser-guile-binary . ("guix" "repl"))) -(mapc (apply-partially #'add-to-list 'safe-local-eval-forms) - '((modify-syntax-entry 126 "'") - (modify-syntax-entry 36 "'") - (modify-syntax-entry 43 "'") - (let ((root-dir-unexpanded (locate-dominating-file default-directory ".dir-locals.el"))) - (when root-dir-unexpanded - (let* ((root-dir (file-local-name (expand-file-name root-dir-unexpanded))) - (root-dir* (directory-file-name root-dir))) - (unless (boundp 'geiser-guile-load-path) - (defvar geiser-guile-load-path 'nil)) - (make-local-variable 'geiser-guile-load-path) - (require 'cl-lib) - (cl-pushnew root-dir* geiser-guile-load-path :test #'string-equal)))) - (progn - (require 'lisp-mode) - (defun emacs27-lisp-fill-paragraph (&optional justify) - (interactive "P") - (or (fill-comment-paragraph justify) - (let ((paragraph-start - (concat paragraph-start "\\|\\s-*\\([(;\"]\\|\\s-:\\|`(\\|#'(\\)")) - (paragraph-separate - (concat paragraph-separate "\\|\\s-*\".*[,\\.]$")) - (fill-column - (if (and (integerp emacs-lisp-docstring-fill-column) - (derived-mode-p 'emacs-lisp-mode)) - emacs-lisp-docstring-fill-column - fill-column))) - (fill-paragraph justify)) - t)) - (setq-local fill-paragraph-function #'emacs27-lisp-fill-paragraph)) - - ;; Forms used by Guix upstream. - (add-to-list 'completion-ignored-extensions ".go") - (setq-local guix-directory (locate-dominating-file - default-directory ".dir-locals.el")) - (with-eval-after-load 'yasnippet - (let ((guix-yasnippets (expand-file-name - "etc/snippets/yas" - (locate-dominating-file - default-directory ".dir-locals.el")))) - (unless (member guix-yasnippets yas-snippet-dirs) - (add-to-list 'yas-snippet-dirs guix-yasnippets) - (yas-reload-all)))) - (let ((root-dir-unexpanded (locate-dominating-file - default-directory ".dir-locals.el"))) - (when root-dir-unexpanded - (let* ((root-dir (expand-file-name root-dir-unexpanded)) - (root-dir* (directory-file-name root-dir))) - (unless (boundp 'geiser-guile-load-path) - (defvar geiser-guile-load-path 'nil)) - (make-local-variable 'geiser-guile-load-path) - (require 'cl-lib) - (cl-pushnew root-dir* geiser-guile-load-path - :test #'string-equal)))))) - -;;; init.el ends here diff --git a/tw/home/files/emacs-packages/actionlint.el b/tw/home/files/emacs-packages/actionlint.el deleted file mode 100644 index 68a25c57..00000000 --- a/tw/home/files/emacs-packages/actionlint.el +++ /dev/null @@ -1,147 +0,0 @@ -;;; actionlint.el --- Flycheck checker for GitHub Actions. -*- lexical-binding: t -*- -;;; Commentary: -;; GitHub Actions are defined using mostly plain YAML files. -;; Actionlint is a linter catching GitHub Action-specific mistakes, and also -;; checks Shell and Python code embedded in Actions (using shellcheck and -;; pyflakes, respectively). -;;; Code: - -(require 'custom) -(require 'flymake) - -(defgroup actionlint nil - "Actionlint-related options." - :group 'languages - :prefix "actionlint-") - -(defcustom actionlint-executable "actionlint" - "The alidistlint executable to use. This will be looked up in $PATH." - :type '(string) - :risky t - :group 'actionlint) - -(defvar actionlint--message-regexp - (rx bol "<stdin>:" ; filename - (group-n 2 (+ digit)) ":" ; line - (group-n 3 (+ digit)) ": " ; column - (? (or (seq "pyflakes reported issue in this script: " - (group-n 4 (+ digit)) ":" ; inner line - (group-n 5 (+ digit)) " ") ; inner column - (seq "shellcheck reported issue in this script: " - (group-n 8 "SC" (+ digit)) ":" ; shellcheck code - (group-n 6 (or "info" "warning" "error")) ":" ; type - (group-n 4 (+ digit)) ":" ; inner line - (group-n 5 (+ digit)) ": "))) ; inner column - (group-n 1 (+? not-newline)) " " ; message - "[" (group-n 7 (+ (not ?\]))) "]" eol) ; backend/error name - "Regular expression matching messages reported by actionlint. - -The following convention for match groups is used: - - 1. free-form message - 2. outer line number - 3. outer column number - 4. (optional) inner line number - 5. (optional) inner column number - 6. (optional) error level/type - 7. backend/error name (e.g. syntax-check or pyflakes) - 8. (optional) backend-specific error code - -The outer line/column numbers are always present and refer to the location of -the key where the error is, normally. If the message was passed through from -another linter (e.g. shellcheck), it may have an inner line/column, which will -be relative to the contents of the key instead.") - -(defun actionlint--next-message (source) - "Return the next message according to REGEXP for buffer SOURCE, if any." - (when-let* ((match (search-forward-regexp actionlint--message-regexp nil t)) - (inner-line (if-let ((match (match-string 4))) - ;; 1-based; don't subtract 1 since we assume - ;; that the script actually starts on the next - ;; line. - (string-to-number match) - 0)) - (inner-column (if-let ((match (match-string 5))) - ;; 1-based; add 1 (assuming 2-space indents) - ;; to pick the right place inside the string. - (1+ (string-to-number match)) - 0)) - (region (flymake-diag-region - source - (+ (string-to-number (match-string 2)) inner-line) - (+ (string-to-number (match-string 3)) inner-column))) - (type (pcase (match-string 6) - ("info" :note) - ("warning" :warning) - ("error" :error) - ('nil :error))) - (message (if-let ((code (match-string 8))) - (concat (match-string 1) " (" (match-string 7) " " code ")") - (concat (match-string 1) " (" (match-string 7) ")")))) - (flymake-make-diagnostic source (car region) (cdr region) type message))) - -(defvar-local actionlint--flymake-proc nil - "The latest invocation of actionlint.") - -;; See info node: (flymake)An annotated example backend. -(defun actionlint-flymake (report-fn &rest _args) - "Run actionlint and report diagnostics from it using REPORT-FN. -Any running invocations are killed before running another one." - (unless (executable-find actionlint-executable) - (funcall report-fn :panic - :explanation "Cannot find `actionlint-executable' program") - (error "Cannot find actionlint executable")) - - ;; Kill previous check, if it's still running. - (when (process-live-p actionlint--flymake-proc) - (kill-process actionlint--flymake-proc)) - - ;; This needs `lexical-binding'. - (let ((source (current-buffer))) - (save-restriction - (widen) - (setq actionlint--flymake-proc - (make-process - :name "actionlint-flymake" :noquery t :connection-type 'pipe - ;; Direct output to a temporary buffer. - :buffer (generate-new-buffer " *actionlint-flymake*") - :command (list actionlint-executable "-oneline" "-no-color" "-") - :sentinel - (lambda (proc _event) - "Parse diagnostic messages once the process PROC has exited." - ;; Check the process has actually exited, not just been suspended. - (when (memq (process-status proc) '(exit signal)) - (unwind-protect - ;; Only proceed if we've got the "latest" process. - (if (with-current-buffer source (eq proc actionlint--flymake-proc)) - (with-current-buffer (process-buffer proc) - (goto-char (point-min)) - (cl-do (diags - (msg (actionlint--next-message source) - (actionlint--next-message source))) - ((null msg) - (funcall report-fn diags)) - (push msg diags))) - (flymake-log :warning "Canceling obsolete check %s" proc)) - ;; Clean up temporary buffer. - (kill-buffer (process-buffer proc))))))) - ;; Send the buffer to actionlint on stdin. - (process-send-region actionlint--flymake-proc (point-min) (point-max)) - (process-send-eof actionlint--flymake-proc)))) - -(defun actionlint-github-workflow-p () - "Does the current buffer contain a GitHub Action?" - (let ((name (buffer-file-name))) - (and name (string-match-p - (rx ".github/workflows/" (+ (not ?\/)) ".yml" eos) name)))) - -(defun actionlint-setup () - "Set up actionlint in this buffer, if it is recognised as a workflow file." - (when (actionlint-github-workflow-p) - (add-hook 'flymake-diagnostic-functions #'actionlint-flymake nil t))) - -(add-hook 'yaml-mode-hook #'actionlint-setup) -(add-hook 'yaml-ts-mode-hook #'actionlint-setup) - -(provide 'actionlint) -;;; actionlint.el ends here diff --git a/tw/home/files/emacs-packages/alidist-mode.el b/tw/home/files/emacs-packages/alidist-mode.el deleted file mode 100644 index fbcef7e5..00000000 --- a/tw/home/files/emacs-packages/alidist-mode.el +++ /dev/null @@ -1,170 +0,0 @@ -;;; alidist-mode.el --- Major mode for alidist recipes -*- lexical-binding: t -*- -;;; Commentary: -;;; alidist recipes are shell scripts with a YAML header in front. We -;;; want both these parts highlighted properly, and to lint the whole -;;; thing with a custom script that glues together yamllint and -;;; shellcheck with a few custom checks. -;;; Code: - -(require 'custom) -(require 'flymake) -(require 'mmm-mode) -(require 'mmm-cmds) -(require 'mmm-vars) -(require 'sh-script) -(require 'yaml-mode) - -(defgroup alidist-mode nil - "Alidist-related options." - :group 'languages - :prefix "alidist-mode-") - -(defcustom alidist-mode-alidistlint-executable "alidistlint" - "The alidistlint executable to use. This will be looked up in $PATH." - :type '(string) - :risky t - :group 'alidist-mode) - -(defvar alidist-mode--message-regexp - (rx bol "<stdin>:" ; filename - (group (+ digit)) ":" ; line - (group (+ digit)) ": " ; column - (group (or "note" "warning" "error")) ": " ; type - (group (+ not-newline)) eol) ; message - "Regular expression matching messages from alidistlint. -`alidist-flymake' expects the following capturing groups in this -regexp: (1) line number; (2) column number; (3) error type; (4) -message.") - -(defvar-local alidist-mode--flymake-proc nil - "The latest invocation of alidistlint.") - -;; See info node: (flymake)An annotated example backend. -(defun alidist-flymake (report-fn &rest _args) - "Run alidistlint and report diagnostics from it using REPORT-FN. -Any running invocations are killed before running another one." - (unless (executable-find alidist-mode-alidistlint-executable) - (funcall report-fn :panic - :explanation "Cannot find `alidist-mode-alidistlint-executable' program") - (error "Cannot find alidistlint executable")) - - ;; Kill previous check, if it's still running. - (when (process-live-p alidist-mode--flymake-proc) - (kill-process alidist-mode--flymake-proc)) - - ;; This needs `lexical-binding'. - (let ((source (current-buffer))) - (save-restriction - (widen) - (setq alidist-mode--flymake-proc - (make-process - :name "alidistlint-flymake" :noquery t :connection-type 'pipe - ;; Direct output to a temporary buffer. - :buffer (generate-new-buffer " *alidistlint-flymake*") - :command (list alidist-mode-alidistlint-executable "-f" "gcc" "-") - :sentinel - (lambda (proc _event) - "Parse diagnostic messages once the process PROC has exited." - ;; Check the process has actually exited, not just been suspended. - (when (memq (process-status proc) '(exit signal)) - (unwind-protect - ;; Only proceed if we've got the "latest" process. - (if (with-current-buffer source (eq proc alidist-mode--flymake-proc)) - (with-current-buffer (process-buffer proc) - (goto-char (point-min)) - (cl-loop - while (search-forward-regexp alidist-mode--message-regexp nil t) - for (beg . end) = (flymake-diag-region - source - (string-to-number (match-string 1)) - (string-to-number (match-string 2))) - for type = (pcase (match-string 3) - ("note" :note) - ("warning" :warning) - ("error" :error) - (type (error "Unknown alidistlint error type %s" type))) - collect (flymake-make-diagnostic source beg end type (match-string 4)) - into diags - finally (funcall report-fn diags))) - (flymake-log :warning "Canceling obsolete check %s" proc)) - ;; Clean up temporary buffer. - (kill-buffer (process-buffer proc))))))) - ;; Send the buffer to alidistlint on stdin. - (process-send-region alidist-mode--flymake-proc (point-min) (point-max)) - (process-send-eof alidist-mode--flymake-proc)))) - -(defvar-local alidist-mode--mmm-refresh-timer nil - "An idle timer for the current buffer, to make `mmm-mode' reparse it.") -(put 'alidist-mode--mmm-refresh-timer 'risky-local-variable t) - -(defun alidist-mode--cancel-refresh-timer () - "Cancel and delete the timer that reparses the buffer. -It is stored in `alidist-mode--mmm-refresh-timer'." - (when alidist-mode--mmm-refresh-timer - (cancel-timer alidist-mode--mmm-refresh-timer) - (setq alidist-mode--mmm-refresh-timer nil))) - -(define-derived-mode alidist-mode yaml-mode "alidist" - "An outer mode for alidist recipes, handling the metadata." - (mmm-mode) - ;; `mmm-mode' doesn't refresh its submodes when the buffer changes - ;; (e.g. when a *_recipe key is added to the YAML header), so - ;; refresh manually when idle. - (alidist-mode--cancel-refresh-timer) - (add-hook 'kill-buffer-hook #'alidist-mode--cancel-refresh-timer 0 t) - (setq alidist-mode--mmm-refresh-timer - (run-with-idle-timer - 2 t (lambda (original-buffer) - (when (eq original-buffer (current-buffer)) - ;; Silence `mmm-parse-buffer''s annoying message. - (let ((inhibit-message t)) - (mmm-parse-buffer)))) - ;; Idle timers are global, so make sure we only run the timer - ;; in the right buffer. Save the buffer now to enable this, - ;; and compare every time the timer ticks over. - (current-buffer))) - ;; Set up `flymake-mode'. - (add-hook 'flymake-diagnostic-functions #'alidist-flymake nil t) - (flymake-mode)) - -(define-derived-mode alidist-script-ts-mode bash-ts-mode "Script" - "A mode for scripts in alidist recipes, using tree-sitter.") - -(define-derived-mode alidist-script-mode sh-mode "Script" - "A mode for scripts in alidist recipes with some default settings." - (sh-set-shell "bash")) - -(mmm-add-group - 'alidist-recipe - `((alidist-main-script - :submode alidist-script-mode - :face mmm-default-submode-face - :front ,(rx line-start "---\n") - :back ,(rx buffer-end)) - (alidist-option-script - :submode alidist-script-mode - :face mmm-default-submode-face - ;; Any *_recipe key with a multiline string value is probably a script. - :front ,(rx line-start (* whitespace) - (or "recipe" ; for recipes under prefer_system_replacement_specs - (seq (1+ (any alnum ?\_)) - (or "_recipe" "_check"))) - ": |\n") - ;; End of YAML header, or another YAML key. - :back ,(rx line-start - (or "---\n" - (seq (* whitespace) (+ (any alnum ?\_)) ":" - (or line-end whitespace))))))) - -;; Make `mmm-mode' remember `sh-mode'/`bash-ts-mode' indentation variables. -(cl-dolist (var sh-var-list) - (cl-pushnew `(,var region (sh-mode bash-ts-mode)) - mmm-save-local-variables :test 'equal)) - -(mmm-add-mode-ext-class 'alidist-mode nil 'alidist-recipe) -(add-to-list 'auto-mode-alist - (cons (rx (or bot "/") "alidist/" (1+ (not ?\/)) ".sh" eot) - #'alidist-mode)) - -(provide 'alidist-mode) -;;; alidist-mode.el ends here diff --git a/tw/home/files/emacs-packages/bemscript-mode.el b/tw/home/files/emacs-packages/bemscript-mode.el deleted file mode 100644 index f46c858b..00000000 --- a/tw/home/files/emacs-packages/bemscript-mode.el +++ /dev/null @@ -1,92 +0,0 @@ -;;; bemscript-mode.el --- Syntax highlighting for MERRILL BEMScript files. -;;; Commentary: -;;; Based on the MERRILL manual. Some commands may have been missed. -;;; Code: - -(defconst bemscript-mode-keywords - '("set" "setsubdomain" "magnetite" "iron" "tm54" "resize" "cubic anisotropy" - "uniaxial anisotropy" "cubicrotation" "easy axis" "external field strength" - "external field direction" "readmesh" "loadmesh" "readmagnetization" - "uniform magnetization" "randomize magnetization" "randomize all moments" - "remesh" "conjugategradient" "steepestdescent" "minimize" "energylog" - "closelogfile" "writeloopdata" "writemagnetization" "writedemag" "writehyst" - "writeboxdata" "appenddemagzone" "magnetizationtopath" "pathtomagnetization" - "renewpath" "refinepathto" "writetecplotpath" "readtecplotpath" - "readtecplotzone" "keypause" "makeinitialpath" "pathminimize" "pathlogfile" - "systemcommand" "pathstructureenergies" "reportenergy" "stop" "end" "loop" - "endloop" "define" "addto" "undefine" "generatecubemesh" "zonename") - "List of keywords for BEMScript mode. Intended for case folding.") - -(defconst bemscript-mode-builtins - '("Aex" "CurvatureWeight" "ExchangeCalculator" "K1" "K2" "Ls" "Ms" "mu" - "MaxEnergyEvaluations" "MaxPathEvaluations" "MaxRestart" "MaxMeshNumber" - "NEBSpring" "PathN" "Zone" "ZoneIncrement") - "List of built-in variable names for BEMScript.") - -(defconst bemscript-mode-special - '("patran" "tecplot" "POINT" "BLOCK" "SD" "muT" "mT" "T" "C") - "Variables with special meanings and units in BEMScript.") - -;; Available font-lock-*-faces: doc type string builtin comment keyword warning -;; constant (reference) preprocessor syntactic-function function-name -;; negation-char variable-name comment-delimiter -(defconst bemscript-mode-font-lock-defaults - `((;; See font-lock-keywords docs. Earlier lines seem to override later ones, - ;; except if both have OVERRIDE? t. - ;; Format: (REGEXP (GROUPNUM FACENAME OVERRIDE? LAXMATCH?)...) - ;; Comments - ("!\\(.*\\)" 1 font-lock-comment-face t t) - ("!" 0 font-lock-comment-delimiter-face t) - ("!!.*$" 0 font-lock-doc-face t) - - ;; Equals signs need spaces around them. - ("\\s-=\\s-" 0 font-lock-type-face t) ; there is no "operator" etc face - ("=" . font-lock-warning-face) - - ;; Numbers and variables - ("\\<[0-9]*\\.?[0-9]+\\(e[-+]?\\)?[0-9]*\\>" . font-lock-constant-face) - ("\\(\\<[#%][A-Z_a-z][0-9A-Z_a-z]*\\>\\|\\$[A-Z_a-z][0-9A-Za-z_]*\\$\\)" - . font-lock-variable-name-face) - - ;; Preprocessor (&-substitution) - (,(concat "\\([^&]\\|^\\)\\(&&\\)*" ; && escapes & - "\\(&\\([_a-zA-Z][_a-zA-Z0-9]*\\|{[_a-zA-Z][_a-zA-Z0-9]*}\\)\\)") - 3 font-lock-preprocessor-face) - (,(concat "\\([^&]\\|^\\)\\(&&\\)*" ; && escapes & - "\\(&\\($" ; bare & - "\\|[^&{_a-zA-Z]\\|{[^_a-zA-Z]" ; invalid char following & or &{ - ; invalid name or unclosed { - "\\|{[_a-zA-Z][_0-9a-zA-Z]*\\([^_0-9a-zA-Z}]\\|$\\)\\)\\)") - 3 font-lock-warning-face t) - - ;; Variable definitions - ("\\<\\(loop\\|define\\)\\s-+\\([_a-zA-Z][_a-zA-Z0-9]*\\)\\>" - 2 font-lock-function-name-face) - ("\\<\\(addto\\|undefine\\)\\s-+\\([_a-zA-Z][_a-zA-Z0-9]*\\)\\>" - 2 font-lock-variable-name-face) - - ;; Keywords - (,(regexp-opt bemscript-mode-special 'words) . font-lock-string-face) - (,(regexp-opt bemscript-mode-keywords 'words) . font-lock-keyword-face) - (,(regexp-opt bemscript-mode-builtins 'words) . font-lock-builtin-face)) - - ;; KEYWORDS-ONLY: if t, no syntactic fontification (strings and comments) - nil - ;; CASE-FOLD: if t, make keywords case-insensitive. - t) - "Font lock settings for BEMScript mode.") - -(define-derived-mode bemscript-mode prog-mode "BEMScript" - "BEMScript-mode is used for editing MERRILL scripts." - (setq comment-start "!" - comment-end "" - tab-width 2 - font-lock-defaults bemscript-mode-font-lock-defaults) - ;; Only word syntax entries are highlighted; add needed chars. - (modify-syntax-entry ?# "w") - ;; Strings in BEMScript are not quoted. - (modify-syntax-entry ?\" "w")) - -(add-to-list 'auto-mode-alist '("\\.bem\\'" . bemscript-mode)) -(provide 'bemscript-mode) -;;; bemscript-mode.el ends here diff --git a/tw/home/files/emacs-packages/environmentd-mode.el b/tw/home/files/emacs-packages/environmentd-mode.el deleted file mode 100644 index 4bb8812e..00000000 --- a/tw/home/files/emacs-packages/environmentd-mode.el +++ /dev/null @@ -1,46 +0,0 @@ -;;; environmentd-mode.el --- Major mode for environment.d(5) files. - -;;; Commentary: - -;; This major mode font-locks files including /etc/environment and -;; ~/.config/environment.d/*.conf. Their format is specified by the -;; environment.d(5) man page. - -;;; Code: - -(defconst environmentd-mode/font-lock-defaults - '((("^[[:blank:]]+[^[:blank:]]+" . font-lock-warning-face) ; stray leading whitespace - ("^#+[[:blank:]]*" . font-lock-comment-delimiter-face) - ("^#+[[:blank:]]*\\(.*\\)$" 1 font-lock-comment-face) - ("\\\\[$\\]" . font-lock-string-face) ; escaped $ \ - ("^\\([A-Za-z_][A-Za-z0-9_]*\\)\\(=\\)" - (1 font-lock-variable-name-face) - (2 font-lock-keyword-face)) - ("\\(\\${\\)\\([A-Za-z_][A-Za-z0-9_]*\\)\\(:[+-]\\)[^}]*\\(}\\)" - (1 font-lock-keyword-face) - (2 font-lock-variable-name-face) - (3 font-lock-keyword-face) - (4 font-lock-keyword-face)) ; ${X:-default}-variable references - ("\\(\\${\\)\\([A-Za-z_][A-Za-z0-9_]*\\)\\(}\\)" - (1 font-lock-keyword-face) - (2 font-lock-variable-name-face) - (3 font-lock-keyword-face)) ; ${X}-variable references - ("\\(\\$\\)\\([A-Za-z_][A-Za-z0-9_]*\\)" - (1 font-lock-keyword-face) - (2 font-lock-variable-name-face))) ; $X-variable references - t nil ((?\' . "w") (?\" . "w"))) - "Font lock settings for Environment.d mode. See `font-lock-defaults' for documentation.") - -(define-derived-mode environmentd-mode prog-mode "Environment.d" - "Environment.d mode is used for environment.d(5) files." - (setq-local comment-start "#" - comment-start-skip "#" - comment-end "" - font-lock-defaults environmentd-mode/font-lock-defaults)) - -(add-to-list 'auto-mode-alist - '("/environment\\.d/[^/]+\\.conf\\'\\|\\`/etc/environment\\'" - . environmentd-mode)) - -(provide 'environmentd-mode) -;;; environmentd-mode.el ends here diff --git a/tw/home/files/emacs-packages/flymake-guile.el b/tw/home/files/emacs-packages/flymake-guile.el deleted file mode 100644 index edfbce82..00000000 --- a/tw/home/files/emacs-packages/flymake-guile.el +++ /dev/null @@ -1,123 +0,0 @@ -;;; flymake-guile.el --- Flymake checker using `guild compile' -*- lexical-binding: t -*- -;;; Commentary: -;;; "guild compile" compiles Guile code to bytecode and can output a few basic -;;; warnings. Let's use this as a linter! -;;; Code: - -(require 'custom) -(require 'flymake) -(require 'geiser-impl) ; for `geiser-active-implementations' - -(defcustom flymake-guile-guild-executable "guild" - "The guild executable to use. This will be looked up in $PATH." - :type '(string) - :risky t - :group 'flymake-guile) - -(defvar-local flymake-guile--flymake-proc nil - "The latest invocation of guild compile.") - -(defvar-local flymake-guile--temp-file nil - "The temporary file name to pass to guild.") - -(defun flymake-guile--encode-filename (buffer-name) - "Create a safe temporary file name from BUFFER-NAME." - (concat "/tmp/flymake-guile-" - (string-replace - "/" "!" ; we don't want to create subdirs under /tmp - (or buffer-name - (format "temp-%s.scm" - (random most-positive-fixnum)))))) - -;; See info node: (flymake)An annotated example backend. -(defun flymake-guile (report-fn &rest _args) - "Run guild compile and report diagnostics from it using REPORT-FN. -Any running invocations are killed before running another one." - (unless (executable-find flymake-guile-guild-executable) - (funcall report-fn :panic - :explanation "Cannot find `flymake-guile-guild-executable' program") - (error "Cannot find guild executable")) - - (unless flymake-guile--temp-file - (setq-local flymake-guile--temp-file (flymake-guile--encode-filename (buffer-file-name)))) - - ;; Kill previous check, if it's still running. - (when (process-live-p flymake-guile--flymake-proc) - (kill-process flymake-guile--flymake-proc)) - - ;; This needs `lexical-binding'. - (let ((source (current-buffer)) - ;; Copy `flymake-guile--temp-file' to a local var so that we can refer to it in the `lambda' below. - (temp-file flymake-guile--temp-file)) - (save-restriction - (widen) - ;; Send the buffer to guild on stdin. - (with-temp-file flymake-guile--temp-file - (insert-buffer-substring-no-properties source)) - (setq flymake-guile--flymake-proc - (make-process - :name "flymake-guild" :noquery t :connection-type 'pipe - ;; Direct output to a temporary buffer. - :buffer (generate-new-buffer " *flymake-guile*") - ;; Guild can't read from stdin; it needs a file. - :command (list flymake-guile-guild-executable "compile" - ;; See "guild --warn=help" for details. - ;; "--warn=unsupported-warning" ; ignore unsupported warning types - ;; "--warn=unused-variable" ; too many false positives from macros - "--warn=unused-toplevel" - "--warn=shadowed-toplevel" - "--warn=unbound-variable" - "--warn=macro-use-before-definition" - "--warn=use-before-definition" - "--warn=non-idempotent-definition" - "--warn=arity-mismatch" - "--warn=duplicate-case-datum" - "--warn=bad-case-datum" - "--warn=format" - "-L" (expand-file-name - (project-root (project-current nil (file-name-directory - (buffer-file-name source))))) - flymake-guile--temp-file) - :sentinel - (lambda (proc _event) - "Parse diagnostic messages once the process PROC has exited." - ;; Check the process has actually exited, not just been suspended. - (when (memq (process-status proc) '(exit signal)) - (unwind-protect - ;; Only proceed if we've got the "latest" process. - (if (with-current-buffer source (not (eq proc flymake-guile--flymake-proc))) - (flymake-log :warning "Canceling obsolete check %s" proc) - (with-current-buffer (process-buffer proc) - (goto-char (point-min)) - (cl-loop - with msg-regexp = (rx bol (literal temp-file) ":" ; filename - (group (+ digit)) ":" ; line - (group (+ digit)) ": " ; column - (group (or "warning" "error")) ": " ; type - (group (+ not-newline)) eol) ; message - while (search-forward-regexp msg-regexp nil t) - for (beg . end) = (flymake-diag-region - source ; we filter for messages matching our buffer in the regexp - (string-to-number (match-string 1)) - ;; guild outputs 0-based column numbers - (1+ (string-to-number (match-string 2)))) - for type = (pcase (match-string 3) - ("warning" :warning) - ("error" :error) - (type (error "Unknown guild error type %s" type))) - collect (flymake-make-diagnostic source beg end type (match-string 4)) - into diags - finally (funcall report-fn diags)))) - ;; Clean up temporary buffer. - (kill-buffer (process-buffer proc)) - (delete-file temp-file))))))))) - -(defun flymake-guile-enable () - "Set up the Guile checker for flymake, if in a Guile buffer." - (when (memq 'guile geiser-active-implementations) - (add-hook 'flymake-diagnostic-functions #'flymake-guile nil t))) - -(add-hook 'scheme-mode-hook #'flymake-guile-enable) - -(provide 'flymake-guile) -;;; flymake-guile.el ends here diff --git a/tw/home/files/emacs-packages/ifm-mode.el b/tw/home/files/emacs-packages/ifm-mode.el deleted file mode 100644 index 7416588b..00000000 --- a/tw/home/files/emacs-packages/ifm-mode.el +++ /dev/null @@ -1,18 +0,0 @@ -(define-generic-mode 'ifm-mode - '("#") - '("title" "map" "require" "room" "join" "to" "dir" "exit" "go" "oneway" - "tag" "from" "link" "nolink" "item" "in" "note" "score" "need" "after" - "before" "leave" "all" "except" "cmd" "length" "start" "finish" "nodrop" - "nopath" "style" "hidden" "keep" "with" "until" "ignore" "give" "lost" - "do" "get" "drop" "until" "safe" "ignore" "goto" "endstyle") - '(("\\<\\(\\(north\\|south\\)\\(east\\|west\\)?\\|[ns][ew]?\\|east\\|west\\|[ew]\\)\\>" - . 'font-lock-builtin-face) - ("\\<\\([du]\\|down\\|up\\|in\\|out\\|last\\|it\\|them\\)\\>" - . 'font-lock-builtin-face) - ("\\<[0-9]+" . 'font-lock-constant-face) - ("\\<[_a-zA-Z][_0-9A-Za-z]*\\>" . 'font-lock-variable-name-face)) - '("\\.ifm\\'") - nil - "A mode for interactive fiction manager files") - -(provide 'ifm-mode) diff --git a/tw/home/files/emacs-packages/pam-env-mode.el b/tw/home/files/emacs-packages/pam-env-mode.el deleted file mode 100644 index 75b0bf94..00000000 --- a/tw/home/files/emacs-packages/pam-env-mode.el +++ /dev/null @@ -1,45 +0,0 @@ -;;; pam-env.el --- Major mode for pam_env.conf(5) files. - -;;; Commentary: - -;; This major mode font-locks files including ~/.pam_environment and -;; /etc/security/pam_env.conf, but notably not /etc/environment. Their format is -;; specified by the pam_env.conf(5) man page. - -;; TODO: Only apply font-lock-variable-name-face to variable declarations if -;; the previous line didn't end with a backslash. The following case didn't -;; work (some declarations that should've been font-locked weren't): -;; '("\\(?:^$\\|[^\\\\]\\)[\r\n]\\([^[:blank:]]+\\)" -;; 1 font-lock-variable-name-face keep) - -;; pam_env does not support escaped double quotes ("). Single-quoted strings are -;; not used as string delimiters. We can only match against word chars in -;; `pam-env-mode/font-lock-defaults', so make double quotes word chars. - -;;; Code: - -(defconst pam-env-mode/font-lock-defaults - '((("^#+" . font-lock-comment-delimiter-face) - ("^#+[[:blank:]]*\\(.*\\)$" 1 font-lock-comment-face) - ("\\\\[@$\\]" . font-lock-string-face) ; escaped $ @ \ - ("@{[^}]+}" . font-lock-builtin-face) ; @{}-variable references - ("\\${[^}]+}" . font-lock-variable-name-face) ; ${}-variable references - ("\"[^\"]*\"" 0 font-lock-string-face keep) ; double-quoted strings; escaped " not supported - ("\\<\\(DEFAULT\\|OVERRIDE\\)=" . font-lock-keyword-face) ; DEFAULT= and OVERRIDE= - ("^[^[:blank:]]+" . font-lock-variable-name-face) ; variable declarations - ("[[:blank:]]+[^[:blank:]]+" . font-lock-warning-face)) ; stray whitespace - t nil ((?\' . "w") (?\" . "w"))) - "Font lock settings for PAM-Environment mode. See `font-lock-defaults' for documentation.") - -(define-derived-mode pam-env-mode prog-mode "PAM-Environment" - "PAM-environment mode is used for pam_env.conf(5) files." - (set (make-local-variable 'comment-start) "#") - (set (make-local-variable 'comment-start-skip) "^#+[[:blank:]]*") - (set (make-local-variable 'comment-end) "") - (set (make-local-variable 'font-lock-defaults) pam-env-mode/font-lock-defaults)) - -(let ((regexp "\\(\\`\\|/\\)\\(pam_env\\.conf\\|\\.pam_environment\\)\\'")) - (add-to-list 'auto-mode-alist `(,regexp . pam-env-mode))) - -(provide 'pam-env-mode) -;;; pam-env.el ends here diff --git a/tw/home/files/emacs-packages/vcard-mode.el b/tw/home/files/emacs-packages/vcard-mode.el deleted file mode 100644 index a932477a..00000000 --- a/tw/home/files/emacs-packages/vcard-mode.el +++ /dev/null @@ -1,56 +0,0 @@ -;;; vcard-mode.el --- Major mode for vCard files. - -;; Copyright (C) 2012 Desmond O. Chang - -;; Author: Desmond O. Chang <dochang@gmail.com> -;; Version: 0.1.0 -;; Keywords: files - -;; This program is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program. If not, see <http://www.gnu.org/licenses/>. - -;;; Commentary: - -;; This package provides a major mode to edit vCard files. - -;; To install it, put this file under your load path. Then add the -;; following to your .emacs file: - -;; (require 'vcard-mode) - -;; Or if you don't want to load it until editing a vCard file: - -;; (autoload 'vcard-mode "vcard-mode" "Major mode for vCard files" t) -;; (add-to-list 'auto-mode-alist '("\\.vc\\(f\\|ard\\)\\'" . vcard-mode)) - -;;; Code: - -(require 'generic) - -(defun vcard-mode-init () - (set (make-local-variable 'paragraph-start) "BEGIN:VCARD")) - -;;;###autoload -(define-generic-mode vcard-mode - '() - nil - '(("^BEGIN:VCARD" . font-lock-function-name-face) - (";[^:\n]+:" . font-lock-type-face) - ("^\\([^;:\n]+\\):?" . font-lock-keyword-face)) - '("\\.\\(vcf\\|vcard\\)\\'") - '(vcard-mode-init) - "Generic mode for vCard files.") - -(provide 'vcard-mode) - -;;; vcard-mode.el ends here diff --git a/tw/home/files/emacsclient.desktop b/tw/home/files/emacsclient.desktop deleted file mode 100644 index 5e68ffef..00000000 --- a/tw/home/files/emacsclient.desktop +++ /dev/null @@ -1,22 +0,0 @@ -[Desktop Entry] -Name=Emacs (Client) -GenericName=Text Editor -Comment=Edit text -MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; -Exec=emacsclient --alternate-editor= --create-frame %F -Icon=emacs -Type=Application -Terminal=false -Categories=Development;TextEditor; -StartupNotify=true -StartupWMClass=Emacs -Keywords=emacsclient; -Actions=new-window;new-instance; - -[Desktop Action new-window] -Name=New Window -Exec=emacsclient --alternate-editor= --create-frame %F - -[Desktop Action new-instance] -Name=New Instance -Exec=emacs %F diff --git a/tw/home/files/gtk2.ini b/tw/home/files/gtk2.ini deleted file mode 100644 index 6af8200a..00000000 --- a/tw/home/files/gtk2.ini +++ /dev/null @@ -1,20 +0,0 @@ -gtk-theme-name="Catppuccin-Dark" -gtk-icon-theme-name="Papirus-Dark" -gtk-font-name="Fira Sans, 10" -gtk-cursor-theme-name="Catppuccin-Mocha-Dark-Cursors" -gtk-cursor-theme-size=0 -gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ -gtk-toolbar-icon-size=GTK_ICON_SIZE_MENU -gtk-button-images=1 -gtk-menu-images=1 -gtk-enable-event-sounds=1 -gtk-enable-input-feedback-sounds=1 -gtk-xft-antialias=1 -gtk-xft-hinting=1 -gtk-xft-hintstyle="hintslight" -gtk-xft-rgba="rgb" -#gtk-modules="appmenu-gtk-module" -gtk-enable-animations=1 -gtk-primary-button-warps-slider=0 -# Use Qt UI conventions, I think (at least this setting is from KDE). -gtk-alternative-button-order = 1 diff --git a/tw/home/files/gtk3.ini b/tw/home/files/gtk3.ini deleted file mode 100644 index fff5946b..00000000 --- a/tw/home/files/gtk3.ini +++ /dev/null @@ -1,16 +0,0 @@ -[Settings] -gtk-theme-name=Catppuccin-Dark -gtk-icon-theme-name=Papirus-Dark -gtk-font-name=Fira Sans 10 -gtk-cursor-theme-name=Catppuccin-Mocha-Dark-Cursors -gtk-cursor-theme-size=0 -gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ -gtk-toolbar-icon-size=GTK_ICON_SIZE_MENU -gtk-button-images=1 -gtk-menu-images=1 -gtk-enable-event-sounds=1 -gtk-enable-input-feedback-sounds=1 -gtk-xft-antialias=1 -gtk-xft-hinting=1 -gtk-xft-hintstyle=hintslight -gtk-xft-rgba=rgb diff --git a/tw/home/files/i3.conf b/tw/home/files/i3.conf deleted file mode 100644 index 10ae1133..00000000 --- a/tw/home/files/i3.conf +++ /dev/null @@ -1,273 +0,0 @@ -# -# i3 config file (v4) -# -# Please see http://i3wm.org/docs/userguide.html for a complete reference! -# Use xev to see keycodes for special keys. - -# Appearance and Styling {{{ -# Font for window titles. Will also be used by the bar unless a different font -# is used in the bar {} block below. -font pango:Fira Sans 10 - -title_align center -default_border pixel 3 -default_floating_border pixel 3 -hide_edge_borders smart -gaps inner 15 -gaps outer 0 -smart_gaps on - -# Catppuccin colours -# Foregrounds -set $c_fg #cdd6f4 -set $c_inactive #7f849c -# Backgrounds -set $c_bg #11111b -set $c_active #585b70 -set $c_urgent #f9e2af - -# class border background text indicator child_border -client.focused $c_active $c_active $c_fg $c_active $c_active -client.focused_inactive $c_bg $c_bg $c_fg $c_bg $c_bg -client.unfocused $c_bg $c_bg $c_inactive $c_bg $c_bg -client.urgent $c_urgent $c_urgent $c_fg $c_urgent $c_urgent -client.placeholder $c_bg $c_bg $c_inactive $c_bg $c_bg -client.background $c_bg -# }}} - -# Basic Configuration {{{ -# use the Super key as $mod -set $mod Mod4 - -# Use Mouse+$mod to drag floating windows to their wanted position -floating_modifier $mod - -# essential applications -bindsym $mod+Return exec kitty "--directory=$(xcwd)" -bindsym $mod+i exec icecat --new-window -bindsym $mod+shift+i exec icecat --new-tab "$(xclip -out)" -bindsym $mod+e exec $ASYNC_EDITOR -# Use ASYNC_EDITOR so I can continue using ranger while the editor -# remains open in a separate window. -bindsym $mod+slash exec EDITOR=$ASYNC_EDITOR kitty ranger "$(xcwd)" -bindsym $mod+semicolon exec --no-startup-id nheko -bindsym $mod+shift+colon exec --no-startup-id kitty aerc -bindsym $mod+y exec kitty pulsemixer - -# volume -bindsym XF86AudioRaiseVolume exec --no-startup-id volume +5 -bindsym XF86AudioLowerVolume exec --no-startup-id volume -5 -bindsym XF86AudioMute exec --no-startup-id volume toggle-mute - -# notifications -bindsym $mod+n exec dunstctl close -bindsym $mod+shift+n exec dunstctl history-pop -bindsym $mod+period exec dunstctl context - -# screen locking -bindsym $mod+shift+slash exec screenlock - -# kill focused window -bindsym $mod+shift+q kill - -# rofi menus -bindsym $mod+d exec rofi -show combi -bindsym $mod+shift+e exec rofi -show session:sessionmenu -# When selecting a history line in rofi-calc, it is printed; copy it so we can use it elsewhere. -bindsym $mod+q exec rofi -show calc | xclip -quiet -i -rmlastnl -selection clipboard -bindsym $mod+p exec passmenu --type-all -bindsym $mod+shift+p exec passmenu --type-pass -bindsym $mod+o exec passmenu --type-otp -bindsym $mod+comma exec rofi-colors.sh -bindsym $mod+shift+Return exec rofi -show ssh -# }}} - -# Basic Movement {{{ -# change focus -bindsym $mod+h focus left -bindsym $mod+j focus down -bindsym $mod+k focus up -bindsym $mod+l focus right -bindsym $mod+Left focus left -bindsym $mod+Down focus down -bindsym $mod+Up focus up -bindsym $mod+Right focus right - -# move focused window -bindsym $mod+shift+h move left -bindsym $mod+shift+j move down -bindsym $mod+shift+k move up -bindsym $mod+shift+l move right -bindsym $mod+shift+Left move left -bindsym $mod+shift+Down move down -bindsym $mod+shift+Up move up -bindsym $mod+shift+Right move right - -bindsym $mod+a focus parent -bindsym $mod+shift+a focus child -# }}} - -# Layout {{{ -bindsym $mod+b split h -bindsym $mod+v split v - -# enter fullscreen mode for the focused container -bindsym $mod+f fullscreen toggle -bindsym $mod+shift+f floating enable, resize set 1920 1080, move position 0 0 - -# change container layout (stacked, tabbed, toggle split) -bindsym $mod+s layout stacking -bindsym $mod+w layout tabbed -bindsym $mod+x layout toggle split - -bindsym $mod+shift+space floating toggle -# change focus between tiling / floating windows -bindsym $mod+space focus mode_toggle - -# scratchpad -bindsym $mod+numbersign scratchpad show -bindsym $mod+shift+numbersign move to scratchpad -bindsym $mod+apostrophe sticky disable, floating disable -bindsym $mod+shift+apostrophe sticky enable, floating enable - -# move workspaces -bindsym $mod+shift+comma move workspace to output left -bindsym $mod+shift+period move workspace to output right -# }}} - -# Default Workspaces {{{ -# switch to workspace -bindsym $mod+Escape workspace back_and_forth -bindsym $mod+1 workspace 1 -bindsym $mod+2 workspace 2 -bindsym $mod+3 workspace 3 -bindsym $mod+4 workspace 4 -bindsym $mod+5 workspace 5 -bindsym $mod+6 workspace 6 -bindsym $mod+7 workspace 7 -bindsym $mod+8 workspace 8 -bindsym $mod+9 workspace 9 -bindsym $mod+0 workspace 10 -bindsym $mod+parenleft workspace prev -bindsym $mod+parenright workspace next - -# move focused container to workspace -bindsym $mod+shift+Escape move container to workspace back_and_forth -bindsym $mod+shift+1 move container to workspace 1 -bindsym $mod+shift+2 move container to workspace 2 -bindsym $mod+shift+3 move container to workspace 3 -bindsym $mod+shift+4 move container to workspace 4 -bindsym $mod+shift+5 move container to workspace 5 -bindsym $mod+shift+6 move container to workspace 6 -bindsym $mod+shift+7 move container to workspace 7 -bindsym $mod+shift+8 move container to workspace 8 -bindsym $mod+shift+9 move container to workspace 9 -bindsym $mod+shift+0 move container to workspace 10 -bindsym $mod+shift+parenleft move container to workspace prev -bindsym $mod+shift+parenright move container to workspace next -# }}} - -# Custom Workspaces {{{ -set $ws_terminal 0:>_ -bindsym $mod+grave workspace "$ws_terminal" -bindsym $mod+shift+grave move container to workspace "$ws_terminal" - -set $ws_coding 50:🖊️ -bindsym $mod+c workspace "$ws_coding" -bindsym $mod+shift+c move container to workspace "$ws_coding" - -set $ws_games 60:🎮 -bindsym $mod+g workspace "$ws_games" -bindsym $mod+shift+g move container to workspace "$ws_games" - -set $ws_music 80:🎵 -bindsym $mod+u workspace "$ws_music" -bindsym $mod+shift+u move container to workspace "$ws_music" - -set $ws_messaging 90:💬 -bindsym $mod+m workspace "$ws_messaging" -bindsym $mod+shift+m move container to workspace "$ws_messaging" - -# set default screens for workspaces -# laptop: eDP-1-1 is the laptop screen, HDMI-0 is the external screen. -# work desktop: DP-1-8 is on the left, DP-2 is the wide screen on the right. -# The first workspaces listed for each output will be active at startup. -workspace 1 output HDMI-0 DP-1-8 -workspace "$ws_messaging" output eDP-1-1 DP-2 -workspace 2 output HDMI-0 DP-1-8 -workspace 3 output HDMI-0 DP-1-8 -workspace 4 output HDMI-0 DP-1-8 -workspace 5 output HDMI-0 DP-1-8 -workspace 6 output eDP-1-1 DP-2 -workspace 7 output eDP-1-1 DP-2 -workspace 8 output eDP-1-1 DP-2 -workspace 9 output eDP-1-1 DP-2 -workspace 10 output eDP-1-1 DP-2 -workspace "$ws_terminal" output eDP-1-1 DP-1-8 -workspace "$ws_coding" output HDMI-0 DP-2 -workspace "$ws_games" output HDMI-0 DP-1-8 -workspace "$ws_music" output eDP-1-1 DP-1-8 - -assign [class="^Franz$"] "$ws_messaging" -assign [window_role="^weechat$"] "$ws_messaging" -assign [window_role="^mutt$"] "$ws_messaging" -assign [class="^evolution-initial$"] "$ws_messaging" -assign [class="^kontact$"] "$ws_messaging" - -# NOTE: no_focus will also be ignored for the first window on a workspace as -# there shouldn’t be a reason to not focus the window in this case. This allows -# for better usability in combination with workspace_layout. (From i3 docs) -#no_focus [class="^Franz$"] -#no_focus [window_role="^weechat$"] -#no_focus [window_role="^mutt$"] -#no_focus [class="^evolution-initial$"] - -## PlayOnLinux -for_window [title="PlayOnLinux"] floating enable - -## Plasma/KDE: https://ryanlue.com/posts/2019-06-13-kde-i3 -# Don’t treat Plasma pop-ups as full-sized windows -for_window [class="plasmashell"] floating enable -# Don’t spawn an empty window for the Plasma Desktop -for_window [title="Desktop — Plasma"] move scratchpad -# Don’t let notifications and non-interactive pop-up windows steal focus -#no_focus [class="plasmashell" window_type="on_screen_display"] -# https://github.com/heckelson/i3-and-kde-plasma -# Move notifications to top-right corner. -#for_window [class="plasmashell" window_type="notification"] move up 400, move right 750, no_focus -# Notifications appear in the centre of the screen. According to -# https://old.reddit.com/r/i3wm/comments/bw1yfs/kde_notifications_appearing_in_the_centre_of/, -# setting notifications to appear in the top-left corner gets placement right. -no_focus [class="plasmashell" window_type="notification"] - -for_window [class="^Pyneedle$"] floating enable -for_window [instance="^emacs-initial$"] floating enable -for_window [class="^Spotify$"] move container to workspace "$ws_music" -for_window [class="^Pidgin$"] move container to workspace "$ws_messaging" -for_window [class="^kitty$" title="^aerc$"] move container to workspace "$ws_messaging" -# annoying pop-up from Bluetooth network manager -for_window [class="^.blueman-applet-real$"] kill -# }}} - -# Modes {{{ -mode "resize" { - bindsym h resize shrink width 10 px or 10 ppt - bindsym j resize grow height 10 px or 10 ppt - bindsym k resize shrink height 10 px or 10 ppt - bindsym l resize grow width 10 px or 10 ppt - - bindsym shift+h resize shrink width 5 px or 5 ppt - bindsym shift+j resize grow height 5 px or 5 ppt - bindsym shift+k resize shrink height 5 px or 5 ppt - bindsym shift+l resize grow width 5 px or 5 ppt - - bindsym left resize shrink width 10 px or 10 ppt - bindsym down resize grow height 10 px or 10 ppt - bindsym up resize shrink height 10 px or 10 ppt - bindsym right resize grow width 10 px or 10 ppt - - bindsym Return mode "default" - bindsym Escape mode "default" -} -bindsym $mod+r mode "resize" -# }}} diff --git a/tw/home/files/khal.conf b/tw/home/files/khal.conf deleted file mode 100644 index 3240609a..00000000 --- a/tw/home/files/khal.conf +++ /dev/null @@ -1,44 +0,0 @@ -# https://lostpackets.de/khal/configure.html - -[default] -default_calendar = Personal -highlight_event_days = True -show_all_days = True -timedelta = 7d - -[highlight_days] -default_color = dark gray -method = foreground - -[locale] -timeformat = %H:%M -dateformat = %d/%m -longdateformat = %d/%m/%Y -datetimeformat = %d/%m %H:%M -longdatetimeformat = %d/%m/%Y %H:%M -weeknumbers = off - -[view] -monthdisplay = firstfullweek - -[calendars] -[[birthdays]] -type = birthdays -path = ~/.local/share/vdirsyncer/main-contacts/contacts -color = dark red -# Prefer other events' colours when colouring days. -priority = -1 - -[[indico]] -path = ~/.local/share/vdirsyncer/indico -color = yellow -readonly = True - -[[cern]] -path = ~/.local/share/vdirsyncer/cern -color = yellow -readonly = True - -[[calendars]] -type = discover -path = ~/.local/share/vdirsyncer/calendars/imported-*ics diff --git a/tw/home/files/khard.conf b/tw/home/files/khard.conf deleted file mode 100644 index a3cfe41a..00000000 --- a/tw/home/files/khard.conf +++ /dev/null @@ -1,22 +0,0 @@ -# https://khard.readthedocs.io/en/latest/man/khard.conf.html - -[addressbooks] -[[main]] -path = ~/.local/share/vdirsyncer/main-contacts/contacts -[[sandbox]] -path = ~/.local/share/vdirsyncer/sandbox-contacts/sandbox-contacts - -[general] -default_action = list -merge_editor = vimdiff - -[contact table] -display = formatted_name -sort = last_name -group_by_addressbook = yes -localize_dates = yes -show_nicknames = yes -show_kinds = yes -show_uids = no -preferred_phone_number_type = pref, cell, home -preferred_email_address_type = pref, home, work diff --git a/tw/home/files/kitty.conf b/tw/home/files/kitty.conf deleted file mode 100644 index 014e70f6..00000000 --- a/tw/home/files/kitty.conf +++ /dev/null @@ -1,1337 +0,0 @@ -# vim:fileencoding=utf-8:ft=conf:foldmethod=marker - -#: Fonts {{{ - -#: kitty has very powerful font management. You can configure -#: individual font faces and even specify special fonts for particular -#: characters. - -font_family Hermit -# bold_font auto -# italic_font auto -# bold_italic_font auto - -#: You can specify different fonts for the bold/italic/bold-italic -#: variants. To get a full list of supported fonts use the `kitty -#: list-fonts` command. By default they are derived automatically, by -#: the OSes font system. Setting them manually is useful for font -#: families that have many weight variants like Book, Medium, Thick, -#: etc. For example:: - -#: font_family Operator Mono Book -#: bold_font Operator Mono Medium -#: italic_font Operator Mono Book Italic -#: bold_italic_font Operator Mono Medium Italic - -font_size 10.0 - -#: Font size (in pts) - -# force_ltr no - -#: kitty does not support BIDI (bidirectional text), however, for RTL -#: scripts, words are automatically displayed in RTL. That is to say, -#: in an RTL script, the words "HELLO WORLD" display in kitty as -#: "WORLD HELLO", and if you try to select a substring of an RTL- -#: shaped string, you will get the character that would be there had -#: the the string been LTR. For example, assuming the Hebrew word -#: ירושלים, selecting the character that on the screen appears to be ם -#: actually writes into the selection buffer the character י. - -#: kitty's default behavior is useful in conjunction with a filter to -#: reverse the word order, however, if you wish to manipulate RTL -#: glyphs, it can be very challenging to work with, so this option is -#: provided to turn it off. Furthermore, this option can be used with -#: the command line program GNU FriBidi -#: <https://github.com/fribidi/fribidi#executable> to get BIDI -#: support, because it will force kitty to always treat the text as -#: LTR, which FriBidi expects for terminals. - -# adjust_line_height 0 -# adjust_column_width 0 - -#: Change the size of each character cell kitty renders. You can use -#: either numbers, which are interpreted as pixels or percentages -#: (number followed by %), which are interpreted as percentages of the -#: unmodified values. You can use negative pixels or percentages less -#: than 100% to reduce sizes (but this might cause rendering -#: artifacts). - -# symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols - -#: Map the specified unicode codepoints to a particular font. Useful -#: if you need special rendering for some symbols, such as for -#: Powerline. Avoids the need for patched fonts. Each unicode code -#: point is specified in the form U+<code point in hexadecimal>. You -#: can specify multiple code points, separated by commas and ranges -#: separated by hyphens. symbol_map itself can be specified multiple -#: times. Syntax is:: - -#: symbol_map codepoints Font Family Name - -# disable_ligatures never - -#: Choose how you want to handle multi-character ligatures. The -#: default is to always render them. You can tell kitty to not render -#: them when the cursor is over them by using cursor to make editing -#: easier, or have kitty never render them at all by using always, if -#: you don't like them. The ligature strategy can be set per-window -#: either using the kitty remote control facility or by defining -#: shortcuts for it in kitty.conf, for example:: - -#: map alt+1 disable_ligatures_in active always -#: map alt+2 disable_ligatures_in all never -#: map alt+3 disable_ligatures_in tab cursor - -#: Note that this refers to programming ligatures, typically -#: implemented using the calt OpenType feature. For disabling general -#: ligatures, use the font_features setting. - -# font_features none - -#: Choose exactly which OpenType features to enable or disable. This -#: is useful as some fonts might have features worthwhile in a -#: terminal. For example, Fira Code Retina includes a discretionary -#: feature, zero, which in that font changes the appearance of the -#: zero (0), to make it more easily distinguishable from Ø. Fira Code -#: Retina also includes other discretionary features known as -#: Stylistic Sets which have the tags ss01 through ss20. - -#: Note that this code is indexed by PostScript name, and not the font -#: family. This allows you to define very precise feature settings; -#: e.g. you can disable a feature in the italic font but not in the -#: regular font. - -#: On Linux, these are read from the FontConfig database first and -#: then this, setting is applied, so they can be configured in a -#: single, central place. - -#: To get the PostScript name for a font, use kitty + list-fonts -#: --psnames: - -#: .. code-block:: sh - -#: $ kitty + list-fonts --psnames | grep Fira -#: Fira Code -#: Fira Code Bold (FiraCode-Bold) -#: Fira Code Light (FiraCode-Light) -#: Fira Code Medium (FiraCode-Medium) -#: Fira Code Regular (FiraCode-Regular) -#: Fira Code Retina (FiraCode-Retina) - -#: The part in brackets is the PostScript name. - -#: Enable alternate zero and oldstyle numerals:: - -#: font_features FiraCode-Retina +zero +onum - -#: Enable only alternate zero:: - -#: font_features FiraCode-Retina +zero - -#: Disable the normal ligatures, but keep the calt feature which (in -#: this font) breaks up monotony:: - -#: font_features TT2020StyleB-Regular -liga +calt - -#: In conjunction with force_ltr, you may want to disable Arabic -#: shaping entirely, and only look at their isolated forms if they -#: show up in a document. You can do this with e.g.:: - -#: font_features UnifontMedium +isol -medi -fina -init - -# box_drawing_scale 0.001, 1, 1.5, 2 - -#: Change the sizes of the lines used for the box drawing unicode -#: characters These values are in pts. They will be scaled by the -#: monitor DPI to arrive at a pixel value. There must be four values -#: corresponding to thin, normal, thick, and very thick lines. - -#: }}} - -#: Cursor customization {{{ - -# cursor #cccccc - -#: Default cursor color - -# cursor_text_color #111111 - -#: Choose the color of text under the cursor. If you want it rendered -#: with the background color of the cell underneath instead, use the -#: special keyword: background - -# cursor_shape block - -#: The cursor shape can be one of (block, beam, underline) - -# cursor_beam_thickness 1.5 - -#: Defines the thickness of the beam cursor (in pts) - -# cursor_underline_thickness 2.0 - -#: Defines the thickness of the underline cursor (in pts) - -# cursor_blink_interval -1 - -#: The interval (in seconds) at which to blink the cursor. Set to zero -#: to disable blinking. Negative values mean use system default. Note -#: that numbers smaller than repaint_delay will be limited to -#: repaint_delay. - -# cursor_stop_blinking_after 15.0 - -#: Stop blinking cursor after the specified number of seconds of -#: keyboard inactivity. Set to zero to never stop blinking. - -#: }}} - -#: Scrollback {{{ - -scrollback_lines 100000 - -#: Number of lines of history to keep in memory for scrolling back. -#: Memory is allocated on demand. Negative numbers are (effectively) -#: infinite scrollback. Note that using very large scrollback is not -#: recommended as it can slow down performance of the terminal and -#: also use large amounts of RAM. Instead, consider using -#: scrollback_pager_history_size. - -# scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER - -#: Program with which to view scrollback in a new window. The -#: scrollback buffer is passed as STDIN to this program. If you change -#: it, make sure the program you use can handle ANSI escape sequences -#: for colors and text formatting. INPUT_LINE_NUMBER in the command -#: line above will be replaced by an integer representing which line -#: should be at the top of the screen. Similarly CURSOR_LINE and -#: CURSOR_COLUMN will be replaced by the current cursor position. - -scrollback_pager_history_size 1024 - -#: Separate scrollback history size, used only for browsing the -#: scrollback buffer (in MB). This separate buffer is not available -#: for interactive scrolling but will be piped to the pager program -#: when viewing scrollback buffer in a separate window. The current -#: implementation stores the data in UTF-8, so approximatively 10000 -#: lines per megabyte at 100 chars per line, for pure ASCII text, -#: unformatted text. A value of zero or less disables this feature. -#: The maximum allowed size is 4GB. - -scrollback_fill_enlarged_window yes - -#: Fill new space with lines from the scrollback buffer after -#: enlarging a window. - -# wheel_scroll_multiplier 5.0 - -#: Modify the amount scrolled by the mouse wheel. Note this is only -#: used for low precision scrolling devices, not for high precision -#: scrolling on platforms such as macOS and Wayland. Use negative -#: numbers to change scroll direction. - -# touch_scroll_multiplier 1.0 - -#: Modify the amount scrolled by a touchpad. Note this is only used -#: for high precision scrolling devices on platforms such as macOS and -#: Wayland. Use negative numbers to change scroll direction. - -#: }}} - -#: Mouse {{{ - -# mouse_hide_wait 3.0 - -#: Hide mouse cursor after the specified number of seconds of the -#: mouse not being used. Set to zero to disable mouse cursor hiding. -#: Set to a negative value to hide the mouse cursor immediately when -#: typing text. Disabled by default on macOS as getting it to work -#: robustly with the ever-changing sea of bugs that is Cocoa is too -#: much effort. - -# url_color #0087bd -# url_style curly - -#: The color and style for highlighting URLs on mouse-over. url_style -#: can be one of: none, single, double, curly - -open_url_modifiers shift -# open_url_modifiers kitty_mod - -#: The modifier keys to press when clicking with the mouse on URLs to -#: open the URL - -# open_url_with default - -#: The program with which to open URLs that are clicked on. The -#: special value default means to use the operating system's default -#: URL handler. - -# url_prefixes http https file ftp gemini irc gopher mailto news git - -#: The set of URL prefixes to look for when detecting a URL under the -#: mouse cursor. - -# detect_urls yes - -#: Detect URLs under the mouse. Detected URLs are highlighted with an -#: underline and the mouse cursor becomes a hand over them. Even if -#: this option is disabled, URLs are still clickable. - -# copy_on_select no - -#: Copy to clipboard or a private buffer on select. With this set to -#: clipboard, simply selecting text with the mouse will cause the text -#: to be copied to clipboard. Useful on platforms such as macOS that -#: do not have the concept of primary selections. You can instead -#: specify a name such as a1 to copy to a private kitty buffer -#: instead. Map a shortcut with the paste_from_buffer action to paste -#: from this private buffer. For example:: - -#: map cmd+shift+v paste_from_buffer a1 - -#: Note that copying to the clipboard is a security risk, as all -#: programs, including websites open in your browser can read the -#: contents of the system clipboard. - -# strip_trailing_spaces never - -#: Remove spaces at the end of lines when copying to clipboard. A -#: value of smart will do it when using normal selections, but not -#: rectangle selections. always will always do it. - -# rectangle_select_modifiers ctrl+alt - -#: The modifiers to use rectangular selection (i.e. to select text in -#: a rectangular block with the mouse) - -# terminal_select_modifiers shift - -#: The modifiers to override mouse selection even when a terminal -#: application has grabbed the mouse - -# select_by_word_characters @-./_~?&=%+# - -#: Characters considered part of a word when double clicking. In -#: addition to these characters any character that is marked as an -#: alphanumeric character in the unicode database will be matched. - -# click_interval -1.0 - -#: The interval between successive clicks to detect double/triple -#: clicks (in seconds). Negative numbers will use the system default -#: instead, if available, or fallback to 0.5. - -focus_follows_mouse yes - -#: Set the active window to the window under the mouse when moving the -#: mouse around - -# pointer_shape_when_grabbed arrow - -#: The shape of the mouse pointer when the program running in the -#: terminal grabs the mouse. Valid values are: arrow, beam and hand - -# default_pointer_shape beam - -#: The default shape of the mouse pointer. Valid values are: arrow, -#: beam and hand - -# pointer_shape_when_dragging beam - -#: The default shape of the mouse pointer when dragging across text. -#: Valid values are: arrow, beam and hand - -#: }}} - -#: Performance tuning {{{ - -# repaint_delay 10 - -#: Delay (in milliseconds) between screen updates. Decreasing it, -#: increases frames-per-second (FPS) at the cost of more CPU usage. -#: The default value yields ~100 FPS which is more than sufficient for -#: most uses. Note that to actually achieve 100 FPS you have to either -#: set sync_to_monitor to no or use a monitor with a high refresh -#: rate. Also, to minimize latency when there is pending input to be -#: processed, repaint_delay is ignored. - -# input_delay 3 - -#: Delay (in milliseconds) before input from the program running in -#: the terminal is processed. Note that decreasing it will increase -#: responsiveness, but also increase CPU usage and might cause flicker -#: in full screen programs that redraw the entire screen on each loop, -#: because kitty is so fast that partial screen updates will be drawn. - -# sync_to_monitor yes - -#: Sync screen updates to the refresh rate of the monitor. This -#: prevents tearing (https://en.wikipedia.org/wiki/Screen_tearing) -#: when scrolling. However, it limits the rendering speed to the -#: refresh rate of your monitor. With a very high speed mouse/high -#: keyboard repeat rate, you may notice some slight input latency. If -#: so, set this to no. - -#: }}} - -#: Terminal bell {{{ - -# enable_audio_bell yes - -#: Enable/disable the audio bell. Useful in environments that require -#: silence. - -# visual_bell_duration 0.0 - -#: Visual bell duration. Flash the screen when a bell occurs for the -#: specified number of seconds. Set to zero to disable. - -# window_alert_on_bell yes - -#: Request window attention on bell. Makes the dock icon bounce on -#: macOS or the taskbar flash on linux. - -# bell_on_tab yes - -#: Show a bell symbol on the tab if a bell occurs in one of the -#: windows in the tab and the window is not the currently focused -#: window - -# command_on_bell none - -#: Program to run when a bell occurs. - -#: }}} - -#: Window layout {{{ - -# remember_window_size yes -# initial_window_width 640 -# initial_window_height 400 - -#: If enabled, the window size will be remembered so that new -#: instances of kitty will have the same size as the previous -#: instance. If disabled, the window will initially have size -#: configured by initial_window_width/height, in pixels. You can use a -#: suffix of "c" on the width/height values to have them interpreted -#: as number of cells instead of pixels. - -# enabled_layouts * - -#: The enabled window layouts. A comma separated list of layout names. -#: The special value all means all layouts. The first listed layout -#: will be used as the startup layout. Default configuration is all -#: layouts in alphabetical order. For a list of available layouts, see -#: the https://sw.kovidgoyal.net/kitty/index.html#layouts. - -# window_resize_step_cells 2 -# window_resize_step_lines 2 - -#: The step size (in units of cell width/cell height) to use when -#: resizing windows. The cells value is used for horizontal resizing -#: and the lines value for vertical resizing. - -# window_border_width 0.5pt - -#: The width of window borders. Can be either in pixels (px) or pts -#: (pt). Values in pts will be rounded to the nearest number of pixels -#: based on screen resolution. If not specified the unit is assumed to -#: be pts. Note that borders are displayed only when more than one -#: window is visible. They are meant to separate multiple windows. - -# draw_minimal_borders yes - -#: Draw only the minimum borders needed. This means that only the -#: minimum needed borders for inactive windows are drawn. That is only -#: the borders that separate the inactive window from a neighbor. Note -#: that setting a non-zero window margin overrides this and causes all -#: borders to be drawn. - -# window_margin_width 0 - -#: The window margin (in pts) (blank area outside the border). A -#: single value sets all four sides. Two values set the vertical and -#: horizontal sides. Three values set top, horizontal and bottom. Four -#: values set top, right, bottom and left. - -# single_window_margin_width -1 - -#: The window margin (in pts) to use when only a single window is -#: visible. Negative values will cause the value of -#: window_margin_width to be used instead. A single value sets all -#: four sides. Two values set the vertical and horizontal sides. Three -#: values set top, horizontal and bottom. Four values set top, right, -#: bottom and left. - -# window_padding_width 0 - -#: The window padding (in pts) (blank area between the text and the -#: window border). A single value sets all four sides. Two values set -#: the vertical and horizontal sides. Three values set top, horizontal -#: and bottom. Four values set top, right, bottom and left. - -# placement_strategy center - -#: When the window size is not an exact multiple of the cell size, the -#: cell area of the terminal window will have some extra padding on -#: the sides. You can control how that padding is distributed with -#: this option. Using a value of center means the cell area will be -#: placed centrally. A value of top-left means the padding will be on -#: only the bottom and right edges. - -# active_border_color #00ff00 - -#: The color for the border of the active window. Set this to none to -#: not draw borders around the active window. - -# inactive_border_color #cccccc - -#: The color for the border of inactive windows - -# bell_border_color #ff5a00 - -#: The color for the border of inactive windows in which a bell has -#: occurred - -# inactive_text_alpha 1.0 - -#: Fade the text in inactive windows by the specified amount (a number -#: between zero and one, with zero being fully faded). - -# hide_window_decorations no - -#: Hide the window decorations (title-bar and window borders) with -#: yes. On macOS, titlebar-only can be used to only hide the titlebar. -#: Whether this works and exactly what effect it has depends on the -#: window manager/operating system. - -# resize_debounce_time 0.1 - -#: The time (in seconds) to wait before redrawing the screen when a -#: resize event is received. On platforms such as macOS, where the -#: operating system sends events corresponding to the start and end of -#: a resize, this number is ignored. - -# resize_draw_strategy static - -#: Choose how kitty draws a window while a resize is in progress. A -#: value of static means draw the current window contents, mostly -#: unchanged. A value of scale means draw the current window contents -#: scaled. A value of blank means draw a blank window. A value of size -#: means show the window size in cells. - -# resize_in_steps no - -#: Resize the OS window in steps as large as the cells, instead of -#: with the usual pixel accuracy. Combined with an -#: initial_window_width and initial_window_height in number of cells, -#: this option can be used to keep the margins as small as possible -#: when resizing the OS window. Note that this does not currently work -#: on Wayland. - -# confirm_os_window_close 0 - -#: Ask for confirmation when closing an OS window or a tab that has at -#: least this number of kitty windows in it. A value of zero disables -#: confirmation. This confirmation also applies to requests to quit -#: the entire application (all OS windows, via the quit action). - -#: }}} - -#: Tab bar {{{ - -# tab_bar_edge bottom - -#: Which edge to show the tab bar on, top or bottom - -# tab_bar_margin_width 0.0 - -#: The margin to the left and right of the tab bar (in pts) - -# tab_bar_style fade - -#: The tab bar style, can be one of: fade, separator, powerline, or -#: hidden. In the fade style, each tab's edges fade into the -#: background color, in the separator style, tabs are separated by a -#: configurable separator, and the powerline shows the tabs as a -#: continuous line. If you use the hidden style, you might want to -#: create a mapping for the select_tab action which presents you with -#: a list of tabs and allows for easy switching to a tab. - -# tab_bar_min_tabs 2 - -#: The minimum number of tabs that must exist before the tab bar is -#: shown - -# tab_switch_strategy previous - -#: The algorithm to use when switching to a tab when the current tab -#: is closed. The default of previous will switch to the last used -#: tab. A value of left will switch to the tab to the left of the -#: closed tab. A value of right will switch to the tab to the right of -#: the closed tab. A value of last will switch to the right-most tab. - -# tab_fade 0.25 0.5 0.75 1 - -#: Control how each tab fades into the background when using fade for -#: the tab_bar_style. Each number is an alpha (between zero and one) -#: that controls how much the corresponding cell fades into the -#: background, with zero being no fade and one being full fade. You -#: can change the number of cells used by adding/removing entries to -#: this list. - -# tab_separator " ┇" - -#: The separator between tabs in the tab bar when using separator as -#: the tab_bar_style. - -# tab_powerline_style angled - -#: The powerline separator style between tabs in the tab bar when -#: using powerline as the tab_bar_style, can be one of: angled, -#: slanted, or round. - -# tab_activity_symbol none - -#: Some text or a unicode symbol to show on the tab if a window in the -#: tab that does not have focus has some activity. - -# tab_title_template "{title}" - -#: A template to render the tab title. The default just renders the -#: title. If you wish to include the tab-index as well, use something -#: like: {index}: {title}. Useful if you have shortcuts mapped for -#: goto_tab N. In addition you can use {layout_name} for the current -#: layout name and {num_windows} for the number of windows in the tab. -#: Note that formatting is done by Python's string formatting -#: machinery, so you can use, for instance, {layout_name[:2].upper()} -#: to show only the first two letters of the layout name, upper-cased. -#: If you want to style the text, you can use styling directives, for -#: example: {fmt.fg.red}red{fmt.fg.default}normal{fmt.bg._00FF00}green -#: bg{fmt.bg.normal}. Similarly, for bold and italic: -#: {fmt.bold}bold{fmt.nobold}normal{fmt.italic}italic{fmt.noitalic}. - -# active_tab_title_template none - -#: Template to use for active tabs, if not specified falls back to -#: tab_title_template. - -# active_tab_foreground #000 -# active_tab_background #eee -# active_tab_font_style bold-italic -# inactive_tab_foreground #444 -# inactive_tab_background #999 -# inactive_tab_font_style normal - -#: Tab bar colors and styles - -# tab_bar_background none - -#: Background color for the tab bar. Defaults to using the terminal -#: background color. - -#: }}} - -#: Color scheme {{{ - -# foreground #dddddd -# background #000000 - -#: The foreground and background colors - -# background_opacity 1.0 - -#: The opacity of the background. A number between 0 and 1, where 1 is -#: opaque and 0 is fully transparent. This will only work if -#: supported by the OS (for instance, when using a compositor under -#: X11). Note that it only sets the background color's opacity in -#: cells that have the same background color as the default terminal -#: background. This is so that things like the status bar in vim, -#: powerline prompts, etc. still look good. But it means that if you -#: use a color theme with a background color in your editor, it will -#: not be rendered as transparent. Instead you should change the -#: default background color in your kitty config and not use a -#: background color in the editor color scheme. Or use the escape -#: codes to set the terminals default colors in a shell script to -#: launch your editor. Be aware that using a value less than 1.0 is a -#: (possibly significant) performance hit. If you want to dynamically -#: change transparency of windows set dynamic_background_opacity to -#: yes (this is off by default as it has a performance cost) - -# background_image none - -#: Path to a background image. Must be in PNG format. - -# background_image_layout tiled - -#: Whether to tile or scale the background image. - -# background_image_linear no - -#: When background image is scaled, whether linear interpolation -#: should be used. - -# dynamic_background_opacity no - -#: Allow changing of the background_opacity dynamically, using either -#: keyboard shortcuts (increase_background_opacity and -#: decrease_background_opacity) or the remote control facility. - -# background_tint 0.0 - -#: How much to tint the background image by the background color. The -#: tint is applied only under the text area, not margin/borders. Makes -#: it easier to read the text. Tinting is done using the current -#: background color for each window. This setting applies only if -#: background_opacity is set and transparent windows are supported or -#: background_image is set. - -# dim_opacity 0.75 - -#: How much to dim text that has the DIM/FAINT attribute set. One -#: means no dimming and zero means fully dimmed (i.e. invisible). - -# selection_foreground #000000 - -#: The foreground for text selected with the mouse. A value of none -#: means to leave the color unchanged. - -# selection_background #fffacd - -#: The background for text selected with the mouse. - - -#: The 256 terminal colors. There are 8 basic colors, each color has a -#: dull and bright version, for the first 16 colors. You can set the -#: remaining 240 colors as color16 to color255. - -# color0 #000000 -# color8 #767676 - -#: black - -# color1 #cc0403 -# color9 #f2201f - -#: red - -# color2 #19cb00 -# color10 #23fd00 - -#: green - -# color3 #cecb00 -# color11 #fffd00 - -#: yellow - -# color4 #0d73cc -# color12 #1a8fff - -#: blue - -# color5 #cb1ed1 -# color13 #fd28ff - -#: magenta - -# color6 #0dcdcd -# color14 #14ffff - -#: cyan - -# color7 #dddddd -# color15 #ffffff - -#: white - -# mark1_foreground black - -#: Color for marks of type 1 - -# mark1_background #98d3cb - -#: Color for marks of type 1 (light steel blue) - -# mark2_foreground black - -#: Color for marks of type 2 - -# mark2_background #f2dcd3 - -#: Color for marks of type 1 (beige) - -# mark3_foreground black - -#: Color for marks of type 3 - -# mark3_background #f274bc - -#: Color for marks of type 1 (violet) - -#: }}} - -#: Advanced {{{ - -# shell . - -#: The shell program to execute. The default value of . means to use -#: whatever shell is set as the default shell for the current user. -#: Note that on macOS if you change this, you might need to add -#: --login to ensure that the shell starts in interactive mode and -#: reads its startup rc files. - -# editor . - -#: The console editor to use when editing the kitty config file or -#: similar tasks. A value of . means to use the environment variables -#: VISUAL and EDITOR in that order. Note that this environment -#: variable has to be set not just in your shell startup scripts but -#: system-wide, otherwise kitty will not see it. - -# close_on_child_death no - -#: Close the window when the child process (shell) exits. If no (the -#: default), the terminal will remain open when the child exits as -#: long as there are still processes outputting to the terminal (for -#: example disowned or backgrounded processes). If yes, the window -#: will close as soon as the child process exits. Note that setting it -#: to yes means that any background processes still using the terminal -#: can fail silently because their stdout/stderr/stdin no longer work. - -# allow_remote_control no - -#: Allow other programs to control kitty. If you turn this on other -#: programs can control all aspects of kitty, including sending text -#: to kitty windows, opening new windows, closing windows, reading the -#: content of windows, etc. Note that this even works over ssh -#: connections. You can chose to either allow any program running -#: within kitty to control it, with yes or only programs that connect -#: to the socket specified with the kitty --listen-on command line -#: option, if you use the value socket-only. The latter is useful if -#: you want to prevent programs running on a remote computer over ssh -#: from controlling kitty. - -# listen_on none - -#: Tell kitty to listen to the specified unix/tcp socket for remote -#: control connections. Note that this will apply to all kitty -#: instances. It can be overridden by the kitty --listen-on command -#: line flag. This option accepts only UNIX sockets, such as -#: unix:${TEMP}/mykitty or (on Linux) unix:@mykitty. Environment -#: variables are expanded. If {kitty_pid} is present then it is -#: replaced by the PID of the kitty process, otherwise the PID of the -#: kitty process is appended to the value, with a hyphen. This option -#: is ignored unless you also set allow_remote_control to enable -#: remote control. See the help for kitty --listen-on for more -#: details. - -# env - -#: Specify environment variables to set in all child processes. Note -#: that environment variables are expanded recursively, so if you -#: use:: - -#: env MYVAR1=a -#: env MYVAR2=${MYVAR1}/${HOME}/b - -#: The value of MYVAR2 will be a/<path to home directory>/b. - -# update_check_interval 0.0 - -#: Periodically check if an update to kitty is available. If an update -#: is found a system notification is displayed informing you of the -#: available update. The default is to check every 24 hrs, set to zero -#: to disable. - -# startup_session none - -#: Path to a session file to use for all kitty instances. Can be -#: overridden by using the kitty --session command line option for -#: individual instances. See -#: https://sw.kovidgoyal.net/kitty/index.html#sessions in the kitty -#: documentation for details. Note that relative paths are interpreted -#: with respect to the kitty config directory. Environment variables -#: in the path are expanded. - -# clipboard_control write-clipboard write-primary - -#: Allow programs running in kitty to read and write from the -#: clipboard. You can control exactly which actions are allowed. The -#: set of possible actions is: write-clipboard read-clipboard write- -#: primary read-primary. You can additionally specify no-append to -#: disable kitty's protocol extension for clipboard concatenation. The -#: default is to allow writing to the clipboard and primary selection -#: with concatenation enabled. Note that enabling the read -#: functionality is a security risk as it means that any program, even -#: one running on a remote server via SSH can read your clipboard. - -# allow_hyperlinks yes - -#: Process hyperlink (OSC 8) escape sequences. If disabled OSC 8 -#: escape sequences are ignored. Otherwise they become clickable -#: links, that you can click by holding down ctrl+shift and clicking -#: with the mouse. The special value of ``ask`` means that kitty will -#: ask before opening the link. - -# term xterm-kitty - -#: The value of the TERM environment variable to set. Changing this -#: can break many terminal programs, only change it if you know what -#: you are doing, not because you read some advice on Stack Overflow -#: to change it. The TERM variable is used by various programs to get -#: information about the capabilities and behavior of the terminal. If -#: you change it, depending on what programs you run, and how -#: different the terminal you are changing it to is, various things -#: from key-presses, to colors, to various advanced features may not -#: work. - -#: }}} - -#: OS specific tweaks {{{ - -# wayland_titlebar_color system - -#: Change the color of the kitty window's titlebar on Wayland systems -#: with client side window decorations such as GNOME. A value of -#: system means to use the default system color, a value of background -#: means to use the background color of the currently active window -#: and finally you can use an arbitrary color, such as #12af59 or red. - -# macos_titlebar_color system - -#: Change the color of the kitty window's titlebar on macOS. A value -#: of system means to use the default system color, a value of -#: background means to use the background color of the currently -#: active window and finally you can use an arbitrary color, such as -#: #12af59 or red. WARNING: This option works by using a hack, as -#: there is no proper Cocoa API for it. It sets the background color -#: of the entire window and makes the titlebar transparent. As such it -#: is incompatible with background_opacity. If you want to use both, -#: you are probably better off just hiding the titlebar with -#: hide_window_decorations. - -# macos_option_as_alt no - -#: Use the option key as an alt key. With this set to no, kitty will -#: use the macOS native Option+Key = unicode character behavior. This -#: will break any Alt+key keyboard shortcuts in your terminal -#: programs, but you can use the macOS unicode input technique. You -#: can use the values: left, right, or both to use only the left, -#: right or both Option keys as Alt, instead. - -# macos_hide_from_tasks no - -#: Hide the kitty window from running tasks (⌘+Tab) on macOS. - -# macos_quit_when_last_window_closed no - -#: Have kitty quit when all the top-level windows are closed. By -#: default, kitty will stay running, even with no open windows, as is -#: the expected behavior on macOS. - -# macos_window_resizable yes - -#: Disable this if you want kitty top-level (OS) windows to not be -#: resizable on macOS. - -# macos_thicken_font 0 - -#: Draw an extra border around the font with the given width, to -#: increase legibility at small font sizes. For example, a value of -#: 0.75 will result in rendering that looks similar to sub-pixel -#: antialiasing at common font sizes. - -# macos_traditional_fullscreen no - -#: Use the traditional full-screen transition, that is faster, but -#: less pretty. - -# macos_show_window_title_in all - -#: Show or hide the window title in the macOS window or menu-bar. A -#: value of window will show the title of the currently active window -#: at the top of the macOS window. A value of menubar will show the -#: title of the currently active window in the macOS menu-bar, making -#: use of otherwise wasted space. all will show the title everywhere -#: and none hides the title in the window and the menu-bar. - -# macos_custom_beam_cursor no - -#: Enable/disable custom mouse cursor for macOS that is easier to see -#: on both light and dark backgrounds. WARNING: this might make your -#: mouse cursor invisible on dual GPU machines. - -# linux_display_server auto - -#: Choose between Wayland and X11 backends. By default, an appropriate -#: backend based on the system state is chosen automatically. Set it -#: to x11 or wayland to force the choice. - -#: }}} - -#: Keyboard shortcuts {{{ - -#: Keys are identified simply by their lowercase unicode characters. -#: For example: ``a`` for the A key, ``[`` for the left square bracket -#: key, etc. For functional keys, such as ``Enter or Escape`` the -#: names are present at https://sw.kovidgoyal.net/kitty/keyboard- -#: protocol.html#functional-key-definitions. For a list of modifier -#: names, see: GLFW mods -#: <https://www.glfw.org/docs/latest/group__mods.html> - -#: On Linux you can also use XKB key names to bind keys that are not -#: supported by GLFW. See XKB keys -#: <https://github.com/xkbcommon/libxkbcommon/blob/master/xkbcommon/xkbcommon- -#: keysyms.h> for a list of key names. The name to use is the part -#: after the XKB_KEY_ prefix. Note that you can only use an XKB key -#: name for keys that are not known as GLFW keys. - -#: Finally, you can use raw system key codes to map keys, again only -#: for keys that are not known as GLFW keys. To see the system key -#: code for a key, start kitty with the kitty --debug-keyboard option. -#: Then kitty will output some debug text for every key event. In that -#: text look for ``native_code`` the value of that becomes the key -#: name in the shortcut. For example: - -#: .. code-block:: none - -#: on_key_input: glfw key: 65 native_code: 0x61 action: PRESS mods: 0x0 text: 'a' - -#: Here, the key name for the A key is 0x61 and you can use it with:: - -#: map ctrl+0x61 something - -#: to map ctrl+a to something. - -#: You can use the special action no_op to unmap a keyboard shortcut -#: that is assigned in the default configuration:: - -#: map kitty_mod+space no_op - -#: You can combine multiple actions to be triggered by a single -#: shortcut, using the syntax below:: - -#: map key combine <separator> action1 <separator> action2 <separator> action3 ... - -#: For example:: - -#: map kitty_mod+e combine : new_window : next_layout - -#: this will create a new window and switch to the next available -#: layout - -#: You can use multi-key shortcuts using the syntax shown below:: - -#: map key1>key2>key3 action - -#: For example:: - -#: map ctrl+f>2 set_font_size 20 - -# kitty_mod ctrl+shift - -#: The value of kitty_mod is used as the modifier for all default -#: shortcuts, you can change it in your kitty.conf to change the -#: modifiers for all the default shortcuts. - -# clear_all_shortcuts no - -#: You can have kitty remove all shortcut definition seen up to this -#: point. Useful, for instance, to remove the default shortcuts. - -# kitten_alias hints hints --hints-offset=0 - -#: You can create aliases for kitten names, this allows overriding the -#: defaults for kitten options and can also be used to shorten -#: repeated mappings of the same kitten with a specific group of -#: options. For example, the above alias changes the default value of -#: kitty +kitten hints --hints-offset to zero for all mappings, -#: including the builtin ones. - -#: Clipboard {{{ - -# map kitty_mod+c copy_to_clipboard - -#: There is also a copy_or_interrupt action that can be optionally -#: mapped to Ctrl+c. It will copy only if there is a selection and -#: send an interrupt otherwise. Similarly, copy_and_clear_or_interrupt -#: will copy and clear the selection or send an interrupt if there is -#: no selection. - -# map kitty_mod+v paste_from_clipboard -# map kitty_mod+s paste_from_selection -# map shift+insert paste_from_selection -# map kitty_mod+o pass_selection_to_program - -#: You can also pass the contents of the current selection to any -#: program using pass_selection_to_program. By default, the system's -#: open program is used, but you can specify your own, the selection -#: will be passed as a command line argument to the program, for -#: example:: - -#: map kitty_mod+o pass_selection_to_program firefox - -#: You can pass the current selection to a terminal program running in -#: a new kitty window, by using the @selection placeholder:: - -#: map kitty_mod+y new_window less @selection - -#: }}} - -#: Scrolling {{{ - -# map kitty_mod+up scroll_line_up -# map kitty_mod+k scroll_line_up -# map kitty_mod+down scroll_line_down -# map kitty_mod+j scroll_line_down -map shift+page_up scroll_page_up -map shift+page_down scroll_page_down -map shift+home scroll_home -map shift+end scroll_end -# map kitty_mod+h show_scrollback - -#: You can pipe the contents of the current screen + history buffer as -#: STDIN to an arbitrary program using the ``launch`` function. For -#: example, the following opens the scrollback buffer in less in an -#: overlay window:: - -#: map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R - -#: For more details on piping screen and buffer contents to external -#: programs, see launch. - -#: }}} - -#: Window management {{{ - -# map kitty_mod+enter new_window - -#: You can open a new window running an arbitrary program, for -#: example:: - -#: map kitty_mod+y launch mutt - -#: You can open a new window with the current working directory set to -#: the working directory of the current window using:: - -#: map ctrl+alt+enter launch --cwd=current - -#: You can open a new window that is allowed to control kitty via the -#: kitty remote control facility by prefixing the command line with @. -#: Any programs running in that window will be allowed to control -#: kitty. For example:: - -#: map ctrl+enter launch --allow-remote-control some_program - -#: You can open a new window next to the currently active window or as -#: the first window, with:: - -#: map ctrl+n launch --location=neighbor some_program -#: map ctrl+f launch --location=first some_program - -#: For more details, see launch. - -# map kitty_mod+n new_os_window - -#: Works like new_window above, except that it opens a top level OS -#: kitty window. In particular you can use new_os_window_with_cwd to -#: open a window with the current working directory. - -# map kitty_mod+w close_window -# map kitty_mod+] next_window -# map kitty_mod+[ previous_window -# map kitty_mod+f move_window_forward -# map kitty_mod+b move_window_backward -# map kitty_mod+` move_window_to_top -# map kitty_mod+r start_resizing_window -# map kitty_mod+1 first_window -# map kitty_mod+2 second_window -# map kitty_mod+3 third_window -# map kitty_mod+4 fourth_window -# map kitty_mod+5 fifth_window -# map kitty_mod+6 sixth_window -# map kitty_mod+7 seventh_window -# map kitty_mod+8 eighth_window -# map kitty_mod+9 ninth_window -# map kitty_mod+0 tenth_window -#: }}} - -#: Tab management {{{ - -# map kitty_mod+right next_tab -# map kitty_mod+left previous_tab -# map kitty_mod+t new_tab -# map kitty_mod+q close_tab -# map kitty_mod+. move_tab_forward -# map kitty_mod+, move_tab_backward -# map kitty_mod+alt+t set_tab_title - -#: You can also create shortcuts to go to specific tabs, with 1 being -#: the first tab, 2 the second tab and -1 being the previously active -#: tab, and any number larger than the last tab being the last tab:: - -#: map ctrl+alt+1 goto_tab 1 -#: map ctrl+alt+2 goto_tab 2 - -#: Just as with new_window above, you can also pass the name of -#: arbitrary commands to run when using new_tab and use -#: new_tab_with_cwd. Finally, if you want the new tab to open next to -#: the current tab rather than at the end of the tabs list, use:: - -#: map ctrl+t new_tab !neighbor [optional cmd to run] -#: }}} - -#: Layout management {{{ - -# map kitty_mod+l next_layout - -#: You can also create shortcuts to switch to specific layouts:: - -#: map ctrl+alt+t goto_layout tall -#: map ctrl+alt+s goto_layout stack - -#: Similarly, to switch back to the previous layout:: - -#: map ctrl+alt+p last_used_layout -#: }}} - -#: Font sizes {{{ - -#: You can change the font size for all top-level kitty OS windows at -#: a time or only the current one. - -# map kitty_mod+equal change_font_size all +2.0 -# map kitty_mod+plus change_font_size all +2.0 -# map kitty_mod+kp_add change_font_size all +2.0 -# map kitty_mod+minus change_font_size all -2.0 -# map kitty_mod+kp_subtract change_font_size all -2.0 -# map kitty_mod+backspace change_font_size all 0 - -#: To setup shortcuts for specific font sizes:: - -#: map kitty_mod+f6 change_font_size all 10.0 - -#: To setup shortcuts to change only the current OS window's font -#: size:: - -#: map kitty_mod+f6 change_font_size current 10.0 -#: }}} - -#: Select and act on visible text {{{ - -#: Use the hints kitten to select text and either pass it to an -#: external program or insert it into the terminal or copy it to the -#: clipboard. - -# map kitty_mod+e kitten hints - -#: Open a currently visible URL using the keyboard. The program used -#: to open the URL is specified in open_url_with. - -# map kitty_mod+p>f kitten hints --type path --program - - -#: Select a path/filename and insert it into the terminal. Useful, for -#: instance to run git commands on a filename output from a previous -#: git command. - -# map kitty_mod+p>shift+f kitten hints --type path - -#: Select a path/filename and open it with the default open program. - -# map kitty_mod+p>l kitten hints --type line --program - - -#: Select a line of text and insert it into the terminal. Use for the -#: output of things like: ls -1 - -# map kitty_mod+p>w kitten hints --type word --program - - -#: Select words and insert into terminal. - -# map kitty_mod+p>h kitten hints --type hash --program - - -#: Select something that looks like a hash and insert it into the -#: terminal. Useful with git, which uses sha1 hashes to identify -#: commits - -# map kitty_mod+p>n kitten hints --type linenum - -#: Select something that looks like filename:linenum and open it in -#: vim at the specified line number. - -# map kitty_mod+p>y kitten hints --type hyperlink - -#: Select a hyperlink (i.e. a URL that has been marked as such by the -#: terminal program, for example, by ls --hyperlink=auto). - - -#: The hints kitten has many more modes of operation that you can map -#: to different shortcuts. For a full description see kittens/hints. -#: }}} - -#: Miscellaneous {{{ - -# map kitty_mod+f11 toggle_fullscreen -# map kitty_mod+f10 toggle_maximized -# map kitty_mod+u kitten unicode_input -# map kitty_mod+f2 edit_config_file -# map kitty_mod+escape kitty_shell window - -#: Open the kitty shell in a new window/tab/overlay/os_window to -#: control kitty using commands. - -# map kitty_mod+a>m set_background_opacity +0.1 -# map kitty_mod+a>l set_background_opacity -0.1 -# map kitty_mod+a>1 set_background_opacity 1 -# map kitty_mod+a>d set_background_opacity default -# map kitty_mod+delete clear_terminal reset active - -#: You can create shortcuts to clear/reset the terminal. For example:: - -#: # Reset the terminal -#: map kitty_mod+f9 clear_terminal reset active -#: # Clear the terminal screen by erasing all contents -#: map kitty_mod+f10 clear_terminal clear active -#: # Clear the terminal scrollback by erasing it -#: map kitty_mod+f11 clear_terminal scrollback active -#: # Scroll the contents of the screen into the scrollback -#: map kitty_mod+f12 clear_terminal scroll active - -#: If you want to operate on all windows instead of just the current -#: one, use all instead of active. - -#: It is also possible to remap Ctrl+L to both scroll the current -#: screen contents into the scrollback buffer and clear the screen, -#: instead of just clearing the screen:: - -#: map ctrl+l combine : clear_terminal scroll active : send_text normal,application \x0c - - -#: You can tell kitty to send arbitrary (UTF-8) encoded text to the -#: client program when pressing specified shortcut keys. For example:: - -#: map ctrl+alt+a send_text all Special text - -#: This will send "Special text" when you press the ctrl+alt+a key -#: combination. The text to be sent is a python string literal so you -#: can use escapes like \x1b to send control codes or \u21fb to send -#: unicode characters (or you can just input the unicode characters -#: directly as UTF-8 text). The first argument to send_text is the -#: keyboard modes in which to activate the shortcut. The possible -#: values are normal or application or kitty or a comma separated -#: combination of them. The special keyword all means all modes. The -#: modes normal and application refer to the DECCKM cursor key mode -#: for terminals, and kitty refers to the special kitty extended -#: keyboard protocol. - -#: Another example, that outputs a word and then moves the cursor to -#: the start of the line (same as pressing the Home key):: - -#: map ctrl+alt+a send_text normal Word\x1b[H -#: map ctrl+alt+a send_text application Word\x1bOH - -#: }}} - -# }}} diff --git a/tw/home/files/mimeapps.list b/tw/home/files/mimeapps.list deleted file mode 100644 index 6cbf5ce9..00000000 --- a/tw/home/files/mimeapps.list +++ /dev/null @@ -1,57 +0,0 @@ -[Default Applications] -inode/directory=ranger.desktop -x-scheme-handler/http=icecat.desktop -x-scheme-handler/https=icecat.desktop -x-scheme-handler/chrome=icecat.desktop -x-scheme-handler/about=icecat.desktop -x-scheme-handler/unknown=icecat.desktop -x-scheme-handler/mailto=aerc.desktop -application/x-extension-htm=icecat.desktop -application/x-extension-html=icecat.desktop -application/x-extension-shtml=icecat.desktop -application/xhtml+xml=icecat.desktop -application/x-extension-xhtml=icecat.desktop -application/x-extension-xht=icecat.desktop -application/octet-stream=emacsclient.desktop -text/html=icecat.desktop -text/xml=icecat.desktop -text/plain=emacsclient.desktop -text/english=emacsclient.desktop -text/x-makefile=emacsclient.desktop -text/x-c++hdr=emacsclient.desktop -text/x-c++src=emacsclient.desktop -text/x-chdr=emacsclient.desktop -text/x-java=emacsclient.desktop -text/x-moc=emacsclient.desktop -text/x-pascal=emacsclient.desktop -text/x-tcl=emacsclient.desktop -text/x-tex=emacsclient.desktop -text/x-c=emacsclient.desktop -text/x-c++=emacsclient.desktop -application/x-shellscript=emacsclient.desktop -image/bmp=imv.desktop -image/gif=imv.desktop -image/jpeg=imv.desktop -image/jpg=imv.desktop -image/pjpeg=imv.desktop -image/png=imv.desktop -image/tiff=imv.desktop -image/x-bmp=imv.desktop -image/x-pcx=imv.desktop -image/x-png=imv.desktop -image/x-portable-anymap=imv.desktop -image/x-portable-bitmap=imv.desktop -image/x-portable-graymap=imv.desktop -image/x-portable-pixmap=imv.desktop -image/x-tga=imv.desktop -image/x-xbitmap=imv.desktop -image/heif=imv.desktop -image/webp=imv.desktop -application/pdf=org.pwmt.zathura-pdf-poppler.desktop -application/postscript=org.pwmt.zathura-ps.desktop -application/eps=org.pwmt.zathura-ps.desktop -application/x-eps=org.pwmt.zathura-ps.desktop -image/eps=org.pwmt.zathura-ps.desktop -image/x-eps=org.pwmt.zathura-ps.desktop - -[Added Associations] diff --git a/tw/home/files/newsboat.conf b/tw/home/files/newsboat.conf deleted file mode 100644 index 7959e138..00000000 --- a/tw/home/files/newsboat.conf +++ /dev/null @@ -1,29 +0,0 @@ -# newsboat config -*- conf-space -*- -# https://newsboat.org/releases/2.29/docs/newsboat.html#_newsboat_configuration_commands -# Vim-like keys. -bind-key j down -bind-key k up -bind-key J next-feed articlelist -bind-key K prev-feed articlelist - -# Reload feeds on startup, in parallel. -auto-reload yes -reload-threads 100 - -text-width 72 # wrap rendered HTML at 72 cols (or terminal width, if smaller) -scrolloff 2 # show 2 lines above/below selected line -show-keymap-hint no -show-title-bar yes -datetime-format "%e %b %Y" # e.g. " 9 Dec 2022" -notify-program "dunstify -a newsboat -i newsboat Newsboat" -notify-format "%d new articles (%n unread articles, %f unread feeds)" - -# Sync with Nextcloud News. -urls-source "ocnews" -ocnews-url "https://cloud.wilkenfamily.de/" -ocnews-login "timo" -ocnews-passwordeval "pass www/nextcloud/timo | head -1" -ocnews-flag-star "s" - -# Catppuccin theme. -include ~/.config/newsboat/config.catppuccin diff --git a/tw/home/files/passmenu b/tw/home/files/passmenu deleted file mode 100755 index 9bf7f7e3..00000000 --- a/tw/home/files/passmenu +++ /dev/null @@ -1,93 +0,0 @@ -#!/bin/sh -eu - -usage() { - cat << EOF -$(basename "$0") [-c | -p | -a] - - -c, --clip copy the user-selected password to the clipboard - -p, --type-pass auto-type the user-selected password only - -o, --type-otp auto-type the user-selected six-digit OTP code - -a, --type-all auto-type the user-selected username <tab> password - -h, --help show this help message and exit - -v, --version show the program version number and exit - -Later options override conflicting earlier ones. -If no option is given, -c/--clip is the default. -GNU-style combination of short options (e.g. -pa) is not supported. - -Abnormal exit codes: - 1 no password selected by user - 2 invalid command-line argument - 3 internal error - -(C) 2019-2023 Timo Wilken; MIT Licence. -Adapted from https://git.zx2c4.com/password-store/tree/contrib/dmenu/passmenu. -EOF -} - -version() { - # Changelog: - # 1.0.0 (2019-??-??) initial version - # 1.0.1 (2022-07-17) script formatting; throw away passwords asap - # 1.0.2 (2022-10-??) remove fix_xdotool; this should be done on login - # 1.0.3 (2023-12-11) customise prompt to show what will be typed - echo "$(basename "$0") 1.0.3" -} - -password_names() { - find "${PASSWORD_STORE_DIR-$HOME/.password-store}" -name '*.gpg' -type f \ - -printf '%P\n' | sed 's/\.gpg$//' -} - -extract_key() { - sed -rn "s/^$1:\\s+(.+)\$/\\1/p" -} - -type_stdin() { - tr -d '\n' | xdotool getactivewindow type --clearmodifiers --file - -} - -## Command-line arguments -while [ $# -gt 0 ]; do - case "$1" in - -o|--type-otp) mode=type-otp prompt=OTP; shift;; - -p|--type-pass) mode=type-pass prompt=Password; shift;; - -a|--type-all) mode=type-all prompt=Login; shift;; - -c|--clip) mode=clip prompt=Copy; shift;; - -h|--help) usage; exit;; - -v|--version) version; exit;; - - *) - echo "$(basename "$0"): unknown option: $1" >&2 - usage >&2 - exit 2;; - esac -done -: "${mode=clip}" "${prompt=Copy}" - -## Password selection menu -password_name=$(password_names | rofi -dmenu -i -p "$prompt" -no-custom) -[ -n "$password_name" ] || exit 1 - -## Password typing -case "$mode" in - clip) - # Suppress "copied ... to clipboard" notice on stdout. - pass show --clip "$password_name" > /dev/null;; - - type-otp) - pass otp "$password_name" | type_stdin;; - - type-pass|type-all) - entry=$(pass show "$password_name") - if [ "$mode" = type-all ]; then - echo "$entry" | extract_key username | type_stdin - xdotool getactivewindow key Tab - fi - echo "$entry" | head -1 | type_stdin - unset entry;; - - *) - echo "$(basename "$0"): internal error: unknown mode: $mode" >&2 - exit 3;; -esac diff --git a/tw/home/files/picom.conf b/tw/home/files/picom.conf deleted file mode 100644 index a7d86571..00000000 --- a/tw/home/files/picom.conf +++ /dev/null @@ -1,304 +0,0 @@ -# -# ~/.config/picom.conf -- Picom compositor configuration -# - -## Backend - -# Backend to use: "xrender" or "glx". -# GLX backend is typically much faster but depends on a sane driver. -backend: "glx"; - -## GLX backend - -glx-no-stencil: true; - -# GLX backend: Copy unmodified regions from front buffer instead of redrawing -# them all. My tests with nvidia-drivers show a 10% decrease in performance -# when the whole screen is modified, but a 20% increase when only 1/4 is. My -# tests on nouveau show terrible slowdown. -glx-copy-from-front: false; - -# GLX backend: Avoid rebinding pixmap on window damage. Probably could improve -# performance on rapid window content changes, but is known to break things on -# some drivers (LLVMpipe). Recommended if it works. -glx-no-rebind-pixmap: true; - -## Shadows - -# Enabled client-side shadows on windows. -shadow: false; -# The blur radius for shadows. (default 12) -shadow-radius: 25; -# The left offset for shadows. (default -15) -shadow-offset-x: -25; -# The top offset for shadows. (default -15) -shadow-offset-y: -25; -# The translucency for shadows. (default .75) -shadow-opacity: .3; - -# Set if you want different colour shadows -shadow-red: 0.03; -shadow-green: 0.03; -shadow-blue: 0.04; - -# The shadow exclude options are helpful if you have shadows enabled. Due to -# the way compton draws its shadows, certain applications will have visual -# glitches (most applications are fine, only apps that do weird things with -# xshapes or argb are affected). This list includes all the affected apps I -# found in my testing. The "! name~=''" part excludes shadows on any "Unknown" -# windows, this prevents a visual glitch with the XFWM alt tab switcher. -# From "man picom", Format of Conditions: WM_CLASS = class_i, class_g -shadow-exclude: [ -# "! name~=''", -# "name = 'Notification'", -# "name = 'Plank'", -# "name = 'Docky'", -# "name = 'Kupfer'", -# "name = 'xfce4-notifyd'", -# "name *= 'VLC'", - "name *= 'mpv'", - "class_g = 'ffplay'", -# "name *= 'compton'", -# "name *= 'Chromium'", -# "name *= 'Chrome'", - "class_g ?= 'Firefox'", -# "class_g = 'Conky'", - "_NET_WM_STATE@:32a *= '_NET_WM_STATE_STICKY'", - "_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'", - "_GTK_FRAME_EXTENTS@:c", - "class_g ?= 'ulauncher'", - "class_g ?= 'tray'", - "class_g ?= 'i3-frame'", -# "class_g ?= 'Notify-osd'", -# "class_g ?= 'Cairo-dock'", -# "class_g ?= 'Xfce4-notifyd'", -# "class_g ?= 'Xfce4-power-manager'" - "class_g ?= 'Xfce4-screenshooter'", - "class_g ?= 'peek'" -]; - -# Avoid drawing shadow on all shaped windows (c.f. --detect-rounded-corners) -shadow-ignore-shaped: false; - -## Opacity - -inactive-opacity: 1; -active-opacity: 1; -frame-opacity: 1; -inactive-opacity-override: false; - -# Dim inactive windows. (0.0 - 1.0) -#inactive-dim = 0.1; -# Do not let dimness adjust based on window opacity. -#inactive-dim-fixed = true; - -# Blur background of transparent windows. Bad performance with X Render -# backend. GLX backend is preferred. -blur-method: "dual_kawase"; -blur-strength: 7; -#blur-method: "kernel"; -# generate kernel using compton-convgen.py --dump-compton gaussian 15 -f sigma=15 -#blur-kernel: "..."; -blur-background: true; -# Blur background of opaque windows with transparent frames as well. -blur-background-frame: true; -# Do not let blur radius adjust based on window opacity. -blur-background-fixed: true; -blur-background-exclude: [ - #"window_type = 'dock'", - #"window_type = 'desktop'", - "window_type = 'dnd'", - "window_type = 'dropdown_menu'", - "window_type = 'popup_menu'", - #"class_g = 'Rofi'" - "class_g ?= 'Xfce4-screenshooter'", - # for xfce4-screenshooter triggered from its xfce4-panel button - "class_g ?= 'Wrapper-2.0'", - "class_g ?= 'peek'" -]; - -## Rounded corners -#corner-radius: 16; -#rounded-corners-exclude: [ -# "window_type = 'dock'", -# "window_type = 'desktop'", -# "class_g ?= 'plasmashell'", -# "class_g ?= 'krunner'", -# "class_g ?= 'i3-frame'" -#]; - -## Fading - -# Fade windows during opacity changes. -fading: true; -# The time between steps in a fade in milliseconds. (default 10). -fade-delta: 5; -# Opacity change between steps while fading in. (default 0.028). -fade-in-step: 0.03; -# Opacity change between steps while fading out. (default 0.03). -fade-out-step: 0.03; -# Fade windows in/out when opening/closing -no-fading-openclose: false; - -# Specify a list of conditions of windows that should not be faded. -fade-exclude: []; - -## Other - -# Try to detect WM windows and mark them as active. -mark-wmwin-focused: true; -# Mark all non-WM but override-redirect windows active (e.g. menus). -mark-ovredir-focused: true; -# Use EWMH _NET_WM_ACTIVE_WINDOW to determine which window is focused instead -# of using FocusIn/Out events. Usually more reliable but depends on a -# EWMH-compliant WM. -use-ewmh-active-win: true; -# Detect rounded corners and treat them as rectangular when -# --shadow-ignore-shaped is on. -detect-rounded-corners: true; - -# Detect _NET_WM_OPACITY on client windows, useful for window managers not -# passing _NET_WM_OPACITY of client windows to frame windows. This prevents -# opacity being ignored for some apps. For example without this enabled my -# xfce4-notifyd is 100% opacity no matter what. -detect-client-opacity: true; - -# Toggle VSync. See also: --vsync drm/opengl/opengl-oml. -vsync: true; - -# Enable DBE painting mode, intended to use with VSync to (hopefully) eliminate -# tearing. Reported to have no effect, though. -dbe: true; - -# Unredirect all windows if a full-screen opaque window is detected, to -# maximize performance for full-screen windows, like games. Known to cause -# flickering when redirecting/unredirecting windows. paint-on-overlay may make -# the flickering less obvious. -unredir-if-possible: true; - -# Specify a list of conditions of windows that should always be considered focused. -focus-exclude: []; - -# Use WM_TRANSIENT_FOR to group windows, and consider windows in the same group -# focused at the same time. -detect-transient: true; -# Use WM_CLIENT_LEADER to group windows, and consider windows in the same group -# focused at the same time. WM_TRANSIENT_FOR has higher priority if -# --detect-transient is enabled, too. -detect-client-leader: true; - -opacity-rule: [ - "100:name *?= 'Call'", - "100:name *?= 'Conky'", - "100:class_g = 'Darktable'", - "50:class_g = 'Dmenu'", - "100:name *?= 'Event'", - "100:class_g = 'Firefox'", - "100:class_g = 'GIMP'", - "100:name *?= 'Image'", - "100:class_g = 'Lazpaint'", - "100:class_g = 'Midori'", - "100:name *?= 'Minitube'", - "83:class_g = 'Mousepad'", - "100:name *?= 'MuseScore'", - "90:name *?= 'Page Info'", - "100:name *?= 'Pale Moon'", - "100:name *?= 'Screenshot'", - "100:class_g = 'Viewnior'", - "100:name *?= 'VirtualBox'", - "100:name *?= 'VLC'", - "100:class_g = 'mpv'", - "100:name *?= 'Write'", - "0:_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'", - "100:_NET_WM_STATE@:32a *= '_NET_WM_STATE_STICKY'" -]; - -## Window type settings - -wintypes: { - # WINDOW_TYPE is one of the 15 window types defined in the EWMH standard: - # https://specifications.freedesktop.org/wm-spec/latest/ar01s05.html#idm45550357242464 - # fade: Fade the particular type of windows. - # shadow: Give those windows shadow - # opacity: Default opacity for the type of windows. - # focus: Controls whether the window of this type is to be always considered - # focused. (By default, all window types except "normal" and "dialog" has - # this on.) - # full-shadow: Controls whether shadow is drawn under the parts of the - # window that you normally won't be able to see. Useful when the window - # has parts of it transparent, and you want shadows in those areas. - # redir-ignore: Controls whether this type of windows should cause screen to - # become redirected again after been unredirected. If you have - # --unredir-if-possible set, and doesn't want certain window to cause - # unnecessary screen redirection, you can set this to true. - - normal: { - opacity: 1; - }; - - dialog: { - opacity: 1; - }; - - # On-screen notification - notify: { - opacity: 1; - }; - - tooltip: { - opacity: .85; - }; - - # Desktop window with icons etc. - desktop: { - }; - - # Persistent dock, usually on top of all other windows - dock: { - opacity: 1; - }; - - # Window representing something being dragged - dnd: { - opacity: .85; - shadow: true; - full-shadow: true; - }; - - # Menu "torn off" from another window - menu: { - opacity: 1; - }; - - # Toolbar "torn off" from another window - toolbar: { - opacity: 1; - }; - - # A menu from a right click - popup_menu: { - opacity: 1; - }; - - # A menu from a menu bar - dropdown_menu: { - opacity: 1; - }; - - # The pop-up/drop-down from a combo box - combo: { - opacity: 1; - }; - - # A starting application's splash screen - splash: { - opacity: 1; - }; - - # A small persistent utility window, such as a palette or toolbox - utility: { - }; - - unknown: { - }; -}; diff --git a/tw/home/files/rofi.rasi b/tw/home/files/rofi.rasi deleted file mode 100644 index 83363c14..00000000 --- a/tw/home/files/rofi.rasi +++ /dev/null @@ -1,41 +0,0 @@ -/* -*- mode: css -*- */ -configuration { - modi: "combi,windowcd,calc"; - combi-modi: "window,drun,session:sessionmenu,ssh,run"; - terminal: "rofi-sensible-terminal"; - icon-theme: "Papirus-Dark"; - drun-show-actions: true; /* show actions defined in .desktop files as well */ - combi-display-format: "{text}"; /* hide {mode} prefix */ - show-icons: true; - disable-history: false; - case-sensitive: false; - cycle: true; - matching: "normal"; - scroll-method: 0; - /* Needed by Catppuccin theme: */ - sidebar-mode: true; - hide-scrollbar: true; - location: 0; - /* End of theme-related config. */ - display-window: "Windows"; - display-windowcd: "Workspace"; - display-run: "Run"; - display-ssh: "SSH"; - display-drun: "Desktop"; - display-combi: "Combined"; - display-calc: "Calculator"; - display-session: "Session"; - display-keys: "Keys"; - display-filebrowser: "Files"; - display-emoji: "Emoji"; - timeout { - action: "kb-cancel"; - delay: 0; - } - filebrowser { - directories-first: true; - sorting-method: "name"; - } -} - -@theme "catppuccin" diff --git a/tw/home/files/sessionmenu b/tw/home/files/sessionmenu deleted file mode 100755 index 91839d8e..00000000 --- a/tw/home/files/sessionmenu +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env -S guile --no-auto-compile -!# -(use-modules (ice-9 format) - (ice-9 match) - (ice-9 ports)) - -(define (call-command/stderr . command) - "Call COMMAND using `system*', but redirect all output to stderr." - (with-output-to-port (current-error-port) - (lambda () (apply system* command)))) - -(match (command-line) - ((_ "quit") - (exit 0)) - ((_ "Reload i3 configuration") - (call-command/stderr "i3-msg" "reload")) - ((_ "Sleep") - ;; "screenlock" blocks until unlocked by the user, so run in background. - ;; TODO: write "mem" to /sys/power/state, but it's owned by root. - (let ((locker (spawn "screenlock" '("screenlock"))) - (sleepfile (open-file "/sys/power/state" "w"))) - (display "mem" sleepfile) - (close sleepfile) - (waitpid locker))) - ((_ "Log out") - (call-command/stderr "i3-msg" "exit")) - ((_ "Shutdown") - (call-command/stderr "sudo" "-n" "/run/current-system/profile/sbin/shutdown")) - ((_ "Reboot") - (call-command/stderr "sudo" "-n" "/run/current-system/profile/sbin/reboot")) - (_ - (format #t "\0~a\x1f~a~%~{~a\0icon\x1f~a~%~}" - "prompt" "Session" - '("Reload i3 configuration" "reload" - "Sleep" "system-suspend" - "Log out" "system-log-out" - "Shutdown" "system-shutdown" - "Reboot" "system-reboot")))) diff --git a/tw/home/files/vdirsyncer.conf b/tw/home/files/vdirsyncer.conf deleted file mode 100644 index 0745c98f..00000000 --- a/tw/home/files/vdirsyncer.conf +++ /dev/null @@ -1,87 +0,0 @@ -[general] -status_path = "~/.local/share/vdirsyncer/status" - -# Main contact list from Nextcloud. -[pair main_contacts] -a = "nextcloud_main_contacts" -b = "local_main_contacts" -metadata = ["displayname", "description"] -collections = ["from a", "from b"] -conflict_resolution = "a wins" - -[storage local_main_contacts] -type = "filesystem" -path = "~/.local/share/vdirsyncer/main-contacts" -fileext = ".vcf" - -[storage nextcloud_main_contacts] -type = "carddav" -url = "https://cloud.wilkenfamily.de/remote.php/dav/addressbooks/users/timo/contacts/" -username.fetch = ["shell", "~/.guix-home/profile/bin/pass www/nextcloud/timo | awk '/^username: /{print $2}'"] -password.fetch = ["shell", "~/.guix-home/profile/bin/pass www/nextcloud/timo | head -1"] - -# "Sandbox Contacts" from Nextcloud, mostly for WhatsApp. -[pair sandbox_contacts] -a = "nextcloud_sandbox_contacts" -b = "local_sandbox_contacts" -metadata = ["displayname", "description"] -collections = ["from a", "from b"] -conflict_resolution = "a wins" - -[storage local_sandbox_contacts] -type = "filesystem" -path = "~/.local/share/vdirsyncer/sandbox-contacts" -fileext = ".vcf" - -[storage nextcloud_sandbox_contacts] -type = "carddav" -url = "https://cloud.wilkenfamily.de/remote.php/dav/addressbooks/users/timo/sandbox-contacts/" -username.fetch = ["shell", "~/.guix-home/profile/bin/pass www/nextcloud/timo | awk '/^username: /{print $2}'"] -password.fetch = ["shell", "~/.guix-home/profile/bin/pass www/nextcloud/timo | head -1"] - -# Calendar from Nextcloud. -[pair calendars] -a = "nextcloud_calendars" -b = "local_calendars" -metadata = ["color", "displayname", "description", "order"] -collections = ["from a", "from b"] -conflict_resolution = "a wins" - -[storage local_calendars] -type = "filesystem" -path = "~/.local/share/vdirsyncer/calendars" -fileext = ".ics" - -[storage nextcloud_calendars] -type = "caldav" -url = "https://cloud.wilkenfamily.de/remote.php/dav/principals/users/timo/" -username.fetch = ["shell", "~/.guix-home/profile/bin/pass www/nextcloud/timo | awk '/^username: /{print $2}'"] -password.fetch = ["shell", "~/.guix-home/profile/bin/pass www/nextcloud/timo | head -1"] - -# Work Indico calendar (read-only). -[pair indico] -a = "indico_calendar" -b = "local_indico_calendar" -metadata = [] -collections = null -conflict_resolution = "a wins" - -[storage local_indico_calendar] -type = "filesystem" -path = "~/.local/share/vdirsyncer/indico" -fileext = ".ics" - -[storage indico_calendar] -type = "http" -# The URL contains an access token, so get it from pass. -url.fetch = ["shell", "~/.guix-home/profile/bin/pass cern/indico-calendar-url | head -1"] - -[storage local_cern_calendar] -type = "filesystem" -path = "~/.local/share/vdirsyncer/cern" -fileext = ".ics" - -[storage cern_calendar] -type = "http" -# The URL contains an access token, so get it from pass. -url.fetch = ["shell", "~/.guix-home/profile/bin/pass cern/exol/calendar-url | head -1"] diff --git a/tw/home/files/vimrc b/tw/home/files/vimrc deleted file mode 100644 index 9c48346f..00000000 --- a/tw/home/files/vimrc +++ /dev/null @@ -1,60 +0,0 @@ -let mapleader = "\<SPACE>" -let maplocalleader = "\\" - -set showcmd " show command as they are typed -set showmatch " show matching brackets, briefly jump to matching one -set matchtime=0 " tenths of a sec to jump to matching brackets -set showmode " show NORMAL/INSERT/VISUAL indicator -set ruler " show cursor position -set number " show line numbers -set cursorline " highlight current line -set modeline " check for modelines -set hlsearch " highlight search results -set ignorecase " case-insensitive searching -set smartcase " ...unless query has capital letters -set incsearch " incremental search -set gdefault " :s/search/replace/ has g by default -set magic " use extended regexes -set wildmenu " autocomplete :commands -set nolazyredraw " redraw during macro execution etc. -set foldlevelstart=10 " open most folds by default -set foldmethod=syntax " (or marker, manual, expr, syntax, diff) -set noequalalways " don't resize all windows when closing/opening another -set eadirection=both " 'equalalways' applies horizontally and vertically - -set expandtab " tabs are actually spaces -set tabstop=4 " tab width -set softtabstop=4 " when reading a '\t', it will be this wide -set shiftwidth=4 " autoindent tab width -set list " show whitespace with characters in 'listchars' -" possible chars: eol, tab, space, trail, extends, precedes, conceal, nbsp -set listchars=tab:>\ ,trail:_ " highlight tabs and trailing spaces specially -set showbreak=>\ " character to show at start of wrapped lines -set nojoinspaces " don't add two spaces after [.!?] - -set scrolloff=5 " always show these many lines around the current one -set sidescrolloff=15 " always show these many columns around the current one -set colorcolumn=80 " highlight 80th column -set textwidth=79 " break long lines on whitespace when inserted -set linebreak " wrap by words (affects display only) -set breakindent " wrapped lines have same virtual indent as first line -set formatoptions=tcqn2 " preserve textwidth, comments, allow gq, numbered - " lists, second line indent - -set mouse=a " use mouse in terminal; press shift to disable temporarily -set guicursor=n-v-c:block,i-ci-ve:ver25,r-cr:hor20,o:hor50 - \,a:blinkwait700-blinkoff400-blinkon250-Cursor/lCursor - \,sm:block-blinkwait175-blinkoff150-blinkon175 - -" Fix colours in kitty -- see :help xterm-true-color. -set termguicolors -let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum" -let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum" - -" Enable auto-highlighting and auto-detection of file types and indentation rules. -filetype on -filetype plugin on -filetype indent on -syntax on - -source ~/.vim/catppuccin.vim diff --git a/tw/home/files/volume b/tw/home/files/volume deleted file mode 100755 index 96398553..00000000 --- a/tw/home/files/volume +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env -S guile --no-auto-compile -!# -(use-modules (ice-9 format) - (ice-9 match) - (ice-9 popen) - (ice-9 regex) - (ice-9 textual-ports)) - -(define (read-from-pactl . args) - (let* ((port (apply open-pipe* OPEN_READ "pactl" args)) - (output (get-string-all port))) - (close-pipe port) - (string-trim-right output #\newline))) - -(define %default-sink - (read-from-pactl "get-default-sink")) - -(define* (sink-muted? #:optional (sink %default-sink)) - (match (read-from-pactl "get-sink-mute" sink) - ("Mute: yes" #t) - ("Mute: no" #f) - (output (error "Unknown `pactl get-sink-mute' output" output)))) - -(define* (sink-volume #:optional (sink %default-sink)) - (match-let ((`#(,match (,start . ,end)) - (string-match "[0-9]+%" (read-from-pactl "get-sink-volume" sink)))) - (string->number (substring match start (1- end))))) ; trim trailing "%" - -(define* (set-sink-mute! #:optional (state "toggle") (sink %default-sink)) - (status:exit-val - (system* "pactl" "set-sink-mute" sink state))) - -(define* (increment-sink-volume! increment-percent #:optional (sink %default-sink)) - (status:exit-val - (system* "pactl" "set-sink-volume" sink - ;; A percentage with a sign is an increment. - (format #f "~@d%" increment-percent)))) - -(define* (notify #:optional (muted? (sink-muted?)) (volume (sink-volume))) - (status:exit-val - (system* "dunstify" "-a" "volume" "-u" "low" - "-i" (cond (muted? "audio-volume-muted") - ((< volume 50) "audio-volume-low") - (#t "audio-volume-high")) - "-h" "string:x-canonical-private-synchronous:volume" - "-h" (format #f "int:value:~d" (if muted? 0 volume)) - (if muted? "Volume muted" "Volume")))) - -(match (cdr (program-arguments)) - (() 0) ; notify only - (("mute") (set-sink-mute! "true")) - (("unmute") (set-sink-mute! "false")) - (("toggle-mute") (set-sink-mute! "toggle")) - (((? string->number increment-percent)) - (and (set-sink-mute! "false") - (increment-sink-volume! - (string->number increment-percent)))) - (args (error "Could not parse command-line arguments:" args))) - -(notify) diff --git a/tw/home/files/zathurarc b/tw/home/files/zathurarc deleted file mode 100644 index 06a9351f..00000000 --- a/tw/home/files/zathurarc +++ /dev/null @@ -1,32 +0,0 @@ -# see man zathurarc -*- mode: conf-space -*- - -# [c]ommand line, [s]tatus bar, [v]ertical/[h]orizontal scrollbar -set guioptions s -set recolor true -set recolor-keephue false -set recolor-reverse-video true -set render-loading true - -set scroll-hstep -1 -set scroll-step 40 -set scroll-full-overlap 0.0 -set scroll-page-aware true - -set window-title-basename true -set window-title-home-tilde true -set window-title-page false -set statusbar-basename false -set statusbar-home-tilde true - -set selection-clipboard clipboard -set selection-notification true - -# Completion -set show-directories true -set show-hidden true -set show-recent 10 - -# Theme -set font "Hermit 10" -set page-padding 0 # px between pages -include catppuccin |