feat: init 6ba25b63
Steve · 2026-08-22 00:35 107 file(s) · +11104 −0
.gitignore (added) +5 −0
1 +
/zed/conversations/*
2 +
.DS_Store
3 +
/zed/.config/zed/prompts/prompts-library-db.0.mdb/
4 +
*/.DS_Store
5 +
alacritty/alacritty.toml (added) +70 −0
1 +
[general]
2 +
live_config_reload = true
3 +
4 +
[env]
5 +
TERM = "xterm-256color"
6 +
7 +
[window]
8 +
decorations = "None"
9 +
dimensions = { columns = 85, lines = 30 }
10 +
padding = { x = 10, y = 4 }
11 +
dynamic_padding = false
12 +
opacity = 0.9
13 +
14 +
[font]
15 +
size = 11
16 +
17 +
[font.normal]
18 +
family = "BerkeleyMono Nerd Font"
19 +
style = "Regular"
20 +
21 +
[font.bold]
22 +
family = "BerkeleyMono Nerd Font"
23 +
style = "Bold"
24 +
25 +
[font.italic]
26 +
family = "BerkeleyMono Nerd Font"
27 +
style = "Italic"
28 +
29 +
[font.bold_italic]
30 +
family = "BerkeleyMono Nerd Font"
31 +
style = "Bold Italic"
32 +
33 +
[mouse]
34 +
hide_when_typing = true
35 +
36 +
[cursor]
37 +
style = { shape = "Block", blinking = "Off" }
38 +
39 +
# Darkmatter
40 +
[colors.primary]
41 +
background = "#121113"
42 +
foreground = "#ffffff"
43 +
44 +
[colors.cursor]
45 +
text = "#121113"
46 +
cursor = "#ffffff"
47 +
48 +
[colors.selection]
49 +
text = "#000000"
50 +
background = "#222222"
51 +
52 +
[colors.normal]
53 +
black = "#121113"
54 +
red = "#5f8787"
55 +
green = "#fbcb97"
56 +
yellow = "#e78a53"
57 +
blue = "#888888"
58 +
magenta = "#999999"
59 +
cyan = "#aaaaaa"
60 +
white = "#c1c1c1"
61 +
62 +
[colors.bright]
63 +
black = "#333333"
64 +
red = "#5f8787"
65 +
green = "#fbcb97"
66 +
yellow = "#e78a53"
67 +
blue = "#888888"
68 +
magenta = "#999999"
69 +
cyan = "#aaaaaa"
70 +
white = "#c1c1c1"
amfora/config.toml (added) +538 −0
1 +
# This is the default config file.
2 +
# It also shows all the default values, if you don't create the file.
3 +
# You can edit this file to set your own configuration for Amfora.
4 +
5 +
# When Amfora updates, defaults may change, but this file on your drive will not.
6 +
# You can always get the latest defaults on GitHub.
7 +
# https://github.com/makeworld-the-better-one/amfora/blob/master/default-config.toml
8 +
9 +
# Please also check out the Amfora Wiki for more help
10 +
# https://github.com/makeworld-the-better-one/amfora/wiki
11 +
# gemini://makeworld.space/amfora-wiki/
12 +
13 +
14 +
15 +
# All URL values may omit the scheme and/or port, as well as the beginning double slash
16 +
# Valid URL examples:
17 +
# gemini://example.com
18 +
# //example.com
19 +
# example.com
20 +
# example.com:123
21 +
22 +
23 +
[a-general]
24 +
# Press Ctrl-H to access it
25 +
home = "gemini://geminiprotocol.net"
26 +
27 +
# Follow up to 5 Gemini redirects without prompting.
28 +
# A prompt is always shown after the 5th redirect and for redirects to protocols other than Gemini.
29 +
# If set to false, a prompt will be shown before following redirects.
30 +
auto_redirect = false
31 +
32 +
# What command to run to open a HTTP(S) URL.
33 +
# Set to "default" to try to guess the browser, or set to "off" to not open HTTP(S) URLs.
34 +
# If a command is set, than the URL will be added (in quotes) to the end of the command.
35 +
# A space will be prepended to the URL.
36 +
#
37 +
# The best way to define a command is using a string array.
38 +
# Examples:
39 +
# http = ['firefox']
40 +
# http = ['custom-browser', '--flag', '--option=2']
41 +
# http = ['/path/with spaces/in it/firefox']
42 +
#
43 +
# Note the use of single quotes, so that backslashes will not be escaped.
44 +
# Using just a string will also work, but it is deprecated, and will degrade if
45 +
# you use paths with spaces.
46 +
47 +
http = 'default'
48 +
49 +
# Any URL that will accept a query string can be put here
50 +
search = "gemini://kennedy.gemi.dev/search"
51 +
52 +
# Whether colors will be used in the terminal
53 +
color = true
54 +
55 +
# Whether ANSI color codes from the page content should be rendered
56 +
ansi = true
57 +
58 +
# Whether or not to support source code highlighting in preformatted blocks based on alt text
59 +
highlight_code = true
60 +
61 +
# Which highlighting style to use (see https://xyproto.github.io/splash/docs/)
62 +
highlight_style = "monokai"
63 +
64 +
# Whether to replace list asterisks with unicode bullets
65 +
bullets = true
66 +
67 +
# Whether to show link after link text
68 +
show_link = false
69 +
70 +
# The max number of columns to wrap a page's text to. Preformatted blocks are not wrapped.
71 +
max_width = 80
72 +
73 +
# 'downloads' is the path to a downloads folder.
74 +
# An empty value means the code will find the default downloads folder for your system.
75 +
# If the path does not exist it will be created.
76 +
# Note the use of single quotes, so that backslashes will not be escaped.
77 +
downloads = ''
78 +
79 +
# Max size for displayable content in bytes - after that size a download window pops up
80 +
page_max_size = 2097152  # 2 MiB
81 +
# Max time it takes to load a page in seconds - after that a download window pops up
82 +
page_max_time = 10
83 +
84 +
# When a scrollbar appears. "never", "auto", and "always" are the only valid values.
85 +
# "auto" means the scrollbar only appears when the page is longer than the window.
86 +
scrollbar = "auto"
87 +
88 +
# Underline non-gemini URLs
89 +
# This is done to help color blind users
90 +
underline = true
91 +
92 +
93 +
[auth]
94 +
# Authentication settings
95 +
# Note the use of single quotes for values, so that backslashes will not be escaped.
96 +
97 +
[auth.certs]
98 +
# Client certificates
99 +
# Set URL equal to path to client cert file
100 +
#
101 +
# "example.com" = 'mycert.crt'      # Cert is used for all paths on this domain
102 +
# "example.com/dir/"=  'mycert.crt' # Cert is used for /dir/ and everything below only
103 +
#
104 +
# See the comment at the beginning of this file for examples of all valid types of
105 +
# URLs, ports and schemes can be used too
106 +
"stevedylan.dev" = '/Users/stevedylandev/.local/share/amfora/cert.pem'
107 +
108 +
109 +
[auth.keys]
110 +
# Client certificate keys
111 +
# Same as [auth.certs] but the path is to the client key file.
112 +
"stevedylan.dev" = '/Users/stevedylandev/.local/share/amfora/key.pem'
113 +
114 +
115 +
[commands]
116 +
# Define up to 10 custom commands to execute on the corresponding hotkey press.
117 +
# Commands are run in a new process and will not terminate when Amfora is closed.
118 +
# If you need your command to accept additional input, it is recommended to open
119 +
# a GUI or use a terminal multiplexer like screen or tmux. The string ${url} will
120 +
# be replaced with the current or selected URL. Note that pipes and redirections
121 +
# are not allowed, if these are needed then you should set up a script. Use only
122 +
# absolute paths and/or reference executables in your $PATH.
123 +
# command1 = "my-script -a -b -c ${url}"
124 +
# command2 = ""
125 +
# command3 = ""
126 +
# command4 = ""
127 +
# command5 = ""
128 +
# command6 = ""
129 +
# command7 = ""
130 +
# command8 = ""
131 +
# command9 = ""
132 +
# command0 = ""
133 +
134 +
135 +
[keybindings]
136 +
# If you have a non-US keyboard, use bind_tab1 through bind_tab0 to
137 +
# setup the shift-number bindings: Eg, for US keyboards (the default):
138 +
# bind_tab1 = "!"
139 +
# bind_tab2 = "@"
140 +
# bind_tab3 = "#"
141 +
# bind_tab4 = "$"
142 +
# bind_tab5 = "%"
143 +
# bind_tab6 = "^"
144 +
# bind_tab7 = "&"
145 +
# bind_tab8 = "*"
146 +
# bind_tab9 = "("
147 +
# bind_tab0 = ")"
148 +
149 +
# Whitespace is not allowed in any of the keybindings! Use 'Space' and 'Tab' to bind to those keys.
150 +
# Multiple keys can be bound to one command, just use a TOML array.
151 +
# To add the Alt modifier, the binding must start with Alt-, should be reasonably universal
152 +
# Ctrl- won't work on all keys, see this for a list:
153 +
# https://github.com/gdamore/tcell/blob/cb1e5d6fa606/key.go#L83
154 +
155 +
# An example of a TOML array for multiple keys being bound to one command is the default
156 +
# binding for reload:
157 +
# bind_reload = ["R","Ctrl-R"]
158 +
# One thing to note here is that "R" is capitalization sensitive, so it means shift-r.
159 +
# "Ctrl-R" means both ctrl-r and ctrl-shift-R (this is a quirk of what ctrl-r means on
160 +
# an ANSI terminal)
161 +
162 +
# The default binding for opening the bottom bar for entering a URL or link number is:
163 +
# bind_bottom = "Space"
164 +
# This is how to get the Spacebar as a keybinding, if you try to use " ", it won't work.
165 +
# And, finally, an example of a simple, unmodified character is:
166 +
# bind_edit = "e"
167 +
# This binds the "e" key to the command to edit the current URL.
168 +
169 +
# The bind_link[1-90] options are for the commands to go to the first 10 links on a page,
170 +
# typically these are bound to the number keys:
171 +
# bind_link1 = "1"
172 +
# bind_link2 = "2"
173 +
# bind_link3 = "3"
174 +
# bind_link4 = "4"
175 +
# bind_link5 = "5"
176 +
# bind_link6 = "6"
177 +
# bind_link7 = "7"
178 +
# bind_link8 = "8"
179 +
# bind_link9 = "9"
180 +
# bind_link0 = "0"
181 +
182 +
# The bind_command[0-9] options are for the command hotkeys. This will pass the URL of the
183 +
# current tab as an argument.
184 +
# bind_command1 = "Alt-!"
185 +
# bind_command2 = "Alt-@"
186 +
# bind_command3 = "Alt-#"
187 +
# bind_command4 = "Alt-$"
188 +
# bind_command5 = "Alt-%"
189 +
# bind_command6 = "Alt-^"
190 +
# bind_command7 = "Alt-&"
191 +
# bind_command8 = "Alt-*"
192 +
# bind_command9 = "Alt-("
193 +
# bind_command0 = "Alt-)"
194 +
195 +
# The bind_commandtarget[0-9] options are for command hotkeys that operate on the currently
196 +
# highlighted link. This will pass the URL of the highlighted link as an argument.
197 +
# bind_command_target1 = "Alt-1"
198 +
# bind_command_target2 = "Alt-2"
199 +
# bind_command_target3 = "Alt-3"
200 +
# bind_command_target4 = "Alt-4"
201 +
# bind_command_target5 = "Alt-5"
202 +
# bind_command_target6 = "Alt-6"
203 +
# bind_command_target7 = "Alt-7"
204 +
# bind_command_target8 = "Alt-8"
205 +
# bind_command_target9 = "Alt-9"
206 +
# bind_command_target0 = "Alt-0"
207 +
208 +
# All keybindings:
209 +
#
210 +
# bind_bottom
211 +
# bind_edit
212 +
# bind_home
213 +
# bind_bookmarks
214 +
# bind_add_bookmark
215 +
# bind_save
216 +
# bind_reload
217 +
# bind_back
218 +
# bind_forward
219 +
# bind_moveup
220 +
# bind_movedown
221 +
# bind_moveleft
222 +
# bind_moveright
223 +
# bind_pgup
224 +
# bind_pgdn
225 +
# bind_new_tab
226 +
# bind_close_tab
227 +
# bind_next_tab
228 +
# bind_prev_tab
229 +
# bind_quit
230 +
# bind_help
231 +
# bind_sub: for viewing the subscriptions page
232 +
# bind_add_sub
233 +
# bind_copy_page_url
234 +
# bind_copy_target_url
235 +
# bind_beginning: moving to beginning of page (top left)
236 +
# bind_end: same but the for the end (bottom left)
237 +
# bind_url_handler_open: Open highlighted URL with URL handler (#143)
238 +
239 +
# Search
240 +
# bind_search = "/"
241 +
# bind_next_match = "n"
242 +
# bind_prev_match = "N"
243 +
244 +
[url-handlers]
245 +
# Allows setting the commands to run for various URL schemes.
246 +
# E.g. to open FTP URLs with FileZilla set the following key:
247 +
#   ftp = ['filezilla']
248 +
# You can set any scheme to 'off' or '' to disable handling it, or
249 +
# just leave the key unset.
250 +
#
251 +
# DO NOT use this for setting the HTTP command.
252 +
# Use the http setting in the "a-general" section above.
253 +
#
254 +
# NOTE: These settings are overridden by the ones in the proxies section.
255 +
#
256 +
# The best way to define a command is using a string array.
257 +
# Examples:
258 +
# magnet = ['transmission']
259 +
# foo = ['custom-browser', '--flag', '--option=2']
260 +
# tel = ['/path/with spaces/in it/telephone']
261 +
#
262 +
# Note the use of single quotes, so that backslashes will not be escaped.
263 +
# Using just a string will also work, but it is deprecated, and will degrade if
264 +
# you use paths with spaces.
265 +
266 +
# This is a special key that defines the handler for all URL schemes for which
267 +
# no handler is defined.
268 +
# It uses the special value 'default', which will try and use the default
269 +
# application on your computer for opening this kind of URI.
270 +
other = 'default'
271 +
272 +
[url-prompts]
273 +
# Specify whether a confirmation prompt should be shown before following URL schemes.
274 +
# The special key 'other' matches all schemes that don't match any other key.
275 +
#
276 +
# Example: prompt on every non-gemini URL
277 +
# other = true
278 +
# gemini = false
279 +
#
280 +
# Example: only prompt on HTTP(S)
281 +
# other = false
282 +
# http = true
283 +
# https = true
284 +
285 +
# [[mediatype-handlers]] section
286 +
# ---------------------------------
287 +
#
288 +
# Specify what applications will open certain media types.
289 +
# By default your default application will be used to open the file when you select "Open".
290 +
# You only need to configure this section if you want to override your default application,
291 +
# or do special things like streaming.
292 +
#
293 +
# Note the use of single quotes for commands, so that backslashes will not be escaped.
294 +
#
295 +
#
296 +
# To open jpeg files with the feh command:
297 +
#
298 +
# [[mediatype-handlers]]
299 +
# cmd = ['feh']
300 +
# types = ["image/jpeg"]
301 +
#
302 +
# Each command that you specify must come under its own [[mediatype-handlers]]. You may
303 +
# specify as many [[mediatype-handlers]] as you want to setup multiple commands.
304 +
#
305 +
# If the subtype is omitted then the specified command will be used for the
306 +
# entire type:
307 +
#
308 +
# [[mediatype-handlers]]
309 +
# command = ['vlc', '--flag']
310 +
# types = ["audio", "video"]
311 +
#
312 +
# A catch-all handler can by specified with "*".
313 +
# Note that there are already catch-all handlers in place for all OSes,
314 +
# that open the file using your default application. This is only if you
315 +
# want to override that.
316 +
#
317 +
# [[mediatype-handlers]]
318 +
# cmd = ['some-command']
319 +
# types = [
320 +
#         "application/pdf",
321 +
#         "*",
322 +
# ]
323 +
#
324 +
# You can also choose to stream the data instead of downloading it all before
325 +
# opening it. This is especially useful for large video or audio files, as
326 +
# well as radio streams, which will never complete. You can do this like so:
327 +
#
328 +
# [[mediatype-handlers]]
329 +
# cmd = ['vlc', '-']
330 +
# types = ["audio", "video"]
331 +
# stream = true
332 +
#
333 +
# This uses vlc to stream all video and audio content.
334 +
# By default stream is set to off for all handlers
335 +
#
336 +
#
337 +
# If you want to always open a type in its viewer without the download or open
338 +
# prompt appearing, you can add no_prompt = true
339 +
#
340 +
# [[mediatype-handlers]]
341 +
# cmd = ['feh']
342 +
# types = ["image"]
343 +
# no_prompt = true
344 +
#
345 +
# Note: Multiple handlers cannot be defined for the same full media type, but
346 +
# still there needs to be an order for which handlers are used. The following
347 +
# order applies regardless of the order written in the config:
348 +
#
349 +
# 1. Full media type: "image/jpeg"
350 +
# 2. Just type: "image"
351 +
# 3. Catch-all: "*"
352 +
353 +
354 +
[cache]
355 +
# Options for page cache - which is only for text pages
356 +
# Increase the cache size to speed up browsing at the expense of memory
357 +
# Zero values mean there is no limit
358 +
359 +
max_size = 0  # Size in bytes
360 +
max_pages = 30 # The maximum number of pages the cache will store
361 +
362 +
# How long a page will stay in cache, in seconds.
363 +
timeout = 1800 # 30 mins
364 +
365 +
[proxies]
366 +
# Allows setting a Gemini proxy for different schemes.
367 +
# The settings are similar to the url-handlers section above.
368 +
# E.g. to open a gopher page by connecting to a Gemini proxy server:
369 +
#   gopher = "example.com:123"
370 +
#
371 +
# Port 1965 is assumed if no port is specified.
372 +
#
373 +
# NOTE: These settings override any external handlers specified in
374 +
# the url-handlers section.
375 +
#
376 +
# Note that HTTP and HTTPS are treated as separate protocols here.
377 +
378 +
379 +
[subscriptions]
380 +
# For tracking feeds and pages
381 +
382 +
# Whether a pop-up appears when viewing a potential feed
383 +
popup = true
384 +
385 +
# How often to check for updates to subscriptions in the background, in seconds.
386 +
# Set it to 0 to disable this feature. You can still update individual feeds
387 +
# manually, or restart the browser.
388 +
#
389 +
# Note Amfora will check for updates on browser start no matter what this setting is.
390 +
update_interval = 1800 # 30 mins
391 +
392 +
# How many subscriptions can be checked at the same time when updating.
393 +
# If you have many subscriptions you may want to increase this for faster
394 +
# update times. Any value below 1 will be corrected to 1.
395 +
workers = 3
396 +
397 +
# The number of subscription updates displayed per page.
398 +
entries_per_page = 20
399 +
400 +
# Set to false to remove the explanatory text from the top of the subscription page
401 +
header = true
402 +
403 +
404 +
[theme]
405 +
# This section is for changing the COLORS used in Amfora.
406 +
# These colors only apply if 'color' is enabled above.
407 +
# Colors can be set using a W3C color name, or a hex value such as "#ffffff".
408 +
# Setting a background to "default" keeps the terminal default
409 +
# If your terminal has transparency, set any background to "default" to keep it transparent
410 +
# The key "bg" is already set to "default", but this can be used on other backgrounds,
411 +
# like for modals.
412 +
413 +
# Note that not all colors will work on terminals that do not have truecolor support.
414 +
# If you want to stick to the standard 16 or 256 colors, you can get
415 +
# a list of those here: https://jonasjacek.github.io/colors/
416 +
# DO NOT use the names from that site, just the hex codes.
417 +
418 +
# Definitions:
419 +
#   bg = background
420 +
#   fg = foreground
421 +
#   dl = download
422 +
#   btn = button
423 +
#   hdg = heading
424 +
#   bkmk = bookmark
425 +
#   modal = a popup window/box in the middle of the screen
426 +
427 +
# EXAMPLES:
428 +
# hdg_1 = "green"
429 +
# hdg_2 = "#5f0000"
430 +
# bg = "default"
431 +
432 +
# Available keys to set:
433 +
434 +
# bg: background for pages, tab row, app in general
435 +
# tab_num: The number/highlight of the tabs at the top
436 +
# tab_divider: The color of the divider character between tab numbers: |
437 +
# bottombar_label: The color of the prompt that appears when you press space
438 +
# bottombar_text: The color of the text you type
439 +
# bottombar_bg
440 +
# scrollbar: The scrollbar that appears on the right for long pages
441 +
442 +
# You can also set an 'include' key to process another TOML file that contains theme keys.
443 +
# Example:
444 +
#   include = "my/path/to/special-theme.toml"
445 +
#
446 +
# Any other theme keys will override this external file.
447 +
# You can use this special key to switch between themes easily.
448 +
# Download other themes here: https://github.com/makeworld-the-better-one/amfora/tree/master/contrib/themes
449 +
450 +
451 +
# hdg_1
452 +
# hdg_2
453 +
# hdg_3
454 +
# amfora_link: A link that Amfora supports viewing. For now this is only gemini://
455 +
# foreign_link: HTTP(S), Gopher, etc
456 +
# link_number: The silver number that appears to the left of a link
457 +
# regular_text: Normal gemini text, and plaintext documents
458 +
# quote_text
459 +
# preformatted_text
460 +
# list_text
461 +
462 +
# btn_bg: The bg color for all modal buttons
463 +
# btn_text: The text color for all modal buttons
464 +
465 +
# dl_choice_modal_bg
466 +
# dl_choice_modal_text
467 +
# dl_modal_bg
468 +
# dl_modal_text
469 +
# info_modal_bg
470 +
# info_modal_text
471 +
# error_modal_bg
472 +
# error_modal_text
473 +
# yesno_modal_bg
474 +
# yesno_modal_text
475 +
# tofu_modal_bg
476 +
# tofu_modal_text
477 +
# subscription_modal_bg
478 +
# subscription_modal_text
479 +
480 +
# input_modal_bg
481 +
# input_modal_text
482 +
# input_modal_field_bg: The bg of the input field, where you type the text
483 +
# input_modal_field_text: The color of the text you type
484 +
485 +
# bkmk_modal_bg
486 +
# bkmk_modal_text
487 +
# bkmk_modal_label
488 +
# bkmk_modal_field_bg
489 +
# bkmk_modal_field_text
490 +
491 +
# Darkmatter Theme
492 +
bg = "#121113"
493 +
tab_num = "#e78a53"
494 +
tab_divider = "#333333"
495 +
bottombar_label = "#e78a53"
496 +
bottombar_text = "#ffffff"
497 +
bottombar_bg = "#222222"
498 +
scrollbar = "#333333"
499 +
500 +
hdg_1 = "#ffffff"
501 +
hdg_2 = "#c1c1c1"
502 +
hdg_3 = "#aaaaaa"
503 +
amfora_link = "#e78a53"
504 +
foreign_link = "#fbcb97"
505 +
link_number = "#888888"
506 +
regular_text = "#ffffff"
507 +
quote_text = "#5f8787"
508 +
preformatted_text = "#fbcb97"
509 +
list_text = "#ffffff"
510 +
511 +
btn_bg = "#333333"
512 +
btn_text = "#ffffff"
513 +
514 +
dl_choice_modal_bg = "#222222"
515 +
dl_choice_modal_text = "#ffffff"
516 +
dl_modal_bg = "#222222"
517 +
dl_modal_text = "#ffffff"
518 +
info_modal_bg = "#222222"
519 +
info_modal_text = "#ffffff"
520 +
error_modal_bg = "#222222"
521 +
error_modal_text = "#e78a53"
522 +
yesno_modal_bg = "#222222"
523 +
yesno_modal_text = "#ffffff"
524 +
tofu_modal_bg = "#222222"
525 +
tofu_modal_text = "#ffffff"
526 +
subscription_modal_bg = "#222222"
527 +
subscription_modal_text = "#ffffff"
528 +
529 +
input_modal_bg = "#222222"
530 +
input_modal_text = "#ffffff"
531 +
input_modal_field_bg = "#333333"
532 +
input_modal_field_text = "#ffffff"
533 +
534 +
bkmk_modal_bg = "#222222"
535 +
bkmk_modal_text = "#ffffff"
536 +
bkmk_modal_label = "#e78a53"
537 +
bkmk_modal_field_bg = "#333333"
538 +
bkmk_modal_field_text = "#ffffff"
assets/CommitMonoNerdFont-Bold.otf (added) +0 −0

Binary file — no preview.

assets/CommitMonoNerdFont-BoldItalic.otf (added) +0 −0

Binary file — no preview.

assets/CommitMonoNerdFont-Italic.otf (added) +0 −0

Binary file — no preview.

assets/CommitMonoNerdFont-Regular.otf (added) +0 −0

Binary file — no preview.

assets/screenshot.png (added) +0 −0

Binary file — no preview.

assets/wallpaper.png (added) +0 −0

Binary file — no preview.

bash/dot-bash_profile (added) +4 −0
1 +
# ~/.bash_profile
2 +
# Login shells read this, not ~/.bashrc.
3 +
# Source ~/.bashrc so interactive config loads either way.
4 +
[ -f ~/.bashrc ] && . ~/.bashrc
bash/dot-bashrc (added) +222 −0
1 +
# ~/.bashrc — mirrors the nushell config
2 +
#
3 +
# Linked via: fling link -s bash -l ~
4 +
5 +
# Interactive-only guard
6 +
case $- in
7 +
  *i*) ;;
8 +
  *) return ;;
9 +
esac
10 +
11 +
# =============================================================================
12 +
# History
13 +
# =============================================================================
14 +
HISTSIZE=100000
15 +
HISTFILESIZE=100000
16 +
HISTCONTROL=ignoreboth
17 +
shopt -s histappend
18 +
19 +
# vi mode (matches nushell edit_mode: vi)
20 +
set -o vi
21 +
22 +
# =============================================================================
23 +
# Environment
24 +
# =============================================================================
25 +
export EDITOR="nvim"
26 +
export CLICOLOR=1
27 +
28 +
# Go
29 +
export GOROOT="/usr/local/go"
30 +
export GOPATH="$HOME/.local/share/go"
31 +
export GOMODCACHE="$HOME/.local/share/go-mod-cache"
32 +
#export GOPRIVATE="*gitlab*"
33 +
34 +
# bat
35 +
export BAT_THEME="ansi"
36 +
export BAT_THEME_DARK="ansi"
37 +
38 +
# gpg
39 +
export GPG_TTY="$(tty)"
40 +
41 +
# misc
42 +
export BULLETS_FEEDS="feeds.stevedylan.dev/feed.xml"
43 +
export FLOW_BOARD_PATH="$HOME/notes/board"
44 +
45 +
# pnpm
46 +
export PNPM_HOME="$HOME/.local/share/pnpm"
47 +
48 +
# fzf
49 +
export FZF_DEFAULT_COMMAND='fd --type f --hidden --exclude ".git"'
50 +
export FZF_DEFAULT_OPTS='
51 +
  --color=fg:8:bold,fg+:15,bg:-1,bg+:-1
52 +
  --color=hl:10:bold,hl+:10:bold
53 +
  --color=info:8,spinner:9,header:4
54 +
  --color=prompt:2,pointer:9,marker:1
55 +
  --color=border:7,label:15:bold,query:15
56 +
  --border="rounded"
57 +
  --border-label=""
58 +
  --preview-window="border-rounded"
59 +
  --prompt="> "
60 +
  --marker=" "
61 +
  --pointer="◆"
62 +
  --separator=""
63 +
  --scrollbar=""
64 +
  --gutter=" "
65 +
  --info=inline-right'
66 +
67 +
# =============================================================================
68 +
# PATH
69 +
# =============================================================================
70 +
# path_add <dir>: prepend if not already present and dir exists
71 +
path_add() {
72 +
  case ":$PATH:" in
73 +
    *":$1:"*) ;;
74 +
    *) [ -d "$1" ] && PATH="$1:$PATH" ;;
75 +
  esac
76 +
}
77 +
78 +
path_add "/home/linuxbrew/.linuxbrew/bin"
79 +
path_add "/usr/local/go/bin"
80 +
path_add "$HOME/.cargo/bin"
81 +
path_add "$HOME/.local/share/go/bin"
82 +
path_add "$HOME/.local/bin"
83 +
path_add "/usr/local/bin"
84 +
path_add "$HOME/.bun/bin"
85 +
path_add "$HOME/.deno/bin"
86 +
path_add "$HOME/.foundry/bin"
87 +
path_add "$HOME/.local/share"
88 +
path_add "$HOME/.local/share/solana/install/active_release/bin"
89 +
path_add "$HOME/.radicle/bin"
90 +
path_add "$HOME/.nargo/bin"
91 +
path_add "$HOME/.aztec/bin"
92 +
path_add "$HOME/.helios/bin"
93 +
path_add "$HOME/.tmux/plugins/t-smart-tmux-session-manager/bin"
94 +
path_add "$PNPM_HOME"
95 +
96 +
export PATH
97 +
98 +
# fnm (node version manager)
99 +
if command -v fnm >/dev/null 2>&1; then
100 +
  eval "$(fnm env --shell bash)"
101 +
  path_add "$FNM_MULTISHELL_PATH/bin"
102 +
  export PATH
103 +
  # auto-switch node version on cd when .node-version / .nvmrc present
104 +
  __fnm_autouse() {
105 +
    if [ -f .node-version ] || [ -f .nvmrc ]; then
106 +
      fnm use --silent-if-unchanged 2>/dev/null
107 +
    fi
108 +
  }
109 +
  PROMPT_COMMAND="__fnm_autouse${PROMPT_COMMAND:+; $PROMPT_COMMAND}"
110 +
fi
111 +
112 +
# cargo
113 +
[ -f "$HOME/.cargo/env" ] && . "$HOME/.cargo/env"
114 +
115 +
# =============================================================================
116 +
# Aliases
117 +
# =============================================================================
118 +
alias ll='ls -l'
119 +
alias la='ls -a'
120 +
alias lg='lazygit'
121 +
alias nf='neofetch'
122 +
alias fl='fastfetch -c ~/.config/fastfetch/presets/examples/8.jsonc'
123 +
alias ff='fastfetch -c ~/.config/fastfetch/presets/examples/20.jsonc'
124 +
alias nvimrc='nvim ~/.config/nvim'
125 +
alias shitter='ssh itter'
126 +
alias ai='aichat'
127 +
alias system='macchina'
128 +
alias bonsai='cbonsai -li -t 0.4'
129 +
alias lst='lstr --icons --color=always --size'
130 +
alias keys='keysmasher'
131 +
alias timestamp='node -e "process.stdout.write(new Date().toISOString())"'
132 +
133 +
# tailscale is in PATH natively on linux (no app bundle alias needed)
134 +
135 +
# =============================================================================
136 +
# Functions
137 +
# =============================================================================
138 +
# Open a sesh session via gum filter
139 +
t() {
140 +
  local selected
141 +
  selected=$(sesh list -i | gum filter --limit 1 --placeholder "Choose a session" --height 50 --prompt="> " --indicator.foreground="2" --match.foreground="2")
142 +
  if [ -z "$selected" ]; then
143 +
    echo "No session selected"
144 +
  else
145 +
    sesh connect "$selected"
146 +
  fi
147 +
}
148 +
149 +
# Fuzzy-find a file and open in nvim
150 +
nvimf() {
151 +
  local file
152 +
  file=$(fd --type f --hidden --exclude .git | fzf --preview "bat --color=always {}")
153 +
  if [ -z "$file" ]; then
154 +
    echo "No file selected"
155 +
  else
156 +
    nvim "$file"
157 +
  fi
158 +
}
159 +
160 +
# Install a tree-sitter parser into the nvim luarocks tree
161 +
tsi() {
162 +
  local parser="$1"
163 +
  local tree="$HOME/.local/share/nvim/site"
164 +
  luarocks --lua-version=5.1 "--tree=$tree" install "tree-sitter-$parser"
165 +
}
166 +
167 +
# nvim startup time -> grep summary line
168 +
ns() {
169 +
  rm -f ~/.nvim-startup.txt
170 +
  nvim --headless --startuptime ~/.nvim-startup.txt +qa
171 +
  grep "NVIM STARTED" ~/.nvim-startup.txt
172 +
}
173 +
174 +
# nvim startup time -> full bat dump
175 +
nh() {
176 +
  rm -f ~/.nvim-startup.txt
177 +
  nvim --headless --startuptime ~/.nvim-startup.txt +qa
178 +
  bat ~/.nvim-startup.txt
179 +
}
180 +
181 +
# Copy file contents to clipboard
182 +
cpf() {
183 +
  if command -v wl-copy >/dev/null 2>&1; then
184 +
    wl-copy < "$1"
185 +
  elif command -v xclip >/dev/null 2>&1; then
186 +
    xclip -selection clipboard < "$1"
187 +
  elif command -v xsel >/dev/null 2>&1; then
188 +
    xsel --clipboard --input < "$1"
189 +
  else
190 +
    echo "No clipboard tool found (wl-copy/xclip/xsel)" >&2
191 +
    return 1
192 +
  fi
193 +
  echo "✔︎ Copied to clipboard!"
194 +
}
195 +
196 +
# Set orbiter key to personal
197 +
orbiter-personal() {
198 +
  gum spin --spinner dot --spinner.foreground="2" --title "Updating..." -- orbiter auth --key "$(op read 'op://Personal/orbiter-api-key/credential')"
199 +
  local check
200 +
  check=$(gum style --foreground="2" "✓ ")
201 +
  gum join "$check" "Orbiter key set to personal!"
202 +
}
203 +
204 +
# Set orbiter key to orbiter account
205 +
orbiter-account() {
206 +
  gum spin --spinner dot --spinner.foreground="2" --title "Updating..." -- orbiter auth --key "$(op read 'op://Personal/orbiter-account-api-key/credential')"
207 +
  local check
208 +
  check=$(gum style --foreground="2" "✓ ")
209 +
  gum join "$check" "Orbiter key set to Orbiter account!"
210 +
}
211 +
212 +
# UTC timestamp for blog frontmatter
213 +
blogdate() {
214 +
  date -u +"%Y-%m-%dT%H:%M:%SZ"
215 +
}
216 +
217 +
# =============================================================================
218 +
# Tooling init
219 +
# =============================================================================
220 +
command -v zoxide >/dev/null 2>&1 && eval "$(zoxide init bash)"
221 +
command -v starship >/dev/null 2>&1 && eval "$(starship init bash)"
222 +
command -v fzf >/dev/null 2>&1 && eval "$(fzf --bash)"
btop/btop.conf (added) +221 −0
1 +
#? Config file for btop v. 1.4.4
2 +
3 +
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
4 +
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
5 +
color_theme = "TTY"
6 +
7 +
#* If the theme set background should be shown, set to False if you want terminal background transparency.
8 +
theme_background = True
9 +
10 +
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
11 +
truecolor = True
12 +
13 +
#* Set to true to force tty mode regardless if a real tty has been detected or not.
14 +
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
15 +
force_tty = False
16 +
17 +
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
18 +
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
19 +
#* Use whitespace " " as separator between different presets.
20 +
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
21 +
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
22 +
23 +
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
24 +
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
25 +
vim_keys = True
26 +
27 +
#* Rounded corners on boxes, is ignored if TTY mode is ON.
28 +
rounded_corners = True
29 +
30 +
#* Default symbols to use for graph creation, "braille", "block" or "tty".
31 +
#* "braille" offers the highest resolution but might not be included in all fonts.
32 +
#* "block" has half the resolution of braille but uses more common characters.
33 +
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
34 +
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
35 +
graph_symbol = "braille"
36 +
37 +
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
38 +
graph_symbol_cpu = "default"
39 +
40 +
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
41 +
graph_symbol_mem = "default"
42 +
43 +
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
44 +
graph_symbol_net = "default"
45 +
46 +
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
47 +
graph_symbol_proc = "default"
48 +
49 +
#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
50 +
shown_boxes = "cpu mem net proc"
51 +
52 +
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
53 +
update_ms = 2000
54 +
55 +
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
56 +
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
57 +
proc_sorting = "memory"
58 +
59 +
#* Reverse sorting order, True or False.
60 +
proc_reversed = True
61 +
62 +
#* Show processes as a tree.
63 +
proc_tree = False
64 +
65 +
#* Use the cpu graph colors in the process list.
66 +
proc_colors = True
67 +
68 +
#* Use a darkening gradient in the process list.
69 +
proc_gradient = True
70 +
71 +
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
72 +
proc_per_core = True
73 +
74 +
#* Show process memory as bytes instead of percent.
75 +
proc_mem_bytes = True
76 +
77 +
#* Show cpu graph for each process.
78 +
proc_cpu_graphs = True
79 +
80 +
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
81 +
proc_info_smaps = False
82 +
83 +
#* Show proc box on left side of screen instead of right.
84 +
proc_left = False
85 +
86 +
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
87 +
proc_filter_kernel = False
88 +
89 +
#* In tree-view, always accumulate child process resources in the parent process.
90 +
proc_aggregate = False
91 +
92 +
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
93 +
#* Select from a list of detected attributes from the options menu.
94 +
cpu_graph_upper = "Auto"
95 +
96 +
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
97 +
#* Select from a list of detected attributes from the options menu.
98 +
cpu_graph_lower = "Auto"
99 +
100 +
#* Toggles if the lower CPU graph should be inverted.
101 +
cpu_invert_lower = True
102 +
103 +
#* Set to True to completely disable the lower CPU graph.
104 +
cpu_single_graph = False
105 +
106 +
#* Show cpu box at bottom of screen instead of top.
107 +
cpu_bottom = False
108 +
109 +
#* Shows the system uptime in the CPU box.
110 +
show_uptime = True
111 +
112 +
#* Show cpu temperature.
113 +
check_temp = True
114 +
115 +
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
116 +
cpu_sensor = "Auto"
117 +
118 +
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
119 +
show_coretemp = True
120 +
121 +
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
122 +
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
123 +
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
124 +
#* Example: "4:0 5:1 6:3"
125 +
cpu_core_map = ""
126 +
127 +
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
128 +
temp_scale = "celsius"
129 +
130 +
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
131 +
base_10_sizes = False
132 +
133 +
#* Show CPU frequency.
134 +
show_cpu_freq = True
135 +
136 +
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
137 +
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
138 +
clock_format = "%X"
139 +
140 +
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
141 +
background_update = True
142 +
143 +
#* Custom cpu model name, empty string to disable.
144 +
custom_cpu_name = ""
145 +
146 +
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
147 +
#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", disks_filter="exclude=/boot /home/user"
148 +
disks_filter = ""
149 +
150 +
#* Show graphs instead of meters for memory values.
151 +
mem_graphs = True
152 +
153 +
#* Show mem box below net box instead of above.
154 +
mem_below_net = False
155 +
156 +
#* Count ZFS ARC in cached and available memory.
157 +
zfs_arc_cached = True
158 +
159 +
#* If swap memory should be shown in memory box.
160 +
show_swap = True
161 +
162 +
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
163 +
swap_disk = True
164 +
165 +
#* If mem box should be split to also show disks info.
166 +
show_disks = True
167 +
168 +
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
169 +
only_physical = True
170 +
171 +
#* Read disks list from /etc/fstab. This also disables only_physical.
172 +
use_fstab = True
173 +
174 +
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
175 +
zfs_hide_datasets = False
176 +
177 +
#* Set to true to show available disk space for privileged users.
178 +
disk_free_priv = False
179 +
180 +
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
181 +
show_io_stat = True
182 +
183 +
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
184 +
io_mode = True
185 +
186 +
#* Set to True to show combined read/write io graphs in io mode.
187 +
io_graph_combined = False
188 +
189 +
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
190 +
#* Example: "/mnt/media:100 /:20 /boot:1".
191 +
io_graph_speeds = ""
192 +
193 +
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
194 +
net_download = 100
195 +
196 +
net_upload = 100
197 +
198 +
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
199 +
net_auto = True
200 +
201 +
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
202 +
net_sync = True
203 +
204 +
#* Starts with the Network Interface specified here.
205 +
net_iface = ""
206 +
207 +
#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes.
208 +
base_10_bitrate = "Auto"
209 +
210 +
#* Show battery stats in top right if battery is present.
211 +
show_battery = True
212 +
213 +
#* Which battery to use if multiple are present. "Auto" for auto detection.
214 +
selected_battery = "Auto"
215 +
216 +
#* Show power stats of battery next to charge indicator.
217 +
show_battery_watts = True
218 +
219 +
#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
220 +
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
221 +
log_level = "WARNING"
cargofile (added) +13 −0
1 +
avm v0.30.1 (https://github.com/coral-xyz/anchor#8eec2e3b):
2 +
    anchor
3 +
    avm
4 +
create-gpui-app v0.1.5:
5 +
    create-gpui-app
6 +
du-dust v1.2.0:
7 +
    dust
8 +
lazy-etherscan v0.1.1:
9 +
    lazy-etherscan
10 +
lstr v0.2.0:
11 +
    lstr
12 +
postman2openapi-cli v1.2.1:
13 +
    postman2openapi
dunst/dunstrc (added) +315 −0
1 +
[global]
2 +
    ### Display ###
3 +
4 +
    # Which monitor should the notifications be displayed on.
5 +
    monitor = 0
6 +
7 +
    # Display notification on focused monitor.  Possible modes are:
8 +
    #   mouse: follow mouse pointer
9 +
    #   keyboard: follow window with keyboard focus
10 +
    #   none: don't follow anything
11 +
    #
12 +
    # "keyboard" needs a window manager that exports the
13 +
    # _NET_ACTIVE_WINDOW property.
14 +
    # This should be the case for almost all modern window managers.
15 +
    #
16 +
    # If this option is set to mouse or keyboard, the monitor option
17 +
    # will be ignored.
18 +
    follow = mouse
19 +
20 +
    # The geometry of the window:
21 +
    #   [{width}]x{height}[+/-{x}+/-{y}]
22 +
    # The geometry of the message window.
23 +
    # The height is measured in number of notifications everything else
24 +
    # in pixels.  If the width is omitted but the height is given
25 +
    # ("-geometry x2"), the message window expands over the whole screen
26 +
    # (dmenu-like).  If width is 0, the window expands to the longest
27 +
    # message displayed.  A positive x is measured from the left, a
28 +
    # negative from the right side of the screen.  Y is measured from
29 +
    # the top and down respectively.
30 +
    # The width can be negative.  In this case the actual width is the
31 +
    # screen width minus the width defined in within the geometry option.
32 +
    geometry = "350x7-13+32"
33 +
34 +
    # Show how many messages are currently hidden (because of geometry).
35 +
    indicate_hidden = yes
36 +
37 +
    # Shrink window if it's smaller than the width.  Will be ignored if
38 +
    # width is 0.
39 +
    shrink = no
40 +
41 +
    # The transparency of the window.  Range: [0; 100].
42 +
    # This option will only work if a compositing window manager is
43 +
    # present (e.g. xcompmgr, compiz, etc.).
44 +
    transparency = 1
45 +
46 +
    # The height of the entire notification.  If the height is smaller
47 +
    # than the font height and padding combined, it will be raised
48 +
    # to the font height and padding.
49 +
    notification_height = 0
50 +
51 +
    # Draw a line of "separator_height" pixel height between two
52 +
    # notifications.
53 +
    # Set to 0 to disable.
54 +
    separator_height = 2
55 +
56 +
    # Padding between text and separator.
57 +
    padding = 8
58 +
59 +
    # Horizontal padding.
60 +
    horizontal_padding = 8
61 +
62 +
    # Defines width in pixels of frame around the notification window.
63 +
    # Set to 0 to disable.
64 +
    frame_width = 2
65 +
66 +
    # Defines color of the frame around the notification window.
67 +
    frame_color = "#5E81AC"
68 +
69 +
    # Define a color for the separator.
70 +
    # possible values are:
71 +
    #  * auto: dunst tries to find a color fitting to the background;
72 +
    #  * foreground: use the same color as the foreground;
73 +
    #  * frame: use the same color as the frame;
74 +
    #  * anything else will be interpreted as a X color.
75 +
    separator_color = frame
76 +
77 +
    # Sort messages by urgency.
78 +
    sort = yes
79 +
80 +
    # Don't remove messages, if the user is idle (no mouse or keyboard input)
81 +
    # for longer than idle_threshold seconds.
82 +
    # Set to 0 to disable.
83 +
    idle_threshold = 200
84 +
85 +
    ### Text ###
86 +
87 +
    font = SF Pro Display 11
88 +
89 +
    # The spacing between lines.  If the height is smaller than the
90 +
    # font height, it will get raised to the font height.
91 +
    line_height = 1
92 +
93 +
    # Possible values are:
94 +
    # full: Allow a small subset of html markup in notifications:
95 +
    #        <b>bold</b>
96 +
    #        <i>italic</i>
97 +
    #        <s>strikethrough</s>
98 +
    #        <u>underline</u>
99 +
    #
100 +
    #        For a complete reference see
101 +
    #        <http://developer.gnome.org/pango/stable/PangoMarkupFormat.html>.
102 +
    #
103 +
    # strip: This setting is provided for compatibility with some broken
104 +
    #        clients that send markup even though it's not enabled on the
105 +
    #        server. Dunst will try to strip the markup but the parsing is
106 +
    #        simplistic so using this option outside of matching rules for
107 +
    #        specific applications *IS GREATLY DISCOURAGED*.
108 +
    #
109 +
    # no:    Disable markup parsing, incoming notifications will be treated as
110 +
    #        plain text. Dunst will not advertise that it has the body-markup
111 +
    #        capability if this is set as a global setting.
112 +
    #
113 +
    # It's important to note that markup inside the format option will be parsed
114 +
    # regardless of what this is set to.
115 +
     markup = yes
116 +
117 +
    # The format of the message.  Possible variables are:
118 +
    #   %a  appname
119 +
    #   %s  summary
120 +
    #   %b  body
121 +
    #   %i  iconname (including its path)
122 +
    #   %I  iconname (without its path)
123 +
    #   %p  progress value if set ([  0%] to [100%]) or nothing
124 +
    #   %n  progress value if set without any extra characters
125 +
    # Markup is allowed
126 +
    #format = "<b>%s</b>\n%b"
127 +
    format = "<b>%s %p</b>\n%b\n%p"
128 +
129 +
    # Alignment of message text.
130 +
    # Possible values are "left", "center" and "right".
131 +
    alignment = center
132 +
133 +
    # Show age of message if message is older than show_age_threshold
134 +
    # seconds.
135 +
    # Set to -1 to disable.
136 +
    show_age_threshold = 60
137 +
138 +
    # Split notifications into multiple lines if they don't fit into
139 +
    # geometry.
140 +
    word_wrap = yes
141 +
142 +
    # Ignore newlines '\n' in notifications.
143 +
    ignore_newline = no
144 +
145 +
    ellipsize = middle
146 +
147 +
    # Merge multiple notifications with the same content
148 +
    stack_duplicates = true
149 +
150 +
    # Hide the count of merged notifications with the same content
151 +
    hide_duplicate_count = false
152 +
153 +
    # Display indicators for URLs (U) and actions (A).
154 +
    show_indicators = yes
155 +
156 +
    ### Icons ###
157 +
158 +
    # Align icons left/right/off
159 +
    icon_position = left
160 +
161 +
    # Scale larger icons down to this size, set to 0 to disable
162 +
    max_icon_size = 32
163 +
164 +
    # Paths to default icons.
165 +
    icon_path = /usr/share/icons/Papirus-Dark/16x16/status/:/usr/share/icons/Papirus-Dark/16x16/devices/
166 +
167 +
    # Should a notification popped up from history be sticky or timeout
168 +
    # as if it would normally do.
169 +
    sticky_history = yes
170 +
171 +
    # Maximum amount of notifications kept in history
172 +
    history_length = 20
173 +
174 +
    ### Misc/Advanced ###
175 +
176 +
    # dmenu path.
177 +
    dmenu = /usr/bin/dmenu -p dunst:
178 +
179 +
    # Browser for opening urls in context menu.
180 +
    browser = /usr/bin/brave
181 +
182 +
    # Always run rule-defined scripts, even if the notification is suppressed
183 +
    always_run_script = true
184 +
185 +
    # Define the title of the windows spawned by dunst
186 +
    title = Dunst
187 +
188 +
    # Define the class of the windows spawned by dunst
189 +
    class = Dunst
190 +
191 +
    # Print a notification on startup.
192 +
    # This is mainly for error detection, since dbus (re-)starts dunst
193 +
    # automatically after a crash.
194 +
    startup_notification = false
195 +
196 +
    ### Legacy
197 +
198 +
    # Use the Xinerama extension instead of RandR for multi-monitor support.
199 +
    # This setting is provided for compatibility with older nVidia drivers that
200 +
    # do not support RandR and using it on systems that support RandR is highly
201 +
    # discouraged.
202 +
    #
203 +
    # By enabling this setting dunst will not be able to detect when a monitor
204 +
    # is connected or disconnected which might break follow mode if the screen
205 +
    # layout changes.
206 +
    force_xinerama = false
207 +
208 +
# Experimental features that may or may not work correctly. Do not expect them
209 +
# to have a consistent behaviour across releases.
210 +
[experimental]
211 +
    # Calculate the dpi to use on a per-monitor basis.
212 +
    # If this setting is enabled the Xft.dpi value will be ignored and instead
213 +
    # dunst will attempt to calculate an appropriate dpi value for each monitor
214 +
    # using the resolution and physical size. This might be useful in setups
215 +
    # where there are multiple screens with very different dpi values.
216 +
    per_monitor_dpi = false
217 +
218 +
[shortcuts]
219 +
220 +
    # Shortcuts are specified as [modifier+][modifier+]...key
221 +
    # Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
222 +
    # "mod3" and "mod4" (windows-key).
223 +
    # Xev might be helpful to find names for keys.
224 +
225 +
    # Close notification.
226 +
    close = ctrl+space
227 +
228 +
    # Close all notifications.
229 +
    close_all = ctrl+shift+space
230 +
231 +
    # Redisplay last message(s).
232 +
    # On the US keyboard layout "grave" is normally above TAB and left
233 +
    # of "1". Make sure this key actually exists on your keyboard layout,
234 +
    # e.g. check output of 'xmodmap -pke'
235 +
    history = ctrl+mod1+j
236 +
237 +
238 +
[urgency_low]
239 +
    msg_urgency = low
240 +
    background = "#2E344090"
241 +
	foreground = "#D8DEE9"
242 +
	timeout= 4 
243 +
244 +
[urgency_normal]
245 +
	msg_urgency = normal
246 +
	background = "#3B425299"
247 +
	foreground = "#E5E9F0"
248 +
	timeout = 4 
249 +
250 +
[urgency_critical]
251 +
	msg_urgency = critical
252 +
	background = "#2E344099"
253 +
	foreground = "#D08770"
254 +
	timeout = 0 
255 +
256 +
257 +
# Every section that isn't one of the above is interpreted as a rules to
258 +
# override settings for certain messages.
259 +
# Messages can be matched by "appname", "summary", "body", "icon", "category",
260 +
# "msg_urgency" and you can override the "timeout", "urgency", "foreground",
261 +
# "background", "new_icon" and "format".
262 +
# Shell-like globbing will get expanded.
263 +
#
264 +
# SCRIPTING
265 +
# You can specify a script that gets run when the rule matches by
266 +
# setting the "script" option.
267 +
# The script will be called as follows:
268 +
#   script appname summary body icon urgency
269 +
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
270 +
#
271 +
# NOTE: if you don't want a notification to be displayed, set the format
272 +
# to "".
273 +
# NOTE: It might be helpful to run dunst -print in a terminal in order
274 +
# to find fitting options for rules.
275 +
276 +
#[espeak]
277 +
#    summary = "*"
278 +
#    script = dunst_espeak.sh
279 +
280 +
#[script-test]
281 +
#    summary = "*script*"
282 +
#    script = dunst_test.sh
283 +
284 +
#[ignore]
285 +
#    # This notification will not be displayed
286 +
#    summary = "foobar"
287 +
#    format = ""
288 +
289 +
#[history-ignore]
290 +
#    # This notification will not be saved in history
291 +
#    summary = "foobar"
292 +
#    history_ignore = yes
293 +
294 +
#[signed_on]
295 +
#    appname = Pidgin
296 +
#    summary = "*signed on*"
297 +
#    urgency = low
298 +
#
299 +
#[signed_off]
300 +
#    appname = Pidgin
301 +
#    summary = *signed off*
302 +
#    urgency = low
303 +
#
304 +
#[says]
305 +
#    appname = Pidgin
306 +
#    summary = *says*
307 +
#    urgency = critical
308 +
#
309 +
#[twitter]
310 +
#    appname = Pidgin
311 +
#    summary = *twitter.com*
312 +
#    urgency = normal
313 +
#
314 +
315 +
# vim: ft=cfg
fastfetch/archery.jsonc (added) +82 −0
1 +
{
2 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
3 +
    "modules": [
4 +
        {
5 +
            "type": "title",
6 +
            "key": "User",
7 +
            "format": "{user-name}"
8 +
        },
9 +
        {
10 +
            "type": "title",
11 +
            "key": "Hostname",
12 +
            "format": "{host-name}"
13 +
        },
14 +
        {
15 +
            "type": "host",
16 +
            "key": "Model"
17 +
        },
18 +
        {
19 +
            "type": "os",
20 +
            "format": "{pretty-name} {version-id} {arch}"
21 +
        },
22 +
        "kernel",
23 +
        "uptime",
24 +
        {
25 +
            "type": "loadavg",
26 +
            "key": "Load Average"
27 +
        },
28 +
        "processes",
29 +
        {
30 +
            "type": "wm",
31 +
            "key": "Window Manager"
32 +
        },
33 +
        {
34 +
            "type": "de",
35 +
            "key": "Desktop Environment"
36 +
        },
37 +
        "shell",
38 +
        {
39 +
            "type": "terminal",
40 +
            "format": "{pretty-name} {version} {#37}█{#97}█ {#36}█{#96}█ {#35}█{#95}█ {#34}█{#94}█ {#33}█{#93}█ {#32}█{#92}█ {#31}█{#91}█ {#30}█{#90}█"
41 +
        },
42 +
        {
43 +
            "type": "packages",
44 +
            "format": "{all}"
45 +
        },
46 +
        {
47 +
            "type": "cpu",
48 +
            "key": "Temperature",
49 +
            "temp": true,
50 +
            "format": "{temperature}"
51 +
        },
52 +
        {
53 +
            "type": "cpu",
54 +
            "key": "CPU",
55 +
            "format": "{cores-logical} x {name}"
56 +
        },
57 +
        {
58 +
            "type": "gpu",
59 +
            "format": "{name}"
60 +
        },
61 +
        {
62 +
            "type": "memory",
63 +
            "key": "RAM"
64 +
        },
65 +
        {
66 +
            "type": "disk",
67 +
            "key": "Disk",
68 +
            "folders": "/"
69 +
        },
70 +
        {
71 +
            "type": "localip",
72 +
            "key": "LAN IP",
73 +
            "showIpv6": true,
74 +
            "showPrefixLen": false
75 +
        },
76 +
        {
77 +
            "type": "publicip",
78 +
            "key": "WAN IP",
79 +
            "timeout": 1000
80 +
        }
81 +
    ]
82 +
}
fastfetch/config.jsonc (added) +28 −0
1 +
{
2 +
  "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
3 +
  "logo": {
4 +
    "type": "small",
5 +
    "padding": {
6 +
      "top": 1,
7 +
    },
8 +
  },
9 +
  "modules": [
10 +
    "title",
11 +
    "separator",
12 +
    "os",
13 +
    "host",
14 +
    "uptime",
15 +
    "packages",
16 +
    "shell",
17 +
    "theme",
18 +
    "cursor",
19 +
    "terminal",
20 +
    "memory",
21 +
    "disk",
22 +
    "battery",
23 +
    "temperature",
24 +
    "poweradapter",
25 +
    "break",
26 +
    "colors",
27 +
  ],
28 +
}
fastfetch/presets/all.jsonc (added) +108 −0
1 +
{
2 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
3 +
    "logo": {
4 +
        "padding": {
5 +
            "top": 2
6 +
        }
7 +
    },
8 +
    "modules": [
9 +
        "title",
10 +
        "separator",
11 +
        "os",
12 +
        "host",
13 +
        "bios",
14 +
        "bootmgr",
15 +
        "board",
16 +
        "chassis",
17 +
        "kernel",
18 +
        "initsystem",
19 +
        "uptime",
20 +
        "loadavg",
21 +
        "processes",
22 +
        "packages",
23 +
        "shell",
24 +
        "editor",
25 +
        "display",
26 +
        "brightness",
27 +
        "monitor",
28 +
        "lm",
29 +
        "de",
30 +
        "wm",
31 +
        "wmtheme",
32 +
        "theme",
33 +
        "icons",
34 +
        "font",
35 +
        "cursor",
36 +
        "wallpaper",
37 +
        "terminal",
38 +
        "terminalfont",
39 +
        "terminalsize",
40 +
        "terminaltheme",
41 +
        {
42 +
            "type": "cpu",
43 +
            "showPeCoreCount": true,
44 +
            "temp": true
45 +
        },
46 +
        "cpucache",
47 +
        "cpuusage",
48 +
        {
49 +
            "type": "gpu",
50 +
            "driverSpecific": true,
51 +
            "temp": true
52 +
        },
53 +
        "memory",
54 +
        "physicalmemory",
55 +
        "swap",
56 +
        "disk",
57 +
        "btrfs",
58 +
        "zpool",
59 +
        {
60 +
            "type": "battery",
61 +
            "temp": true
62 +
        },
63 +
        "poweradapter",
64 +
        "player",
65 +
        "media",
66 +
        {
67 +
            "type": "publicip",
68 +
            "timeout": 1000
69 +
        },
70 +
        {
71 +
            "type": "localip",
72 +
            "showIpv6": true,
73 +
            "showMac": true,
74 +
            "showSpeed": true,
75 +
            "showMtu": true,
76 +
            "showLoop": true,
77 +
            "showFlags": true,
78 +
            "showAllIps": true
79 +
        },
80 +
        "dns",
81 +
        "wifi",
82 +
        "datetime",
83 +
        "locale",
84 +
        "vulkan",
85 +
        "opengl",
86 +
        "opencl",
87 +
        "users",
88 +
        "bluetooth",
89 +
        "bluetoothradio",
90 +
        "sound",
91 +
        "camera",
92 +
        "gamepad",
93 +
        {
94 +
          "type": "weather",
95 +
          "timeout": 1000
96 +
        },
97 +
        "netio",
98 +
        "diskio",
99 +
        {
100 +
            "type": "physicaldisk",
101 +
            "temp": true
102 +
        },
103 +
        "tpm",
104 +
        "version",
105 +
        "break",
106 +
        "colors"
107 +
    ]
108 +
}
fastfetch/presets/archey.jsonc (added) +82 −0
1 +
{
2 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
3 +
    "modules": [
4 +
        {
5 +
            "type": "title",
6 +
            "key": "User",
7 +
            "format": "{user-name}"
8 +
        },
9 +
        {
10 +
            "type": "title",
11 +
            "key": "Hostname",
12 +
            "format": "{host-name}"
13 +
        },
14 +
        {
15 +
            "type": "host",
16 +
            "key": "Model"
17 +
        },
18 +
        {
19 +
            "type": "os",
20 +
            "format": "{pretty-name} {version-id} {arch}"
21 +
        },
22 +
        "kernel",
23 +
        "uptime",
24 +
        {
25 +
            "type": "loadavg",
26 +
            "key": "Load Average"
27 +
        },
28 +
        "processes",
29 +
        {
30 +
            "type": "wm",
31 +
            "key": "Window Manager"
32 +
        },
33 +
        {
34 +
            "type": "de",
35 +
            "key": "Desktop Environment"
36 +
        },
37 +
        "shell",
38 +
        {
39 +
            "type": "terminal",
40 +
            "format": "{pretty-name} {version} {#37}█{#97}█ {#36}█{#96}█ {#35}█{#95}█ {#34}█{#94}█ {#33}█{#93}█ {#32}█{#92}█ {#31}█{#91}█ {#30}█{#90}█"
41 +
        },
42 +
        {
43 +
            "type": "packages",
44 +
            "format": "{all}"
45 +
        },
46 +
        {
47 +
            "type": "cpu",
48 +
            "key": "Temperature",
49 +
            "temp": true,
50 +
            "format": "{temperature}"
51 +
        },
52 +
        {
53 +
            "type": "cpu",
54 +
            "key": "CPU",
55 +
            "format": "{cores-logical} x {name}"
56 +
        },
57 +
        {
58 +
            "type": "gpu",
59 +
            "format": "{name}"
60 +
        },
61 +
        {
62 +
            "type": "memory",
63 +
            "key": "RAM"
64 +
        },
65 +
        {
66 +
            "type": "disk",
67 +
            "key": "Disk",
68 +
            "folders": "/"
69 +
        },
70 +
        {
71 +
            "type": "localip",
72 +
            "key": "LAN IP",
73 +
            "showIpv6": true,
74 +
            "showPrefixLen": false
75 +
        },
76 +
        {
77 +
            "type": "publicip",
78 +
            "key": "WAN IP",
79 +
            "timeout": 1000
80 +
        }
81 +
    ]
82 +
}
fastfetch/presets/ci.jsonc (added) +110 −0
1 +
{
2 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
3 +
    "display": {
4 +
        "stat": true,
5 +
        "pipe": true,
6 +
        "showErrors": true,
7 +
        "noBuffer": true
8 +
    },
9 +
    "logo": null,
10 +
    "modules": [
11 +
        "title",
12 +
        "separator",
13 +
        "os",
14 +
        "host",
15 +
        "bios",
16 +
        "bootmgr",
17 +
        "board",
18 +
        "chassis",
19 +
        "kernel",
20 +
        "initsystem",
21 +
        "uptime",
22 +
        "loadavg",
23 +
        "processes",
24 +
        "packages",
25 +
        "shell",
26 +
        "editor",
27 +
        "display",
28 +
        "brightness",
29 +
        "monitor",
30 +
        "lm",
31 +
        "de",
32 +
        "wm",
33 +
        "wmtheme",
34 +
        "theme",
35 +
        "icons",
36 +
        "font",
37 +
        "cursor",
38 +
        "wallpaper",
39 +
        "terminal",
40 +
        "terminalfont",
41 +
        "terminalsize",
42 +
        "terminaltheme",
43 +
        {
44 +
            "type": "cpu",
45 +
            "showPeCoreCount": true,
46 +
            "temp": true
47 +
        },
48 +
        "cpucache",
49 +
        "cpuusage",
50 +
        {
51 +
            "type": "gpu",
52 +
            "driverSpecific": true,
53 +
            "temp": true
54 +
        },
55 +
        "memory",
56 +
        "physicalmemory",
57 +
        "swap",
58 +
        "disk",
59 +
        "btrfs",
60 +
        "zpool",
61 +
        {
62 +
            "type": "battery",
63 +
            "temp": true
64 +
        },
65 +
        "poweradapter",
66 +
        "player",
67 +
        "media",
68 +
        {
69 +
            "type": "publicip",
70 +
            "timeout": 1000
71 +
        },
72 +
        {
73 +
            "type": "localip",
74 +
            "showIpv6": true,
75 +
            "showMac": true,
76 +
            "showSpeed": true,
77 +
            "showMtu": true,
78 +
            "showLoop": true,
79 +
            "showFlags": true,
80 +
            "showAllIps": true
81 +
        },
82 +
        "dns",
83 +
        "wifi",
84 +
        "datetime",
85 +
        "locale",
86 +
        "vulkan",
87 +
        "opengl",
88 +
        "opencl",
89 +
        "users",
90 +
        "bluetooth",
91 +
        "bluetoothradio",
92 +
        "sound",
93 +
        "camera",
94 +
        "gamepad",
95 +
        {
96 +
            "type": "weather",
97 +
            "timeout": 1000
98 +
        },
99 +
        "netio",
100 +
        "diskio",
101 +
        {
102 +
            "type": "physicaldisk",
103 +
            "temp": true
104 +
        },
105 +
        "tpm",
106 +
        "version",
107 +
        "break",
108 +
        "colors"
109 +
    ]
110 +
}
fastfetch/presets/examples/10.jsonc (added) +157 −0
1 +
// Load with --load-config examples/2.jsonc
2 +
// Note that you must replace the image path to an existing image to display it.
3 +
4 +
{
5 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
6 +
    "logo": {
7 +
        "padding": {
8 +
            "top": 2
9 +
        }
10 +
    },
11 +
    "display": {
12 +
        "separator": " -> ",
13 +
        "constants": [
14 +
            "──────────────────────────────"
15 +
        ]
16 +
    },
17 +
    "modules": [
18 +
        {
19 +
            "type": "custom",
20 +
            "format": "┌{$1}{$1}┐",
21 +
            "outputColor": "90"
22 +
        },
23 +
        {
24 +
            "type": "title",
25 +
            "keyWidth": 10
26 +
        },
27 +
        {
28 +
            "type": "custom",
29 +
            "format": "└{$1}{$1}┘",
30 +
            "outputColor": "90"
31 +
        },
32 +
        {
33 +
            "type": "custom",
34 +
            "format": " {#90}  {#31}  {#32}  {#33}  {#34}  {#35}  {#36}  {#37}  {#38}  {#39}       {#38}  {#37}  {#36}  {#35}  {#34}  {#33}  {#32}  {#31}  {#90}"
35 +
        },
36 +
        {
37 +
            "type": "custom",
38 +
            "format": "┌{$1}{$1}┐",
39 +
            "outputColor": "90"
40 +
        },
41 +
        {
42 +
            "type": "os",
43 +
            "key": "{icon} OS",
44 +
            "keyColor": "yellow"
45 +
        },
46 +
        {
47 +
            "type": "kernel",
48 +
            "key": "│ ├",
49 +
            "keyColor": "yellow"
50 +
        },
51 +
        {
52 +
            "type": "packages",
53 +
            "key": "│ ├󰏖",
54 +
            "keyColor": "yellow"
55 +
        },
56 +
        {
57 +
            "type": "shell",
58 +
            "key": "│ └",
59 +
            "keyColor": "yellow"
60 +
        },
61 +
        {
62 +
            "type": "wm",
63 +
            "key": " DE/WM",
64 +
            "keyColor": "blue"
65 +
        },
66 +
        {
67 +
            "type": "lm",
68 +
            "key": "│ ├󰧨",
69 +
            "keyColor": "blue"
70 +
        },
71 +
        {
72 +
            "type": "wmtheme",
73 +
            "key": "│ ├󰉼",
74 +
            "keyColor": "blue"
75 +
        },
76 +
        {
77 +
            "type": "icons",
78 +
            "key": "│ ├󰀻",
79 +
            "keyColor": "blue"
80 +
        },
81 +
        {
82 +
            "type": "terminal",
83 +
            "key": "│ ├",
84 +
            "keyColor": "blue"
85 +
        },
86 +
        {
87 +
            "type": "wallpaper",
88 +
            "key": "│ └󰸉",
89 +
            "keyColor": "blue"
90 +
        },
91 +
        {
92 +
            "type": "host",
93 +
            "key": "󰌢 PC",
94 +
            "keyColor": "green"
95 +
        },
96 +
        {
97 +
            "type": "cpu",
98 +
            "key": "│ ├󰻠",
99 +
            "keyColor": "green"
100 +
        },
101 +
        {
102 +
            "type": "gpu",
103 +
            "key": "│ ├󰍛",
104 +
            "keyColor": "green"
105 +
        },
106 +
        {
107 +
            "type": "disk",
108 +
            "key": "│ ├",
109 +
            "keyColor": "green"
110 +
        },
111 +
        {
112 +
            "type": "memory",
113 +
            "key": "│ ├󰑭",
114 +
            "keyColor": "green"
115 +
        },
116 +
        {
117 +
            "type": "swap",
118 +
            "key": "│ ├󰓡",
119 +
            "keyColor": "green"
120 +
        },
121 +
        {
122 +
            "type": "uptime",
123 +
            "key": "│ ├󰅐",
124 +
            "keyColor": "green"
125 +
        },
126 +
        {
127 +
            "type": "display",
128 +
            "key": "│ └󰍹",
129 +
            "keyColor": "green"
130 +
        },
131 +
        {
132 +
            "type": "sound",
133 +
            "key": " SND",
134 +
            "keyColor": "cyan"
135 +
        },
136 +
        {
137 +
            "type": "player",
138 +
            "key": "│ ├󰥠",
139 +
            "keyColor": "cyan"
140 +
        },
141 +
        {
142 +
            "type": "media",
143 +
            "key": "│ └󰝚",
144 +
            "keyColor": "cyan"
145 +
        },
146 +
        {
147 +
            "type": "custom",
148 +
            "format": "└{$1}{$1}┘",
149 +
            "outputColor": "90"
150 +
        },
151 +
        "break",
152 +
        {
153 +
            "type": "custom",
154 +
            "format": " {#90}  {#31}  {#32}  {#33}  {#34}  {#35}  {#36}  {#37}  {#38}  {#39}       {#38}  {#37}  {#36}  {#35}  {#34}  {#33}  {#32}  {#31}  {#90}"
155 +
        }
156 +
    ]
157 +
}
fastfetch/presets/examples/11.jsonc (added) +40 −0
1 +
{
2 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
3 +
    "logo": {
4 +
        "type": "small"
5 +
    },
6 +
    "display": {
7 +
        "separator": "->   ",
8 +
        "color": {
9 +
            "separator": "red"
10 +
        }
11 +
    },
12 +
    "modules": [
13 +
        {
14 +
            "key": "Distro      ",
15 +
            "type": "os"
16 +
        },
17 +
        {
18 +
            "key": "Shell       ",
19 +
            "type": "shell"
20 +
        },
21 +
        {
22 +
            "key": "Terminal    ",
23 +
            "type": "terminal"
24 +
        },
25 +
        {
26 +
            "key": "Display     ",
27 +
            "type": "display"
28 +
        },
29 +
        {
30 +
            "key": "Backlight   ",
31 +
            "type": "brightness"
32 +
        },
33 +
        "break",
34 +
        {
35 +
            "type": "colors",
36 +
            "paddingLeft": 6,
37 +
            "symbol": "circle"
38 +
        }
39 +
    ]
40 +
}
fastfetch/presets/examples/12.jsonc (added) +115 −0
1 +
{
2 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
3 +
    "logo": {
4 +
        "type": "none"
5 +
    },
6 +
    "display": {
7 +
        "separator": "->   ",
8 +
        "color": {
9 +
            "separator": "1" // Bold
10 +
        },
11 +
        "constants": [
12 +
            "───────────────────────────"
13 +
        ],
14 +
        "key": {
15 +
            "type": "both",
16 +
            "paddingLeft": 4
17 +
        }
18 +
    },
19 +
    "modules": [
20 +
        {
21 +
            "type": "title",
22 +
            "format": "                             {user-name-colored}{at-symbol-colored}{host-name-colored}"
23 +
        },
24 +
        "break",
25 +
        {
26 +
            "type": "custom",
27 +
            "format": "┌{$1} {#1}System Information{#} {$1}┐"
28 +
        },
29 +
        "break",
30 +
        {
31 +
            "key": "OS           ",
32 +
            "keyColor": "red",
33 +
            "type": "os"
34 +
        },
35 +
        {
36 +
            "key": "Machine      ",
37 +
            "keyColor": "green",
38 +
            "type": "host"
39 +
        },
40 +
        {
41 +
            "key": "Kernel       ",
42 +
            "keyColor": "magenta",
43 +
            "type": "kernel"
44 +
        },
45 +
        {
46 +
            "key": "Uptime       ",
47 +
            "keyColor": "red",
48 +
            "type": "uptime"
49 +
        },
50 +
        {
51 +
            "key": "Resolution   ",
52 +
            "keyColor": "yellow",
53 +
            "type": "display",
54 +
            "compactType": "original-with-refresh-rate"
55 +
        },
56 +
        {
57 +
            "key": "WM           ",
58 +
            "keyColor": "blue",
59 +
            "type": "wm"
60 +
        },
61 +
        {
62 +
            "key": "DE           ",
63 +
            "keyColor": "green",
64 +
            "type": "de"
65 +
        },
66 +
        {
67 +
            "key": "Shell        ",
68 +
            "keyColor": "cyan",
69 +
            "type": "shell"
70 +
        },
71 +
        {
72 +
            "key": "Terminal     ",
73 +
            "keyColor": "red",
74 +
            "type": "terminal"
75 +
        },
76 +
        {
77 +
            "key": "CPU          ",
78 +
            "keyColor": "yellow",
79 +
            "type": "cpu"
80 +
        },
81 +
        {
82 +
            "key": "GPU          ",
83 +
            "keyColor": "blue",
84 +
            "type": "gpu"
85 +
        },
86 +
        {
87 +
            "key": "Memory       ",
88 +
            "keyColor": "magenta",
89 +
            "type": "memory"
90 +
        },
91 +
        {
92 +
            "key": "Local IP     ",
93 +
            "keyColor": "red",
94 +
            "type": "localip",
95 +
            "compact": true
96 +
        },
97 +
        {
98 +
            "key": "Public IP    ",
99 +
            "keyColor": "cyan",
100 +
            "type": "publicip",
101 +
            "timeout": 1000
102 +
        },
103 +
        "break",
104 +
        {
105 +
            "type": "custom",
106 +
            "format": "└{$1}────────────────────{$1}┘"
107 +
        },
108 +
        "break",
109 +
        {
110 +
            "type": "colors",
111 +
            "paddingLeft": 34,
112 +
            "symbol": "circle"
113 +
        }
114 +
    ]
115 +
}
fastfetch/presets/examples/13.jsonc (added) +85 −0
1 +
// Inspired by Catnap
2 +
{
3 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
4 +
    "logo": {
5 +
        "type": "small",
6 +
        "padding": {
7 +
            "top": 1
8 +
        }
9 +
    },
10 +
    "display": {
11 +
        "separator": " "
12 +
    },
13 +
    "modules": [
14 +
        {
15 +
            "key": "╭───────────╮",
16 +
            "type": "custom"
17 +
        },
18 +
        {
19 +
            "key": "│ {#31} user    {#keys}│",
20 +
            "type": "title",
21 +
            "format": "{user-name}"
22 +
        },
23 +
        {
24 +
            "key": "│ {#32}󰇅 hname   {#keys}│",
25 +
            "type": "title",
26 +
            "format": "{host-name}"
27 +
        },
28 +
        {
29 +
            "key": "│ {#33}󰅐 uptime  {#keys}│",
30 +
            "type": "uptime"
31 +
        },
32 +
        {
33 +
            "key": "│ {#34}{icon} distro  {#keys}│",
34 +
            "type": "os"
35 +
        },
36 +
        {
37 +
            "key": "│ {#35} kernel  {#keys}│",
38 +
            "type": "kernel"
39 +
        },
40 +
        {
41 +
            "key": "│ {#36}󰇄 desktop {#keys}│",
42 +
            "type": "de"
43 +
        },
44 +
        {
45 +
            "key": "│ {#31} term    {#keys}│",
46 +
            "type": "terminal"
47 +
        },
48 +
        {
49 +
            "key": "│ {#32} shell   {#keys}│",
50 +
            "type": "shell"
51 +
        },
52 +
        {
53 +
            "key": "│ {#33}󰍛 cpu     {#keys}│",
54 +
            "type": "cpu",
55 +
            "showPeCoreCount": true
56 +
        },
57 +
        {
58 +
            "key": "│ {#34}󰉉 disk    {#keys}│",
59 +
            "type": "disk",
60 +
            "folders": "/"
61 +
        },
62 +
        {
63 +
            "key": "│ {#35} memory  {#keys}│",
64 +
            "type": "memory"
65 +
        },
66 +
        {
67 +
            "key": "│ {#36}󰩟 network {#keys}│",
68 +
            "type": "localip",
69 +
            "format": "{ipv4} ({ifname})"
70 +
        },
71 +
        {
72 +
            "key": "├───────────┤",
73 +
            "type": "custom"
74 +
        },
75 +
        {
76 +
            "key": "│ {#39} colors  {#keys}│",
77 +
            "type": "colors",
78 +
            "symbol": "circle"
79 +
        },
80 +
        {
81 +
            "key": "╰───────────╯",
82 +
            "type": "custom"
83 +
        }
84 +
    ]
85 +
}
fastfetch/presets/examples/14.jsonc (added) +88 −0
1 +
// Inspired by Catnap
2 +
{
3 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
4 +
    "logo": {
5 +
        "type": "small"
6 +
    },
7 +
    "display": {
8 +
        "separator": "",
9 +
        "key": {
10 +
            "width": 15
11 +
        }
12 +
    },
13 +
    "modules": [
14 +
        {
15 +
            // draw borders first to make colors of left and right border consistant
16 +
            "key": " user",
17 +
            "type": "title",
18 +
            "format": "{user-name}",
19 +
            "keyColor": "31"
20 +
        },
21 +
        {
22 +
            "key": "󰇅 hname",
23 +
            "type": "title",
24 +
            "format": "{host-name}",
25 +
            "keyColor": "32"
26 +
27 +
        },
28 +
        {
29 +
            "key": "󰅐 uptime",
30 +
            "type": "uptime",
31 +
            "keyColor": "33"
32 +
        },
33 +
        {
34 +
            "key": "{icon} distro",
35 +
            "type": "os",
36 +
            "keyColor": "34"
37 +
        },
38 +
        {
39 +
            "key": " kernel",
40 +
            "type": "kernel",
41 +
            "keyColor": "35"
42 +
        },
43 +
        {
44 +
            "key": "󰇄 desktop",
45 +
            "type": "de",
46 +
            "keyColor": "36"
47 +
        },
48 +
        {
49 +
            "key": " term",
50 +
            "type": "terminal",
51 +
            "keyColor": "31"
52 +
        },
53 +
        {
54 +
            "key": " shell",
55 +
            "type": "shell",
56 +
            "keyColor": "32"
57 +
        },
58 +
        {
59 +
            "key": "󰍛 cpu",
60 +
            "type": "cpu",
61 +
            "showPeCoreCount": true,
62 +
            "keyColor": "33"
63 +
        },
64 +
        {
65 +
            "key": "󰉉 disk",
66 +
            "type": "disk",
67 +
            "folders": "/",
68 +
            "keyColor": "34"
69 +
        },
70 +
        {
71 +
            "key": " memory",
72 +
            "type": "memory",
73 +
            "keyColor": "35"
74 +
        },
75 +
        {
76 +
            "key": "󰩟 network",
77 +
            "type": "localip",
78 +
            "format": "{ipv4} ({ifname})",
79 +
            "keyColor": "36"
80 +
        },
81 +
        {
82 +
            "key": " colors",
83 +
            "type": "colors",
84 +
            "symbol": "circle",
85 +
            "keyColor": "39"
86 +
        }
87 +
    ]
88 +
}
fastfetch/presets/examples/15.jsonc (added) +85 −0
1 +
// Inspired by Catnap
2 +
{
3 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
4 +
    "logo": {
5 +
        "type": "small",
6 +
        "padding": {
7 +
            "top": 1
8 +
        }
9 +
    },
10 +
    "display": {
11 +
        "separator": " "
12 +
    },
13 +
    "modules": [
14 +
        {
15 +
            "key": "•••••••••••••",
16 +
            "type": "custom"
17 +
        },
18 +
        {
19 +
            "key": "• {#31} user    {#keys}•",
20 +
            "type": "title",
21 +
            "format": "{user-name}"
22 +
        },
23 +
        {
24 +
            "key": "• {#32}󰇅 hname   {#keys}•",
25 +
            "type": "title",
26 +
            "format": "{host-name}"
27 +
        },
28 +
        {
29 +
            "key": "• {#33}󰅐 uptime  {#keys}•",
30 +
            "type": "uptime"
31 +
        },
32 +
        {
33 +
            "key": "• {#34}{icon} distro  {#keys}•",
34 +
            "type": "os"
35 +
        },
36 +
        {
37 +
            "key": "• {#35} kernel  {#keys}•",
38 +
            "type": "kernel"
39 +
        },
40 +
        {
41 +
            "key": "• {#36}󰇄 desktop {#keys}•",
42 +
            "type": "de"
43 +
        },
44 +
        {
45 +
            "key": "• {#31} term    {#keys}•",
46 +
            "type": "terminal"
47 +
        },
48 +
        {
49 +
            "key": "• {#32} shell   {#keys}•",
50 +
            "type": "shell"
51 +
        },
52 +
        {
53 +
            "key": "• {#33}󰍛 cpu     {#keys}•",
54 +
            "type": "cpu",
55 +
            "showPeCoreCount": true
56 +
        },
57 +
        {
58 +
            "key": "• {#34}󰉉 disk    {#keys}•",
59 +
            "type": "disk",
60 +
            "folders": "/"
61 +
        },
62 +
        {
63 +
            "key": "• {#35} memory  {#keys}•",
64 +
            "type": "memory"
65 +
        },
66 +
        {
67 +
            "key": "• {#36}󰩟 network {#keys}•",
68 +
            "type": "localip",
69 +
            "format": "{ipv4} ({ifname})"
70 +
        },
71 +
        {
72 +
            "key": "•••••••••••••",
73 +
            "type": "custom"
74 +
        },
75 +
        {
76 +
            "key": "• {#39} colors  {#keys}•",
77 +
            "type": "colors",
78 +
            "symbol": "circle"
79 +
        },
80 +
        {
81 +
            "key": "•••••••••••••",
82 +
            "type": "custom"
83 +
        }
84 +
    ]
85 +
}
fastfetch/presets/examples/16.jsonc (added) +85 −0
1 +
// Inspired by Catnap
2 +
{
3 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
4 +
    "logo": {
5 +
        "type": "small",
6 +
        "padding": {
7 +
            "top": 1
8 +
        }
9 +
    },
10 +
    "display": {
11 +
        "separator": " "
12 +
    },
13 +
    "modules": [
14 +
        {
15 +
            "key": "╔═══════════╗",
16 +
            "type": "custom"
17 +
        },
18 +
        {
19 +
            "key": "║ {#31} user    {#keys}║",
20 +
            "type": "title",
21 +
            "format": "{user-name}"
22 +
        },
23 +
        {
24 +
            "key": "║ {#32}󰇅 hname   {#keys}║",
25 +
            "type": "title",
26 +
            "format": "{host-name}"
27 +
        },
28 +
        {
29 +
            "key": "║ {#33}󰅐 uptime  {#keys}║",
30 +
            "type": "uptime"
31 +
        },
32 +
        {
33 +
            "key": "║ {#34}{icon} distro  {#keys}║",
34 +
            "type": "os"
35 +
        },
36 +
        {
37 +
            "key": "║ {#35} kernel  {#keys}║",
38 +
            "type": "kernel"
39 +
        },
40 +
        {
41 +
            "key": "║ {#36}󰇄 desktop {#keys}║",
42 +
            "type": "de"
43 +
        },
44 +
        {
45 +
            "key": "║ {#31} term    {#keys}║",
46 +
            "type": "terminal"
47 +
        },
48 +
        {
49 +
            "key": "║ {#32} shell   {#keys}║",
50 +
            "type": "shell"
51 +
        },
52 +
        {
53 +
            "key": "║ {#33}󰍛 cpu     {#keys}║",
54 +
            "type": "cpu",
55 +
            "showPeCoreCount": true
56 +
        },
57 +
        {
58 +
            "key": "║ {#34}󰉉 disk    {#keys}║",
59 +
            "type": "disk",
60 +
            "folders": "/"
61 +
        },
62 +
        {
63 +
            "key": "║ {#35} memory  {#keys}║",
64 +
            "type": "memory"
65 +
        },
66 +
        {
67 +
            "key": "║ {#36}󰩟 network {#keys}║",
68 +
            "type": "localip",
69 +
            "format": "{ipv4} ({ifname})"
70 +
        },
71 +
        {
72 +
            "key": "╠═══════════╣",
73 +
            "type": "custom"
74 +
        },
75 +
        {
76 +
            "key": "║ {#39} colors  {#keys}║",
77 +
            "type": "colors",
78 +
            "symbol": "circle"
79 +
        },
80 +
        {
81 +
            "key": "╚═══════════╝",
82 +
            "type": "custom"
83 +
        }
84 +
    ]
85 +
}
fastfetch/presets/examples/17.jsonc (added) +87 −0
1 +
{
2 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
3 +
    "logo": {
4 +
        "type": "small",
5 +
        "padding": {
6 +
            "top": 1,
7 +
            "right": 2
8 +
        }
9 +
    },
10 +
    "display": {
11 +
        "separator": ">  ",
12 +
        "color": {
13 +
            "separator": "red"
14 +
        },
15 +
        "constants": [
16 +
            "───────────────────────────────────────────────────────────────────────────",
17 +
            "│\u001b[75C│\u001b[75D"
18 +
        ]
19 +
    },
20 +
    "modules": [
21 +
        {
22 +
            "format": "{#1}{#keys}╭{$1}╮\u001b[76D {user-name-colored}{at-symbol-colored}{host-name-colored} 🖥  ",
23 +
            "type": "title"
24 +
        },
25 +
        {
26 +
            "key": "{$2}{#31} kernel   ",
27 +
            "type": "kernel"
28 +
        },
29 +
        {
30 +
            "key": "{$2}{#32}󰅐 uptime   ",
31 +
            "type": "uptime"
32 +
        },
33 +
        {
34 +
            "key": "{$2}{#33}{icon} distro   ",
35 +
            "type": "os"
36 +
        },
37 +
        {
38 +
            "key": "{$2}{#34}󰇄 desktop  ",
39 +
            "type": "de"
40 +
        },
41 +
        {
42 +
            "key": "{$2}{#35} term     ",
43 +
            "type": "terminal"
44 +
        },
45 +
        {
46 +
            "key": "{$2}{#36} shell    ",
47 +
            "type": "shell"
48 +
        },
49 +
        {
50 +
            "key": "{$2}{#35}󰍛 cpu      ",
51 +
            "type": "cpu",
52 +
            "showPeCoreCount": true,
53 +
            "temp": true
54 +
        },
55 +
        {
56 +
            "key": "{$2}{#34}󰍛 gpu      ",
57 +
            "type": "gpu"
58 +
        },
59 +
        {
60 +
            "key": "{$2}{#33}󰉉 disk     ",
61 +
            "type": "disk",
62 +
            "folders": "/"
63 +
        },
64 +
        {
65 +
            "key": "{$2}{#32} memory   ",
66 +
            "type": "memory"
67 +
        },
68 +
        {
69 +
            "key": "{$2}{#31}󰩟 network  ",
70 +
            "type": "localip",
71 +
            "format": "{ipv4} ({ifname})"
72 +
        },
73 +
        {
74 +
            "format": "{#1}{#keys}├{$1}┤",
75 +
            "type": "custom"
76 +
        },
77 +
        {
78 +
            "key": "{$2}{#39} colors   ",
79 +
            "type": "colors",
80 +
            "symbol": "circle"
81 +
        },
82 +
        {
83 +
            "format": "{#1}{#keys}╰{$1}╯",
84 +
            "type": "custom"
85 +
        }
86 +
    ]
87 +
}
fastfetch/presets/examples/18.jsonc (added) +87 −0
1 +
{
2 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
3 +
    "logo": {
4 +
        "type": "small",
5 +
        "padding": {
6 +
            "top": 1,
7 +
            "right": 2
8 +
        }
9 +
    },
10 +
    "display": {
11 +
        "separator": ">  ",
12 +
        "color": {
13 +
            "separator": "red"
14 +
        },
15 +
        "constants": [
16 +
            "═══════════════════════════════════════════════════════════════════════════",
17 +
            "║\u001b[75C║\u001b[75D"
18 +
        ]
19 +
    },
20 +
    "modules": [
21 +
        {
22 +
            "format": "{#1}{#keys}╔{$1}╗\u001b[76D {user-name-colored}{at-symbol-colored}{host-name-colored} 💻 ",
23 +
            "type": "title"
24 +
        },
25 +
        {
26 +
            "key": "{$2}{#31} kernel   ",
27 +
            "type": "kernel"
28 +
        },
29 +
        {
30 +
            "key": "{$2}{#32}󰅐 uptime   ",
31 +
            "type": "uptime"
32 +
        },
33 +
        {
34 +
            "key": "{$2}{#33}{icon} distro   ",
35 +
            "type": "os"
36 +
        },
37 +
        {
38 +
            "key": "{$2}{#34}󰇄 desktop  ",
39 +
            "type": "de"
40 +
        },
41 +
        {
42 +
            "key": "{$2}{#35} term     ",
43 +
            "type": "terminal"
44 +
        },
45 +
        {
46 +
            "key": "{$2}{#36} shell    ",
47 +
            "type": "shell"
48 +
        },
49 +
        {
50 +
            "key": "{$2}{#35}󰍛 cpu      ",
51 +
            "type": "cpu",
52 +
            "showPeCoreCount": true,
53 +
            "temp": true
54 +
        },
55 +
        {
56 +
            "key": "{$2}{#34}󰍛 gpu      ",
57 +
            "type": "gpu"
58 +
        },
59 +
        {
60 +
            "key": "{$2}{#33}󰉉 disk     ",
61 +
            "type": "disk",
62 +
            "folders": "/"
63 +
        },
64 +
        {
65 +
            "key": "{$2}{#32} memory   ",
66 +
            "type": "memory"
67 +
        },
68 +
        {
69 +
            "key": "{$2}{#31}󰩟 network  ",
70 +
            "type": "localip",
71 +
            "format": "{ipv4} ({ifname})"
72 +
        },
73 +
        {
74 +
            "format": "{#1}{#keys}╠{$1}╣",
75 +
            "type": "custom"
76 +
        },
77 +
        {
78 +
            "key": "{$2}{#39} colors   ",
79 +
            "type": "colors",
80 +
            "symbol": "circle"
81 +
        },
82 +
        {
83 +
            "format": "{#1}{#keys}╚{$1}╝",
84 +
            "type": "custom"
85 +
        }
86 +
    ]
87 +
}
fastfetch/presets/examples/19.jsonc (added) +189 −0
1 +
//   _____ _____ _____ _____ _____ _____ _____ _____ _____
2 +
//  |   __|  _  |   __|_   _|   __|   __|_   _|     |  |  |
3 +
//  |   __|     |__   | | | |   __|   __| | | |   --|     |
4 +
//  |__|  |__|__|_____| |_| |__|  |_____| |_| |_____|__|__|
5 +
//
6 +
//  By CarterLi - https://github.com/CarterLi
7 +
//  Homepage - https://github.com/fastfetch-cli/fastfetch
8 +
//  config.jsonc - ニリ @niri-san
9 +
//  pokemon-colorscripts - https://gitlab.com/phoneybadger/pokemon-colorscripts
10 +
{
11 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
12 +
    "logo": {
13 +
        "source": " _____ _____ _____ _____ _____ _____ _____ _____ _____\n|   __|  _  |   __|_   _|   __|   __|_   _|     |  |  |\n|   __|     |__   | | | |   __|   __| | | |   --|     |\n|__|  |__|__|_____| |_| |__|  |_____| |_| |_____|__|__|",
14 +
        "type": "data",
15 +
        "position": "top",
16 +
        "padding": {
17 +
            "right": 2
18 +
        }
19 +
    },
20 +
    "display": {
21 +
        "separator": " - "
22 +
    },
23 +
    "modules": [
24 +
        {
25 +
            "type": "custom", // HardwareInfo
26 +
            "format": "• {#green}SYSTEM INFORMATION"
27 +
        },
28 +
        {
29 +
            "type": "host",
30 +
            "key": "HOST",
31 +
            "format": "{name}{?vendor} ({vendor}){?}",
32 +
            "keyColor": "green"
33 +
        },
34 +
        {
35 +
            "type": "chassis",
36 +
            "key": "COMPUTER TYPE",
37 +
            "keyColor": "green"
38 +
        },
39 +
        {
40 +
            "type": "cpu",
41 +
            "key": "CPU",
42 +
            "keyColor": "green"
43 +
        },
44 +
        {
45 +
            "type": "gpu",
46 +
            "key": "GPU",
47 +
            "keyColor": "green"
48 +
        },
49 +
        {
50 +
            "type": "memory",
51 +
            "key": "MEMORY USED",
52 +
            "keyColor": "green"
53 +
        },
54 +
        {
55 +
            "type": "swap",
56 +
            "key": "SWAP USED",
57 +
            "keyColor": "green"
58 +
        },
59 +
        {
60 +
            "type": "disk",
61 +
            "key": "DISK",
62 +
            "folders": "/",
63 +
            "keyColor": "green"
64 +
        },
65 +
        {
66 +
            "type": "custom", // SoftwareInfo
67 +
            "format": "• {#red}SOFTWARE INFORMATION"
68 +
        },
69 +
        {
70 +
            "type": "os",
71 +
            "key": "DISTRO",
72 +
            "keyColor": "red"
73 +
        },
74 +
        {
75 +
            "type": "disk",
76 +
            "folders": "/", // Use "/System/Volumes/VM" or something else on macOS
77 +
            "format": "{create-time}",
78 +
            "key": "INSTALLED DATE",
79 +
            "keyColor": "red"
80 +
        },
81 +
        {
82 +
            "type": "kernel",
83 +
            "key": "KERNEL",
84 +
            "keyColor": "red"
85 +
        },
86 +
        {
87 +
            "type": "packages",
88 +
            "key": "PACKAGES",
89 +
            "keyColor": "red"
90 +
        },
91 +
        {
92 +
            "type": "uptime",
93 +
            "key": "UPTIME",
94 +
            "keyColor": "red"
95 +
        },
96 +
        {
97 +
            "type": "custom", // DisplayInfo
98 +
            "format": "• {#blue}DISPLAY INFORMATION"
99 +
        },
100 +
        {
101 +
            "type": "de",
102 +
            "key": "DESKTOP ENVIRONMENT",
103 +
            "keyColor": "blue"
104 +
        },
105 +
        {
106 +
            "type": "lm",
107 +
            "key": "LOGIN MANAGER",
108 +
            "format": "{type}",
109 +
            "keyColor": "blue"
110 +
        },
111 +
        {
112 +
            "type": "wm",
113 +
            "key": "WM",
114 +
            "keyColor": "blue"
115 +
        },
116 +
        {
117 +
            "type": "wmtheme",
118 +
            "key": "WM THEME",
119 +
            "keyColor": "blue"
120 +
        },
121 +
        {
122 +
            "type": "display",
123 +
            "key": "MONITOR ({name})",
124 +
            "keyColor": "blue",
125 +
            "format": "{width}x{height} @ {refresh-rate} Hz - {physical-width}x{physical-height} mm ({inch} inches, {ppi} ppi)"
126 +
        },
127 +
        {
128 +
            "type": "custom", // DesignInfo
129 +
            "format": "• {#yellow}DESIGN INFORMATION"
130 +
        },
131 +
        {
132 +
            "type": "wallpaper",
133 +
            "key": "WALLPAPER",
134 +
            "keyColor": "yellow"
135 +
        },
136 +
        {
137 +
            "type": "theme",
138 +
            "key": "KDE THEME",
139 +
            "format": "{1}",
140 +
            "keyColor": "yellow"
141 +
        },
142 +
        {
143 +
            "type": "icons",
144 +
            "key": "ICON THEME",
145 +
            "format": "{1}",
146 +
            "keyColor": "yellow"
147 +
        },
148 +
        {
149 +
            "type": "font",
150 +
            "key": "FONT",
151 +
            "format": "{?1}{1} [Qt]{?}{/1}Unknown", // Remove "[Qt]" if not using Qt
152 +
            "keyColor": "yellow"
153 +
        },
154 +
        {
155 +
            "type": "terminalfont",
156 +
            "key": "TERMINAL FONT",
157 +
            "keyColor": "yellow"
158 +
        },
159 +
        {
160 +
            "type": "cursor",
161 +
            "key": "CURSOR",
162 +
            "keyColor": "yellow"
163 +
        },
164 +
        {
165 +
            "type": "custom", // OtherInfo
166 +
            "format": "• {#cyan}VARIOUS INFORMATION"
167 +
        },
168 +
        {
169 +
            "type": "media",
170 +
            "key": "NOW PLAYING",
171 +
            "format": "{?artist}{artist} - {?}{title}",
172 +
            "keyColor": "cyan"
173 +
        },
174 +
        {
175 +
            "type": "weather",
176 +
            "key": "WEATHER",
177 +
            "timeout": 1000,
178 +
            "keyColor": "cyan"
179 +
        },
180 +
        {
181 +
            "type": "version",
182 +
            "key": "INFO",
183 +
            "keyColor": "cyan"
184 +
        },
185 +
        "break",
186 +
        "colors",
187 +
        "break"
188 +
    ]
189 +
}
fastfetch/presets/examples/2.jsonc (added) +88 −0
1 +
// Load with --load-config examples/2.jsonc
2 +
// Note that you must replace the image path to an existing image to display it.
3 +
4 +
{
5 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
6 +
    // "logo": {
7 +
    //     "type": "iterm",
8 +
    //     "source": "~/Desktop/apple1.png",
9 +
    //     "width": 28,
10 +
    //     "height": 12
11 +
    // },
12 +
    "display": {
13 +
        "separator": "  ",
14 +
        "constants": [
15 +
            "─────────────────" // {$1}, used in Custom module
16 +
        ],
17 +
        "key": {
18 +
            "type": "icon",
19 +
            "paddingLeft": 2
20 +
        }
21 +
    },
22 +
    "modules": [
23 +
        {
24 +
            "type": "custom", // HardwareStart
25 +
            // {#1} is equivalent to `\u001b[1m`. {#} is equivalent to `\u001b[m`
26 +
            "format": "┌{$1} {#1}Hardware Information{#} {$1}┐"
27 +
        },
28 +
        "host",
29 +
        "cpu",
30 +
        "gpu",
31 +
        "disk",
32 +
        "memory",
33 +
        "swap",
34 +
        "display",
35 +
        "brightness",
36 +
        "battery",
37 +
        "poweradapter",
38 +
        "bluetooth",
39 +
        "sound",
40 +
        "gamepad",
41 +
        {
42 +
            "type": "custom", // SoftwareStart
43 +
            "format": "├{$1} {#1}Software Information{#} {$1}┤"
44 +
        },
45 +
        {
46 +
            "type": "title",
47 +
            "keyIcon": "",
48 +
            "key": "Title", // Title module has no key by default, so that icon is not displayed
49 +
            "format": "{user-name}@{host-name}"
50 +
        },
51 +
        "os",
52 +
        "kernel",
53 +
        "lm",
54 +
        "de",
55 +
        "wm",
56 +
        "shell",
57 +
        "terminal",
58 +
        "terminalfont",
59 +
        "theme",
60 +
        "icons",
61 +
        "wallpaper",
62 +
        "packages",
63 +
        "uptime",
64 +
        "media",
65 +
        {
66 +
            "type": "localip",
67 +
            "compact": true
68 +
        },
69 +
        {
70 +
            "type": "publicip",
71 +
            "timeout": 1000
72 +
        },
73 +
        {
74 +
            "type": "wifi",
75 +
            "format": "{ssid}"
76 +
        },
77 +
        "locale",
78 +
        {
79 +
            "type": "custom", // InformationEnd
80 +
            "format": "└{$1}──────────────────────{$1}┘"
81 +
        },
82 +
        {
83 +
            "type": "colors",
84 +
            "paddingLeft": 2,
85 +
            "symbol": "circle"
86 +
        }
87 +
    ]
88 +
}
fastfetch/presets/examples/20.jsonc (added) +147 −0
1 +
// Inspired by https://github.com/usgraphics/TR-100
2 +
{
3 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
4 +
    "logo": null,
5 +
    "display": {
6 +
        "pipe": true,
7 +
        "key": {
8 +
            "width": 16
9 +
        },
10 +
        "separator": "│ ",
11 +
        "percent": {
12 +
            "type": 6
13 +
        },
14 +
        "bar": {
15 +
            "border": {
16 +
        "left": "",
17 +
        "right": "",
18 +
            
19 +
            },
20 +
            "char": {
21 +
              "elapsed": "█",
22 +
            },
23 +
            "charTotal": "░",
24 +
            "width": 40
25 +
        },
26 +
        "constants": [
27 +
            "\u001b[42C"
28 +
        ]
29 +
    },
30 +
    "modules": [
31 +
        {
32 +
            "type": "custom",
33 +
            "format": "┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐"
34 +
        },
35 +
        {
36 +
            "type": "custom",
37 +
            "format": "├┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┤"
38 +
        },
39 +
        {
40 +
            "type": "custom",
41 +
            "format": "│                 TR-100 MACHINE REPORT                 │"
42 +
        },
43 +
        {
44 +
            "type": "custom",
45 +
            "format": "├────────────┬──────────────────────────────────────────┤"
46 +
        },
47 +
        {
48 +
            "type": "os",
49 +
            "key": "│ OS         │{$1}"
50 +
        },
51 +
        {
52 +
            "type": "kernel",
53 +
            "key": "│ KERNEL     │{$1}"
54 +
        },
55 +
        {
56 +
            "type": "custom",
57 +
            "format": "├────────────┼──────────────────────────────────────────┤"
58 +
        },
59 +
        {
60 +
            "type": "title",
61 +
            "key": "│ HOSTNAME   │{$1}",
62 +
            "format": "{host-name}"
63 +
        },
64 +
        {
65 +
            "type": "title",
66 +
            "key": "│ USER       │{$1}",
67 +
            "format": "{user-name}"
68 +
        },
69 +
        {
70 +
            "type": "host",
71 +
            "key": "│ MACHINE    │{$1}",
72 +
            "format": "MacBook Pro"
73 +
        },
74 +
        {
75 +
            "type": "custom",
76 +
            "format": "├────────────┼──────────────────────────────────────────┤"
77 +
        },
78 +
        {
79 +
            "type": "cpu",
80 +
            "key": "│ PROCESSOR  │{$1}",
81 +
            "format": "{name}"
82 +
        },
83 +
        {
84 +
            "type": "cpu",
85 +
            "key": "│ CORES      │{$1}",
86 +
            "format": "{cores-physical} PHYSICAL CORES / {cores-logical} THREADS",
87 +
            "showPeCoreCount": false
88 +
        },
89 +
        {
90 +
            "type": "cpu",
91 +
            "key": "│ CPU FREQ   │{$1}",
92 +
            "format": "{freq-max}{/freq-max}{freq-base}{/}"
93 +
        },
94 +
        {
95 +
            "type": "loadavg",
96 +
            "compact": false,
97 +
            "key": "│ LOAD  {duration>2}m  │{$1}" // pad duration to 2 chars
98 +
        },
99 +
        {
100 +
            "type": "custom",
101 +
            "format": "├────────────┼──────────────────────────────────────────┤"
102 +
        },
103 +
        {
104 +
            "type": "memory",
105 +
            "key": "│ MEMORY     │{$1}",
106 +
            "format": "{used} / {total} [{percentage}]"
107 +
        },
108 +
        {
109 +
            "type": "memory",
110 +
            "key": "│ USAGE      │{$1}",
111 +
            "format": ""
112 +
        },
113 +
        {
114 +
            "type": "custom",
115 +
            "format": "├────────────┼──────────────────────────────────────────┤"
116 +
        },
117 +
        {
118 +
            "type": "disk",
119 +
            "key": "│ VOLUME     │{$1}",
120 +
            "format": "{size-used} / {size-total} [{size-percentage}]",
121 +
            "folders": "/"
122 +
        },
123 +
        {
124 +
            "type": "disk",
125 +
            "key": "│ DISK USAGE │{$1}",
126 +
            "format": ""
127 +
        },
128 +
        {
129 +
            "type": "custom",
130 +
            "format": "├────────────┼──────────────────────────────────────────┤"
131 +
        },
132 +
        {
133 +
            "type": "users",
134 +
            "key": "│ LAST LOGIN │{$1}",
135 +
            "format": "{login-time}{?client-ip} ({client-ip})",
136 +
            "myselfOnly": true
137 +
        },
138 +
        {
139 +
            "type": "uptime",
140 +
            "key": "│ UPTIME     │{$1}"
141 +
        },
142 +
        {
143 +
            "type": "custom",
144 +
            "format": "└────────────┴──────────────────────────────────────────┘"
145 +
        }
146 +
    ]
147 +
  }
fastfetch/presets/examples/21.jsonc (added) +48 −0
1 +
{
2 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
3 +
    "logo": {
4 +
        "type": "small"
5 +
    },
6 +
    "display": {
7 +
        "constants": [
8 +
            "██ "
9 +
        ]
10 +
    },
11 +
    "modules": [
12 +
        {
13 +
            "key": "{$1}Distro",
14 +
            "keyColor": "38;5;210",
15 +
            "type": "os"
16 +
        },
17 +
        {
18 +
            "key": "{$1}Kernel",
19 +
            "keyColor": "38;5;84",
20 +
            "type": "kernel"
21 +
        },
22 +
        {
23 +
            "key": "{$1}Shell",
24 +
            "keyColor": "38;5;147",
25 +
            "type": "shell"
26 +
        },
27 +
        {
28 +
            "key": "{$1}Packages",
29 +
            "keyColor": "38;5;200",
30 +
            "type": "packages"
31 +
        },
32 +
        {
33 +
            "key": "{$1}WM",
34 +
            "keyColor": "38;5;44",
35 +
            "type": "wm"
36 +
        },
37 +
        {
38 +
            "key": "{$1}CPU",
39 +
            "keyColor": "38;5;75",
40 +
            "type": "cpu"
41 +
        },
42 +
        {
43 +
            "key": "{$1}Memory",
44 +
            "keyColor": "38;5;123",
45 +
            "type": "memory"
46 +
        }
47 +
    ]
48 +
}
fastfetch/presets/examples/22.jsonc (added) +113 −0
1 +
// Designed for Arch Linux
2 +
// Modified from: https://github.com/fastfetch-cli/fastfetch/pull/1025#issuecomment-2177566138
3 +
{
4 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
5 +
    "logo": {
6 +
        "source": "arch3",
7 +
        "color": {
8 +
            "1": "red",
9 +
            "2": "yellow"
10 +
        }
11 +
    },
12 +
    "display": {
13 +
        "color": {
14 +
            "separator": "blue"
15 +
        },
16 +
        "separator": " | ",
17 +
        "constants": [
18 +
            ">-----------<+>---------------------------------------------<"
19 +
        ]
20 +
    },
21 +
    "modules": [
22 +
        {
23 +
            "type": "kernel",
24 +
            "key": " /\\rch Linux",
25 +
            "keyColor": "magenta"
26 +
        },
27 +
        {
28 +
            "type": "custom",
29 +
            "format": "{$1}",
30 +
            "outputColor": "separator"
31 +
        },
32 +
        {
33 +
            "type": "uptime",
34 +
            "key": "   Uptime   ",
35 +
            "keyColor": "green"
36 +
        },
37 +
        {
38 +
            "type": "shell",
39 +
            "key": "   Shell    ",
40 +
            "keyColor": "green"
41 +
        },
42 +
        {
43 +
            "type": "terminal",
44 +
            "key": "   Terminal ",
45 +
            "keyColor": "green"
46 +
        },
47 +
        {
48 +
            "type": "terminalfont",
49 +
            "key": "   Font     ",
50 +
            "keyColor": "green"
51 +
        },
52 +
        {
53 +
            "type": "packages",
54 +
            "key": "   Packages ",
55 +
            "keyColor": "green"
56 +
        },
57 +
        {
58 +
            "type": "localip",
59 +
            "key": "   Local IP ",
60 +
            "keyColor": "green"
61 +
        },
62 +
        {
63 +
            "type": "custom",
64 +
            "format": "{$1}",
65 +
            "outputColor": "separator"
66 +
        },
67 +
        {
68 +
            "type": "display",
69 +
            "key": "   Display  ",
70 +
            "keyColor": "cyan"
71 +
        },
72 +
        {
73 +
            "type": "cpu",
74 +
            "key": "   CPU      ",
75 +
            "keyColor": "cyan"
76 +
        },
77 +
        {
78 +
            "type": "gpu",
79 +
            "key": "   GPU      ",
80 +
            "keyColor": "cyan"
81 +
        },
82 +
        {
83 +
            "type": "memory",
84 +
            "key": "   RAM      ",
85 +
            "keyColor": "cyan"
86 +
        },
87 +
        {
88 +
            "type": "swap",
89 +
            "key": "   SWAP     ",
90 +
            "keyColor": "cyan"
91 +
        },
92 +
        {
93 +
            "type": "disk",
94 +
            "key": "   Disk     ",
95 +
            "keyColor": "cyan"
96 +
        },
97 +
        {
98 +
            "type": "battery",
99 +
            "key": "   Battery  ",
100 +
            "keyColor": "cyan"
101 +
        },
102 +
        {
103 +
            "type": "custom",
104 +
            "format": "{$1}",
105 +
            "outputColor": "separator"
106 +
        },
107 +
        "break",
108 +
        {
109 +
            "type": "colors",
110 +
            "paddingLeft": 15
111 +
        }
112 +
    ]
113 +
}
fastfetch/presets/examples/23.jsonc (added) +63 −0
1 +
// designed for presenting Vanilla Linux
2 +
// inspired from imstilllearnin's Vanilla Logo Ultra
3 +
{
4 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
5 +
    "logo": {
6 +
        "type": "small"
7 +
    },
8 +
    "display": {
9 +
        "color": {
10 +
            "output": "cyan"
11 +
        },
12 +
        "separator": ""
13 +
    },
14 +
    "modules": [
15 +
        {
16 +
            "type": "kernel",
17 +
            "key": "[_Kernel___> ",
18 +
            "keyColor": "blue"
19 +
        },
20 +
        {
21 +
            "type": "packages",
22 +
            "outputColor": "white",
23 +
            "key": " [_Packages_> ",
24 +
            "keyColor": "green"
25 +
        },
26 +
        {
27 +
            "type": "localip",
28 +
            "outputColor": "white",
29 +
            "key": " [_Local_IP_> ",
30 +
            "keyColor": "green"
31 +
        },
32 +
        {
33 +
            "type": "memory",
34 +
            "format": "[{3}] {1} / {2}",
35 +
            "key": " [_RAM______> ",
36 +
            "keyColor": "magenta"
37 +
        },
38 +
        {
39 +
            "type": "swap",
40 +
            "format": "[{3}] {1} / {2}",
41 +
            "key": " [_SWAP_____> ",
42 +
            "keyColor": "magenta"
43 +
        },
44 +
        {
45 +
            "type": "disk",
46 +
            "format": "[{3}] {1} / {2} {9}",
47 +
            "key": " [_Disk_____> ",
48 +
            "keyColor": "magenta"
49 +
        },
50 +
        {
51 +
            "type": "battery",
52 +
            "format": "[{4}] {5}",
53 +
            "key": " [_Battery__> ",
54 +
            "keyColor": "magenta"
55 +
        },
56 +
        "break",
57 +
        {
58 +
            "type": "colors",
59 +
            "paddingLeft": 9,
60 +
            "symbol": "circle"
61 +
        }
62 +
    ]
63 +
}
fastfetch/presets/examples/24.jsonc (added) +152 −0
1 +
// By jan-rex
2 +
// Modified from: https://github.com/fastfetch-cli/fastfetch/discussions/1269
3 +
{
4 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
5 +
    "logo": {
6 +
      "padding": {
7 +
        "top": 2
8 +
      }
9 +
    },
10 +
    "display": {
11 +
      "separator": "",
12 +
      "constants": [
13 +
        // CONSTANT {$1} - COLOR BACKGROUND FOR KEY
14 +
        "\u001b[48;2;43;43;69m",
15 +
        // CONSTANT {$2} - COLOR BACKGROUND FOR OUTPUT
16 +
        "\u001b[48;2;56;59;78m",
17 +
        // CONSTANT {$3} - VERTICAL BARS AT START AND 75th CHARACTERS FORWARD AND BACKWARD
18 +
        "\u001b[90m│                                                            │\u001b[60D\u001b[39m",
19 +
      ]
20 +
    },
21 +
    "modules": [
22 +
      // CUSTOM - Top UI bar
23 +
      {
24 +
        "type": "custom",
25 +
        "key": "{#90}{$1}╭─────────────╮",
26 +
        "format": "{#90}{$2}╭────────────────────────────────────────────────────────────╮",
27 +
      },
28 +
      {
29 +
        "type": "title",
30 +
        "key": "{#90}{$1}│ {#92}User        {#90}│",
31 +
        "format": "{$2}{$3}{user-name} {#2}[{home-dir}]"
32 +
      },
33 +
      {
34 +
        "type": "users",
35 +
        "key": "{#90}{$1}│ {#92}Users       {#90}│",
36 +
        "myselfOnly": false,
37 +
        "format": "{$2}{$3}{1}@{host-name}{/host-name}localhost{/}{?client-ip}  {#2}[IP:{client-ip}]{?}  {#2}[Login time: {login-time}]",
38 +
      },
39 +
      {
40 +
        "type": "datetime",
41 +
        "key": "{#90}{$1}│ {#92}Datetime    {#90}│",
42 +
        "format": "{$2}{$3}{year}-{month-pretty}-{day-in-month}  {hour-pretty}:{minute-pretty}:{second-pretty}  {#2}{weekday}  {#2}[W{week}] {#2}[UTC{offset-from-utc}]"
43 +
      },
44 +
      {
45 +
        "type": "title",
46 +
        "key": "{#90}{$1}│ {#93}Host:       {#90}│",
47 +
        "format": "{$2}{$3}{#1}{#36}{host-name}"
48 +
      },
49 +
      {
50 +
        "type": "host",
51 +
        "key": "{#90}{$1}│ {#93}Machine     {#90}│",
52 +
        "format": "{$2}{$3}{name} {#2}{version}"
53 +
      },
54 +
      {
55 +
        "type": "os",
56 +
        "key": "{#90}{$1}│ {#93}OS          {#90}│",
57 +
        "format": "{$2}{$3}{pretty-name} {codename} {#2}[v{version}] {#2}[{arch}]"
58 +
      },
59 +
      {
60 +
        "type": "kernel",
61 +
        "key": "{#90}{$1}│ {#93}Kernel      {#90}│",
62 +
        "format": "{$2}{$3}{sysname} {#2}[v{release}]"
63 +
      },
64 +
      {
65 +
        "type": "uptime",
66 +
        "key": "{#90}{$1}│ {#93}Uptime      {#90}│",
67 +
        "format": "{$2}{$3}{?days}{days} Days + {?}{hours}:{minutes}:{seconds}"
68 +
      },
69 +
      {
70 +
        "type": "cpu",
71 +
        "key": "{#90}{$1}│ {#91}CPU         {#90}│",
72 +
        "showPeCoreCount": true,
73 +
        "temp": true,
74 +
        "format": "{$2}{$3}{name} {#2}[C:{core-types}] {#2}[{freq-max}]"
75 +
      },
76 +
      {
77 +
        "type": "gpu",
78 +
        "key": "{#90}{$1}│ {#91}GPU         {#90}│",
79 +
        "detectionMethod": "auto",
80 +
        "driverSpecific": true,
81 +
        "format": "{$2}{$3}{name} {#2}[C:{core-count}] {#2}[{type}]"
82 +
      },
83 +
      {
84 +
        "type": "memory",
85 +
        "key": "{#90}{$1}│ {#91}Memory      {#90}│",
86 +
        "format": "{$2}{$3}{used} / {total} ({percentage}{$2})"
87 +
      },
88 +
      {
89 +
        "type": "disk",
90 +
        "key": "{#90}{$1}│ {#91}Disk        {#90}│",
91 +
        "format": "{$2}{$3}{size-used} / {size-total} ({size-percentage}{$2})"
92 +
      },
93 +
      {
94 +
        "type": "poweradapter",
95 +
        "key": "{#90}{$1}│ {#91}Power       {#90}│",
96 +
        "format": "{$2}{$3}{name}"
97 +
      },
98 +
      {
99 +
        "type": "terminal",
100 +
        "key": "{#90}{$1}│ {#95}Terminal    {#90}│",
101 +
        "format": "{$2}{$3}{pretty-name} {#2}[{version}] [PID:{pid}]"
102 +
      },
103 +
      {
104 +
        "type": "terminalfont",
105 +
        "key": "{#90}{$1}│ {#95}Font        {#90}│",
106 +
        "format": "{$2}{$3}{name}  {#2}[{size}]"
107 +
      },
108 +
      {
109 +
        "type": "shell",
110 +
        "key": "{#90}{$1}│ {#95}Shell       {#90}│",
111 +
        "format": "{$2}{$3}{pretty-name}  {#2}[v{version}] [PID:{pid}]"
112 +
      },
113 +
      {
114 +
        // localip IPv4
115 +
        "type": "localip",
116 +
        "key": "{#90}{$1}│ {#94}Local IPv4  {#90}│",
117 +
        "showPrefixLen": true,
118 +
        "showIpv4": true,
119 +
        "showIpv6": false,
120 +
        "showMtu": true,
121 +
        "format": "{$2}{$3}{ifname}: {ipv4}  {#2}[MTU:{mtu}]"
122 +
      },
123 +
      {
124 +
        // localip IPv6
125 +
        "type": "localip",
126 +
        "key": "{#90}{$1}│ {#94}Local IPv6  {#90}│",
127 +
        "showPrefixLen": true,
128 +
        "showIpv4": false,
129 +
        "showIpv6": true,
130 +
        "showMtu": true,
131 +
        "format": "{$2}{$3}{ifname}: {ipv6}  {#2}[MTU:{mtu}]"
132 +
      },
133 +
      {
134 +
        "type": "publicip",
135 +
        "key": "{#90}{$1}│ {#94}Public IPv4 {#90}│",
136 +
        "ipv6": false,
137 +
        "format": "{$2}{$3}{ip}  {#2}[{location}]"
138 +
      },
139 +
      {
140 +
        "type": "publicip",
141 +
        "key": "{#90}{$1}│ {#94}Public IPv6 {#90}│",
142 +
        "ipv6": true,
143 +
        "format": "{$2}{$3}{ip}  {#2}[{location}]"
144 +
      },
145 +
      // CUSTOM - Button UI bar
146 +
      {
147 +
        "type": "custom",
148 +
        "key": "{#90}{$1}╰─────────────╯",
149 +
        "format": "{#90}{$2}╰────────────────────────────────────────────────────────────╯",
150 +
      }
151 +
    ]
152 +
  }
fastfetch/presets/examples/3.jsonc (added) +24 −0
1 +
// Load with --load-config examples/3.jsonc
2 +
3 +
{
4 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
5 +
    "logo": {
6 +
        "type": "small"
7 +
    },
8 +
    "display": {
9 +
        "size": {
10 +
            "binaryPrefix": "si"
11 +
        }
12 +
    },
13 +
    "modules": [
14 +
        "vulkan",
15 +
        "opengl",
16 +
        "opencl",
17 +
        "memory",
18 +
        {
19 +
            "type": "disk",
20 +
            "folders": "/:/home:/boot:/efi"
21 +
        },
22 +
        "localip"
23 +
    ]
24 +
}
fastfetch/presets/examples/4.jsonc (added) +33 −0
1 +
// Load with --load-config examples/4.jsonc
2 +
3 +
{
4 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
5 +
    "logo": {
6 +
        "type": "small",
7 +
        "padding": {
8 +
            "right": 1
9 +
        }
10 +
    },
11 +
    "display": {
12 +
        "size": {
13 +
            "binaryPrefix": "si"
14 +
        },
15 +
        "color": "blue",
16 +
        "separator": "  "
17 +
    },
18 +
    "modules": [
19 +
        {
20 +
            "type": "datetime",
21 +
            "key": "Date",
22 +
            "format": "{1}-{3}-{11}"
23 +
        },
24 +
        {
25 +
            "type": "datetime",
26 +
            "key": "Time",
27 +
            "format": "{14}:{17}:{20}"
28 +
        },
29 +
        "break",
30 +
        "player",
31 +
        "media"
32 +
    ]
33 +
}
fastfetch/presets/examples/5.jsonc (added) +27 −0
1 +
// Load with --load-config examples/5.jsonc
2 +
3 +
{
4 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
5 +
    "logo": null,
6 +
    "display": {
7 +
        "color": "magenta"
8 +
    },
9 +
    "modules": [
10 +
        {
11 +
            "type": "theme",
12 +
            "key": "T"
13 +
        },
14 +
        {
15 +
            "type": "icons",
16 +
            "key": "I"
17 +
        },
18 +
        {
19 +
            "type": "font",
20 +
            "key": "F"
21 +
        },
22 +
        {
23 +
            "type": "cursor",
24 +
            "key": "C"
25 +
        }
26 +
    ]
27 +
}
fastfetch/presets/examples/6.jsonc (added) +179 −0
1 +
// Load with --load-config examples/2.jsonc
2 +
// Note that you must replace the image path to an existing image to display it.
3 +
4 +
{
5 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
6 +
    "display": {
7 +
        "separator": " "
8 +
    },
9 +
    "modules": [
10 +
        {
11 +
            "type": "host",
12 +
            "key": "╭─󰌢",
13 +
            "keyColor": "green"
14 +
        },
15 +
        {
16 +
            "type": "cpu",
17 +
            "key": "├─󰻠",
18 +
            "keyColor": "green"
19 +
        },
20 +
        {
21 +
            "type": "gpu",
22 +
            "key": "├─󰍛",
23 +
            "keyColor": "green"
24 +
        },
25 +
        {
26 +
            "type": "disk",
27 +
            "key": "├─",
28 +
            "keyColor": "green"
29 +
        },
30 +
        {
31 +
            "type": "memory",
32 +
            "key": "├─󰑭",
33 +
            "keyColor": "green"
34 +
        },
35 +
        {
36 +
            "type": "swap",
37 +
            "key": "├─󰓡",
38 +
            "keyColor": "green"
39 +
        },
40 +
        {
41 +
            "type": "display",
42 +
            "key": "├─󰍹",
43 +
            "keyColor": "green"
44 +
        },
45 +
        {
46 +
            "type": "brightness",
47 +
            "key": "├─󰃞",
48 +
            "keyColor": "green"
49 +
        },
50 +
        {
51 +
            "type": "battery",
52 +
            "key": "├─",
53 +
            "keyColor": "green"
54 +
        },
55 +
        {
56 +
            "type": "poweradapter",
57 +
            "key": "├─",
58 +
            "keyColor": "green"
59 +
        },
60 +
        {
61 +
            "type": "gamepad",
62 +
            "key": "├─",
63 +
            "keyColor": "green"
64 +
        },
65 +
        {
66 +
            "type": "bluetooth",
67 +
            "key": "├─",
68 +
            "keyColor": "green"
69 +
        },
70 +
        {
71 +
            "type": "sound",
72 +
            "key": "╰─",
73 +
            "keyColor": "green"
74 +
        },
75 +
        "break",
76 +
77 +
        {
78 +
            "type": "shell",
79 +
            "key": "╭─",
80 +
            "keyColor": "yellow"
81 +
        },
82 +
        {
83 +
            "type": "terminal",
84 +
            "key": "├─",
85 +
            "keyColor": "yellow"
86 +
        },
87 +
        {
88 +
            "type": "terminalfont",
89 +
            "key": "├─",
90 +
            "keyColor": "yellow"
91 +
        },
92 +
        {
93 +
            "type": "lm",
94 +
            "key": "├─󰧨",
95 +
            "keyColor": "yellow"
96 +
        },
97 +
        {
98 +
            "type": "de",
99 +
            "key": "├─",
100 +
            "keyColor": "yellow"
101 +
        },
102 +
        {
103 +
            "type": "wm",
104 +
            "key": "├─",
105 +
            "keyColor": "yellow"
106 +
        },
107 +
        {
108 +
            "type": "theme",
109 +
            "key": "├─󰉼",
110 +
            "keyColor": "yellow"
111 +
        },
112 +
        {
113 +
            "type": "icons",
114 +
            "key": "├─󰀻",
115 +
            "keyColor": "yellow"
116 +
        },
117 +
        {
118 +
            "type": "wallpaper",
119 +
            "key": "╰─󰸉",
120 +
            "keyColor": "yellow"
121 +
        },
122 +
        "break",
123 +
124 +
        {
125 +
            "type": "title",
126 +
            "key": "╭─",
127 +
            "format": "{user-name}@{host-name}",
128 +
            "keyColor": "blue"
129 +
        },
130 +
        {
131 +
            "type": "os",
132 +
            "key": "├─{icon}", // Just get your distro's logo off nerdfonts.com
133 +
            "keyColor": "blue"
134 +
        },
135 +
        {
136 +
            "type": "kernel",
137 +
            "key": "├─",
138 +
            "keyColor": "blue"
139 +
        },
140 +
        {
141 +
            "type": "packages",
142 +
            "key": "├─󰏖",
143 +
            "keyColor": "blue"
144 +
        },
145 +
        {
146 +
            "type": "uptime",
147 +
            "key": "├─󰅐",
148 +
            "keyColor": "blue"
149 +
        },
150 +
        {
151 +
            "type": "media",
152 +
            "key": "├─󰝚",
153 +
            "keyColor": "blue"
154 +
        },
155 +
        {
156 +
            "type": "localip",
157 +
            "key": "├─󰩟",
158 +
            "compact": true,
159 +
            "keyColor": "blue"
160 +
        },
161 +
        {
162 +
            "type": "publicip",
163 +
            "key": "├─󰩠",
164 +
            "keyColor": "blue",
165 +
            "timeout": 1000
166 +
        },
167 +
        {
168 +
            "type": "wifi",
169 +
            "key": "├─",
170 +
            "format": "{ssid}",
171 +
            "keyColor": "blue"
172 +
        },
173 +
        {
174 +
            "type": "locale",
175 +
            "key": "╰─",
176 +
            "keyColor": "blue"
177 +
        }
178 +
    ]
179 +
}
fastfetch/presets/examples/7.jsonc (added) +138 −0
1 +
// Load with --load-config examples/2.jsonc
2 +
// Note that you must replace the image path to an existing image to display it.
3 +
4 +
{
5 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
6 +
    "logo": {
7 +
        "padding": {
8 +
            "top": 2
9 +
        }
10 +
    },
11 +
    "display": {
12 +
        "separator": " -> "
13 +
    },
14 +
    "modules": [
15 +
        "title",
16 +
        "separator",
17 +
        {
18 +
            "type": "os",
19 +
            "key": " OS",
20 +
            "keyColor": "yellow",
21 +
            "format": "{2}"
22 +
        },
23 +
        {
24 +
            "type": "os",
25 +
            "key": "├{icon}", // Just get your distro's logo off nerdfonts.com
26 +
            "keyColor": "yellow"
27 +
        },
28 +
        {
29 +
            "type": "kernel",
30 +
            "key": "├",
31 +
            "keyColor": "yellow"
32 +
        },
33 +
        {
34 +
            "type": "packages",
35 +
            "key": "├󰏖",
36 +
            "keyColor": "yellow"
37 +
        },
38 +
        {
39 +
            "type": "shell",
40 +
            "key": "└",
41 +
            "keyColor": "yellow"
42 +
        },
43 +
        "break",
44 +
45 +
        {
46 +
            "type": "wm",
47 +
            "key": " DE/WM",
48 +
            "keyColor": "blue"
49 +
        },
50 +
        {
51 +
            "type": "lm",
52 +
            "key": "├󰧨",
53 +
            "keyColor": "blue"
54 +
        },
55 +
        {
56 +
            "type": "wmtheme",
57 +
            "key": "├󰉼",
58 +
            "keyColor": "blue"
59 +
        },
60 +
        {
61 +
            "type": "icons",
62 +
            "key": "├󰀻",
63 +
            "keyColor": "blue"
64 +
        },
65 +
        {
66 +
            "type": "terminal",
67 +
            "key": "├",
68 +
            "keyColor": "blue"
69 +
        },
70 +
        {
71 +
            "type": "wallpaper",
72 +
            "key": "└󰸉",
73 +
            "keyColor": "blue"
74 +
        },
75 +
76 +
        "break",
77 +
        {
78 +
            "type": "host",
79 +
            "key": "󰌢 PC",
80 +
            "keyColor": "green"
81 +
        },
82 +
        {
83 +
            "type": "cpu",
84 +
            "key": "├󰻠",
85 +
            "keyColor": "green"
86 +
        },
87 +
        {
88 +
            "type": "gpu",
89 +
            "key": "├󰍛",
90 +
            "keyColor": "green"
91 +
        },
92 +
        {
93 +
            "type": "disk",
94 +
            "key": "├",
95 +
            "keyColor": "green"
96 +
        },
97 +
        {
98 +
            "type": "memory",
99 +
            "key": "├󰑭",
100 +
            "keyColor": "green"
101 +
        },
102 +
        {
103 +
            "type": "swap",
104 +
            "key": "├󰓡",
105 +
            "keyColor": "green"
106 +
        },
107 +
        {
108 +
            "type": "display",
109 +
            "key": "├󰍹",
110 +
            "keyColor": "green"
111 +
        },
112 +
        {
113 +
            "type": "uptime",
114 +
            "key": "└󰅐",
115 +
            "keyColor": "green"
116 +
        },
117 +
118 +
        "break",
119 +
        {
120 +
            "type": "sound",
121 +
            "key": " SOUND",
122 +
            "keyColor": "cyan"
123 +
        },
124 +
        {
125 +
            "type": "player",
126 +
            "key": "├󰥠",
127 +
            "keyColor": "cyan"
128 +
        },
129 +
        {
130 +
            "type": "media",
131 +
            "key": "└󰝚",
132 +
            "keyColor": "cyan"
133 +
        },
134 +
135 +
        "break",
136 +
        "colors"
137 +
    ]
138 +
}
fastfetch/presets/examples/8.jsonc (added) +41 −0
1 +
{
2 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
3 +
    "logo": {
4 +
        "type": "small"
5 +
    },
6 +
    "display": {
7 +
        "separator": "  ",
8 +
        "color": {
9 +
            "keys": "magenta"
10 +
        },
11 +
        "size": {
12 +
            "ndigits": 0,
13 +
            "maxPrefix": "MB"
14 +
        },
15 +
        "key": {
16 +
            "type": "icon"
17 +
        }
18 +
    },
19 +
    "modules": [
20 +
        {
21 +
            "type": "title",
22 +
            "color": {
23 +
                "user": "green",
24 +
                "at": "red",
25 +
                "host": "blue"
26 +
            }
27 +
        },
28 +
        "os",
29 +
        "kernel",
30 +
        "memory",
31 +
        "packages",
32 +
        "uptime",
33 +
        {
34 +
            "type": "colors",
35 +
            "key": "Colors", // For printing icon
36 +
            "block": {
37 +
                "range": [1, 6]
38 +
            }
39 +
        }
40 +
    ]
41 +
}
fastfetch/presets/examples/9.jsonc (added) +38 −0
1 +
{
2 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
3 +
    "logo": {
4 +
        "type": "small"
5 +
    },
6 +
    "display": {
7 +
        "key": {
8 +
            "width": 11
9 +
        },
10 +
        "bar": {
11 +
            "charElapsed": "=",
12 +
            "charTotal": "-",
13 +
            "width": 13
14 +
        },
15 +
        "percent": {
16 +
            "type": 2
17 +
        }
18 +
    },
19 +
    "modules": [
20 +
        "title",
21 +
        "separator",
22 +
        "memory",
23 +
        "swap",
24 +
        {
25 +
            "type": "disk",
26 +
            "folders": "/"
27 +
        },
28 +
        {
29 +
            "type": "battery",
30 +
            "key": "Battery"
31 +
        },
32 +
        {
33 +
            "type": "colors",
34 +
            "paddingLeft": 10,
35 +
            "symbol": "circle"
36 +
        }
37 +
    ]
38 +
}
fastfetch/presets/neofetch.jsonc (added) +48 −0
1 +
{
2 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
3 +
    "display": {
4 +
        "size": {
5 +
            "maxPrefix": "MB",
6 +
            "ndigits": 0
7 +
        }
8 +
    },
9 +
    "modules": [
10 +
        "title",
11 +
        "separator",
12 +
        "os",
13 +
        "host",
14 +
        {
15 +
            "type": "kernel",
16 +
            "format": "{release}"
17 +
        },
18 +
        "uptime",
19 +
        "packages",
20 +
        "shell",
21 +
        {
22 +
            "type": "display",
23 +
            "compactType": "original",
24 +
            "key": "Resolution"
25 +
        },
26 +
        "de",
27 +
        "wm",
28 +
        "wmtheme",
29 +
        "theme",
30 +
        "icons",
31 +
        "terminal",
32 +
        {
33 +
            "type": "terminalfont",
34 +
            "format": "{/name}{-}{/}{name}{?size} {size}{?}"
35 +
        },
36 +
        "cpu",
37 +
        {
38 +
            "type": "gpu",
39 +
            "key": "GPU"
40 +
        },
41 +
        {
42 +
            "type": "memory",
43 +
            "format": "{} / {}"
44 +
        },
45 +
        "break",
46 +
        "colors"
47 +
    ]
48 +
}
fastfetch/presets/paleofetch.jsonc (added) +32 −0
1 +
{
2 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
3 +
    "modules": [
4 +
        "title",
5 +
        "separator",
6 +
        "os",
7 +
        {
8 +
            "type": "host",
9 +
            "format": "{/2}{-}{/}{2}{?3} {3}{?}"
10 +
        },
11 +
        "kernel",
12 +
        "uptime",
13 +
        {
14 +
            "type": "battery",
15 +
            "format": "{/4}{-}{/}{4}{?5} [{5}]{?}"
16 +
        },
17 +
        "break",
18 +
        "packages",
19 +
        "shell",
20 +
        "display",
21 +
        "terminal",
22 +
        "break",
23 +
        "cpu",
24 +
        {
25 +
            "type": "gpu",
26 +
            "key": "GPU"
27 +
        },
28 +
        "memory",
29 +
        "break",
30 +
        "colors"
31 +
    ]
32 +
}
fastfetch/presets/screenfetch.jsonc (added) +37 −0
1 +
{
2 +
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
3 +
    "modules": [
4 +
        "title",
5 +
        "os",
6 +
        "kernel",
7 +
        "uptime",
8 +
        {
9 +
            "type": "packages",
10 +
            "format": "{all}"
11 +
        },
12 +
        "shell",
13 +
        {
14 +
            "type": "display",
15 +
            "key": "Resolution",
16 +
            "compactType": "original"
17 +
        },
18 +
        "de",
19 +
        "wm",
20 +
        "wmtheme",
21 +
        {
22 +
            "type": "terminalfont",
23 +
            "key": "font"
24 +
        },
25 +
        {
26 +
            "type": "disk",
27 +
            "folders": "/",
28 +
            "key": "Disk"
29 +
        },
30 +
        "cpu",
31 +
        "gpu",
32 +
        {
33 +
            "type": "memory",
34 +
            "key": "RAM"
35 +
        }
36 +
    ]
37 +
}
gemlog/config.sh (added) +23 −0
1 +
export global_title="gem.stevedylan.dev"
2 +
export global_description="Floating out into space, looking back on the pale blue dot"
3 +
export global_url="gemini://gem.stevedylan.dev/" # link to base url of gemlog
4 +
export global_author="Steve"
5 +
export global_author_email="contact@stevedylan.dev"
6 +
export global_author_url="gemini://gem.stevedylan.dev/" # homepage of author
7 +
export global_license=""
8 +
9 +
export gemlog_feed="atom.xml" # filename of the atom feed
10 +
export number_of_feed_articles="50" # maximum number of posts added to atom feed
11 +
export feed_base_url="gemini://gem.stevedylan.dev/" # base url that the feed is hosted at
12 +
export feed_web_url="" # base url that the feed is hosted at on the web
13 +
14 +
export index="gemlog/index.gmi" # main page of gemlog, not recommended to change
15 +
16 +
export use_year_divider=true # separate posts from different years with a heading?
17 +
18 +
# these 2 are exclusive, and use_month_divider_nl takes priority if both are set
19 +
export use_month_divider_nl=true # separate posts from different months with a newline?
20 +
export use_month_divider_hd=false # separate posts from different months with a heading?
21 +
22 +
23 +
export gemlog_sh_link="https://git.sr.ht/~nytpu/gemlog.sh" # link to the utility, you should change this if you've made substantial non-configuration changes
gemlog/footer.gmi (added) +4 −0
1 +
2 +
──────────────────
3 +
4 +
=> gemini://gem.stevedylan.dev Go Back
gemlog/header.gmi (added) +4 −0
1 +
# Steve's Capsule
2 +
3 +
Floating out into space, looking back on the pale blue dot
4 +
ghostty/config (added) +100 −0
1 +
font-family = BerkeleyMono Nerd Font
2 +
font-family-bold = BerkeleyMono Nerd Font
3 +
font-family-italic = BerkeleyMono Nerd Font
4 +
font-family-bold-italic = BerkeleyMono Nerd Font
5 +
font-size = 14
6 +
7 +
confirm-close-surface = false
8 +
clipboard-read = allow
9 +
clipboard-write = allow
10 +
mouse-hide-while-typing = true
11 +
window-padding-x = 6
12 +
window-padding-balance = true
13 +
window-width = 85
14 +
window-height = 30
15 +
window-decoration = none
16 +
window-save-state = never
17 +
window-position-x = 530
18 +
window-position-y = 200
19 +
20 +
macos-titlebar-proxy-icon = hidden
21 +
22 +
keybind = ctrl+shift+f=write_screen_file:paste
23 +
24 +
# theme = Poimandres
25 +
26 +
# background = #1B1E28
27 +
# foreground = #ACCDFF
28 +
# 
29 +
# selection-background = #7CB424
30 +
# selection-foreground = #000000
31 +
# 
32 +
# palette = 0=#1B1E28
33 +
# palette = 1=#679DFF
34 +
# palette = 2=#E4C7FF
35 +
# palette = 3=#FAC2FF
36 +
# palette = 4=#DDFFFF
37 +
# palette = 5=#C5E9FF
38 +
# palette = 6=#DDFFFF
39 +
# palette = 7=#FFFFFF
40 +
# palette = 8=#ACCDFF
41 +
# palette = 9=#679DFF
42 +
# palette = 10=#E4C7FF
43 +
# palette = 11=#FAC2FF
44 +
# palette = 12=#DDFFFF
45 +
# palette = 13=#C5E9FF
46 +
# palette = 14=#DDFFFF
47 +
# palette = 15=#FFFFFF
48 +
49 +
# Compline
50 +
51 +
# background = #1a1d21
52 +
# foreground = #f0efeb
53 +
# cursor-color = #d4ccb4
54 +
# cursor-text = #1a1d21
55 +
# selection-background = #3d424a
56 +
# selection-foreground = #f0efeb
57 +
# palette = 0=#22262b
58 +
# palette = 1=#cdacac
59 +
# palette = 2=#b8c4b8
60 +
# palette = 3=#d4ccb4
61 +
# palette = 4=#b4bcc4
62 +
# palette = 5=#ccc4b4
63 +
# palette = 6=#b4c0c8
64 +
# palette = 7=#8b919a
65 +
# palette = 8=#515761
66 +
# palette = 9=#cdacac
67 +
# palette = 10=#b8c4b8
68 +
# palette = 11=#d4ccb4
69 +
# palette = 12=#b4bcc4
70 +
# palette = 13=#ccc4b4
71 +
# palette = 14=#b4c0c8
72 +
# palette = 15=#e0dcd4
73 +
74 +
# Darkmatter
75 +
76 +
background = #121113
77 +
foreground = #ffffff
78 +
79 +
selection-background = #222222
80 +
selection-foreground = #000000
81 +
82 +
palette = 0=#121113
83 +
palette = 1=#5f8787
84 +
palette = 2=#fbcb97
85 +
palette = 3=#e78a53
86 +
palette = 4=#888888
87 +
palette = 5=#999999
88 +
palette = 6=#aaaaaa
89 +
palette = 7=#c1c1c1
90 +
palette = 8=#333333
91 +
palette = 9=#5f8787
92 +
palette = 10=#fbcb97
93 +
palette = 11=#e78a53
94 +
palette = 12=#888888
95 +
palette = 13=#999999
96 +
palette = 14=#aaaaaa
97 +
palette = 15=#c1c1c1
98 +
99 +
auto-update-channel = stable
100 +
click-repeat-interval = 500
ghostty/config.bak (added) +45 −0
1 +
font-family = CommitMono Nerd Font
2 +
font-family-bold = CommitMono Nerd Font
3 +
font-family-italic = CommitMono Nerd Font
4 +
font-family-bold-italic = CommitMono Nerd Font
5 +
font-size = 14
6 +
7 +
confirm-close-surface = false
8 +
clipboard-read = allow
9 +
clipboard-write = allow
10 +
mouse-hide-while-typing = true
11 +
window-padding-x = 6
12 +
window-padding-balance = true
13 +
window-save-state = always
14 +
window-width = 85
15 +
window-height = 25
16 +
window-theme = ghostty
17 +
window-titlebar-background = #000000
18 +
macos-titlebar-proxy-icon = hidden
19 +
20 +
background = #121113
21 +
foreground = #ffffff
22 +
23 +
selection-background = #222222
24 +
selection-foreground = #000000
25 +
26 +
palette = 0=#121113
27 +
palette = 1=#5f8787
28 +
palette = 2=#fbcb97
29 +
palette = 3=#e78a53
30 +
palette = 4=#888888
31 +
palette = 5=#999999
32 +
palette = 6=#aaaaaa
33 +
palette = 7=#c1c1c1
34 +
palette = 8=#333333
35 +
palette = 9=#5f8787
36 +
palette = 10=#fbcb97
37 +
palette = 11=#e78a53
38 +
palette = 12=#888888
39 +
palette = 13=#999999
40 +
palette = 14=#aaaaaa
41 +
palette = 15=#c1c1c1
42 +
43 +
auto-update-channel = stable
44 +
click-repeat-interval = 500
45 +
git/.gitconfig (added) +103 −0
1 +
[user]
2 +
  name = Steve
3 +
  email = contact@stevedylan.dev
4 +
  signingkey = contact@stevedylan.dev
5 +
6 +
[alias]
7 +
	ac = "!f() { git add . && git commit -m \"$1\"; }; f"
8 +
	wip = "!f() { git add . && git commit -m \"wip\" && git push; }; f"
9 +
	d = difftool -y --tool=oy
10 +
11 +
[difftool "oy"]
12 +
	cmd = oy "$LOCAL" "$REMOTE"
13 +
14 +
[difftool]
15 +
	prompt = false
16 +
17 +
[column]
18 +
  ui = auto
19 +
20 +
[branch]
21 +
  sort = -committerdate
22 +
23 +
[init]
24 +
  defaultBranch = main
25 +
26 +
[diff]
27 +
  tool = oy
28 +
  algorithm = histogram
29 +
  colorMoved = plain
30 +
  mnemonicPrefix = true
31 +
  renames = true
32 +
  context = 3
33 +
  interHunkContext = 10
34 +
35 +
[delta]
36 +
  navigate = true
37 +
  light = false  
38 +
  side-by-side = true
39 +
40 +
41 +
[status]
42 +
  branch = true
43 +
  showStash = true
44 +
  showUntrackedFiles = all
45 +
46 +
[interactive]
47 +
  diffFilter = delta --color-only --dark --true-color always
48 +
49 +
50 +
[push]
51 +
  default = simple
52 +
  autoSetupRemote = true
53 +
  followTags = true
54 +
55 +
[pull]
56 +
  rebase = true
57 +
58 +
[rebase]
59 +
  autoStash = true
60 +
  missingCommitsCheck = warn
61 +
62 +
[fetch]
63 +
  prune = true
64 +
  pruneTags = true
65 +
  all = true
66 +
67 +
[help]
68 +
  autocorrect = prompt
69 +
70 +
[commit]
71 +
  gpgsign = true
72 +
  verbose = true
73 +
74 +
[core]
75 +
  excludesfile = ~/.gitignore
76 +
77 +
[tag]
78 +
  gpgsign = true
79 +
80 +
[log]
81 +
  abbrevCommit = true
82 +
  graphColors = blue,yellow,cyan,megenta,green,red
83 +
84 +
[color "diff"]
85 +
    meta       = black bold
86 +
    frag       = magenta
87 +
    context    = white
88 +
    whitespace = yellow reverse
89 +
    old        = red
90 +
91 +
[color "decorate"]
92 +
  HEAD = red
93 +
  branch = blue
94 +
  tag = yellow
95 +
  remoteBranch = magenta
96 +
97 +
[color "branch"]
98 +
  current = magenta
99 +
  local = default
100 +
  remote = yellow
101 +
  upstream = green
102 +
  plain = blue
103 +
git/.gitignore (added) +51 −0
1 +
# Python specific
2 +
.venv/
3 +
.mypy_cache/
4 +
.pytest_cache/
5 +
__pycache__/
6 +
.hypothesis/
7 +
.ruff_cache/
8 +
.ropeproject/
9 +
10 +
# Typescript
11 +
node_modules/
12 +
dist/
13 +
*.tsbuildinfo
14 +
.npm
15 +
.yarn
16 +
yarn-error.log
17 +
npm-debug.log
18 +
.env
19 +
.env.local
20 +
.env.development.local
21 +
.env.test.local
22 +
.env.production.local
23 +
24 +
# Rust
25 +
/target/
26 +
**/*.rs.bk
27 +
Cargo.lock
28 +
.cargo/
29 +
30 +
# Go
31 +
/bin/
32 +
/pkg/
33 +
/vendor/
34 +
*.exe
35 +
*.exe~
36 +
*.dll
37 +
*.so
38 +
*.dylib
39 +
*.test
40 +
*.out
41 +
go.work
42 +
43 +
# Common
44 +
.DS_Store
45 +
.idea/
46 +
.vscode/
47 +
*.swp
48 +
*.swo
49 +
.project
50 +
.classpath
51 +
.settings/
git/.template (added) +34 −0
1 +
# feat: ✨ 
2 +
# feat: 🔍 
3 +
# feat: 🔗 
4 +
# feat: 🔒 
5 +
6 +
# fix: 🐛 
7 +
# fix: 🐞 
8 +
# fix: 🩹 
9 +
# fix: 🚑️ 
10 +
11 +
# style: 💅 
12 +
# style: 🎨 
13 +
# style: 💄 
14 +
15 +
# ci: 🦊 
16 +
# ci: 📦 
17 +
18 +
# deploy: 🚀 
19 +
# deploy: 📦 
20 +
21 +
# chore: 🧹 
22 +
# chore: 🔧 
23 +
# chore: ⚙️ 
24 +
# docs: 📜 
25 +
26 +
# refactor: 🔨 
27 +
# perf: 🚀 
28 +
29 +
# test: 🚦 
30 +
# debug: 🧪 
31 +
32 +
# BREAKING CHANGE: 🚨 
33 +
# BREAKING CHANGE: 💥 
34 +
# BREAKING CHANGE: 💣 
keyboard/.config/keyboard/mode_sonnet_011723.json (added) +481 −0
1 +
{
2 +
  "name": "Mode SeventyFive H",
3 +
  "vendorProductId": 14579058,
4 +
  "macros": [
5 +
    "{KC_LCTL,KC_P}",
6 +
    "{KC_LGUI,KC_LALT,KC_G}",
7 +
    "{KC_LGUI,KC_LSFT,KC_LALT,KC_M}",
8 +
    "{KC_LCTL,KC_LALT,KC_LGUI,KC_C}",
9 +
    "",
10 +
    "",
11 +
    "",
12 +
    "",
13 +
    "",
14 +
    "",
15 +
    "",
16 +
    "",
17 +
    "",
18 +
    "",
19 +
    "",
20 +
    ""
21 +
  ],
22 +
  "layers": [
23 +
    [
24 +
      "KC_ESC",
25 +
      "KC_F1",
26 +
      "KC_F2",
27 +
      "MACRO00",
28 +
      "MACRO01",
29 +
      "KC_NO",
30 +
      "MACRO02",
31 +
      "MACRO03",
32 +
      "KC_MPRV",
33 +
      "KC_MPLY",
34 +
      "KC_MNXT",
35 +
      "KC_MUTE",
36 +
      "KC_VOLD",
37 +
      "KC_VOLU",
38 +
      "KC_NO",
39 +
      "KC_DEL",
40 +
      "KC_GRV",
41 +
      "KC_1",
42 +
      "KC_2",
43 +
      "KC_3",
44 +
      "KC_4",
45 +
      "KC_5",
46 +
      "KC_6",
47 +
      "KC_7",
48 +
      "KC_8",
49 +
      "KC_9",
50 +
      "KC_0",
51 +
      "KC_MINS",
52 +
      "KC_EQL",
53 +
      "KC_BSPC",
54 +
      "KC_NO",
55 +
      "KC_WWW_HOME",
56 +
      "KC_TAB",
57 +
      "KC_Q",
58 +
      "KC_W",
59 +
      "KC_E",
60 +
      "KC_R",
61 +
      "KC_T",
62 +
      "KC_Y",
63 +
      "KC_U",
64 +
      "KC_I",
65 +
      "KC_O",
66 +
      "KC_P",
67 +
      "KC_LBRC",
68 +
      "KC_RBRC",
69 +
      "KC_NO",
70 +
      "KC_BSLS",
71 +
      "KC_PGUP",
72 +
      "KC_CAPS",
73 +
      "KC_A",
74 +
      "KC_S",
75 +
      "KC_D",
76 +
      "KC_F",
77 +
      "KC_G",
78 +
      "KC_H",
79 +
      "KC_J",
80 +
      "KC_K",
81 +
      "KC_L",
82 +
      "KC_SCLN",
83 +
      "KC_QUOT",
84 +
      "KC_NO",
85 +
      "KC_NO",
86 +
      "KC_ENT",
87 +
      "KC_PGDN",
88 +
      "KC_LSFT",
89 +
      "KC_NO",
90 +
      "KC_Z",
91 +
      "KC_X",
92 +
      "KC_C",
93 +
      "KC_V",
94 +
      "KC_B",
95 +
      "KC_N",
96 +
      "KC_M",
97 +
      "KC_COMM",
98 +
      "KC_DOT",
99 +
      "KC_SLSH",
100 +
      "KC_RSFT",
101 +
      "KC_NO",
102 +
      "KC_UP",
103 +
      "KC_END",
104 +
      "KC_LCTL",
105 +
      "KC_LALT",
106 +
      "KC_LGUI",
107 +
      "KC_NO",
108 +
      "KC_NO",
109 +
      "KC_NO",
110 +
      "KC_NO",
111 +
      "KC_NO",
112 +
      "KC_NO",
113 +
      "KC_NO",
114 +
      "KC_NO",
115 +
      "KC_NO",
116 +
      "KC_NO",
117 +
      "KC_NO",
118 +
      "KC_NO",
119 +
      "KC_NO",
120 +
      "KC_NO",
121 +
      "KC_NO",
122 +
      "KC_NO",
123 +
      "KC_NO",
124 +
      "KC_NO",
125 +
      "KC_NO",
126 +
      "KC_SPC",
127 +
      "KC_NO",
128 +
      "KC_NO",
129 +
      "KC_NO",
130 +
      "KC_RGUI",
131 +
      "FN_MO13",
132 +
      "KC_NO",
133 +
      "KC_LEFT",
134 +
      "KC_DOWN",
135 +
      "KC_RGHT"
136 +
    ],
137 +
    [
138 +
      "KC_TRNS",
139 +
      "KC_F1",
140 +
      "KC_F2",
141 +
      "KC_F3",
142 +
      "KC_F4",
143 +
      "KC_NO",
144 +
      "KC_F5",
145 +
      "KC_F6",
146 +
      "KC_F7",
147 +
      "KC_F8",
148 +
      "KC_F9",
149 +
      "KC_F10",
150 +
      "KC_F11",
151 +
      "KC_F12",
152 +
      "KC_NO",
153 +
      "KC_TRNS",
154 +
      "KC_TRNS",
155 +
      "KC_TRNS",
156 +
      "KC_TRNS",
157 +
      "KC_TRNS",
158 +
      "KC_TRNS",
159 +
      "KC_TRNS",
160 +
      "KC_TRNS",
161 +
      "KC_TRNS",
162 +
      "KC_TRNS",
163 +
      "KC_TRNS",
164 +
      "KC_TRNS",
165 +
      "KC_TRNS",
166 +
      "KC_TRNS",
167 +
      "KC_TRNS",
168 +
      "KC_NO",
169 +
      "KC_MUTE",
170 +
      "KC_TRNS",
171 +
      "KC_TRNS",
172 +
      "KC_TRNS",
173 +
      "KC_TRNS",
174 +
      "KC_TRNS",
175 +
      "KC_TRNS",
176 +
      "KC_TRNS",
177 +
      "KC_TRNS",
178 +
      "KC_TRNS",
179 +
      "KC_TRNS",
180 +
      "KC_TRNS",
181 +
      "KC_TRNS",
182 +
      "KC_TRNS",
183 +
      "KC_NO",
184 +
      "KC_TRNS",
185 +
      "KC_VOLU",
186 +
      "KC_TRNS",
187 +
      "KC_TRNS",
188 +
      "KC_TRNS",
189 +
      "KC_TRNS",
190 +
      "KC_TRNS",
191 +
      "KC_TRNS",
192 +
      "KC_TRNS",
193 +
      "KC_TRNS",
194 +
      "KC_TRNS",
195 +
      "KC_TRNS",
196 +
      "KC_TRNS",
197 +
      "KC_TRNS",
198 +
      "KC_NO",
199 +
      "KC_NO",
200 +
      "KC_TRNS",
201 +
      "KC_VOLD",
202 +
      "FN_MO23",
203 +
      "KC_NO",
204 +
      "KC_TRNS",
205 +
      "KC_TRNS",
206 +
      "KC_TRNS",
207 +
      "KC_TRNS",
208 +
      "KC_TRNS",
209 +
      "KC_TRNS",
210 +
      "KC_TRNS",
211 +
      "KC_TRNS",
212 +
      "KC_TRNS",
213 +
      "KC_TRNS",
214 +
      "KC_TRNS",
215 +
      "KC_NO",
216 +
      "KC_TRNS",
217 +
      "KC_MPLY",
218 +
      "KC_TRNS",
219 +
      "KC_TRNS",
220 +
      "KC_TRNS",
221 +
      "KC_NO",
222 +
      "KC_NO",
223 +
      "KC_NO",
224 +
      "KC_NO",
225 +
      "KC_NO",
226 +
      "KC_NO",
227 +
      "KC_NO",
228 +
      "KC_NO",
229 +
      "KC_NO",
230 +
      "KC_NO",
231 +
      "KC_NO",
232 +
      "KC_NO",
233 +
      "KC_NO",
234 +
      "KC_NO",
235 +
      "KC_NO",
236 +
      "KC_NO",
237 +
      "KC_NO",
238 +
      "KC_NO",
239 +
      "KC_NO",
240 +
      "KC_TRNS",
241 +
      "KC_NO",
242 +
      "KC_NO",
243 +
      "KC_NO",
244 +
      "KC_TRNS",
245 +
      "KC_TRNS",
246 +
      "KC_NO",
247 +
      "KC_TRNS",
248 +
      "KC_TRNS",
249 +
      "KC_TRNS"
250 +
    ],
251 +
    [
252 +
      "KC_TRNS",
253 +
      "KC_F13",
254 +
      "KC_F14",
255 +
      "KC_F15",
256 +
      "KC_F16",
257 +
      "KC_NO",
258 +
      "KC_F17",
259 +
      "KC_F18",
260 +
      "KC_F19",
261 +
      "KC_F20",
262 +
      "KC_F21",
263 +
      "KC_F22",
264 +
      "KC_F23",
265 +
      "KC_F24",
266 +
      "KC_NO",
267 +
      "KC_TRNS",
268 +
      "KC_TRNS",
269 +
      "KC_TRNS",
270 +
      "KC_TRNS",
271 +
      "KC_TRNS",
272 +
      "KC_TRNS",
273 +
      "KC_TRNS",
274 +
      "KC_TRNS",
275 +
      "KC_TRNS",
276 +
      "KC_TRNS",
277 +
      "KC_TRNS",
278 +
      "KC_TRNS",
279 +
      "KC_TRNS",
280 +
      "KC_TRNS",
281 +
      "KC_TRNS",
282 +
      "KC_NO",
283 +
      "KC_TRNS",
284 +
      "KC_TRNS",
285 +
      "KC_TRNS",
286 +
      "KC_TRNS",
287 +
      "KC_TRNS",
288 +
      "KC_TRNS",
289 +
      "KC_TRNS",
290 +
      "KC_TRNS",
291 +
      "KC_TRNS",
292 +
      "KC_TRNS",
293 +
      "KC_TRNS",
294 +
      "KC_TRNS",
295 +
      "KC_TRNS",
296 +
      "KC_TRNS",
297 +
      "KC_NO",
298 +
      "KC_TRNS",
299 +
      "KC_TRNS",
300 +
      "KC_TRNS",
301 +
      "KC_TRNS",
302 +
      "KC_TRNS",
303 +
      "KC_TRNS",
304 +
      "KC_TRNS",
305 +
      "KC_TRNS",
306 +
      "KC_TRNS",
307 +
      "KC_TRNS",
308 +
      "KC_TRNS",
309 +
      "KC_TRNS",
310 +
      "KC_TRNS",
311 +
      "KC_TRNS",
312 +
      "KC_NO",
313 +
      "KC_NO",
314 +
      "KC_TRNS",
315 +
      "KC_TRNS",
316 +
      "KC_TRNS",
317 +
      "KC_NO",
318 +
      "KC_TRNS",
319 +
      "KC_TRNS",
320 +
      "KC_TRNS",
321 +
      "KC_TRNS",
322 +
      "KC_TRNS",
323 +
      "KC_TRNS",
324 +
      "KC_TRNS",
325 +
      "KC_TRNS",
326 +
      "KC_TRNS",
327 +
      "KC_TRNS",
328 +
      "KC_TRNS",
329 +
      "KC_NO",
330 +
      "KC_TRNS",
331 +
      "KC_TRNS",
332 +
      "KC_TRNS",
333 +
      "KC_TRNS",
334 +
      "KC_TRNS",
335 +
      "KC_NO",
336 +
      "KC_NO",
337 +
      "KC_NO",
338 +
      "KC_NO",
339 +
      "KC_NO",
340 +
      "KC_NO",
341 +
      "KC_NO",
342 +
      "KC_NO",
343 +
      "KC_NO",
344 +
      "KC_NO",
345 +
      "KC_NO",
346 +
      "KC_NO",
347 +
      "KC_NO",
348 +
      "KC_NO",
349 +
      "KC_NO",
350 +
      "KC_NO",
351 +
      "KC_NO",
352 +
      "KC_NO",
353 +
      "KC_NO",
354 +
      "KC_TRNS",
355 +
      "KC_NO",
356 +
      "KC_NO",
357 +
      "KC_NO",
358 +
      "KC_TRNS",
359 +
      "KC_TRNS",
360 +
      "KC_NO",
361 +
      "KC_TRNS",
362 +
      "KC_TRNS",
363 +
      "KC_TRNS"
364 +
    ],
365 +
    [
366 +
      "KC_TRNS",
367 +
      "KC_TRNS",
368 +
      "KC_TRNS",
369 +
      "KC_TRNS",
370 +
      "KC_TRNS",
371 +
      "KC_NO",
372 +
      "KC_TRNS",
373 +
      "KC_TRNS",
374 +
      "KC_TRNS",
375 +
      "KC_TRNS",
376 +
      "KC_TRNS",
377 +
      "KC_TRNS",
378 +
      "KC_TRNS",
379 +
      "KC_TRNS",
380 +
      "KC_NO",
381 +
      "KC_TRNS",
382 +
      "KC_TRNS",
383 +
      "KC_TRNS",
384 +
      "KC_TRNS",
385 +
      "KC_TRNS",
386 +
      "KC_TRNS",
387 +
      "KC_TRNS",
388 +
      "KC_TRNS",
389 +
      "KC_TRNS",
390 +
      "KC_TRNS",
391 +
      "KC_TRNS",
392 +
      "KC_TRNS",
393 +
      "KC_TRNS",
394 +
      "KC_TRNS",
395 +
      "KC_TRNS",
396 +
      "KC_NO",
397 +
      "KC_TRNS",
398 +
      "KC_TRNS",
399 +
      "KC_TRNS",
400 +
      "KC_TRNS",
401 +
      "KC_TRNS",
402 +
      "KC_TRNS",
403 +
      "KC_TRNS",
404 +
      "KC_TRNS",
405 +
      "KC_TRNS",
406 +
      "KC_TRNS",
407 +
      "KC_TRNS",
408 +
      "KC_TRNS",
409 +
      "KC_TRNS",
410 +
      "KC_TRNS",
411 +
      "KC_NO",
412 +
      "KC_TRNS",
413 +
      "KC_TRNS",
414 +
      "KC_TRNS",
415 +
      "KC_TRNS",
416 +
      "KC_TRNS",
417 +
      "KC_TRNS",
418 +
      "KC_TRNS",
419 +
      "KC_TRNS",
420 +
      "KC_TRNS",
421 +
      "KC_TRNS",
422 +
      "KC_TRNS",
423 +
      "KC_TRNS",
424 +
      "KC_TRNS",
425 +
      "KC_TRNS",
426 +
      "KC_NO",
427 +
      "KC_NO",
428 +
      "KC_TRNS",
429 +
      "KC_TRNS",
430 +
      "KC_TRNS",
431 +
      "KC_NO",
432 +
      "KC_TRNS",
433 +
      "KC_TRNS",
434 +
      "KC_TRNS",
435 +
      "KC_TRNS",
436 +
      "KC_TRNS",
437 +
      "KC_TRNS",
438 +
      "KC_TRNS",
439 +
      "KC_TRNS",
440 +
      "KC_TRNS",
441 +
      "KC_TRNS",
442 +
      "KC_TRNS",
443 +
      "KC_NO",
444 +
      "KC_TRNS",
445 +
      "KC_TRNS",
446 +
      "KC_TRNS",
447 +
      "KC_TRNS",
448 +
      "KC_TRNS",
449 +
      "KC_NO",
450 +
      "KC_NO",
451 +
      "KC_NO",
452 +
      "KC_NO",
453 +
      "KC_NO",
454 +
      "KC_NO",
455 +
      "KC_NO",
456 +
      "KC_NO",
457 +
      "KC_NO",
458 +
      "KC_NO",
459 +
      "KC_NO",
460 +
      "KC_NO",
461 +
      "KC_NO",
462 +
      "KC_NO",
463 +
      "KC_NO",
464 +
      "KC_NO",
465 +
      "KC_NO",
466 +
      "KC_NO",
467 +
      "KC_NO",
468 +
      "KC_TRNS",
469 +
      "KC_NO",
470 +
      "KC_NO",
471 +
      "KC_NO",
472 +
      "KC_TRNS",
473 +
      "KC_TRNS",
474 +
      "KC_NO",
475 +
      "KC_TRNS",
476 +
      "KC_TRNS",
477 +
      "KC_TRNS"
478 +
    ]
479 +
  ],
480 +
  "encoders": []
481 +
}
lazygit/config.yml (added) +0 −0

Binary file — no preview.

lazygit/state.yml (added) +6 −0
1 +
lastupdatecheck: 0
2 +
recentrepos:
3 +
- /Users/stevedsimkins/Developer/steve-dylan-photo-nextjs
4 +
startuppopupversion: 5
5 +
customcommandshistory: []
6 +
hidecommandlog: false
macchina/macchina.toml (added) +59 −0
1 +
# Specifies the network interface to use for the LocalIP readout
2 +
interface = "wlan0"
3 +
4 +
# Lengthen uptime output
5 +
long_uptime = true
6 +
7 +
# Lengthen shell output
8 +
long_shell = false
9 +
10 +
# Lengthen kernel output
11 +
long_kernel = false
12 +
13 +
# Toggle between displaying the current shell or your user's default one.
14 +
current_shell = true
15 +
16 +
# Toggle between displaying the number of physical or logical cores of your
17 +
# processor.
18 +
physical_cores = true
19 +
20 +
# Disks to show disk usage for. Defaults to `["/"]`.
21 +
# disks = ["/", "/home/user"]
22 +
23 +
# Show percentage next to disk information
24 +
# disk_space_percentage = true
25 +
26 +
# Show percentage next to memory information
27 +
# memory_percentage = true
28 +
29 +
# Themes need to be placed in "$XDG_CONFIG_DIR/macchina/themes" beforehand.
30 +
# e.g.:
31 +
#  if theme path is /home/foo/.config/macchina/themes/Sodium.toml
32 +
#  theme should be uncommented and set to "Sodium"
33 +
#
34 +
theme = "Beryllium"
35 +
36 +
# Displays only the specified readouts.
37 +
# Accepted values (case-sensitive):
38 +
#   - Host
39 +
#   - Machine
40 +
#   - Kernel
41 +
#   - Distribution
42 +
#   - OperatingSystem
43 +
#   - DesktopEnvironment
44 +
#   - WindowManager
45 +
#   - Resolution
46 +
#   - Backlight
47 +
#   - Packages
48 +
#   - LocalIP
49 +
#   - Terminal
50 +
#   - Shell
51 +
#   - Uptime
52 +
#   - Processor
53 +
#   - ProcessorLoad
54 +
#   - Memory
55 +
#   - Battery
56 +
#   - GPU
57 +
#   - DiskSpace
58 +
# Example:
59 +
#   show = ["Battery", "Memory", ...]
macchina/themes/Beryllium.toml (added) +27 −0
1 +
# Beryllium
2 +
3 +
spacing         = 3
4 +
hide_ascii      = true
5 +
key_color       = "green"
6 +
separator       = ""
7 +
8 +
[box]
9 +
border          = "plain"
10 +
visible         = true
11 +
12 +
[palette]
13 +
glyph           = "○"
14 +
spacing         = 2
15 +
visible         = true
16 +
17 +
[bar]
18 +
glyph           = "○"
19 +
hide_delimiters = true
20 +
visible         = true
21 +
22 +
[box.inner_margin]
23 +
x               = 2
24 +
y               = 1
25 +
26 +
[custom_ascii]
27 +
color           = "green"
macchina/themes/Helium.toml (added) +53 −0
1 +
# Helium
2 +
3 +
hide_ascii      = false
4 +
spacing         = 2
5 +
padding         = 0
6 +
separator       = "->"
7 +
key_color       = "Blue"
8 +
separator_color = "Yellow"
9 +
10 +
[bar]
11 +
glyph           = "o"
12 +
symbol_open     = "("
13 +
symbol_close    = ")"
14 +
hide_delimiters = false
15 +
visible         = false
16 +
17 +
[box]
18 +
title           = " Helium "
19 +
border          = "rounded"
20 +
visible         = false
21 +
22 +
[box.inner_margin]
23 +
x               = 2
24 +
y               = 1
25 +
26 +
[custom_ascii]
27 +
color           = "Yellow"
28 +
29 +
[randomize]
30 +
key_color       = false
31 +
separator_color = false
32 +
33 +
[keys]
34 +
host            = "Host"
35 +
kernel          = "Kernel"
36 +
battery         = "Battery"
37 +
os              = "OS"
38 +
de              = "DE"
39 +
wm              = "WM"
40 +
distro          = "Distro"
41 +
terminal        = "Terminal"
42 +
shell           = "Shell"
43 +
packages        = "Packages"
44 +
uptime          = "Uptime"
45 +
memory          = "Memory"
46 +
machine         = "Machine"
47 +
local_ip        = "IP"
48 +
backlight       = "Brightness"
49 +
resolution      = "Resolution"
50 +
cpu_load        = "CPU Load"
51 +
cpu             = "CPU"
52 +
gpu             = "GPU"
53 +
disk_space      = "Disk Space"
macchina/themes/Hydrogen.toml (added) +53 −0
1 +
# Hydrogen
2 +
3 +
spacing         = 2
4 +
padding         = 0
5 +
hide_ascii      = true
6 +
separator       = ">"
7 +
key_color       = "Cyan"
8 +
separator_color = "White"
9 +
10 +
[palette]
11 +
type = "Full"
12 +
visible = false
13 +
14 +
[bar]
15 +
glyph           = "ߋ"
16 +
symbol_open     = '['
17 +
symbol_close    = ']'
18 +
hide_delimiters = true
19 +
visible         = true
20 +
21 +
[box]
22 +
border          = "plain"
23 +
visible         = true
24 +
25 +
[box.inner_margin]
26 +
x               = 1
27 +
y               = 0
28 +
29 +
[randomize]
30 +
key_color       = false
31 +
separator_color = false
32 +
33 +
[keys]
34 +
host            = "Host"
35 +
kernel          = "Kernel"
36 +
battery         = "Battery"
37 +
os              = "OS"
38 +
de              = "DE"
39 +
wm              = "WM"
40 +
distro          = "Distro"
41 +
terminal        = "Terminal"
42 +
shell           = "Shell"
43 +
packages        = "Packages"
44 +
uptime          = "Uptime"
45 +
memory          = "Memory"
46 +
machine         = "Machine"
47 +
local_ip        = "Local IP"
48 +
backlight       = "Brightness"
49 +
resolution      = "Resolution"
50 +
cpu_load        = "CPU Load"
51 +
cpu             = "CPU"
52 +
gpu             = "GPU"
53 +
disk_space      = "Disk Space"
macchina/themes/Lithium.toml (added) +60 −0
1 +
# Lithium
2 +
3 +
spacing         = 1
4 +
padding         = 0
5 +
hide_ascii      = true
6 +
separator       = " "
7 +
key_color       = "Yellow"
8 +
separator_color = "Yellow"
9 +
10 +
[palette]
11 +
type            = "Light"
12 +
glyph           = "●"
13 +
spacing         = 2
14 +
visible         = true
15 +
16 +
[bar]
17 +
glyph           = "●"
18 +
symbol_open     = '('
19 +
symbol_close    = ')'
20 +
visible         = false
21 +
hide_delimiters = true
22 +
23 +
[box]
24 +
title           = " "
25 +
border          = "plain"
26 +
visible         = false
27 +
28 +
[box.inner_margin]
29 +
x               = 2
30 +
y               = 1
31 +
32 +
[custom_ascii]
33 +
color           = "Yellow"
34 +
35 +
[randomize]
36 +
key_color       = false
37 +
separator_color = false
38 +
pool            = "base"
39 +
40 +
[keys]
41 +
host            = "Host"
42 +
kernel          = "Kernel"
43 +
battery         = "Battery"
44 +
os              = "OS"
45 +
de              = "DE"
46 +
wm              = "WM"
47 +
distro          = "Distro"
48 +
terminal        = "Terminal"
49 +
shell           = "Shell"
50 +
packages        = "Packages"
51 +
uptime          = "Uptime"
52 +
memory          = "Memory"
53 +
machine         = "Machine"
54 +
local_ip        = "IP"
55 +
backlight       = "Brightness"
56 +
resolution      = "Resolution"
57 +
cpu_load        = "CPU Load"
58 +
cpu             = "CPU"
59 +
gpu             = "GPU"
60 +
disk_space      = "Disk Space"
misc/blocklist.txt (added) +11 −0
1 +
[Personal Blocklist]
2 +
! Title: Personal Blocklist
3 +
! Description: Increases security! Blocks Malware, Spam, Scam and Phishing.
4 +
! Homepage: https://github.com/stevedylandev/dotfiles
5 +
! Expires: 1 day
6 +
! Last modified: 06 Sep 2025 18:54 UTC
7 +
! Version: 2025.0906.1854.58
8 +
! Syntax: PersonalBlocklist
9 +
! Number of entries: 1
10 +
!
11 +
||chat.avatar.ext.hp.com^
nvim/init.lua (added) +6 −0
1 +
require("options")
2 +
require("keymaps")
3 +
require("autocmds")
4 +
require("plugins")
5 +
require("lsp")
6 +
require("treesitter")
nvim/lsp/astro.lua (added) +16 −0
1 +
return {
2 +
  cmd = {
3 +
    "astro-ls", "--stdio"
4 +
  },
5 +
  filetypes = {
6 +
    "astro",
7 +
  },
8 +
  root_markers = { "package.json", "tsconfig.json", "jsconfig.json", ".git" },
9 +
  single_file_support = true,
10 +
  log_level = vim.lsp.protocol.MessageType.Warning,
11 +
  init_options = {
12 +
    typescript = {
13 +
      tsdk = "/Users/stevedylandev/.bun/install/global/node_modules/typescript/lib"
14 +
    },
15 +
  },
16 +
}
nvim/lsp/gopls.lua (added) +97 −0
1 +
return {
2 +
	cmd = { "gopls" },                                         -- Command to start the language server
3 +
	filetypes = { "go", "gomod", "gowork", "gotmpl", "gosum" }, -- File types that this server will handle
4 +
	root_markers = { "go.mod", "go.work", ".git" },            -- Markers to identify the root of the project
5 +
	settings = {                                               -- Settings for the language server
6 +
		gopls = {
7 +
			gofumpt = true,
8 +
			codelenses = {
9 +
				gc_details = false,
10 +
				generate = true,
11 +
				regenerate_cgo = true,
12 +
				run_govulncheck = true,
13 +
				test = true,
14 +
				tidy = true,
15 +
				upgrade_dependency = true,
16 +
				vendor = true,
17 +
			},
18 +
			hints = {
19 +
				assignVariableTypes = false,
20 +
				compositeLiteralFields = false,
21 +
				compositeLiteralTypes = false,
22 +
				constantValues = false,
23 +
				functionTypeParameters = false,
24 +
				parameterNames = false,
25 +
				rangeVariableTypes = false,
26 +
			},
27 +
			analyses = {
28 +
				nilness = true,
29 +
				unusedparams = true,
30 +
				unusedwrite = true,
31 +
				useany = true,
32 +
				unreachable = true,
33 +
				modernize = true,
34 +
				stylecheck = true,
35 +
				appends = true,
36 +
				asmdecl = true,
37 +
				assign = true,
38 +
				atomic = true,
39 +
				bools = true,
40 +
				buildtag = true,
41 +
				cgocall = true,
42 +
				composite = true,
43 +
				contextcheck = true,
44 +
				deba = true,
45 +
				atomicalign = true,
46 +
				composites = true,
47 +
				copylocks = true,
48 +
				deepequalerrors = true,
49 +
				defers = true,
50 +
				deprecated = true,
51 +
				directive = true,
52 +
				embed = true,
53 +
				errorsas = true,
54 +
				fillreturns = true,
55 +
				framepointer = true,
56 +
				gofix = true,
57 +
				hostport = true,
58 +
				infertypeargs = true,
59 +
				lostcancel = true,
60 +
				httpresponse = true,
61 +
				ifaceassert = true,
62 +
				loopclosure = true,
63 +
				nilfunc = true,
64 +
				nonewvars = true,
65 +
				noresultvalues = true,
66 +
				printf = true,
67 +
				shadow = true,
68 +
				shift = true,
69 +
				sigchanyzer = true,
70 +
				simplifycompositelit = true,
71 +
				simplifyrange = true,
72 +
				simplifyslice = true,
73 +
				slog = true,
74 +
				sortslice = true,
75 +
				stdmethods = true,
76 +
				stdversion = true,
77 +
				stringintconv = true,
78 +
				structtag = true,
79 +
				testinggoroutine = true,
80 +
				tests = true,
81 +
				timeformat = true,
82 +
				unmarshal = true,
83 +
				unsafeptr = true,
84 +
				unusedfunc = true,
85 +
				unusedresult = true,
86 +
				waitgroup = true,
87 +
				yield = true,
88 +
				unusedvariable = true,
89 +
			},
90 +
			usePlaceholders = true,
91 +
			completeUnimported = true,
92 +
			staticcheck = true,
93 +
			directoryFilters = { "-.git", "-.vscode", "-.idea", "-.vscode-test", "-node_modules" },
94 +
			semanticTokens = true,
95 +
		},
96 +
	},
97 +
}
nvim/lsp/html.lua (added) +12 −0
1 +
return {
2 +
	cmd = {
3 +
		"vscode-html-language-server", "--stdio"
4 +
	},
5 +
	filetypes = {
6 +
		'html',
7 +
	},
8 +
	root_markers = {
9 +
		'index.js', 'index.html', 'styles.css', '.git' },
10 +
	single_file_support = true,
11 +
	log_level = vim.lsp.protocol.MessageType.Warning,
12 +
}
nvim/lsp/json.lua (added) +10 −0
1 +
return {
2 +
	cmd = {
3 +
		"bunx", "@biomejs/biome", "lsp-proxy"
4 +
	},
5 +
	filetypes = {
6 +
		'json',
7 +
	},
8 +
	single_file_support = true,
9 +
	log_level = vim.lsp.protocol.MessageType.Warning,
10 +
}
nvim/lsp/lua_ls.lua (added) +28 −0
1 +
return {
2 +
  cmd = {
3 +
    "lua-language-server",
4 +
  },
5 +
  filetypes = {
6 +
    "lua",
7 +
  },
8 +
  root_markers = {
9 +
    ".git",
10 +
    ".luacheckrc",
11 +
    ".luarc.json",
12 +
    ".luarc.jsonc",
13 +
    ".stylua.toml",
14 +
    "selene.toml",
15 +
    "selene.yml",
16 +
    "stylua.toml",
17 +
  },
18 +
  settings = {
19 +
    Lua = {
20 +
      diagnostics = {
21 +
        globals = { "vim", "MiniPick", "MiniSnippets" }
22 +
      },
23 +
    },
24 +
  },
25 +
26 +
  single_file_support = true,
27 +
  log_level = vim.lsp.protocol.MessageType.Warning,
28 +
}
nvim/lsp/rust-analyzer.lua (added) +35 −0
1 +
return {
2 +
	cmd = {
3 +
		"rust-analyzer",
4 +
	},
5 +
	filetypes = {
6 +
		"rust",
7 +
	},
8 +
	root_markers = {
9 +
		"Cargo.toml",
10 +
		"Cargo.lock",
11 +
		".git",
12 +
	},
13 +
	settings = {
14 +
		["rust-analyzer"] = {
15 +
			cargo = {
16 +
				allFeatures = true,
17 +
				loadOutDirsFromCheck = true,
18 +
				runBuildScripts = true,
19 +
			},
20 +
			-- Add other rust-analyzer specific settings here
21 +
			checkOnSave = true,
22 +
			procMacro = {
23 +
				enable = true,
24 +
				ignored = {
25 +
					leptos_macro = {
26 +
						-- "component",
27 +
						"server",
28 +
					},
29 +
				},
30 +
			},
31 +
		},
32 +
	},
33 +
	single_file_support = true,
34 +
	log_level = vim.lsp.protocol.MessageType.Warning,
35 +
}
nvim/lsp/solc.lua (added) +13 −0
1 +
return {
2 +
  cmd = { 'nomicfoundation-solidity-language-server', '--stdio' },
3 +
  filetypes = {
4 +
    "sol",
5 +
    "solidity"
6 +
  },
7 +
  root_markers = {
8 +
    ".gitignore",
9 +
    "foundry.toml"
10 +
  },
11 +
  single_file_support = true,
12 +
  log_level = vim.lsp.protocol.MessageType.Warning,
13 +
}
nvim/lsp/tsserver.lua (added) +17 −0
1 +
return {
2 +
	cmd = {
3 +
		"vtsls", "--stdio"
4 +
	},
5 +
	filetypes = {
6 +
		'javascript',
7 +
		'javascriptreact',
8 +
		'javascript.jsx',
9 +
		'typescript',
10 +
		'typescriptreact',
11 +
		'typescript.tsx',
12 +
	},
13 +
	root_markers = {
14 +
		'tsconfig.json', 'jsconfig.json', 'package.json', '.git' },
15 +
	single_file_support = true,
16 +
	log_level = vim.lsp.protocol.MessageType.Warning,
17 +
}
nvim/lua/autocmds.lua (added) +45 −0
1 +
vim.api.nvim_create_autocmd('TextYankPost', {
2 +
  desc = 'Highlight when yanking (copying) text',
3 +
  group = vim.api.nvim_create_augroup('kickstart-highlight-yank', { clear = true }),
4 +
  callback = function()
5 +
    vim.highlight.on_yank()
6 +
  end,
7 +
})
8 +
9 +
vim.api.nvim_create_autocmd("FileType", {
10 +
    callback = function(ev)
11 +
        local lang = vim.treesitter.language.get_lang(ev.match) or ev.match
12 +
        if vim.treesitter.language.add(lang) then
13 +
            vim.treesitter.start(ev.buf, lang)
14 +
        end
15 +
    end
16 +
})
17 +
18 +
-- Reload files automatically if edited externally
19 +
vim.api.nvim_create_autocmd({ "FocusGained", "BufEnter", "CursorHold", "CursorHoldI" }, {
20 +
  pattern = "*",
21 +
  callback = function()
22 +
    if vim.fn.mode() ~= "c" then
23 +
      vim.cmd("checktime")
24 +
    end
25 +
  end,
26 +
})
27 +
28 +
vim.api.nvim_create_autocmd("VimEnter", {
29 +
  callback = function()
30 +
    if vim.fn.argv(0) == "" then
31 +
      vim.schedule(function()
32 +
        require("mini.pick").builtin.files()
33 +
      end)
34 +
    end
35 +
  end,
36 +
})
37 +
38 +
vim.api.nvim_create_autocmd("FileType", {
39 +
  pattern = { "markdown", "mdx", "text" },
40 +
  callback = function()
41 +
    vim.opt_local.wrap = true
42 +
    vim.opt_local.linebreak = true  -- Break at word boundaries
43 +
    vim.opt_local.spell = true
44 +
  end,
45 +
})
nvim/lua/keymaps.lua (added) +81 −0
1 +
local opts = { noremap = true, silent = true }
2 +
local map = vim.api.nvim_set_keymap
3 +
4 +
-- Saving
5 +
map("n", "++", "<cmd>write!<CR>", opts)
6 +
7 +
-- Tmux Navigation
8 +
map("n", "<C-h>", "<cmd>TmuxNavigateLeft<CR>", opts)
9 +
map("n", "<C-j>", "<cmd>TmuxNavigateDown<CR>", opts)
10 +
map("n", "<C-k>", "<cmd>TmuxNavigateUp<CR>", opts)
11 +
map("n", "<C-l>", "<cmd>TmuxNavigateRight<CR>", opts)
12 +
13 +
-- Navigation
14 +
map("n", "j", "gj", opts)
15 +
map("n", "k", "gk", opts)
16 +
map("n", "n", "nzzzv", opts)
17 +
map("n", "N", "Nzzzv", opts)
18 +
map("n", "<C-d>", "<C-d>zz", opts)
19 +
map("n", "<C-u>", "<C-u>zz", opts)
20 +
21 +
-- Buffers
22 +
map("n", "<S-l>", ":bnext<CR>", opts)
23 +
map("n", "<S-h>", ":bprevious<CR>", opts)
24 +
map("n", "<leader>o", "<cmd>Pick buffers<CR>", opts)
25 +
map("n", "<leader>c", ":bd<cr>", opts)
26 +
27 +
-- Quickfix
28 +
map("n", "<C-n>", "<cmd>cnext<CR>zz", opts)
29 +
map("n", "<C-m>", "<cmd>cprev<CR>zz", opts)
30 +
map("n", "<leader>q", "<cmd>copen<CR>", opts)
31 +
map("n", "<leader>a", "<cmd>cclose<CR>", opts)
32 +
33 +
-- Search
34 +
map("n", "<leader>h", "<cmd>nohlsearch<CR>", opts)
35 +
map("n", "<leader>f", "<cmd>Pick files<CR>", opts)
36 +
map("n", "<leader>/", "<cmd>Pick grep_live<CR>", opts)
37 +
map("n", "<leader>hh", "<cmd>Pick help<CR>", opts)
38 +
39 +
-- Diagnostics
40 +
map("n", "<leader>d", "<cmd>Pick diagnostic<CR>", opts)
41 +
42 +
-- Git
43 +
map("n", "<leader>gg", "<cmd>lua MiniDiff.toggle_overlay()<CR>", opts)
44 +
45 +
-- File explorer
46 +
map("n", "<leader>e", "<cmd>lua MiniFiles.open()<CR>", opts)
47 +
48 +
-- Spelling
49 +
vim.keymap.set("n", "<leader>s", function()
50 +
  local word = vim.fn.expand("<cword>")
51 +
  local suggestions = vim.fn.spellsuggest(word, 25)
52 +
  MiniPick.start({
53 +
    source = {
54 +
      items = suggestions,
55 +
      name = "Spelling: " .. word,
56 +
      choose = function(item)
57 +
        vim.schedule(function()
58 +
          vim.cmd("normal! ciw" .. item)
59 +
          vim.cmd("stopinsert")
60 +
        end)
61 +
      end,
62 +
    },
63 +
  })
64 +
end, { desc = "Spelling suggestions" })
65 +
66 +
-- Editing
67 +
map("n", "J", "mzJ`z", opts)
68 +
map("n", "YY", "va{Vy", opts)
69 +
map("x", "p", '"_dP', opts)
70 +
71 +
-- Insert mode
72 +
map("i", "jj", "<ESC>", opts)
73 +
map("i", "jk", "<ESC>", opts)
74 +
map("i", "<C-j>", 'pumvisible() ? "\\<C-n>" : "\\<C-j>"', { expr = true, noremap = true, silent = true })
75 +
map("i", "<C-k>", 'pumvisible() ? "\\<C-p>" : "\\<C-k>"', { expr = true, noremap = true, silent = true })
76 +
77 +
-- Visual mode
78 +
map("v", "<", "<gv", opts)
79 +
map("v", ">", ">gv", opts)
80 +
map("v", "J", ":m '>+1<CR>gv=gv", opts)
81 +
map("v", "K", ":m '<-2<CR>gv=gv", opts)
nvim/lua/lsp.lua (added) +87 −0
1 +
vim.lsp.enable({
2 +
  "astro",
3 +
  "gopls",
4 +
  "lua_ls",
5 +
  "tsserver",
6 +
  "rust-analyzer",
7 +
  "solc",
8 +
  "html",
9 +
  "json"
10 +
})
11 +
12 +
vim.api.nvim_create_autocmd("LspAttach", {
13 +
  group = vim.api.nvim_create_augroup('lsp-attach', { clear = true }),
14 +
  callback = function(event)
15 +
    local map = function(keys, func, desc)
16 +
      vim.keymap.set("n", keys, func, { buffer = event.buf, desc = "LSP: " .. desc })
17 +
    end
18 +
19 +
    map("gl", vim.diagnostic.open_float, "Open Diagnostic Float")
20 +
    map("K", vim.lsp.buf.hover, "Hover Documentation")
21 +
    map("gs", vim.lsp.buf.signature_help, "Signature Documentation")
22 +
    map("gD", vim.lsp.buf.declaration, "Goto Declaration")
23 +
    map("<leader>la", vim.lsp.buf.code_action, "Code Action")
24 +
    map("<leader>lr", vim.lsp.buf.rename, "Rename all references")
25 +
    map("<leader>lf", vim.lsp.buf.format, "Format")
26 +
    map("<leader>v", "<cmd>vsplit | lua vim.lsp.buf.definition()<cr>", "Goto Definition in Vertical Split")
27 +
28 +
    local function client_supports_method(client, method, bufnr)
29 +
      if vim.fn.has 'nvim-0.11' == 1 then
30 +
        return client:supports_method(method, bufnr)
31 +
      else
32 +
        return client.supports_method(method, { bufnr = bufnr })
33 +
      end
34 +
    end
35 +
36 +
    local client = vim.lsp.get_client_by_id(event.data.client_id)
37 +
    if client and client_supports_method(client, vim.lsp.protocol.Methods.textDocument_documentHighlight, event.buf) then
38 +
      local highlight_augroup = vim.api.nvim_create_augroup('lsp-highlight', { clear = false })
39 +
40 +
      -- When cursor stops moving: Highlights all instances of the symbol under the cursor
41 +
      vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
42 +
        buffer = event.buf,
43 +
        group = highlight_augroup,
44 +
        callback = vim.lsp.buf.document_highlight,
45 +
      })
46 +
      -- When cursor moves: Clears the highlighting
47 +
      vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
48 +
        buffer = event.buf,
49 +
        group = highlight_augroup,
50 +
        callback = vim.lsp.buf.clear_references,
51 +
      })
52 +
53 +
      -- When LSP detaches: Clears the highlighting
54 +
      vim.api.nvim_create_autocmd('LspDetach', {
55 +
        group = vim.api.nvim_create_augroup('lsp-detach', { clear = true }),
56 +
        callback = function(event2)
57 +
          vim.lsp.buf.clear_references()
58 +
          vim.api.nvim_clear_autocmds { group = 'lsp-highlight', buffer = event2.buf }
59 +
        end,
60 +
      })
61 +
    end
62 +
  end,
63 +
})
64 +
65 +
vim.diagnostic.config({
66 +
  virtual_lines = false,
67 +
  -- virtual_text = true,
68 +
  underline = true,
69 +
  update_in_insert = false,
70 +
  severity_sort = true,
71 +
  float = {
72 +
    border = "rounded",
73 +
    source = true,
74 +
  },
75 +
  signs = {
76 +
    text = {
77 +
      [vim.diagnostic.severity.ERROR] = "󰅚 ",
78 +
      [vim.diagnostic.severity.WARN] = "󰀪 ",
79 +
      [vim.diagnostic.severity.INFO] = "󰋽 ",
80 +
      [vim.diagnostic.severity.HINT] = "󰌶 ",
81 +
    },
82 +
    numhl = {
83 +
      [vim.diagnostic.severity.ERROR] = "ErrorMsg",
84 +
      [vim.diagnostic.severity.WARN] = "WarningMsg",
85 +
    },
86 +
  },
87 +
})
nvim/lua/options.lua (added) +71 −0
1 +
vim.g.mapleader = " "
2 +
vim.g.maplocalleader = "\\"
3 +
vim.g.autoformat = true
4 +
vim.g.root_spec = { "lsp", { ".git", "lua" }, "cwd" }
5 +
vim.opt.swapfile = false
6 +
vim.opt.autowrite = true           -- Enable auto write
7 +
vim.opt.clipboard = "unnamedplus"  -- Sync with system clipboard
8 +
vim.opt.completeopt = "menu,menuone,noselect"
9 +
vim.opt.conceallevel = 3           -- Hide * markup for bold and italic
10 +
vim.opt.confirm = true             -- Confirm to save changes before exiting modified buffer
11 +
vim.opt.cursorline = true          -- Enable highlighting of the current line
12 +
vim.opt.expandtab = true           -- Use spaces instead of tabs
13 +
vim.opt.formatoptions = "jcroqlnt" -- tcqj
14 +
vim.opt.grepformat = "%f:%l:%c:%m"
15 +
vim.opt.grepprg = "rg --vimgrep"
16 +
vim.opt.ignorecase = true      -- Ignore case
17 +
vim.opt.inccommand = "nosplit" -- preview incremental substitute
18 +
vim.opt.incsearch = true
19 +
vim.opt.laststatus = 3         -- global statusline
20 +
vim.opt.list = false           -- Don't show invisible characters
21 +
vim.opt.mouse = "a"            -- Enable mouse mode
22 +
vim.opt.number = true          -- Print line number
23 +
vim.opt.pumblend = 10          -- Popup blend
24 +
vim.opt.pumheight = 10         -- Maximum number of entries in a popup
25 +
vim.opt.relativenumber = true  -- Relative line numbers
26 +
vim.opt.scrolloff = 4          -- Lines of context
27 +
vim.opt.sessionoptions = { "buffers", "curdir", "tabpages", "winsize", "help", "globals", "skiprtp", "folds" }
28 +
vim.opt.shiftround = true      -- Round indent
29 +
vim.opt.shiftwidth = 2         -- Size of an indent
30 +
vim.opt.shortmess:append({ W = true, I = true, c = true, C = true })
31 +
vim.opt.showmode = false       -- Dont show mode since we have a statusline
32 +
vim.opt.sidescrolloff = 8      -- Columns of context
33 +
vim.opt.signcolumn = "yes"     -- Always show the signcolumn, otherwise it would shift the text each time
34 +
vim.opt.smartcase = true       -- Don't ignore case with capitals
35 +
vim.opt.smartindent = true     -- Insert indents automatically
36 +
vim.opt.spelllang = { "en" }
37 +
vim.opt.splitbelow = true      -- Put new windows below current
38 +
vim.opt.splitkeep = "screen"
39 +
vim.opt.splitright = true      -- Put new windows right of current
40 +
vim.opt.tabstop = 2            -- Number of spaces tabs count for
41 +
vim.opt.termguicolors = true   -- True color support
42 +
vim.opt.timeoutlen = 300
43 +
vim.opt.undofile = true
44 +
vim.opt.undolevels = 10000
45 +
vim.opt.updatetime = 200               -- Save swap file and trigger CursorHold
46 +
vim.opt.virtualedit = "block"          -- Allow cursor to move where there is no text in visual block mode
47 +
vim.opt.wildmode = "longest:full,full" -- Command-line completion mode
48 +
vim.opt.winminwidth = 5                -- Minimum window width
49 +
vim.opt.wrap = false                   -- Disable line wrap
50 +
vim.opt.fillchars = {
51 +
  foldopen = "",
52 +
  foldclose = "",
53 +
  fold = " ",
54 +
  foldsep = " ",
55 +
  diff = "╱",
56 +
  eob = " ",
57 +
}
58 +
vim.opt.shell = "sh"
59 +
vim.opt.smoothscroll = true
60 +
61 +
-- Treesitter folding
62 +
vim.o.foldenable = true
63 +
vim.o.foldlevel = 99
64 +
vim.o.foldmethod = "expr"
65 +
vim.o.foldexpr = "v:lua.vim.treesitter.foldexpr()"
66 +
67 +
-- Fix markdown indentation settings
68 +
vim.g.markdown_recommended_style = 0
69 +
vim.filetype.add({ extension = { mdx = "mdx", }, })
70 +
vim.treesitter.language.register("markdown", "mdx")
71 +
nvim/lua/plugins.lua (added) +112 −0
1 +
-- Colorscheme
2 +
vim.pack.add({
3 +
	"https://github.com/stevedylandev/darkmatter-nvim",
4 +
  'https://github.com/echasnovski/mini.nvim',
5 +
  'https://github.com/shaunsingh/nord.nvim'
6 +
})
7 +
vim.cmd.colorscheme('nord')
8 +
9 +
-- Mini.nvim — startup modules
10 +
local win_config = function()
11 +
  local height = math.floor(0.618 * vim.o.lines)
12 +
  local width = math.floor(0.618 * vim.o.columns)
13 +
  return {
14 +
    anchor = 'NW',
15 +
    height = height,
16 +
    width = width,
17 +
    row = math.floor(0.5 * (vim.o.lines - height)),
18 +
    col = math.floor(0.5 * (vim.o.columns - width)),
19 +
  }
20 +
end
21 +
22 +
require("mini.pick").setup({
23 +
  mappings = {
24 +
    choose_marked = '<C-y>',
25 +
    move_down     = '<C-j>',
26 +
    move_up       = '<C-k>',
27 +
  },
28 +
  window = { config = win_config }
29 +
})
30 +
31 +
vim.api.nvim_set_hl(0, "MiniPickMatchCurrent",
32 +
  { bg = vim.g.terminal_color_8
33 +
  })
34 +
35 +
require('mini.icons').setup()
36 +
vim.api.nvim_set_hl(0, 'MiniIconsAzure', { fg = vim.g.terminal_color_12 })
37 +
vim.api.nvim_set_hl(0, 'MiniIconsBlue', { fg = vim.g.terminal_color_4 })
38 +
vim.api.nvim_set_hl(0, 'MiniIconsCyan', { fg = vim.g.terminal_color_6 })
39 +
vim.api.nvim_set_hl(0, 'MiniIconsGreen', { fg = vim.g.terminal_color_2 })
40 +
vim.api.nvim_set_hl(0, 'MiniIconsGrey', { fg = vim.g.terminal_color_8 })
41 +
vim.api.nvim_set_hl(0, 'MiniIconsOrange', { fg = vim.g.terminal_color_3 })
42 +
vim.api.nvim_set_hl(0, 'MiniIconsPurple', { fg = vim.g.terminal_color_5 })
43 +
vim.api.nvim_set_hl(0, 'MiniIconsRed', { fg = vim.g.terminal_color_1 })
44 +
vim.api.nvim_set_hl(0, 'MiniIconsYellow', { fg = vim.g.terminal_color_11 })
45 +
46 +
require('mini.diff').setup({
47 +
  view = {
48 +
    style = vim.go.number and 'sign' or 'number',
49 +
    signs = {
50 +
      add = "+",
51 +
      change = "~",
52 +
      delete = "-",
53 +
      topdelete = "",
54 +
      changedelete = "▎",
55 +
      untracked = "+"
56 +
    },
57 +
    priority = 199,
58 +
  },
59 +
})
60 +
require('mini.statusline').setup()
61 +
require('mini.extra').setup()
62 +
63 +
-- Deferred — loads right after startup via vim.schedule()
64 +
vim.schedule(function()
65 +
  vim.pack.add({
66 +
    "https://github.com/christoomey/vim-tmux-navigator",
67 +
    "https://github.com/rafamadriz/friendly-snippets",
68 +
  })
69 +
70 +
  require("mini.comment").setup({
71 +
    mappings = {
72 +
      comment = 'gb',
73 +
      comment_visual = 'gb',
74 +
      textobject = 'gb'
75 +
    }
76 +
  })
77 +
78 +
  require('mini.surround').setup({
79 +
    mappings = {
80 +
      replace = 'cs', -- Replace surrounding
81 +
    },
82 +
  })
83 +
84 +
  require('mini.files').setup({
85 +
    mappings = {
86 +
      close      = '<ESC>',
87 +
      go_in_plus = '<CR>'
88 +
    }
89 +
  })
90 +
end)
91 +
92 +
-- Lazy — loads on InsertEnter
93 +
vim.api.nvim_create_autocmd('InsertEnter', { once = true, callback = function()
94 +
  require("mini.completion").setup({
95 +
    mappings = {
96 +
      scroll_down = '',
97 +
      scroll_up = '',
98 +
    },
99 +
  })
100 +
101 +
  local gen_loader = require('mini.snippets').gen_loader
102 +
  require('mini.snippets').setup({
103 +
    snippets = {
104 +
      gen_loader.from_runtime("snippets"),
105 +
      gen_loader.from_lang(),
106 +
    },
107 +
    mappings = {
108 +
      expand = '',
109 +
    },
110 +
  })
111 +
  MiniSnippets.start_lsp_server()
112 +
end })
nvim/lua/treesitter.lua (added) +5 −0
1 +
-- Native treesitter parsers installed via luarocks
2 +
local rocks_path = vim.fn.stdpath("data") .. "/site/lib/luarocks/rocks-5.1"
3 +
for _, parser_dir in ipairs(vim.fn.glob(rocks_path .. "/tree-sitter-*/*/", true, true)) do
4 +
  vim.opt.runtimepath:prepend(parser_dir)
5 +
end
opencode/opencode.json (added) +5 −0
1 +
{
2 +
	"$schema": "https://opencode.ai/config.json",
3 +
	"model": "anthropic/claude-sonnet-4-20250514",
4 +
	"theme": "system"
5 +
}
opencode/themes/ansi.json (added) +223 −0
1 +
{
2 +
  "$schema": "https://opencode.ai/theme.json",
3 +
  "defs": {
4 +
    "base00": 0,
5 +
    "base01": 8,
6 +
    "base02": 10,
7 +
    "base03": 11,
8 +
    "base04": 12,
9 +
    "base05": 7,
10 +
    "base06": 14,
11 +
    "base07": 15,
12 +
    "base08": 1,
13 +
    "base09": 9,
14 +
    "base0A": 3,
15 +
    "base0B": 2,
16 +
    "base0C": 6,
17 +
    "base0D": 4,
18 +
    "base0E": 5,
19 +
    "base0F": 13
20 +
  },
21 +
  "theme": {
22 +
    "primary": {
23 +
      "dark": "base0D",
24 +
      "light": "base0D"
25 +
    },
26 +
    "secondary": {
27 +
      "dark": "base0E",
28 +
      "light": "base0E"
29 +
    },
30 +
    "accent": {
31 +
      "dark": "base0C",
32 +
      "light": "base0C"
33 +
    },
34 +
    "error": {
35 +
      "dark": "base08",
36 +
      "light": "base08"
37 +
    },
38 +
    "warning": {
39 +
      "dark": "base0A",
40 +
      "light": "base0A"
41 +
    },
42 +
    "success": {
43 +
      "dark": "base0B",
44 +
      "light": "base0B"
45 +
    },
46 +
    "info": {
47 +
      "dark": "base0D",
48 +
      "light": "base0D"
49 +
    },
50 +
    "text": {
51 +
      "dark": "base05",
52 +
      "light": "base02"
53 +
    },
54 +
    "textMuted": {
55 +
      "dark": "base04",
56 +
      "light": "base03"
57 +
    },
58 +
    "background": {
59 +
      "dark": "base00",
60 +
      "light": "base07"
61 +
    },
62 +
    "backgroundPanel": {
63 +
      "dark": "base01",
64 +
      "light": "base06"
65 +
    },
66 +
    "backgroundElement": {
67 +
      "dark": "base01",
68 +
      "light": "base06"
69 +
    },
70 +
    "border": {
71 +
      "dark": "base02",
72 +
      "light": "base04"
73 +
    },
74 +
    "borderActive": {
75 +
      "dark": "base03",
76 +
      "light": "base03"
77 +
    },
78 +
    "borderSubtle": {
79 +
      "dark": "base01",
80 +
      "light": "base05"
81 +
    },
82 +
    "diffAdded": {
83 +
      "dark": "base0B",
84 +
      "light": "base0B"
85 +
    },
86 +
    "diffRemoved": {
87 +
      "dark": "base08",
88 +
      "light": "base08"
89 +
    },
90 +
    "diffContext": {
91 +
      "dark": "base04",
92 +
      "light": "base04"
93 +
    },
94 +
    "diffHunkHeader": {
95 +
      "dark": "base03",
96 +
      "light": "base03"
97 +
    },
98 +
    "diffHighlightAdded": {
99 +
      "dark": "base0B",
100 +
      "light": "base0B"
101 +
    },
102 +
    "diffHighlightRemoved": {
103 +
      "dark": "base08",
104 +
      "light": "base08"
105 +
    },
106 +
    "diffAddedBg": {
107 +
      "dark": "base01",
108 +
      "light": "base06"
109 +
    },
110 +
    "diffRemovedBg": {
111 +
      "dark": "base01",
112 +
      "light": "base06"
113 +
    },
114 +
    "diffContextBg": {
115 +
      "dark": "base00",
116 +
      "light": "base07"
117 +
    },
118 +
    "diffLineNumber": {
119 +
      "dark": "base03",
120 +
      "light": "base04"
121 +
    },
122 +
    "diffAddedLineNumberBg": {
123 +
      "dark": "base01",
124 +
      "light": "base06"
125 +
    },
126 +
    "diffRemovedLineNumberBg": {
127 +
      "dark": "base01",
128 +
      "light": "base06"
129 +
    },
130 +
    "markdownText": {
131 +
      "dark": "base05",
132 +
      "light": "base02"
133 +
    },
134 +
    "markdownHeading": {
135 +
      "dark": "base0D",
136 +
      "light": "base0D"
137 +
    },
138 +
    "markdownLink": {
139 +
      "dark": "base0C",
140 +
      "light": "base0C"
141 +
    },
142 +
    "markdownLinkText": {
143 +
      "dark": "base0D",
144 +
      "light": "base0D"
145 +
    },
146 +
    "markdownCode": {
147 +
      "dark": "base0B",
148 +
      "light": "base0B"
149 +
    },
150 +
    "markdownBlockQuote": {
151 +
      "dark": "base03",
152 +
      "light": "base03"
153 +
    },
154 +
    "markdownEmph": {
155 +
      "dark": "base0E",
156 +
      "light": "base0E"
157 +
    },
158 +
    "markdownStrong": {
159 +
      "dark": "base0A",
160 +
      "light": "base0A"
161 +
    },
162 +
    "markdownHorizontalRule": {
163 +
      "dark": "base03",
164 +
      "light": "base03"
165 +
    },
166 +
    "markdownListItem": {
167 +
      "dark": "base0D",
168 +
      "light": "base0D"
169 +
    },
170 +
    "markdownListEnumeration": {
171 +
      "dark": "base0C",
172 +
      "light": "base0C"
173 +
    },
174 +
    "markdownImage": {
175 +
      "dark": "base0C",
176 +
      "light": "base0C"
177 +
    },
178 +
    "markdownImageText": {
179 +
      "dark": "base0D",
180 +
      "light": "base0D"
181 +
    },
182 +
    "markdownCodeBlock": {
183 +
      "dark": "base05",
184 +
      "light": "base02"
185 +
    },
186 +
    "syntaxComment": {
187 +
      "dark": "base03",
188 +
      "light": "base04"
189 +
    },
190 +
    "syntaxKeyword": {
191 +
      "dark": "base0E",
192 +
      "light": "base0E"
193 +
    },
194 +
    "syntaxFunction": {
195 +
      "dark": "base0D",
196 +
      "light": "base0D"
197 +
    },
198 +
    "syntaxVariable": {
199 +
      "dark": "base08",
200 +
      "light": "base08"
201 +
    },
202 +
    "syntaxString": {
203 +
      "dark": "base0B",
204 +
      "light": "base0B"
205 +
    },
206 +
    "syntaxNumber": {
207 +
      "dark": "base09",
208 +
      "light": "base09"
209 +
    },
210 +
    "syntaxType": {
211 +
      "dark": "base0A",
212 +
      "light": "base0A"
213 +
    },
214 +
    "syntaxOperator": {
215 +
      "dark": "base05",
216 +
      "light": "base02"
217 +
    },
218 +
    "syntaxPunctuation": {
219 +
      "dark": "base05",
220 +
      "light": "base02"
221 +
    }
222 +
  }
223 +
}
opencode/themes/black-metal-bathory.json (added) +223 −0
1 +
{
2 +
  "$schema": "https://opencode.ai/theme.json",
3 +
  "defs": {
4 +
    "nord0": "#121113",
5 +
    "nord1": "#121212",
6 +
    "nord2": "#222222",
7 +
    "nord3": "#333333",
8 +
    "nord4": "#999999",
9 +
    "nord5": "#c1c1c1",
10 +
    "nord6": "#999999",
11 +
    "nord7": "#c1c1c1",
12 +
    "nord8": "#5f8787",
13 +
    "nord9": "#aaaaaa",
14 +
    "nord10": "#e78a53",
15 +
    "nord11": "#fbcb97",
16 +
    "nord12": "#aaaaaa",
17 +
    "nord13": "#888888",
18 +
    "nord14": "#999999",
19 +
    "nord15": "#444444"
20 +
  },
21 +
  "theme": {
22 +
    "primary": {
23 +
      "dark": "nord8",
24 +
      "light": "nord10"
25 +
    },
26 +
    "secondary": {
27 +
      "dark": "nord9",
28 +
      "light": "nord9"
29 +
    },
30 +
    "accent": {
31 +
      "dark": "nord7",
32 +
      "light": "nord7"
33 +
    },
34 +
    "error": {
35 +
      "dark": "nord11",
36 +
      "light": "nord11"
37 +
    },
38 +
    "warning": {
39 +
      "dark": "nord12",
40 +
      "light": "nord12"
41 +
    },
42 +
    "success": {
43 +
      "dark": "nord14",
44 +
      "light": "nord14"
45 +
    },
46 +
    "info": {
47 +
      "dark": "nord8",
48 +
      "light": "nord10"
49 +
    },
50 +
    "text": {
51 +
      "dark": "nord4",
52 +
      "light": "nord0"
53 +
    },
54 +
    "textMuted": {
55 +
      "dark": "nord3",
56 +
      "light": "nord1"
57 +
    },
58 +
    "background": {
59 +
      "dark": "nord0",
60 +
      "light": "nord6"
61 +
    },
62 +
    "backgroundPanel": {
63 +
      "dark": "nord1",
64 +
      "light": "nord5"
65 +
    },
66 +
    "backgroundElement": {
67 +
      "dark": "nord1",
68 +
      "light": "nord4"
69 +
    },
70 +
    "border": {
71 +
      "dark": "nord2",
72 +
      "light": "nord3"
73 +
    },
74 +
    "borderActive": {
75 +
      "dark": "nord3",
76 +
      "light": "nord2"
77 +
    },
78 +
    "borderSubtle": {
79 +
      "dark": "nord2",
80 +
      "light": "nord3"
81 +
    },
82 +
    "diffAdded": {
83 +
      "dark": "nord14",
84 +
      "light": "nord14"
85 +
    },
86 +
    "diffRemoved": {
87 +
      "dark": "nord11",
88 +
      "light": "nord11"
89 +
    },
90 +
    "diffContext": {
91 +
      "dark": "nord3",
92 +
      "light": "nord3"
93 +
    },
94 +
    "diffHunkHeader": {
95 +
      "dark": "nord3",
96 +
      "light": "nord3"
97 +
    },
98 +
    "diffHighlightAdded": {
99 +
      "dark": "nord14",
100 +
      "light": "nord14"
101 +
    },
102 +
    "diffHighlightRemoved": {
103 +
      "dark": "nord11",
104 +
      "light": "nord11"
105 +
    },
106 +
    "diffAddedBg": {
107 +
      "dark": "#3B4252",
108 +
      "light": "#E5E9F0"
109 +
    },
110 +
    "diffRemovedBg": {
111 +
      "dark": "#3B4252",
112 +
      "light": "#E5E9F0"
113 +
    },
114 +
    "diffContextBg": {
115 +
      "dark": "nord1",
116 +
      "light": "nord5"
117 +
    },
118 +
    "diffLineNumber": {
119 +
      "dark": "nord2",
120 +
      "light": "nord4"
121 +
    },
122 +
    "diffAddedLineNumberBg": {
123 +
      "dark": "#3B4252",
124 +
      "light": "#E5E9F0"
125 +
    },
126 +
    "diffRemovedLineNumberBg": {
127 +
      "dark": "#3B4252",
128 +
      "light": "#E5E9F0"
129 +
    },
130 +
    "markdownText": {
131 +
      "dark": "nord4",
132 +
      "light": "nord0"
133 +
    },
134 +
    "markdownHeading": {
135 +
      "dark": "nord8",
136 +
      "light": "nord10"
137 +
    },
138 +
    "markdownLink": {
139 +
      "dark": "nord9",
140 +
      "light": "nord9"
141 +
    },
142 +
    "markdownLinkText": {
143 +
      "dark": "nord7",
144 +
      "light": "nord7"
145 +
    },
146 +
    "markdownCode": {
147 +
      "dark": "nord14",
148 +
      "light": "nord14"
149 +
    },
150 +
    "markdownBlockQuote": {
151 +
      "dark": "nord3",
152 +
      "light": "nord3"
153 +
    },
154 +
    "markdownEmph": {
155 +
      "dark": "nord12",
156 +
      "light": "nord12"
157 +
    },
158 +
    "markdownStrong": {
159 +
      "dark": "nord13",
160 +
      "light": "nord13"
161 +
    },
162 +
    "markdownHorizontalRule": {
163 +
      "dark": "nord3",
164 +
      "light": "nord3"
165 +
    },
166 +
    "markdownListItem": {
167 +
      "dark": "nord8",
168 +
      "light": "nord10"
169 +
    },
170 +
    "markdownListEnumeration": {
171 +
      "dark": "nord7",
172 +
      "light": "nord7"
173 +
    },
174 +
    "markdownImage": {
175 +
      "dark": "nord9",
176 +
      "light": "nord9"
177 +
    },
178 +
    "markdownImageText": {
179 +
      "dark": "nord7",
180 +
      "light": "nord7"
181 +
    },
182 +
    "markdownCodeBlock": {
183 +
      "dark": "nord4",
184 +
      "light": "nord0"
185 +
    },
186 +
    "syntaxComment": {
187 +
      "dark": "nord3",
188 +
      "light": "nord3"
189 +
    },
190 +
    "syntaxKeyword": {
191 +
      "dark": "nord9",
192 +
      "light": "nord9"
193 +
    },
194 +
    "syntaxFunction": {
195 +
      "dark": "nord8",
196 +
      "light": "nord8"
197 +
    },
198 +
    "syntaxVariable": {
199 +
      "dark": "nord7",
200 +
      "light": "nord7"
201 +
    },
202 +
    "syntaxString": {
203 +
      "dark": "nord14",
204 +
      "light": "nord14"
205 +
    },
206 +
    "syntaxNumber": {
207 +
      "dark": "nord15",
208 +
      "light": "nord15"
209 +
    },
210 +
    "syntaxType": {
211 +
      "dark": "nord7",
212 +
      "light": "nord7"
213 +
    },
214 +
    "syntaxOperator": {
215 +
      "dark": "nord9",
216 +
      "light": "nord9"
217 +
    },
218 +
    "syntaxPunctuation": {
219 +
      "dark": "nord4",
220 +
      "light": "nord0"
221 +
    }
222 +
  }
223 +
}
opencode/themes/darkmatter.json (added) +223 −0
1 +
{
2 +
  "$schema": "https://opencode.ai/theme.json",
3 +
  "defs": {
4 +
    "base00": "#121113",
5 +
    "base01": "#1e1d1f",
6 +
    "base02": "#333333",
7 +
    "base03": "#555555",
8 +
    "base04": "#888888",
9 +
    "base05": "#c1c1c1",
10 +
    "base06": "#e0e0e0",
11 +
    "base07": "#ffffff",
12 +
    "base08": "#5f8787",
13 +
    "base09": "#e78a53",
14 +
    "base0A": "#fbcb97",
15 +
    "base0B": "#5f8787",
16 +
    "base0C": "#aaaaaa",
17 +
    "base0D": "#888888",
18 +
    "base0E": "#999999",
19 +
    "base0F": "#e78a53"
20 +
  },
21 +
  "theme": {
22 +
    "primary": {
23 +
      "dark": "base0A",
24 +
      "light": "base0A"
25 +
    },
26 +
    "secondary": {
27 +
      "dark": "base0E",
28 +
      "light": "base0E"
29 +
    },
30 +
    "accent": {
31 +
      "dark": "base0A",
32 +
      "light": "base0A"
33 +
    },
34 +
    "error": {
35 +
      "dark": "base08",
36 +
      "light": "base08"
37 +
    },
38 +
    "warning": {
39 +
      "dark": "base0A",
40 +
      "light": "base0A"
41 +
    },
42 +
    "success": {
43 +
      "dark": "base0B",
44 +
      "light": "base0B"
45 +
    },
46 +
    "info": {
47 +
      "dark": "base0D",
48 +
      "light": "base0D"
49 +
    },
50 +
    "text": {
51 +
      "dark": "base05",
52 +
      "light": "base02"
53 +
    },
54 +
    "textMuted": {
55 +
      "dark": "base04",
56 +
      "light": "base03"
57 +
    },
58 +
    "background": {
59 +
      "dark": "base00",
60 +
      "light": "base07"
61 +
    },
62 +
    "backgroundPanel": {
63 +
      "dark": "base00",
64 +
      "light": "base06"
65 +
    },
66 +
    "backgroundElement": {
67 +
      "dark": "base00",
68 +
      "light": "base06"
69 +
    },
70 +
    "border": {
71 +
      "dark": "base02",
72 +
      "light": "base04"
73 +
    },
74 +
    "borderActive": {
75 +
      "dark": "base0A",
76 +
      "light": "base0A"
77 +
    },
78 +
    "borderSubtle": {
79 +
      "dark": "base01",
80 +
      "light": "base05"
81 +
    },
82 +
    "diffAdded": {
83 +
      "dark": "base0B",
84 +
      "light": "base0B"
85 +
    },
86 +
    "diffRemoved": {
87 +
      "dark": "base08",
88 +
      "light": "base08"
89 +
    },
90 +
    "diffContext": {
91 +
      "dark": "base04",
92 +
      "light": "base04"
93 +
    },
94 +
    "diffHunkHeader": {
95 +
      "dark": "base03",
96 +
      "light": "base03"
97 +
    },
98 +
    "diffHighlightAdded": {
99 +
      "dark": "base0B",
100 +
      "light": "base0B"
101 +
    },
102 +
    "diffHighlightRemoved": {
103 +
      "dark": "base08",
104 +
      "light": "base08"
105 +
    },
106 +
    "diffAddedBg": {
107 +
      "dark": "base01",
108 +
      "light": "base06"
109 +
    },
110 +
    "diffRemovedBg": {
111 +
      "dark": "base01",
112 +
      "light": "base06"
113 +
    },
114 +
    "diffContextBg": {
115 +
      "dark": "base00",
116 +
      "light": "base07"
117 +
    },
118 +
    "diffLineNumber": {
119 +
      "dark": "base03",
120 +
      "light": "base04"
121 +
    },
122 +
    "diffAddedLineNumberBg": {
123 +
      "dark": "base01",
124 +
      "light": "base06"
125 +
    },
126 +
    "diffRemovedLineNumberBg": {
127 +
      "dark": "base01",
128 +
      "light": "base06"
129 +
    },
130 +
    "markdownText": {
131 +
      "dark": "base05",
132 +
      "light": "base02"
133 +
    },
134 +
    "markdownHeading": {
135 +
      "dark": "base0A",
136 +
      "light": "base0A"
137 +
    },
138 +
    "markdownLink": {
139 +
      "dark": "base0C",
140 +
      "light": "base0C"
141 +
    },
142 +
    "markdownLinkText": {
143 +
      "dark": "base0D",
144 +
      "light": "base0D"
145 +
    },
146 +
    "markdownCode": {
147 +
      "dark": "base0B",
148 +
      "light": "base0B"
149 +
    },
150 +
    "markdownBlockQuote": {
151 +
      "dark": "base03",
152 +
      "light": "base03"
153 +
    },
154 +
    "markdownEmph": {
155 +
      "dark": "base0E",
156 +
      "light": "base0E"
157 +
    },
158 +
    "markdownStrong": {
159 +
      "dark": "base0A",
160 +
      "light": "base0A"
161 +
    },
162 +
    "markdownHorizontalRule": {
163 +
      "dark": "base03",
164 +
      "light": "base03"
165 +
    },
166 +
    "markdownListItem": {
167 +
      "dark": "base0D",
168 +
      "light": "base0D"
169 +
    },
170 +
    "markdownListEnumeration": {
171 +
      "dark": "base0C",
172 +
      "light": "base0C"
173 +
    },
174 +
    "markdownImage": {
175 +
      "dark": "base0C",
176 +
      "light": "base0C"
177 +
    },
178 +
    "markdownImageText": {
179 +
      "dark": "base0D",
180 +
      "light": "base0D"
181 +
    },
182 +
    "markdownCodeBlock": {
183 +
      "dark": "base05",
184 +
      "light": "base02"
185 +
    },
186 +
    "syntaxComment": {
187 +
      "dark": "base03",
188 +
      "light": "base04"
189 +
    },
190 +
    "syntaxKeyword": {
191 +
      "dark": "base0E",
192 +
      "light": "base0E"
193 +
    },
194 +
    "syntaxFunction": {
195 +
      "dark": "base0D",
196 +
      "light": "base0D"
197 +
    },
198 +
    "syntaxVariable": {
199 +
      "dark": "base08",
200 +
      "light": "base08"
201 +
    },
202 +
    "syntaxString": {
203 +
      "dark": "base0B",
204 +
      "light": "base0B"
205 +
    },
206 +
    "syntaxNumber": {
207 +
      "dark": "base09",
208 +
      "light": "base09"
209 +
    },
210 +
    "syntaxType": {
211 +
      "dark": "base0A",
212 +
      "light": "base0A"
213 +
    },
214 +
    "syntaxOperator": {
215 +
      "dark": "base05",
216 +
      "light": "base02"
217 +
    },
218 +
    "syntaxPunctuation": {
219 +
      "dark": "base05",
220 +
      "light": "base02"
221 +
    }
222 +
  }
223 +
}
oxwm/config.lua (added) +470 −0
1 +
---@meta
2 +
-------------------------------------------------------------------------------
3 +
-- OXWM Configuration File
4 +
-------------------------------------------------------------------------------
5 +
-- This is the default configuration for OXWM, a dynamic window manager.
6 +
-- Edit this file and reload with Mod+Shift+R (no compilation needed)
7 +
--
8 +
-- For more information about configuring OXWM, see the documentation.
9 +
-- The Lua Language Server provides autocomplete and type checking.
10 +
-------------------------------------------------------------------------------
11 +
12 +
---Load type definitions for LSP
13 +
---@module 'oxwm'
14 +
15 +
-------------------------------------------------------------------------------
16 +
-- Variables
17 +
-------------------------------------------------------------------------------
18 +
-- Define your variables here for easy customization throughout the config.
19 +
-- This makes it simple to change keybindings, colors, and settings in one place.
20 +
21 +
-- Modifier key: "Mod4" is the Super/Windows key, "Mod1" is Alt
22 +
local modkey = "Mod4"
23 +
24 +
-- Terminal emulator command (defaults to alacritty)
25 +
local terminal = "st"
26 +
27 +
local scripts = "/home/stevedylandev/dotfiles/scripts"
28 +
local rofi_scripts = "/home/stevedylandev/dotfiles/rofi/scripts"
29 +
30 +
-- Spawn one of those scripts. They resolve their own siblings relative to
31 +
-- themselves, so an absolute path is all they need — PATH is not involved.
32 +
-- Extra arguments are passed straight through: script("txtcliphist.sh", "sel").
33 +
local function script(name, ...)
34 +
    local cmd = { scripts .. "/" .. name }
35 +
    for _, arg in ipairs({ ... }) do
36 +
        cmd[#cmd + 1] = arg
37 +
    end
38 +
    return oxwm.spawn(cmd)
39 +
end
40 +
41 +
-- Same idea for the rofi menus in rofi/scripts. They are launchers, not
42 +
-- daemons: each one opens rofi, does the thing that was picked, and exits.
43 +
local function rofi_script(name, ...)
44 +
    local cmd = { rofi_scripts .. "/" .. name }
45 +
    for _, arg in ipairs({ ... }) do
46 +
        cmd[#cmd + 1] = arg
47 +
    end
48 +
    return oxwm.spawn(cmd)
49 +
end
50 +
51 +
-- Rofi's own modes need no script at all: drun reads .desktop files, window
52 +
-- lists what is already open, filebrowser walks directories, ssh reads
53 +
-- ~/.ssh/config. Behaviour for all of them lives in rofi/config.rasi.
54 +
local function rofi_mode(mode)
55 +
    return oxwm.spawn({ "rofi", "-show", mode })
56 +
end
57 +
58 +
-- Color palette - customize these to match your theme
59 +
-- Alternatively you can import other files in here, such as
60 +
-- local colors = require("colors.lua") and make colors.lua a file
61 +
-- in the ~/.config/oxwm directory
62 +
-- Darkmatter (matches wezterm/ghostty theme)
63 +
local colors = {
64 +
    fg = "#ffffff",
65 +
    red = "#e78a53",
66 +
    bg = "#121113",
67 +
    cyan = "#aaaaaa",
68 +
    green = "#fbcb97",
69 +
    lavender = "#999999",
70 +
    light_blue = "#888888",
71 +
    grey = "#333333",
72 +
    blue = "#5f8787",
73 +
    purple = "#c1c1c1",
74 +
}
75 +
76 +
-- Workspace tags - can be numbers, names, or icons (requires a Nerd Font)
77 +
-- The number of tags is deduced from the size of this table (up to a max of 12).
78 +
-- The default is 9. To use more, add entries here and uncomment the matching
79 +
-- keybinds for tags 10-12 further down in this file.
80 +
local tags = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }
81 +
-- local tags = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" } -- Example of 12 tags
82 +
-- local tags = { "", "󰊯", "", "", "󰙯", "󱇤", "", "󱘶", "󰧮" } -- Example of nerd font icon tags
83 +
84 +
-- Font for the status bar (use "fc-list" to see available fonts)
85 +
local bar_font = "BerkeleyMono Nerd Font:style=Bold:size=11"
86 +
87 +
-- Define your blocks
88 +
-- Similar to widgets in qtile, or dwmblocks
89 +
local blocks = {
90 +
    oxwm.bar.block.ram({
91 +
        format = "Ram: {used}/{total} GB",
92 +
        interval = 5,
93 +
        color = colors.blue,
94 +
        underline = true,
95 +
    }),
96 +
    oxwm.bar.block.static({
97 +
        text = "│",
98 +
        interval = 999999999,
99 +
        color = colors.green,
100 +
        underline = false,
101 +
    }),
102 +
    -- SSID, "off" when the link is down, "none" without a wireless card.
103 +
    -- wifi-status supplies its own Nerd Font icon, which tracks signal
104 +
    -- strength while connected, so the format is just its output.
105 +
    -- Click opens the dmenu network menu (connect/disconnect wifi and eth0).
106 +
    oxwm.bar.block.shell({
107 +
        format = "{}",
108 +
        command = scripts .. "/wifi-status",
109 +
        interval = 10,
110 +
        color = colors.lavender,
111 +
        underline = true,
112 +
        click = { command = rofi_scripts .. "/rofi-wifi" },
113 +
    }),
114 +
    oxwm.bar.block.static({
115 +
        text = "│",
116 +
        interval = 999999999,
117 +
        color = colors.green,
118 +
        underline = false,
119 +
    }),
120 +
    -- Volume percentage of the default sink; click toggles mute.
121 +
    -- vol-status supplies its own Nerd Font icon for the level (or mute).
122 +
    -- The vol-* keybinds also fire a notification, so this can lag a second.
123 +
    oxwm.bar.block.shell({
124 +
        format = "{}",
125 +
        command = scripts .. "/vol-status",
126 +
        interval = 2,
127 +
        color = colors.purple,
128 +
        underline = true,
129 +
        click = { command = scripts .. "/vol-mute" },
130 +
    }),
131 +
    oxwm.bar.block.static({
132 +
        text = "│",
133 +
        interval = 999999999,
134 +
        color = colors.green,
135 +
        underline = false,
136 +
    }),
137 +
    oxwm.bar.block.shell({
138 +
        format = "{}",
139 +
        command = scripts .. "/weather.sh -h",
140 +
        interval = 999999999,
141 +
        color = colors.red,
142 +
        underline = true,
143 +
    }),
144 +
    oxwm.bar.block.static({
145 +
        text = "│",
146 +
        interval = 999999999,
147 +
        color = colors.green,
148 +
        underline = false,
149 +
    }),
150 +
    oxwm.bar.block.datetime({
151 +
        format = "{}",
152 +
        date_format = "%a, %b %d - %-I:%M %P",
153 +
        interval = 1,
154 +
        color = colors.cyan,
155 +
        underline = true,
156 +
    }),
157 +
    -- Uncomment to add battery status (useful for laptops)
158 +
    oxwm.bar.block.battery({
159 +
        format = "Bat: {}%",
160 +
        charging = "⚡ Bat: {}%",
161 +
        discharging = "- Bat: {}%",
162 +
        full = "✓ Bat: {}%",
163 +
        interval = 30,
164 +
        color = colors.green,
165 +
        underline = true,
166 +
        -- click: run a command when the block is clicked
167 +
        -- click = "alacritty -e btop",
168 +
        -- click = { command = "bluetui", floating = true },
169 +
    }),
170 +
};
171 +
172 +
-------------------------------------------------------------------------------
173 +
-- Basic Settings
174 +
-------------------------------------------------------------------------------
175 +
oxwm.set_terminal(terminal)
176 +
oxwm.set_modkey(modkey) -- This is for Mod + mouse binds, such as drag/resize
177 +
oxwm.set_tags(tags)
178 +
179 +
-- Set default layout (tiling by default)
180 +
oxwm.set_layout("dwindle")
181 +
182 +
-------------------------------------------------------------------------------
183 +
-- Layouts
184 +
-------------------------------------------------------------------------------
185 +
-- Set custom symbols for layouts (displayed in the status bar)
186 +
-- Available layouts: "tiling", "normie" (floating), "grid", "monocle", "tabbed", "dwindle"
187 +
oxwm.set_layout_symbol("normie", "[F]")
188 +
oxwm.set_layout_symbol("tiling", "[T]")
189 +
oxwm.set_layout_symbol("tabbed", "[=]")
190 +
oxwm.set_layout_symbol("dwindle", "[\\]")
191 +
192 +
-- Example: bind dwindle (fibonacci) layout
193 +
oxwm.key.bind({ modkey }, "R", oxwm.layout.set("dwindle"))
194 +
195 +
-- Set default layout of specific tag (tag_index, layout_name)
196 +
-- Unset value uses oxwm.set_layout value
197 +
-- oxwm.set_tag_layout(1, "grid")
198 +
199 +
-------------------------------------------------------------------------------
200 +
-- Appearance
201 +
-------------------------------------------------------------------------------
202 +
-- Border configuration
203 +
204 +
-- Width in pixels
205 +
oxwm.border.set_width(2)
206 +
-- Color of focused window border
207 +
oxwm.border.set_focused_color(colors.blue)
208 +
-- Color of unfocused window borders
209 +
oxwm.border.set_unfocused_color(colors.bg)
210 +
211 +
-- Where floating windows spawn: "top-left", "top-center", "top-right",
212 +
-- "center-left", "center", "center-right", "bottom-left", "bottom-center", "bottom-right"
213 +
oxwm.set_floating_position("center")
214 +
215 +
-- Smart Enabled = No border if 1 window
216 +
oxwm.gaps.set_smart(false)
217 +
-- Inner gaps (horizontal, vertical) in pixels
218 +
oxwm.gaps.set_inner(12, 12)
219 +
-- Outer gaps (horizontal, vertical) in pixels
220 +
oxwm.gaps.set_outer(12, 12)
221 +
222 +
-------------------------------------------------------------------------------
223 +
-- Window Rules
224 +
-------------------------------------------------------------------------------
225 +
-- Rules allow you to automatically configure windows based on their properties
226 +
-- You can match windows by class, instance, title, or role
227 +
-- Available properties: floating, tag, fullscreen, etc.
228 +
--
229 +
-- Common use cases:
230 +
-- - Force floating for certain applications (dialogs, utilities)
231 +
-- - Send specific applications to specific workspaces
232 +
-- - Configure window behavior based on title or class
233 +
234 +
-- Examples (uncomment to use):
235 +
oxwm.rule.add({ instance = "chromium", floating = true, tag = 2 })
236 +
oxwm.rule.add({ instance = "helium.AppImage", floating = true, tag = 2 })
237 +
oxwm.rule.add({ instance = "gimp", floating = true})
238 +
-- oxwm.rule.add({ class = "Alacritty", tag = 9, focus = true })
239 +
-- oxwm.rule.add({ class = "firefox", title = "Library", floating = true })
240 +
-- oxwm.rule.add({ class = "firefox", tag = 2 })
241 +
-- oxwm.rule.add({ instance = "mpv", floating = true })
242 +
243 +
-- To find window properties, use xprop and click on the window
244 +
-- WM_CLASS(STRING) shows both instance and class (instance, class)
245 +
246 +
-------------------------------------------------------------------------------
247 +
-- Status Bar Configuration
248 +
-------------------------------------------------------------------------------
249 +
-- Font configuration
250 +
oxwm.bar.set_font(bar_font)
251 +
252 +
-- Position configuration (top/bottom, top is default)
253 +
-- oxwm.bar.set_position("bottom")
254 +
255 +
-- Set your blocks here (defined above)
256 +
oxwm.bar.set_blocks(blocks)
257 +
258 +
-- Bar color schemes (for workspace tag display)
259 +
-- Parameters: foreground, background, border
260 +
261 +
-- Unoccupied tags
262 +
oxwm.bar.set_scheme_normal(colors.fg, colors.bg, colors.grey)
263 +
-- Occupied tags
264 +
oxwm.bar.set_scheme_occupied(colors.cyan, colors.bg, colors.cyan)
265 +
-- Currently selected tag
266 +
oxwm.bar.set_scheme_selected(colors.cyan, colors.bg, colors.purple)
267 +
-- Urgent tags (windows requesting attention)
268 +
oxwm.bar.set_scheme_urgent(colors.red, colors.bg, colors.red)
269 +
270 +
-- Hide tags that have no windows and are not selected
271 +
-- oxwm.bar.set_hide_vacant_tags(true)
272 +
273 +
-------------------------------------------------------------------------------
274 +
-- Keybindings
275 +
-------------------------------------------------------------------------------
276 +
-- Keybindings are defined using oxwm.key.bind(modifiers, key, action)
277 +
-- Modifiers: {"Mod4"}, {"Mod1"}, {"Shift"}, {"Control"}, or combinations like {"Mod4", "Shift"}
278 +
-- Keys: Use uppercase for letters (e.g., "Return", "H", "J", "K", "L")
279 +
-- Actions: Functions that return actions (e.g., oxwm.spawn(), oxwm.client.kill())
280 +
--
281 +
-- A list of available keysyms can be found in the X11 keysym definitions.
282 +
-- Common keys: Return, Space, Tab, Escape, Backspace, Delete, Left, Right, Up, Down
283 +
284 +
-- Basic window management
285 +
286 +
oxwm.key.bind({ modkey }, "Return", oxwm.spawn_terminal())
287 +
-- Application launcher (.desktop entries, with icons and search)
288 +
oxwm.key.bind({ modkey }, "D", rofi_mode("drun"))
289 +
-- Bare executables on PATH, for the things that ship no .desktop file
290 +
oxwm.key.bind({ modkey, "Shift" }, "D", rofi_mode("run"))
291 +
-- Jump to a window that is already open, wherever it is tagged
292 +
oxwm.key.bind({ modkey }, "Tab", rofi_mode("window"))
293 +
-- Browse the filesystem and open a file with its default application
294 +
oxwm.key.bind({ modkey }, "E", rofi_mode("filebrowser"))
295 +
-- Save screenshot to ~/Downloads
296 +
oxwm.key.bind({ modkey }, "S", oxwm.spawn({ "sh", "-c", "maim -s ~/Downloads/screenshot-$(date +%Y%m%d-%H%M%S).png" }))
297 +
oxwm.key.bind({ modkey }, "O", oxwm.spawn({ "sh", "-c", "helium.AppImage --no-sandbox" }))
298 +
oxwm.key.bind({ modkey }, "W", oxwm.client.kill())
299 +
300 +
-- Volume control (media keys, with Mod+Shift fallbacks for boards without them)
301 +
oxwm.key.bind({}, "XF86AudioRaiseVolume", script("vol-up"))
302 +
oxwm.key.bind({}, "XF86AudioLowerVolume", script("vol-down"))
303 +
oxwm.key.bind({}, "XF86AudioMute", script("vol-mute"))
304 +
oxwm.key.bind({ modkey, "Shift" }, "Equal", script("vol-up"))
305 +
oxwm.key.bind({ modkey, "Shift" }, "Minus", script("vol-down"))
306 +
oxwm.key.bind({ modkey, "Shift" }, "M", script("vol-mute"))
307 +
-- Audio menu (volume, mute, mic, pick an output) - rofi, no terminal needed
308 +
oxwm.key.bind({ modkey, "Shift" }, "U", rofi_script("rofi-audio"))
309 +
310 +
-- WiFi menu: scan, connect (passphrase prompt is hidden), disconnect
311 +
oxwm.key.bind({ modkey, "Shift" }, "N", rofi_script("rofi-wifi"))
312 +
313 +
-- Clipboard history. rofi-clipd (autostarted at the bottom of this file)
314 +
-- records everything that passes through the CLIPBOARD selection into
315 +
-- ~/.cache/rofi-clipboard; Mod+V picks an earlier entry back out. Shift+Del
316 +
-- inside the menu forgets an entry.
317 +
oxwm.key.bind({ modkey }, "V", rofi_script("rofi-clip"))
318 +
319 +
-- Emoji and kaomoji picker; the pick lands in the clipboard, ready to paste
320 +
oxwm.key.bind({ modkey, "Shift" }, "E", rofi_script("rofi-emoji"))
321 +
-- Calculator: type an expression, Enter evaluates, Enter again copies
322 +
oxwm.key.bind({ modkey, "Shift" }, "C", rofi_script("rofi-calc"))
323 +
-- Search the web: pick an engine, type the query
324 +
oxwm.key.bind({ modkey }, "Slash", rofi_script("rofi-websearch"))
325 +
-- Screenshot menu (Mod+S still takes a plain region shot without asking)
326 +
oxwm.key.bind({ modkey, "Shift" }, "S", rofi_script("rofi-screenshot"))
327 +
-- Lock / suspend / reboot / shutdown / log out, each with a confirmation
328 +
oxwm.key.bind({ modkey, "Shift" }, "X", rofi_script("rofi-power"))
329 +
330 +
-- Keybind overlay - Shows important keybindings on screen
331 +
oxwm.key.bind({ modkey, "Shift" }, "Slash", oxwm.show_keybinds())
332 +
333 +
-- Window state toggles
334 +
--oxwm.key.bind({ modkey, "Shift" }, "A", oxwm.client.toggle_fullscreen())
335 +
oxwm.key.bind({ modkey, "Shift" }, "F", oxwm.client.toggle_floating())
336 +
337 +
-- Layout management
338 +
oxwm.key.bind({ modkey }, "F", oxwm.layout.set("normie"))
339 +
--oxwm.key.bind({ modkey }, "C", oxwm.layout.set("tiling"))
340 +
-- Cycle through layouts
341 +
oxwm.key.bind({ modkey }, "N", oxwm.layout.cycle())
342 +
343 +
-- Master area controls (tiling layout)
344 +
345 +
-- Decrease/Increase master area width
346 +
oxwm.key.bind({ modkey }, "H", oxwm.set_master_factor(-5))
347 +
oxwm.key.bind({ modkey }, "L", oxwm.set_master_factor(5))
348 +
-- Enable tiled resize mode: Mod+RMB drag adjusts mfact instead of floating
349 +
-- oxwm.tiled_resize_mode(true)
350 +
-- Increment/Decrement number of master windows
351 +
--oxwm.key.bind({ modkey }, "I", oxwm.inc_num_master(1))
352 +
--oxwm.key.bind({ modkey }, "P", oxwm.inc_num_master(-1))
353 +
354 +
-- Gaps toggle
355 +
oxwm.key.bind({ modkey }, "A", oxwm.toggle_gaps())
356 +
-- Bar toggle
357 +
oxwm.key.bind({ modkey }, "B", oxwm.toggle_bar())
358 +
359 +
-- Window manager controls
360 +
oxwm.key.bind({ modkey, "Shift" }, "Q", oxwm.quit())
361 +
oxwm.key.bind({ modkey, "Shift" }, "R", oxwm.restart())
362 +
363 +
-- Focus movement [1 for up in the stack, -1 for down]
364 +
oxwm.key.bind({ modkey }, "J", oxwm.client.focus_stack(1))
365 +
oxwm.key.bind({ modkey }, "K", oxwm.client.focus_stack(-1))
366 +
367 +
-- Window movement (swap position in stack)
368 +
oxwm.key.bind({ modkey, "Shift" }, "J", oxwm.client.move_stack(1))
369 +
oxwm.key.bind({ modkey, "Shift" }, "K", oxwm.client.move_stack(-1))
370 +
371 +
-- Multi-monitor support
372 +
373 +
-- Focus next/previous Monitors
374 +
oxwm.key.bind({ modkey }, "Comma", oxwm.monitor.focus(-1))
375 +
oxwm.key.bind({ modkey }, "Period", oxwm.monitor.focus(1))
376 +
-- Move window to next/previous Monitors
377 +
oxwm.key.bind({ modkey, "Shift" }, "Comma", oxwm.monitor.tag(-1))
378 +
oxwm.key.bind({ modkey, "Shift" }, "Period", oxwm.monitor.tag(1))
379 +
380 +
-- Warp the cursor to the focused monitor when switching monitors
381 +
-- oxwm.monitor.warp_cursor(true)
382 +
-- Warp the cursor along when sending a window to another monitor
383 +
-- oxwm.monitor.warp_cursor_on_send(true)
384 +
385 +
-- Workspace (tag) navigation
386 +
-- Switch to workspace N (tags are 0-indexed, so tag "1" is index 0)
387 +
oxwm.key.bind({ modkey }, "1", oxwm.tag.view(0))
388 +
oxwm.key.bind({ modkey }, "2", oxwm.tag.view(1))
389 +
oxwm.key.bind({ modkey }, "3", oxwm.tag.view(2))
390 +
oxwm.key.bind({ modkey }, "4", oxwm.tag.view(3))
391 +
oxwm.key.bind({ modkey }, "5", oxwm.tag.view(4))
392 +
oxwm.key.bind({ modkey }, "6", oxwm.tag.view(5))
393 +
oxwm.key.bind({ modkey }, "7", oxwm.tag.view(6))
394 +
oxwm.key.bind({ modkey }, "8", oxwm.tag.view(7))
395 +
oxwm.key.bind({ modkey }, "9", oxwm.tag.view(8))
396 +
-- Tags 10-12 (opt-in): set 12 tags above, then pick keys you like and uncomment.
397 +
-- oxwm.key.bind({ modkey }, "0", oxwm.tag.view(9))
398 +
-- oxwm.key.bind({ modkey }, "minus", oxwm.tag.view(10))
399 +
-- oxwm.key.bind({ modkey }, "equal", oxwm.tag.view(11))
400 +
401 +
-- Move focused window to workspace N
402 +
oxwm.key.bind({ modkey, "Shift" }, "1", oxwm.tag.move_to(0))
403 +
oxwm.key.bind({ modkey, "Shift" }, "2", oxwm.tag.move_to(1))
404 +
oxwm.key.bind({ modkey, "Shift" }, "3", oxwm.tag.move_to(2))
405 +
oxwm.key.bind({ modkey, "Shift" }, "4", oxwm.tag.move_to(3))
406 +
oxwm.key.bind({ modkey, "Shift" }, "5", oxwm.tag.move_to(4))
407 +
oxwm.key.bind({ modkey, "Shift" }, "6", oxwm.tag.move_to(5))
408 +
oxwm.key.bind({ modkey, "Shift" }, "7", oxwm.tag.move_to(6))
409 +
oxwm.key.bind({ modkey, "Shift" }, "8", oxwm.tag.move_to(7))
410 +
oxwm.key.bind({ modkey, "Shift" }, "9", oxwm.tag.move_to(8))
411 +
-- oxwm.key.bind({ modkey, "Shift" }, "0", oxwm.tag.move_to(9))
412 +
-- oxwm.key.bind({ modkey, "Shift" }, "minus", oxwm.tag.move_to(10))
413 +
-- oxwm.key.bind({ modkey, "Shift" }, "equal", oxwm.tag.move_to(11))
414 +
415 +
-- Combo view (view multiple tags at once) {argos_nothing}
416 +
-- Example: Mod+Ctrl+2 while on tag 1 will show BOTH tags 1 and 2
417 +
oxwm.key.bind({ modkey, "Control" }, "1", oxwm.tag.toggleview(0))
418 +
oxwm.key.bind({ modkey, "Control" }, "2", oxwm.tag.toggleview(1))
419 +
oxwm.key.bind({ modkey, "Control" }, "3", oxwm.tag.toggleview(2))
420 +
oxwm.key.bind({ modkey, "Control" }, "4", oxwm.tag.toggleview(3))
421 +
oxwm.key.bind({ modkey, "Control" }, "5", oxwm.tag.toggleview(4))
422 +
oxwm.key.bind({ modkey, "Control" }, "6", oxwm.tag.toggleview(5))
423 +
oxwm.key.bind({ modkey, "Control" }, "7", oxwm.tag.toggleview(6))
424 +
oxwm.key.bind({ modkey, "Control" }, "8", oxwm.tag.toggleview(7))
425 +
oxwm.key.bind({ modkey, "Control" }, "9", oxwm.tag.toggleview(8))
426 +
-- oxwm.key.bind({ modkey, "Control" }, "0", oxwm.tag.toggleview(9))
427 +
-- oxwm.key.bind({ modkey, "Control" }, "minus", oxwm.tag.toggleview(10))
428 +
-- oxwm.key.bind({ modkey, "Control" }, "equal", oxwm.tag.toggleview(11))
429 +
430 +
-- Multi tag (window on multiple tags)
431 +
-- Example: Mod+Ctrl+Shift+2 puts focused window on BOTH current tag and tag 2
432 +
oxwm.key.bind({ modkey, "Control", "Shift" }, "1", oxwm.tag.toggletag(0))
433 +
oxwm.key.bind({ modkey, "Control", "Shift" }, "2", oxwm.tag.toggletag(1))
434 +
oxwm.key.bind({ modkey, "Control", "Shift" }, "3", oxwm.tag.toggletag(2))
435 +
oxwm.key.bind({ modkey, "Control", "Shift" }, "4", oxwm.tag.toggletag(3))
436 +
oxwm.key.bind({ modkey, "Control", "Shift" }, "5", oxwm.tag.toggletag(4))
437 +
oxwm.key.bind({ modkey, "Control", "Shift" }, "6", oxwm.tag.toggletag(5))
438 +
oxwm.key.bind({ modkey, "Control", "Shift" }, "7", oxwm.tag.toggletag(6))
439 +
oxwm.key.bind({ modkey, "Control", "Shift" }, "8", oxwm.tag.toggletag(7))
440 +
oxwm.key.bind({ modkey, "Control", "Shift" }, "9", oxwm.tag.toggletag(8))
441 +
-- oxwm.key.bind({ modkey, "Control", "Shift" }, "0", oxwm.tag.toggletag(9))
442 +
-- oxwm.key.bind({ modkey, "Control", "Shift" }, "minus", oxwm.tag.toggletag(10))
443 +
-- oxwm.key.bind({ modkey, "Control", "Shift" }, "equal", oxwm.tag.toggletag(11))
444 +
445 +
-------------------------------------------------------------------------------
446 +
-- Advanced: Keychords
447 +
-------------------------------------------------------------------------------
448 +
-- Keychords allow you to bind multiple-key sequences (like Emacs or Vim)
449 +
-- Format: {{modifiers}, key1}, {{modifiers}, key2}, ...
450 +
-- Example: Press Mod4+Space, then release and press T to spawn a terminal
451 +
oxwm.key.chord({
452 +
    { { modkey }, "Space" },
453 +
    { {},         "T" }
454 +
}, oxwm.spawn_terminal())
455 +
456 +
-------------------------------------------------------------------------------
457 +
-- Autostart
458 +
-------------------------------------------------------------------------------
459 +
-- Commands to run once when OXWM starts
460 +
-- Uncomment and modify these examples, or add your own
461 +
462 +
-- Clipboard history daemon. Without it Mod+V has nothing to show: an X
463 +
-- selection lives in the process that owns it, so a copied string dies with
464 +
-- the window it was copied from unless something keeps its own copy.
465 +
oxwm.autostart(rofi_scripts .. "/rofi-clipd")
466 +
467 +
-- oxwm.autostart("picom")
468 +
-- oxwm.autostart("feh --bg-scale ~/wallpaper.jpg")
469 +
-- oxwm.autostart("dunst")
470 +
-- oxwm.autostart("nm-applet")
rofi/config.rasi (added) +43 −0
1 +
/* rofi settings. The look lives in the theme file; this is behaviour only. */
2 +
configuration {
3 +
    /* Modes reachable with `rofi -show <name>`. drun is the launcher (it
4 +
       reads .desktop files, so entries get icons and their real names), run
5 +
       is bare executables on PATH, window switches to something already
6 +
       open, and combi searches drun + run + window at once. */
7 +
    modes:      "drun,run,window,combi,filebrowser,ssh,keys";
8 +
    combi-modes: "drun,run,window";
9 +
10 +
    /* Fuzzy matching with sorting: "fx" finds "firefox", and the closest
11 +
       match still comes first. Set matching to "normal" for plain substring
12 +
       search if fuzzy ever feels too loose. */
13 +
    matching:   "fuzzy";
14 +
    sort:       true;
15 +
16 +
    show-icons: true;
17 +
    icon-theme: "Adwaita";
18 +
19 +
    /* ssh mode and "run in terminal" open this. wezterm is the XFCE
20 +
       TerminalEmulator helper here, and its `start` subcommand takes -e as
21 +
       an alias, which is the form rofi uses. */
22 +
    terminal:   "wezterm";
23 +
24 +
    drun-display-format:    "{name} [<span weight='light' size='small'><i>({generic})</i></span>]";
25 +
    drun-match-fields:      "name,generic,exec,categories,keywords";
26 +
    /* Right-click actions from the .desktop file (new window, private
27 +
       window, and so on) become their own entries. */
28 +
    drun-show-actions:      true;
29 +
30 +
    window-format:          "{w}  {c}  {t}";
31 +
32 +
    display-drun:        "apps";
33 +
    display-run:         "run";
34 +
    display-window:      "windows";
35 +
    display-combi:       "all";
36 +
    display-filebrowser: "files";
37 +
    display-ssh:         "ssh";
38 +
    display-keys:        "keys";
39 +
    display-clipboard:   "clipboard";
40 +
    display-calc:        "calc";
41 +
}
42 +
43 +
@theme "nord"
rofi/emoji.txt (added) +2298 −0
1 +
¯\_(ツ)_/¯	shrug whatever dunno
2 +
(╯°□°)╯︵ ┻━┻	table flip rage angry
3 +
┬─┬ ノ( ゜-゜ノ)	table unflip calm put back
4 +
(ノ◕ヮ◕)ノ*:・゚✧	sparkle magic excited
5 +
ಠ_ಠ	disapproval look stare
6 +
(づ。◕‿‿◕。)づ	hug
7 +
(◕‿◕)	smile happy
8 +
(ಥ﹏ಥ)	crying sad
9 +
(•_•) ( •_•)>⌐■-■ (⌐■_■)	deal with it sunglasses
10 +
ᕕ( ᐛ )ᕗ	walking happy run
11 +
(っ˘ω˘ς )	sleepy tired
12 +
(¬‿¬)	smug sly
13 +
♥	heart love
14 +
→	arrow right
15 +
…	ellipsis dots
16 +
—	em dash
17 +
✓	check tick done yes
18 +
✗	cross fail no
19 +
λ	lambda
20 +
°	degree
21 +
🌀	cyclone
22 +
🌁	foggy
23 +
🌂	closed umbrella
24 +
🌃	night with stars
25 +
🌄	sunrise over mountains
26 +
🌅	sunrise
27 +
🌆	cityscape at dusk
28 +
🌇	sunset over buildings
29 +
🌈	rainbow
30 +
🌉	bridge at night
31 +
🌊	water wave
32 +
🌋	volcano
33 +
🌌	milky way
34 +
🌍	earth globe europe-africa
35 +
🌎	earth globe americas
36 +
🌏	earth globe asia-australia
37 +
🌐	globe with meridians
38 +
🌑	new moon symbol
39 +
🌒	waxing crescent moon symbol
40 +
🌓	first quarter moon symbol
41 +
🌔	waxing gibbous moon symbol
42 +
🌕	full moon symbol
43 +
🌖	waning gibbous moon symbol
44 +
🌗	last quarter moon symbol
45 +
🌘	waning crescent moon symbol
46 +
🌙	crescent moon
47 +
🌚	new moon with face
48 +
🌛	first quarter moon with face
49 +
🌜	last quarter moon with face
50 +
🌝	full moon with face
51 +
🌞	sun with face
52 +
🌟	glowing star
53 +
🌠	shooting star
54 +
🌡	thermometer
55 +
🌢	black droplet
56 +
🌣	white sun
57 +
🌤	white sun with small cloud
58 +
🌥	white sun behind cloud
59 +
🌦	white sun behind cloud with rain
60 +
🌧	cloud with rain
61 +
🌨	cloud with snow
62 +
🌩	cloud with lightning
63 +
🌪	cloud with tornado
64 +
🌫	fog
65 +
🌬	wind blowing face
66 +
🌭	hot dog
67 +
🌮	taco
68 +
🌯	burrito
69 +
🌰	chestnut
70 +
🌱	seedling
71 +
🌲	evergreen tree
72 +
🌳	deciduous tree
73 +
🌴	palm tree
74 +
🌵	cactus
75 +
🌶	hot pepper
76 +
🌷	tulip
77 +
🌸	cherry blossom
78 +
🌹	rose
79 +
🌺	hibiscus
80 +
🌻	sunflower
81 +
🌼	blossom
82 +
🌽	ear of maize
83 +
🌾	ear of rice
84 +
🌿	herb
85 +
🍀	four leaf clover
86 +
🍁	maple leaf
87 +
🍂	fallen leaf
88 +
🍃	leaf fluttering in wind
89 +
🍄	mushroom
90 +
🍅	tomato
91 +
🍆	aubergine
92 +
🍇	grapes
93 +
🍈	melon
94 +
🍉	watermelon
95 +
🍊	tangerine
96 +
🍋	lemon
97 +
🍌	banana
98 +
🍍	pineapple
99 +
🍎	red apple
100 +
🍏	green apple
101 +
🍐	pear
102 +
🍑	peach
103 +
🍒	cherries
104 +
🍓	strawberry
105 +
🍔	hamburger
106 +
🍕	slice of pizza
107 +
🍖	meat on bone
108 +
🍗	poultry leg
109 +
🍘	rice cracker
110 +
🍙	rice ball
111 +
🍚	cooked rice
112 +
🍛	curry and rice
113 +
🍜	steaming bowl
114 +
🍝	spaghetti
115 +
🍞	bread
116 +
🍟	french fries
117 +
🍠	roasted sweet potato
118 +
🍡	dango
119 +
🍢	oden
120 +
🍣	sushi
121 +
🍤	fried shrimp
122 +
🍥	fish cake with swirl design
123 +
🍦	soft ice cream
124 +
🍧	shaved ice
125 +
🍨	ice cream
126 +
🍩	doughnut
127 +
🍪	cookie
128 +
🍫	chocolate bar
129 +
🍬	candy
130 +
🍭	lollipop
131 +
🍮	custard
132 +
🍯	honey pot
133 +
🍰	shortcake
134 +
🍱	bento box
135 +
🍲	pot of food
136 +
🍳	cooking
137 +
🍴	fork and knife
138 +
🍵	teacup without handle
139 +
🍶	sake bottle and cup
140 +
🍷	wine glass
141 +
🍸	cocktail glass
142 +
🍹	tropical drink
143 +
🍺	beer mug
144 +
🍻	clinking beer mugs
145 +
🍼	baby bottle
146 +
🍽	fork and knife with plate
147 +
🍾	bottle with popping cork
148 +
🍿	popcorn
149 +
🎀	ribbon
150 +
🎁	wrapped present
151 +
🎂	birthday cake
152 +
🎃	jack-o-lantern
153 +
🎄	christmas tree
154 +
🎅	father christmas
155 +
🎆	fireworks
156 +
🎇	firework sparkler
157 +
🎈	balloon
158 +
🎉	party popper
159 +
🎊	confetti ball
160 +
🎋	tanabata tree
161 +
🎌	crossed flags
162 +
🎍	pine decoration
163 +
🎎	japanese dolls
164 +
🎏	carp streamer
165 +
🎐	wind chime
166 +
🎑	moon viewing ceremony
167 +
🎒	school satchel
168 +
🎓	graduation cap
169 +
🎔	heart with tip on the left
170 +
🎕	bouquet of flowers
171 +
🎖	military medal
172 +
🎗	reminder ribbon
173 +
🎘	musical keyboard with jacks
174 +
🎙	studio microphone
175 +
🎚	level slider
176 +
🎛	control knobs
177 +
🎜	beamed ascending musical notes
178 +
🎝	beamed descending musical notes
179 +
🎞	film frames
180 +
🎟	admission tickets
181 +
🎠	carousel horse
182 +
🎡	ferris wheel
183 +
🎢	roller coaster
184 +
🎣	fishing pole and fish
185 +
🎤	microphone
186 +
🎥	movie camera
187 +
🎦	cinema
188 +
🎧	headphone
189 +
🎨	artist palette
190 +
🎩	top hat
191 +
🎪	circus tent
192 +
🎫	ticket
193 +
🎬	clapper board
194 +
🎭	performing arts
195 +
🎮	video game
196 +
🎯	direct hit
197 +
🎰	slot machine
198 +
🎱	billiards
199 +
🎲	game die
200 +
🎳	bowling
201 +
🎴	flower playing cards
202 +
🎵	musical note
203 +
🎶	multiple musical notes
204 +
🎷	saxophone
205 +
🎸	guitar
206 +
🎹	musical keyboard
207 +
🎺	trumpet
208 +
🎻	violin
209 +
🎼	musical score
210 +
🎽	running shirt with sash
211 +
🎾	tennis racquet and ball
212 +
🎿	ski and ski boot
213 +
🏀	basketball and hoop
214 +
🏁	chequered flag
215 +
🏂	snowboarder
216 +
🏃	runner
217 +
🏄	surfer
218 +
🏅	sports medal
219 +
🏆	trophy
220 +
🏇	horse racing
221 +
🏈	american football
222 +
🏉	rugby football
223 +
🏊	swimmer
224 +
🏋	weight lifter
225 +
🏌	golfer
226 +
🏍	racing motorcycle
227 +
🏎	racing car
228 +
🏏	cricket bat and ball
229 +
🏐	volleyball
230 +
🏑	field hockey stick and ball
231 +
🏒	ice hockey stick and puck
232 +
🏓	table tennis paddle and ball
233 +
🏔	snow capped mountain
234 +
🏕	camping
235 +
🏖	beach with umbrella
236 +
🏗	building construction
237 +
🏘	house buildings
238 +
🏙	cityscape
239 +
🏚	derelict house building
240 +
🏛	classical building
241 +
🏜	desert
242 +
🏝	desert island
243 +
🏞	national park
244 +
🏟	stadium
245 +
🏠	house building
246 +
🏡	house with garden
247 +
🏢	office building
248 +
🏣	japanese post office
249 +
🏤	european post office
250 +
🏥	hospital
251 +
🏦	bank
252 +
🏧	automated teller machine
253 +
🏨	hotel
254 +
🏩	love hotel
255 +
🏪	convenience store
256 +
🏫	school
257 +
🏬	department store
258 +
🏭	factory
259 +
🏮	izakaya lantern
260 +
🏯	japanese castle
261 +
🏰	european castle
262 +
🏱	white pennant
263 +
🏲	black pennant
264 +
🏳	waving white flag
265 +
🏴	waving black flag
266 +
🏵	rosette
267 +
🏶	black rosette
268 +
🏷	label
269 +
🏸	badminton racquet and shuttlecock
270 +
🏹	bow and arrow
271 +
🏺	amphora
272 +
🏻	emoji modifier fitzpatrick type-1-2
273 +
🏼	emoji modifier fitzpatrick type-3
274 +
🏽	emoji modifier fitzpatrick type-4
275 +
🏾	emoji modifier fitzpatrick type-5
276 +
🏿	emoji modifier fitzpatrick type-6
277 +
🐀	rat
278 +
🐁	mouse
279 +
🐂	ox
280 +
🐃	water buffalo
281 +
🐄	cow
282 +
🐅	tiger
283 +
🐆	leopard
284 +
🐇	rabbit
285 +
🐈	cat
286 +
🐉	dragon
287 +
🐊	crocodile
288 +
🐋	whale
289 +
🐌	snail
290 +
🐍	snake
291 +
🐎	horse
292 +
🐏	ram
293 +
🐐	goat
294 +
🐑	sheep
295 +
🐒	monkey
296 +
🐓	rooster
297 +
🐔	chicken
298 +
🐕	dog
299 +
🐖	pig
300 +
🐗	boar
301 +
🐘	elephant
302 +
🐙	octopus
303 +
🐚	spiral shell
304 +
🐛	bug
305 +
🐜	ant
306 +
🐝	honeybee
307 +
🐞	lady beetle
308 +
🐟	fish
309 +
🐠	tropical fish
310 +
🐡	blowfish
311 +
🐢	turtle
312 +
🐣	hatching chick
313 +
🐤	baby chick
314 +
🐥	front-facing baby chick
315 +
🐦	bird
316 +
🐧	penguin
317 +
🐨	koala
318 +
🐩	poodle
319 +
🐪	dromedary camel
320 +
🐫	bactrian camel
321 +
🐬	dolphin
322 +
🐭	mouse face
323 +
🐮	cow face
324 +
🐯	tiger face
325 +
🐰	rabbit face
326 +
🐱	cat face
327 +
🐲	dragon face
328 +
🐳	spouting whale
329 +
🐴	horse face
330 +
🐵	monkey face
331 +
🐶	dog face
332 +
🐷	pig face
333 +
🐸	frog face
334 +
🐹	hamster face
335 +
🐺	wolf face
336 +
🐻	bear face
337 +
🐼	panda face
338 +
🐽	pig nose
339 +
🐾	paw prints
340 +
🐿	chipmunk
341 +
👀	eyes
342 +
👁	eye
343 +
👂	ear
344 +
👃	nose
345 +
👄	mouth
346 +
👅	tongue
347 +
👆	white up pointing backhand index
348 +
👇	white down pointing backhand index
349 +
👈	white left pointing backhand index
350 +
👉	white right pointing backhand index
351 +
👊	fisted hand sign
352 +
👋	waving hand sign
353 +
👌	ok hand sign
354 +
👍	thumbs up sign
355 +
👎	thumbs down sign
356 +
👏	clapping hands sign
357 +
👐	open hands sign
358 +
👑	crown
359 +
👒	womans hat
360 +
👓	eyeglasses
361 +
👔	necktie
362 +
👕	t-shirt
363 +
👖	jeans
364 +
👗	dress
365 +
👘	kimono
366 +
👙	bikini
367 +
👚	womans clothes
368 +
👛	purse
369 +
👜	handbag
370 +
👝	pouch
371 +
👞	mans shoe
372 +
👟	athletic shoe
373 +
👠	high-heeled shoe
374 +
👡	womans sandal
375 +
👢	womans boots
376 +
👣	footprints
377 +
👤	bust in silhouette
378 +
👥	busts in silhouette
379 +
👦	boy
380 +
👧	girl
381 +
👨	man
382 +
👩	woman
383 +
👪	family
384 +
👫	man and woman holding hands
385 +
👬	two men holding hands
386 +
👭	two women holding hands
387 +
👮	police officer
388 +
👯	woman with bunny ears
389 +
👰	bride with veil
390 +
👱	person with blond hair
391 +
👲	man with gua pi mao
392 +
👳	man with turban
393 +
👴	older man
394 +
👵	older woman
395 +
👶	baby
396 +
👷	construction worker
397 +
👸	princess
398 +
👹	japanese ogre
399 +
👺	japanese goblin
400 +
👻	ghost
401 +
👼	baby angel
402 +
👽	extraterrestrial alien
403 +
👾	alien monster
404 +
👿	imp
405 +
💀	skull
406 +
💁	information desk person
407 +
💂	guardsman
408 +
💃	dancer
409 +
💄	lipstick
410 +
💅	nail polish
411 +
💆	face massage
412 +
💇	haircut
413 +
💈	barber pole
414 +
💉	syringe
415 +
💊	pill
416 +
💋	kiss mark
417 +
💌	love letter
418 +
💍	ring
419 +
💎	gem stone
420 +
💏	kiss
421 +
💐	bouquet
422 +
💑	couple with heart
423 +
💒	wedding
424 +
💓	beating heart
425 +
💔	broken heart
426 +
💕	two hearts
427 +
💖	sparkling heart
428 +
💗	growing heart
429 +
💘	heart with arrow
430 +
💙	blue heart
431 +
💚	green heart
432 +
💛	yellow heart
433 +
💜	purple heart
434 +
💝	heart with ribbon
435 +
💞	revolving hearts
436 +
💟	heart decoration
437 +
💠	diamond shape with a dot inside
438 +
💡	electric light bulb
439 +
💢	anger symbol
440 +
💣	bomb
441 +
💤	sleeping symbol
442 +
💥	collision symbol
443 +
💦	splashing sweat symbol
444 +
💧	droplet
445 +
💨	dash symbol
446 +
💩	pile of poo
447 +
💪	flexed biceps
448 +
💫	dizzy symbol
449 +
💬	speech balloon
450 +
💭	thought balloon
451 +
💮	white flower
452 +
💯	hundred points symbol
453 +
💰	money bag
454 +
💱	currency exchange
455 +
💲	heavy dollar sign
456 +
💳	credit card
457 +
💴	banknote with yen sign
458 +
💵	banknote with dollar sign
459 +
💶	banknote with euro sign
460 +
💷	banknote with pound sign
461 +
💸	money with wings
462 +
💹	chart with upwards trend and yen sign
463 +
💺	seat
464 +
💻	personal computer
465 +
💼	briefcase
466 +
💽	minidisc
467 +
💾	floppy disk
468 +
💿	optical disc
469 +
📀	dvd
470 +
📁	file folder
471 +
📂	open file folder
472 +
📃	page with curl
473 +
📄	page facing up
474 +
📅	calendar
475 +
📆	tear-off calendar
476 +
📇	card index
477 +
📈	chart with upwards trend
478 +
📉	chart with downwards trend
479 +
📊	bar chart
480 +
📋	clipboard
481 +
📌	pushpin
482 +
📍	round pushpin
483 +
📎	paperclip
484 +
📏	straight ruler
485 +
📐	triangular ruler
486 +
📑	bookmark tabs
487 +
📒	ledger
488 +
📓	notebook
489 +
📔	notebook with decorative cover
490 +
📕	closed book
491 +
📖	open book
492 +
📗	green book
493 +
📘	blue book
494 +
📙	orange book
495 +
📚	books
496 +
📛	name badge
497 +
📜	scroll
498 +
📝	memo
499 +
📞	telephone receiver
500 +
📟	pager
501 +
📠	fax machine
502 +
📡	satellite antenna
503 +
📢	public address loudspeaker
504 +
📣	cheering megaphone
505 +
📤	outbox tray
506 +
📥	inbox tray
507 +
📦	package
508 +
📧	e-mail symbol
509 +
📨	incoming envelope
510 +
📩	envelope with downwards arrow above
511 +
📪	closed mailbox with lowered flag
512 +
📫	closed mailbox with raised flag
513 +
📬	open mailbox with raised flag
514 +
📭	open mailbox with lowered flag
515 +
📮	postbox
516 +
📯	postal horn
517 +
📰	newspaper
518 +
📱	mobile phone
519 +
📲	mobile phone with rightwards arrow at left
520 +
📳	vibration mode
521 +
📴	mobile phone off
522 +
📵	no mobile phones
523 +
📶	antenna with bars
524 +
📷	camera
525 +
📸	camera with flash
526 +
📹	video camera
527 +
📺	television
528 +
📻	radio
529 +
📼	videocassette
530 +
📽	film projector
531 +
📾	portable stereo
532 +
📿	prayer beads
533 +
🔀	twisted rightwards arrows
534 +
🔁	clockwise rightwards and leftwards open circle arrows
535 +
🔂	clockwise rightwards and leftwards open circle arrows with circled one overlay
536 +
🔃	clockwise downwards and upwards open circle arrows
537 +
🔄	anticlockwise downwards and upwards open circle arrows
538 +
🔅	low brightness symbol
539 +
🔆	high brightness symbol
540 +
🔇	speaker with cancellation stroke
541 +
🔈	speaker
542 +
🔉	speaker with one sound wave
543 +
🔊	speaker with three sound waves
544 +
🔋	battery
545 +
🔌	electric plug
546 +
🔍	left-pointing magnifying glass
547 +
🔎	right-pointing magnifying glass
548 +
🔏	lock with ink pen
549 +
🔐	closed lock with key
550 +
🔑	key
551 +
🔒	lock
552 +
🔓	open lock
553 +
🔔	bell
554 +
🔕	bell with cancellation stroke
555 +
🔖	bookmark
556 +
🔗	link symbol
557 +
🔘	radio button
558 +
🔙	back with leftwards arrow above
559 +
🔚	end with leftwards arrow above
560 +
🔛	on with exclamation mark with left right arrow above
561 +
🔜	soon with rightwards arrow above
562 +
🔝	top with upwards arrow above
563 +
🔞	no one under eighteen symbol
564 +
🔟	keycap ten
565 +
🔠	input symbol for latin capital letters
566 +
🔡	input symbol for latin small letters
567 +
🔢	input symbol for numbers
568 +
🔣	input symbol for symbols
569 +
🔤	input symbol for latin letters
570 +
🔥	fire
571 +
🔦	electric torch
572 +
🔧	wrench
573 +
🔨	hammer
574 +
🔩	nut and bolt
575 +
🔪	hocho
576 +
🔫	pistol
577 +
🔬	microscope
578 +
🔭	telescope
579 +
🔮	crystal ball
580 +
🔯	six pointed star with middle dot
581 +
🔰	japanese symbol for beginner
582 +
🔱	trident emblem
583 +
🔲	black square button
584 +
🔳	white square button
585 +
🔴	large red circle
586 +
🔵	large blue circle
587 +
🔶	large orange diamond
588 +
🔷	large blue diamond
589 +
🔸	small orange diamond
590 +
🔹	small blue diamond
591 +
🔺	up-pointing red triangle
592 +
🔻	down-pointing red triangle
593 +
🔼	up-pointing small red triangle
594 +
🔽	down-pointing small red triangle
595 +
🔾	lower right shadowed white circle
596 +
🔿	upper right shadowed white circle
597 +
🕀	circled cross pommee
598 +
🕁	cross pommee with half-circle below
599 +
🕂	cross pommee
600 +
🕃	notched left semicircle with three dots
601 +
🕄	notched right semicircle with three dots
602 +
🕅	symbol for marks chapter
603 +
🕆	white latin cross
604 +
🕇	heavy latin cross
605 +
🕈	celtic cross
606 +
🕉	om symbol
607 +
🕊	dove of peace
608 +
🕋	kaaba
609 +
🕌	mosque
610 +
🕍	synagogue
611 +
🕎	menorah with nine branches
612 +
🕏	bowl of hygieia
613 +
🕐	clock face one oclock
614 +
🕑	clock face two oclock
615 +
🕒	clock face three oclock
616 +
🕓	clock face four oclock
617 +
🕔	clock face five oclock
618 +
🕕	clock face six oclock
619 +
🕖	clock face seven oclock
620 +
🕗	clock face eight oclock
621 +
🕘	clock face nine oclock
622 +
🕙	clock face ten oclock
623 +
🕚	clock face eleven oclock
624 +
🕛	clock face twelve oclock
625 +
🕜	clock face one-thirty
626 +
🕝	clock face two-thirty
627 +
🕞	clock face three-thirty
628 +
🕟	clock face four-thirty
629 +
🕠	clock face five-thirty
630 +
🕡	clock face six-thirty
631 +
🕢	clock face seven-thirty
632 +
🕣	clock face eight-thirty
633 +
🕤	clock face nine-thirty
634 +
🕥	clock face ten-thirty
635 +
🕦	clock face eleven-thirty
636 +
🕧	clock face twelve-thirty
637 +
🕨	right speaker
638 +
🕩	right speaker with one sound wave
639 +
🕪	right speaker with three sound waves
640 +
🕫	bullhorn
641 +
🕬	bullhorn with sound waves
642 +
🕭	ringing bell
643 +
🕮	book
644 +
🕯	candle
645 +
🕰	mantelpiece clock
646 +
🕱	black skull and crossbones
647 +
🕲	no piracy
648 +
🕳	hole
649 +
🕴	man in business suit levitating
650 +
🕵	sleuth or spy
651 +
🕶	dark sunglasses
652 +
🕷	spider
653 +
🕸	spider web
654 +
🕹	joystick
655 +
🕺	man dancing
656 +
🕻	left hand telephone receiver
657 +
🕼	telephone receiver with page
658 +
🕽	right hand telephone receiver
659 +
🕾	white touchtone telephone
660 +
🕿	black touchtone telephone
661 +
🖀	telephone on top of modem
662 +
🖁	clamshell mobile phone
663 +
🖂	back of envelope
664 +
🖃	stamped envelope
665 +
🖄	envelope with lightning
666 +
🖅	flying envelope
667 +
🖆	pen over stamped envelope
668 +
🖇	linked paperclips
669 +
🖈	black pushpin
670 +
🖉	lower left pencil
671 +
🖊	lower left ballpoint pen
672 +
🖋	lower left fountain pen
673 +
🖌	lower left paintbrush
674 +
🖍	lower left crayon
675 +
🖎	left writing hand
676 +
🖏	turned ok hand sign
677 +
🖐	raised hand with fingers splayed
678 +
🖑	reversed raised hand with fingers splayed
679 +
🖒	reversed thumbs up sign
680 +
🖓	reversed thumbs down sign
681 +
🖔	reversed victory hand
682 +
🖕	reversed hand with middle finger extended
683 +
🖖	raised hand with part between middle and ring fingers
684 +
🖗	white down pointing left hand index
685 +
🖘	sideways white left pointing index
686 +
🖙	sideways white right pointing index
687 +
🖚	sideways black left pointing index
688 +
🖛	sideways black right pointing index
689 +
🖜	black left pointing backhand index
690 +
🖝	black right pointing backhand index
691 +
🖞	sideways white up pointing index
692 +
🖟	sideways white down pointing index
693 +
🖠	sideways black up pointing index
694 +
🖡	sideways black down pointing index
695 +
🖢	black up pointing backhand index
696 +
🖣	black down pointing backhand index
697 +
🖤	black heart
698 +
🖥	desktop computer
699 +
🖦	keyboard and mouse
700 +
🖧	three networked computers
701 +
🖨	printer
702 +
🖩	pocket calculator
703 +
🖪	black hard shell floppy disk
704 +
🖫	white hard shell floppy disk
705 +
🖬	soft shell floppy disk
706 +
🖭	tape cartridge
707 +
🖮	wired keyboard
708 +
🖯	one button mouse
709 +
🖰	two button mouse
710 +
🖱	three button mouse
711 +
🖲	trackball
712 +
🖳	old personal computer
713 +
🖴	hard disk
714 +
🖵	screen
715 +
🖶	printer icon
716 +
🖷	fax icon
717 +
🖸	optical disc icon
718 +
🖹	document with text
719 +
🖺	document with text and picture
720 +
🖻	document with picture
721 +
🖼	frame with picture
722 +
🖽	frame with tiles
723 +
🖾	frame with an x
724 +
🖿	black folder
725 +
🗀	folder
726 +
🗁	open folder
727 +
🗂	card index dividers
728 +
🗃	card file box
729 +
🗄	file cabinet
730 +
🗅	empty note
731 +
🗆	empty note page
732 +
🗇	empty note pad
733 +
🗈	note
734 +
🗉	note page
735 +
🗊	note pad
736 +
🗋	empty document
737 +
🗌	empty page
738 +
🗍	empty pages
739 +
🗎	document
740 +
🗏	page
741 +
🗐	pages
742 +
🗑	wastebasket
743 +
🗒	spiral note pad
744 +
🗓	spiral calendar pad
745 +
🗔	desktop window
746 +
🗕	minimize
747 +
🗖	maximize
748 +
🗗	overlap
749 +
🗘	clockwise right and left semicircle arrows
750 +
🗙	cancellation x
751 +
🗚	increase font size symbol
752 +
🗛	decrease font size symbol
753 +
🗜	compression
754 +
🗝	old key
755 +
🗞	rolled-up newspaper
756 +
🗟	page with circled text
757 +
🗠	stock chart
758 +
🗡	dagger knife
759 +
🗢	lips
760 +
🗣	speaking head in silhouette
761 +
🗤	three rays above
762 +
🗥	three rays below
763 +
🗦	three rays left
764 +
🗧	three rays right
765 +
🗨	left speech bubble
766 +
🗩	right speech bubble
767 +
🗪	two speech bubbles
768 +
🗫	three speech bubbles
769 +
🗬	left thought bubble
770 +
🗭	right thought bubble
771 +
🗮	left anger bubble
772 +
🗯	right anger bubble
773 +
🗰	mood bubble
774 +
🗱	lightning mood bubble
775 +
🗲	lightning mood
776 +
🗳	ballot box with ballot
777 +
🗴	ballot script x
778 +
🗵	ballot box with script x
779 +
🗶	ballot bold script x
780 +
🗷	ballot box with bold script x
781 +
🗸	light check mark
782 +
🗹	ballot box with bold check
783 +
🗺	world map
784 +
🗻	mount fuji
785 +
🗼	tokyo tower
786 +
🗽	statue of liberty
787 +
🗾	silhouette of japan
788 +
🗿	moyai
789 +
😀	grinning face
790 +
😁	grinning face with smiling eyes
791 +
😂	face with tears of joy
792 +
😃	smiling face with open mouth
793 +
😄	smiling face with open mouth and smiling eyes
794 +
😅	smiling face with open mouth and cold sweat
795 +
😆	smiling face with open mouth and tightly-closed eyes
796 +
😇	smiling face with halo
797 +
😈	smiling face with horns
798 +
😉	winking face
799 +
😊	smiling face with smiling eyes
800 +
😋	face savouring delicious food
801 +
😌	relieved face
802 +
😍	smiling face with heart-shaped eyes
803 +
😎	smiling face with sunglasses
804 +
😏	smirking face
805 +
😐	neutral face
806 +
😑	expressionless face
807 +
😒	unamused face
808 +
😓	face with cold sweat
809 +
😔	pensive face
810 +
😕	confused face
811 +
😖	confounded face
812 +
😗	kissing face
813 +
😘	face throwing a kiss
814 +
😙	kissing face with smiling eyes
815 +
😚	kissing face with closed eyes
816 +
😛	face with stuck-out tongue
817 +
😜	face with stuck-out tongue and winking eye
818 +
😝	face with stuck-out tongue and tightly-closed eyes
819 +
😞	disappointed face
820 +
😟	worried face
821 +
😠	angry face
822 +
😡	pouting face
823 +
😢	crying face
824 +
😣	persevering face
825 +
😤	face with look of triumph
826 +
😥	disappointed but relieved face
827 +
😦	frowning face with open mouth
828 +
😧	anguished face
829 +
😨	fearful face
830 +
😩	weary face
831 +
😪	sleepy face
832 +
😫	tired face
833 +
😬	grimacing face
834 +
😭	loudly crying face
835 +
😮	face with open mouth
836 +
😯	hushed face
837 +
😰	face with open mouth and cold sweat
838 +
😱	face screaming in fear
839 +
😲	astonished face
840 +
😳	flushed face
841 +
😴	sleeping face
842 +
😵	dizzy face
843 +
😶	face without mouth
844 +
😷	face with medical mask
845 +
😸	grinning cat face with smiling eyes
846 +
😹	cat face with tears of joy
847 +
😺	smiling cat face with open mouth
848 +
😻	smiling cat face with heart-shaped eyes
849 +
😼	cat face with wry smile
850 +
😽	kissing cat face with closed eyes
851 +
😾	pouting cat face
852 +
😿	crying cat face
853 +
🙀	weary cat face
854 +
🙁	slightly frowning face
855 +
🙂	slightly smiling face
856 +
🙃	upside-down face
857 +
🙄	face with rolling eyes
858 +
🙅	face with no good gesture
859 +
🙆	face with ok gesture
860 +
🙇	person bowing deeply
861 +
🙈	see-no-evil monkey
862 +
🙉	hear-no-evil monkey
863 +
🙊	speak-no-evil monkey
864 +
🙋	happy person raising one hand
865 +
🙌	person raising both hands in celebration
866 +
🙍	person frowning
867 +
🙎	person with pouting face
868 +
🙏	person with folded hands
869 +
🚀	rocket
870 +
🚁	helicopter
871 +
🚂	steam locomotive
872 +
🚃	railway car
873 +
🚄	high-speed train
874 +
🚅	high-speed train with bullet nose
875 +
🚆	train
876 +
🚇	metro
877 +
🚈	light rail
878 +
🚉	station
879 +
🚊	tram
880 +
🚋	tram car
881 +
🚌	bus
882 +
🚍	oncoming bus
883 +
🚎	trolleybus
884 +
🚏	bus stop
885 +
🚐	minibus
886 +
🚑	ambulance
887 +
🚒	fire engine
888 +
🚓	police car
889 +
🚔	oncoming police car
890 +
🚕	taxi
891 +
🚖	oncoming taxi
892 +
🚗	automobile
893 +
🚘	oncoming automobile
894 +
🚙	recreational vehicle
895 +
🚚	delivery truck
896 +
🚛	articulated lorry
897 +
🚜	tractor
898 +
🚝	monorail
899 +
🚞	mountain railway
900 +
🚟	suspension railway
901 +
🚠	mountain cableway
902 +
🚡	aerial tramway
903 +
🚢	ship
904 +
🚣	rowboat
905 +
🚤	speedboat
906 +
🚥	horizontal traffic light
907 +
🚦	vertical traffic light
908 +
🚧	construction sign
909 +
🚨	police cars revolving light
910 +
🚩	triangular flag on post
911 +
🚪	door
912 +
🚫	no entry sign
913 +
🚬	smoking symbol
914 +
🚭	no smoking symbol
915 +
🚮	put litter in its place symbol
916 +
🚯	do not litter symbol
917 +
🚰	potable water symbol
918 +
🚱	non-potable water symbol
919 +
🚲	bicycle
920 +
🚳	no bicycles
921 +
🚴	bicyclist
922 +
🚵	mountain bicyclist
923 +
🚶	pedestrian
924 +
🚷	no pedestrians
925 +
🚸	children crossing
926 +
🚹	mens symbol
927 +
🚺	womens symbol
928 +
🚻	restroom
929 +
🚼	baby symbol
930 +
🚽	toilet
931 +
🚾	water closet
932 +
🚿	shower
933 +
🛀	bath
934 +
🛁	bathtub
935 +
🛂	passport control
936 +
🛃	customs
937 +
🛄	baggage claim
938 +
🛅	left luggage
939 +
🛆	triangle with rounded corners
940 +
🛇	prohibited sign
941 +
🛈	circled information source
942 +
🛉	boys symbol
943 +
🛊	girls symbol
944 +
🛋	couch and lamp
945 +
🛌	sleeping accommodation
946 +
🛍	shopping bags
947 +
🛎	bellhop bell
948 +
🛏	bed
949 +
🛐	place of worship
950 +
🛑	octagonal sign
951 +
🛒	shopping trolley
952 +
🛓	stupa
953 +
🛔	pagoda
954 +
🛕	hindu temple
955 +
🛖	hut
956 +
🛗	elevator
957 +
🛜	wireless
958 +
🛝	playground slide
959 +
🛞	wheel
960 +
🛟	ring buoy
961 +
🛠	hammer and wrench
962 +
🛡	shield
963 +
🛢	oil drum
964 +
🛣	motorway
965 +
🛤	railway track
966 +
🛥	motor boat
967 +
🛦	up-pointing military airplane
968 +
🛧	up-pointing airplane
969 +
🛨	up-pointing small airplane
970 +
🛩	small airplane
971 +
🛪	northeast-pointing airplane
972 +
🛫	airplane departure
973 +
🛬	airplane arriving
974 +
🛰	satellite
975 +
🛱	oncoming fire engine
976 +
🛲	diesel locomotive
977 +
🛳	passenger ship
978 +
🛴	scooter
979 +
🛵	motor scooter
980 +
🛶	canoe
981 +
🛷	sled
982 +
🛸	flying saucer
983 +
🛹	skateboard
984 +
🛺	auto rickshaw
985 +
🛻	pickup truck
986 +
🛼	roller skate
987 +
🤀	circled cross formee with four dots
988 +
🤁	circled cross formee with two dots
989 +
🤂	circled cross formee
990 +
🤃	left half circle with four dots
991 +
🤄	left half circle with three dots
992 +
🤅	left half circle with two dots
993 +
🤆	left half circle with dot
994 +
🤇	left half circle
995 +
🤈	downward facing hook
996 +
🤉	downward facing notched hook
997 +
🤊	downward facing hook with dot
998 +
🤋	downward facing notched hook with dot
999 +
🤌	pinched fingers
1000 +
🤍	white heart
1001 +
🤎	brown heart
1002 +
🤏	pinching hand
1003 +
🤐	zipper-mouth face
1004 +
🤑	money-mouth face
1005 +
🤒	face with thermometer
1006 +
🤓	nerd face
1007 +
🤔	thinking face
1008 +
🤕	face with head-bandage
1009 +
🤖	robot face
1010 +
🤗	hugging face
1011 +
🤘	sign of the horns
1012 +
🤙	call me hand
1013 +
🤚	raised back of hand
1014 +
🤛	left-facing fist
1015 +
🤜	right-facing fist
1016 +
🤝	handshake
1017 +
🤞	hand with index and middle fingers crossed
1018 +
🤟	i love you hand sign
1019 +
🤠	face with cowboy hat
1020 +
🤡	clown face
1021 +
🤢	nauseated face
1022 +
🤣	rolling on the floor laughing
1023 +
🤤	drooling face
1024 +
🤥	lying face
1025 +
🤦	face palm
1026 +
🤧	sneezing face
1027 +
🤨	face with one eyebrow raised
1028 +
🤩	grinning face with star eyes
1029 +
🤪	grinning face with one large and one small eye
1030 +
🤫	face with finger covering closed lips
1031 +
🤬	serious face with symbols covering mouth
1032 +
🤭	smiling face with smiling eyes and hand covering mouth
1033 +
🤮	face with open mouth vomiting
1034 +
🤯	shocked face with exploding head
1035 +
🤰	pregnant woman
1036 +
🤱	breast-feeding
1037 +
🤲	palms up together
1038 +
🤳	selfie
1039 +
🤴	prince
1040 +
🤵	man in tuxedo
1041 +
🤶	mother christmas
1042 +
🤷	shrug
1043 +
🤸	person doing cartwheel
1044 +
🤹	juggling
1045 +
🤺	fencer
1046 +
🤻	modern pentathlon
1047 +
🤼	wrestlers
1048 +
🤽	water polo
1049 +
🤾	handball
1050 +
🤿	diving mask
1051 +
🥀	wilted flower
1052 +
🥁	drum with drumsticks
1053 +
🥂	clinking glasses
1054 +
🥃	tumbler glass
1055 +
🥄	spoon
1056 +
🥅	goal net
1057 +
🥆	rifle
1058 +
🥇	first place medal
1059 +
🥈	second place medal
1060 +
🥉	third place medal
1061 +
🥊	boxing glove
1062 +
🥋	martial arts uniform
1063 +
🥌	curling stone
1064 +
🥍	lacrosse stick and ball
1065 +
🥎	softball
1066 +
🥏	flying disc
1067 +
🥐	croissant
1068 +
🥑	avocado
1069 +
🥒	cucumber
1070 +
🥓	bacon
1071 +
🥔	potato
1072 +
🥕	carrot
1073 +
🥖	baguette bread
1074 +
🥗	green salad
1075 +
🥘	shallow pan of food
1076 +
🥙	stuffed flatbread
1077 +
🥚	egg
1078 +
🥛	glass of milk
1079 +
🥜	peanuts
1080 +
🥝	kiwifruit
1081 +
🥞	pancakes
1082 +
🥟	dumpling
1083 +
🥠	fortune cookie
1084 +
🥡	takeout box
1085 +
🥢	chopsticks
1086 +
🥣	bowl with spoon
1087 +
🥤	cup with straw
1088 +
🥥	coconut
1089 +
🥦	broccoli
1090 +
🥧	pie
1091 +
🥨	pretzel
1092 +
🥩	cut of meat
1093 +
🥪	sandwich
1094 +
🥫	canned food
1095 +
🥬	leafy green
1096 +
🥭	mango
1097 +
🥮	moon cake
1098 +
🥯	bagel
1099 +
🥰	smiling face with smiling eyes and three hearts
1100 +
🥱	yawning face
1101 +
🥲	smiling face with tear
1102 +
🥳	face with party horn and party hat
1103 +
🥴	face with uneven eyes and wavy mouth
1104 +
🥵	overheated face
1105 +
🥶	freezing face
1106 +
🥷	ninja
1107 +
🥸	disguised face
1108 +
🥹	face holding back tears
1109 +
🥺	face with pleading eyes
1110 +
🥻	sari
1111 +
🥼	lab coat
1112 +
🥽	goggles
1113 +
🥾	hiking boot
1114 +
🥿	flat shoe
1115 +
🦀	crab
1116 +
🦁	lion face
1117 +
🦂	scorpion
1118 +
🦃	turkey
1119 +
🦄	unicorn face
1120 +
🦅	eagle
1121 +
🦆	duck
1122 +
🦇	bat
1123 +
🦈	shark
1124 +
🦉	owl
1125 +
🦊	fox face
1126 +
🦋	butterfly
1127 +
🦌	deer
1128 +
🦍	gorilla
1129 +
🦎	lizard
1130 +
🦏	rhinoceros
1131 +
🦐	shrimp
1132 +
🦑	squid
1133 +
🦒	giraffe face
1134 +
🦓	zebra face
1135 +
🦔	hedgehog
1136 +
🦕	sauropod
1137 +
🦖	t-rex
1138 +
🦗	cricket
1139 +
🦘	kangaroo
1140 +
🦙	llama
1141 +
🦚	peacock
1142 +
🦛	hippopotamus
1143 +
🦜	parrot
1144 +
🦝	raccoon
1145 +
🦞	lobster
1146 +
🦟	mosquito
1147 +
🦠	microbe
1148 +
🦡	badger
1149 +
🦢	swan
1150 +
🦣	mammoth
1151 +
🦤	dodo
1152 +
🦥	sloth
1153 +
🦦	otter
1154 +
🦧	orangutan
1155 +
🦨	skunk
1156 +
🦩	flamingo
1157 +
🦪	oyster
1158 +
🦫	beaver
1159 +
🦬	bison
1160 +
🦭	seal
1161 +
🦮	guide dog
1162 +
🦯	probing cane
1163 +
🦰	emoji component red hair
1164 +
🦱	emoji component curly hair
1165 +
🦲	emoji component bald
1166 +
🦳	emoji component white hair
1167 +
🦴	bone
1168 +
🦵	leg
1169 +
🦶	foot
1170 +
🦷	tooth
1171 +
🦸	superhero
1172 +
🦹	supervillain
1173 +
🦺	safety vest
1174 +
🦻	ear with hearing aid
1175 +
🦼	motorized wheelchair
1176 +
🦽	manual wheelchair
1177 +
🦾	mechanical arm
1178 +
🦿	mechanical leg
1179 +
🧀	cheese wedge
1180 +
🧁	cupcake
1181 +
🧂	salt shaker
1182 +
🧃	beverage box
1183 +
🧄	garlic
1184 +
🧅	onion
1185 +
🧆	falafel
1186 +
🧇	waffle
1187 +
🧈	butter
1188 +
🧉	mate drink
1189 +
🧊	ice cube
1190 +
🧋	bubble tea
1191 +
🧌	troll
1192 +
🧍	standing person
1193 +
🧎	kneeling person
1194 +
🧏	deaf person
1195 +
🧐	face with monocle
1196 +
🧑	adult
1197 +
🧒	child
1198 +
🧓	older adult
1199 +
🧔	bearded person
1200 +
🧕	person with headscarf
1201 +
🧖	person in steamy room
1202 +
🧗	person climbing
1203 +
🧘	person in lotus position
1204 +
🧙	mage
1205 +
🧚	fairy
1206 +
🧛	vampire
1207 +
🧜	merperson
1208 +
🧝	elf
1209 +
🧞	genie
1210 +
🧟	zombie
1211 +
🧠	brain
1212 +
🧡	orange heart
1213 +
🧢	billed cap
1214 +
🧣	scarf
1215 +
🧤	gloves
1216 +
🧥	coat
1217 +
🧦	socks
1218 +
🧧	red gift envelope
1219 +
🧨	firecracker
1220 +
🧩	jigsaw puzzle piece
1221 +
🧪	test tube
1222 +
🧫	petri dish
1223 +
🧬	dna double helix
1224 +
🧭	compass
1225 +
🧮	abacus
1226 +
🧯	fire extinguisher
1227 +
🧰	toolbox
1228 +
🧱	brick
1229 +
🧲	magnet
1230 +
🧳	luggage
1231 +
🧴	lotion bottle
1232 +
🧵	spool of thread
1233 +
🧶	ball of yarn
1234 +
🧷	safety pin
1235 +
🧸	teddy bear
1236 +
🧹	broom
1237 +
🧺	basket
1238 +
🧻	roll of paper
1239 +
🧼	bar of soap
1240 +
🧽	sponge
1241 +
🧾	receipt
1242 +
🧿	nazar amulet
1243 +
🩰	ballet shoes
1244 +
🩱	one-piece swimsuit
1245 +
🩲	briefs
1246 +
🩳	shorts
1247 +
🩴	thong sandal
1248 +
🩵	light blue heart
1249 +
🩶	grey heart
1250 +
🩷	pink heart
1251 +
🩸	drop of blood
1252 +
🩹	adhesive bandage
1253 +
🩺	stethoscope
1254 +
🩻	x-ray
1255 +
🩼	crutch
1256 +
🪀	yo-yo
1257 +
🪁	kite
1258 +
🪂	parachute
1259 +
🪃	boomerang
1260 +
🪄	magic wand
1261 +
🪅	pinata
1262 +
🪆	nesting dolls
1263 +
🪇	maracas
1264 +
🪈	flute
1265 +
🪉	harp
1266 +
🪏	shovel
1267 +
🪐	ringed planet
1268 +
🪑	chair
1269 +
🪒	razor
1270 +
🪓	axe
1271 +
🪔	diya lamp
1272 +
🪕	banjo
1273 +
🪖	military helmet
1274 +
🪗	accordion
1275 +
🪘	long drum
1276 +
🪙	coin
1277 +
🪚	carpentry saw
1278 +
🪛	screwdriver
1279 +
🪜	ladder
1280 +
🪝	hook
1281 +
🪞	mirror
1282 +
🪟	window
1283 +
🪠	plunger
1284 +
🪡	sewing needle
1285 +
🪢	knot
1286 +
🪣	bucket
1287 +
🪤	mouse trap
1288 +
🪥	toothbrush
1289 +
🪦	headstone
1290 +
🪧	placard
1291 +
🪨	rock
1292 +
🪩	mirror ball
1293 +
🪪	identification card
1294 +
🪫	low battery
1295 +
🪬	hamsa
1296 +
🪭	folding hand fan
1297 +
🪮	hair pick
1298 +
🪯	khanda
1299 +
🪰	fly
1300 +
🪱	worm
1301 +
🪲	beetle
1302 +
🪳	cockroach
1303 +
🪴	potted plant
1304 +
🪵	wood
1305 +
🪶	feather
1306 +
🪷	lotus
1307 +
🪸	coral
1308 +
🪹	empty nest
1309 +
🪺	nest with eggs
1310 +
🪻	hyacinth
1311 +
🪼	jellyfish
1312 +
🪽	wing
1313 +
🪾	leafless tree
1314 +
🪿	goose
1315 +
🫀	anatomical heart
1316 +
🫁	lungs
1317 +
🫂	people hugging
1318 +
🫃	pregnant man
1319 +
🫄	pregnant person
1320 +
🫅	person with crown
1321 +
🫆	fingerprint
1322 +
🫎	moose
1323 +
🫏	donkey
1324 +
🫐	blueberries
1325 +
🫑	bell pepper
1326 +
🫒	olive
1327 +
🫓	flatbread
1328 +
🫔	tamale
1329 +
🫕	fondue
1330 +
🫖	teapot
1331 +
🫗	pouring liquid
1332 +
🫘	beans
1333 +
🫙	jar
1334 +
🫚	ginger root
1335 +
🫛	pea pod
1336 +
🫜	root vegetable
1337 +
🫟	splatter
1338 +
🫠	melting face
1339 +
🫡	saluting face
1340 +
🫢	face with open eyes and hand over mouth
1341 +
🫣	face with peeking eye
1342 +
🫤	face with diagonal mouth
1343 +
🫥	dotted line face
1344 +
🫦	biting lip
1345 +
🫧	bubbles
1346 +
🫨	shaking face
1347 +
🫩	face with bags under eyes
1348 +
🫰	hand with index finger and thumb crossed
1349 +
🫱	rightwards hand
1350 +
🫲	leftwards hand
1351 +
🫳	palm down hand
1352 +
🫴	palm up hand
1353 +
🫵	index pointing at the viewer
1354 +
🫶	heart hands
1355 +
🫷	leftwards pushing hand
1356 +
🫸	rightwards pushing hand
1357 +
🇦	regional indicator symbol letter a
1358 +
🇧	regional indicator symbol letter b
1359 +
🇨	regional indicator symbol letter c
1360 +
🇩	regional indicator symbol letter d
1361 +
🇪	regional indicator symbol letter e
1362 +
🇫	regional indicator symbol letter f
1363 +
🇬	regional indicator symbol letter g
1364 +
🇭	regional indicator symbol letter h
1365 +
🇮	regional indicator symbol letter i
1366 +
🇯	regional indicator symbol letter j
1367 +
🇰	regional indicator symbol letter k
1368 +
🇱	regional indicator symbol letter l
1369 +
🇲	regional indicator symbol letter m
1370 +
🇳	regional indicator symbol letter n
1371 +
🇴	regional indicator symbol letter o
1372 +
🇵	regional indicator symbol letter p
1373 +
🇶	regional indicator symbol letter q
1374 +
🇷	regional indicator symbol letter r
1375 +
🇸	regional indicator symbol letter s
1376 +
🇹	regional indicator symbol letter t
1377 +
🇺	regional indicator symbol letter u
1378 +
🇻	regional indicator symbol letter v
1379 +
🇼	regional indicator symbol letter w
1380 +
🇽	regional indicator symbol letter x
1381 +
🇾	regional indicator symbol letter y
1382 +
🇿	regional indicator symbol letter z
1383 +
☀	black sun with rays
1384 +
☁	cloud
1385 +
☂	umbrella
1386 +
☃	snowman
1387 +
☄	comet
1388 +
★	black star
1389 +
☆	white star
1390 +
☇	lightning
1391 +
☈	thunderstorm
1392 +
☉	sun
1393 +
☊	ascending node
1394 +
☋	descending node
1395 +
☌	conjunction
1396 +
☍	opposition
1397 +
☎	black telephone
1398 +
☏	white telephone
1399 +
☐	ballot box
1400 +
☑	ballot box with check
1401 +
☒	ballot box with x
1402 +
☓	saltire
1403 +
☔	umbrella with rain drops
1404 +
☕	hot beverage
1405 +
☖	white shogi piece
1406 +
☗	black shogi piece
1407 +
☘	shamrock
1408 +
☙	reversed rotated floral heart bullet
1409 +
☚	black left pointing index
1410 +
☛	black right pointing index
1411 +
☜	white left pointing index
1412 +
☝	white up pointing index
1413 +
☞	white right pointing index
1414 +
☟	white down pointing index
1415 +
☠	skull and crossbones
1416 +
☡	caution sign
1417 +
☢	radioactive sign
1418 +
☣	biohazard sign
1419 +
☤	caduceus
1420 +
☥	ankh
1421 +
☦	orthodox cross
1422 +
☧	chi rho
1423 +
☨	cross of lorraine
1424 +
☩	cross of jerusalem
1425 +
☪	star and crescent
1426 +
☫	farsi symbol
1427 +
☬	adi shakti
1428 +
☭	hammer and sickle
1429 +
☮	peace symbol
1430 +
☯	yin yang
1431 +
☰	trigram for heaven
1432 +
☱	trigram for lake
1433 +
☲	trigram for fire
1434 +
☳	trigram for thunder
1435 +
☴	trigram for wind
1436 +
☵	trigram for water
1437 +
☶	trigram for mountain
1438 +
☷	trigram for earth
1439 +
☸	wheel of dharma
1440 +
☹	white frowning face
1441 +
☺	white smiling face
1442 +
☻	black smiling face
1443 +
☼	white sun with rays
1444 +
☽	first quarter moon
1445 +
☾	last quarter moon
1446 +
☿	mercury
1447 +
♀	female sign
1448 +
♁	earth
1449 +
♂	male sign
1450 +
♃	jupiter
1451 +
♄	saturn
1452 +
♅	uranus
1453 +
♆	neptune
1454 +
♇	pluto
1455 +
♈	aries
1456 +
♉	taurus
1457 +
♊	gemini
1458 +
♋	cancer
1459 +
♌	leo
1460 +
♍	virgo
1461 +
♎	libra
1462 +
♏	scorpius
1463 +
♐	sagittarius
1464 +
♑	capricorn
1465 +
♒	aquarius
1466 +
♓	pisces
1467 +
♔	white chess king
1468 +
♕	white chess queen
1469 +
♖	white chess rook
1470 +
♗	white chess bishop
1471 +
♘	white chess knight
1472 +
♙	white chess pawn
1473 +
♚	black chess king
1474 +
♛	black chess queen
1475 +
♜	black chess rook
1476 +
♝	black chess bishop
1477 +
♞	black chess knight
1478 +
♟	black chess pawn
1479 +
♠	black spade suit
1480 +
♡	white heart suit
1481 +
♢	white diamond suit
1482 +
♣	black club suit
1483 +
♤	white spade suit
1484 +
♥	black heart suit
1485 +
♦	black diamond suit
1486 +
♧	white club suit
1487 +
♨	hot springs
1488 +
♩	quarter note
1489 +
♪	eighth note
1490 +
♫	beamed eighth notes
1491 +
♬	beamed sixteenth notes
1492 +
♭	music flat sign
1493 +
♮	music natural sign
1494 +
♯	music sharp sign
1495 +
♰	west syriac cross
1496 +
♱	east syriac cross
1497 +
♲	universal recycling symbol
1498 +
♳	recycling symbol for type-1 plastics
1499 +
♴	recycling symbol for type-2 plastics
1500 +
♵	recycling symbol for type-3 plastics
1501 +
♶	recycling symbol for type-4 plastics
1502 +
♷	recycling symbol for type-5 plastics
1503 +
♸	recycling symbol for type-6 plastics
1504 +
♹	recycling symbol for type-7 plastics
1505 +
♺	recycling symbol for generic materials
1506 +
♻	black universal recycling symbol
1507 +
♼	recycled paper symbol
1508 +
♽	partially-recycled paper symbol
1509 +
♾	permanent paper sign
1510 +
♿	wheelchair symbol
1511 +
⚀	die face-1
1512 +
⚁	die face-2
1513 +
⚂	die face-3
1514 +
⚃	die face-4
1515 +
⚄	die face-5
1516 +
⚅	die face-6
1517 +
⚆	white circle with dot right
1518 +
⚇	white circle with two dots
1519 +
⚈	black circle with white dot right
1520 +
⚉	black circle with two white dots
1521 +
⚊	monogram for yang
1522 +
⚋	monogram for yin
1523 +
⚌	digram for greater yang
1524 +
⚍	digram for lesser yin
1525 +
⚎	digram for lesser yang
1526 +
⚏	digram for greater yin
1527 +
⚐	white flag
1528 +
⚑	black flag
1529 +
⚒	hammer and pick
1530 +
⚓	anchor
1531 +
⚔	crossed swords
1532 +
⚕	staff of aesculapius
1533 +
⚖	scales
1534 +
⚗	alembic
1535 +
⚘	flower
1536 +
⚙	gear
1537 +
⚚	staff of hermes
1538 +
⚛	atom symbol
1539 +
⚜	fleur-de-lis
1540 +
⚝	outlined white star
1541 +
⚞	three lines converging right
1542 +
⚟	three lines converging left
1543 +
⚠	warning sign
1544 +
⚡	high voltage sign
1545 +
⚢	doubled female sign
1546 +
⚣	doubled male sign
1547 +
⚤	interlocked female and male sign
1548 +
⚥	male and female sign
1549 +
⚦	male with stroke sign
1550 +
⚧	male with stroke and male and female sign
1551 +
⚨	vertical male with stroke sign
1552 +
⚩	horizontal male with stroke sign
1553 +
⚪	medium white circle
1554 +
⚫	medium black circle
1555 +
⚬	medium small white circle
1556 +
⚭	marriage symbol
1557 +
⚮	divorce symbol
1558 +
⚯	unmarried partnership symbol
1559 +
⚰	coffin
1560 +
⚱	funeral urn
1561 +
⚲	neuter
1562 +
⚳	ceres
1563 +
⚴	pallas
1564 +
⚵	juno
1565 +
⚶	vesta
1566 +
⚷	chiron
1567 +
⚸	black moon lilith
1568 +
⚹	sextile
1569 +
⚺	semisextile
1570 +
⚻	quincunx
1571 +
⚼	sesquiquadrate
1572 +
⚽	soccer ball
1573 +
⚾	baseball
1574 +
⚿	squared key
1575 +
⛀	white draughts man
1576 +
⛁	white draughts king
1577 +
⛂	black draughts man
1578 +
⛃	black draughts king
1579 +
⛄	snowman without snow
1580 +
⛅	sun behind cloud
1581 +
⛆	rain
1582 +
⛇	black snowman
1583 +
⛈	thunder cloud and rain
1584 +
⛉	turned white shogi piece
1585 +
⛊	turned black shogi piece
1586 +
⛋	white diamond in square
1587 +
⛌	crossing lanes
1588 +
⛍	disabled car
1589 +
⛎	ophiuchus
1590 +
⛏	pick
1591 +
⛐	car sliding
1592 +
⛑	helmet with white cross
1593 +
⛒	circled crossing lanes
1594 +
⛓	chains
1595 +
⛔	no entry
1596 +
⛕	alternate one-way left way traffic
1597 +
⛖	black two-way left way traffic
1598 +
⛗	white two-way left way traffic
1599 +
⛘	black left lane merge
1600 +
⛙	white left lane merge
1601 +
⛚	drive slow sign
1602 +
⛛	heavy white down-pointing triangle
1603 +
⛜	left closed entry
1604 +
⛝	squared saltire
1605 +
⛞	falling diagonal in white circle in black square
1606 +
⛟	black truck
1607 +
⛠	restricted left entry-1
1608 +
⛡	restricted left entry-2
1609 +
⛢	astronomical symbol for uranus
1610 +
⛣	heavy circle with stroke and two dots above
1611 +
⛤	pentagram
1612 +
⛥	right-handed interlaced pentagram
1613 +
⛦	left-handed interlaced pentagram
1614 +
⛧	inverted pentagram
1615 +
⛨	black cross on shield
1616 +
⛩	shinto shrine
1617 +
⛪	church
1618 +
⛫	castle
1619 +
⛬	historic site
1620 +
⛭	gear without hub
1621 +
⛮	gear with handles
1622 +
⛯	map symbol for lighthouse
1623 +
⛰	mountain
1624 +
⛱	umbrella on ground
1625 +
⛲	fountain
1626 +
⛳	flag in hole
1627 +
⛴	ferry
1628 +
⛵	sailboat
1629 +
⛶	square four corners
1630 +
⛷	skier
1631 +
⛸	ice skate
1632 +
⛹	person with ball
1633 +
⛺	tent
1634 +
⛻	japanese bank symbol
1635 +
⛼	headstone graveyard symbol
1636 +
⛽	fuel pump
1637 +
⛾	cup on black square
1638 +
⛿	white flag with horizontal middle black stripe
1639 +
✀	black safety scissors
1640 +
✁	upper blade scissors
1641 +
✂	black scissors
1642 +
✃	lower blade scissors
1643 +
✄	white scissors
1644 +
✅	white heavy check mark
1645 +
✆	telephone location sign
1646 +
✇	tape drive
1647 +
✈	airplane
1648 +
✉	envelope
1649 +
✊	raised fist
1650 +
✋	raised hand
1651 +
✌	victory hand
1652 +
✍	writing hand
1653 +
✎	lower right pencil
1654 +
✏	pencil
1655 +
✐	upper right pencil
1656 +
✑	white nib
1657 +
✒	black nib
1658 +
✓	check mark
1659 +
✔	heavy check mark
1660 +
✕	multiplication x
1661 +
✖	heavy multiplication x
1662 +
✗	ballot x
1663 +
✘	heavy ballot x
1664 +
✙	outlined greek cross
1665 +
✚	heavy greek cross
1666 +
✛	open centre cross
1667 +
✜	heavy open centre cross
1668 +
✝	latin cross
1669 +
✞	shadowed white latin cross
1670 +
✟	outlined latin cross
1671 +
✠	maltese cross
1672 +
✡	star of david
1673 +
✢	four teardrop-spoked asterisk
1674 +
✣	four balloon-spoked asterisk
1675 +
✤	heavy four balloon-spoked asterisk
1676 +
✥	four club-spoked asterisk
1677 +
✦	black four pointed star
1678 +
✧	white four pointed star
1679 +
✨	sparkles
1680 +
✩	stress outlined white star
1681 +
✪	circled white star
1682 +
✫	open centre black star
1683 +
✬	black centre white star
1684 +
✭	outlined black star
1685 +
✮	heavy outlined black star
1686 +
✯	pinwheel star
1687 +
✰	shadowed white star
1688 +
✱	heavy asterisk
1689 +
✲	open centre asterisk
1690 +
✳	eight spoked asterisk
1691 +
✴	eight pointed black star
1692 +
✵	eight pointed pinwheel star
1693 +
✶	six pointed black star
1694 +
✷	eight pointed rectilinear black star
1695 +
✸	heavy eight pointed rectilinear black star
1696 +
✹	twelve pointed black star
1697 +
✺	sixteen pointed asterisk
1698 +
✻	teardrop-spoked asterisk
1699 +
✼	open centre teardrop-spoked asterisk
1700 +
✽	heavy teardrop-spoked asterisk
1701 +
✾	six petalled black and white florette
1702 +
✿	black florette
1703 +
❀	white florette
1704 +
❁	eight petalled outlined black florette
1705 +
❂	circled open centre eight pointed star
1706 +
❃	heavy teardrop-spoked pinwheel asterisk
1707 +
❄	snowflake
1708 +
❅	tight trifoliate snowflake
1709 +
❆	heavy chevron snowflake
1710 +
❇	sparkle
1711 +
❈	heavy sparkle
1712 +
❉	balloon-spoked asterisk
1713 +
❊	eight teardrop-spoked propeller asterisk
1714 +
❋	heavy eight teardrop-spoked propeller asterisk
1715 +
❌	cross mark
1716 +
❍	shadowed white circle
1717 +
❎	negative squared cross mark
1718 +
❏	lower right drop-shadowed white square
1719 +
❐	upper right drop-shadowed white square
1720 +
❑	lower right shadowed white square
1721 +
❒	upper right shadowed white square
1722 +
❓	black question mark ornament
1723 +
❔	white question mark ornament
1724 +
❕	white exclamation mark ornament
1725 +
❖	black diamond minus white x
1726 +
❗	heavy exclamation mark symbol
1727 +
❘	light vertical bar
1728 +
❙	medium vertical bar
1729 +
❚	heavy vertical bar
1730 +
❛	heavy single turned comma quotation mark ornament
1731 +
❜	heavy single comma quotation mark ornament
1732 +
❝	heavy double turned comma quotation mark ornament
1733 +
❞	heavy double comma quotation mark ornament
1734 +
❟	heavy low single comma quotation mark ornament
1735 +
❠	heavy low double comma quotation mark ornament
1736 +
❡	curved stem paragraph sign ornament
1737 +
❢	heavy exclamation mark ornament
1738 +
❣	heavy heart exclamation mark ornament
1739 +
❤	heavy black heart
1740 +
❥	rotated heavy black heart bullet
1741 +
❦	floral heart
1742 +
❧	rotated floral heart bullet
1743 +
❨	medium left parenthesis ornament
1744 +
❩	medium right parenthesis ornament
1745 +
❪	medium flattened left parenthesis ornament
1746 +
❫	medium flattened right parenthesis ornament
1747 +
❬	medium left-pointing angle bracket ornament
1748 +
❭	medium right-pointing angle bracket ornament
1749 +
❮	heavy left-pointing angle quotation mark ornament
1750 +
❯	heavy right-pointing angle quotation mark ornament
1751 +
❰	heavy left-pointing angle bracket ornament
1752 +
❱	heavy right-pointing angle bracket ornament
1753 +
❲	light left tortoise shell bracket ornament
1754 +
❳	light right tortoise shell bracket ornament
1755 +
❴	medium left curly bracket ornament
1756 +
❵	medium right curly bracket ornament
1757 +
❶	dingbat negative circled digit one
1758 +
❷	dingbat negative circled digit two
1759 +
❸	dingbat negative circled digit three
1760 +
❹	dingbat negative circled digit four
1761 +
❺	dingbat negative circled digit five
1762 +
❻	dingbat negative circled digit six
1763 +
❼	dingbat negative circled digit seven
1764 +
❽	dingbat negative circled digit eight
1765 +
❾	dingbat negative circled digit nine
1766 +
❿	dingbat negative circled number ten
1767 +
➀	dingbat circled sans-serif digit one
1768 +
➁	dingbat circled sans-serif digit two
1769 +
➂	dingbat circled sans-serif digit three
1770 +
➃	dingbat circled sans-serif digit four
1771 +
➄	dingbat circled sans-serif digit five
1772 +
➅	dingbat circled sans-serif digit six
1773 +
➆	dingbat circled sans-serif digit seven
1774 +
➇	dingbat circled sans-serif digit eight
1775 +
➈	dingbat circled sans-serif digit nine
1776 +
➉	dingbat circled sans-serif number ten
1777 +
➊	dingbat negative circled sans-serif digit one
1778 +
➋	dingbat negative circled sans-serif digit two
1779 +
➌	dingbat negative circled sans-serif digit three
1780 +
➍	dingbat negative circled sans-serif digit four
1781 +
➎	dingbat negative circled sans-serif digit five
1782 +
➏	dingbat negative circled sans-serif digit six
1783 +
➐	dingbat negative circled sans-serif digit seven
1784 +
➑	dingbat negative circled sans-serif digit eight
1785 +
➒	dingbat negative circled sans-serif digit nine
1786 +
➓	dingbat negative circled sans-serif number ten
1787 +
➔	heavy wide-headed rightwards arrow
1788 +
➕	heavy plus sign
1789 +
➖	heavy minus sign
1790 +
➗	heavy division sign
1791 +
➘	heavy south east arrow
1792 +
➙	heavy rightwards arrow
1793 +
➚	heavy north east arrow
1794 +
➛	drafting point rightwards arrow
1795 +
➜	heavy round-tipped rightwards arrow
1796 +
➝	triangle-headed rightwards arrow
1797 +
➞	heavy triangle-headed rightwards arrow
1798 +
➟	dashed triangle-headed rightwards arrow
1799 +
➠	heavy dashed triangle-headed rightwards arrow
1800 +
➡	black rightwards arrow
1801 +
➢	three-d top-lighted rightwards arrowhead
1802 +
➣	three-d bottom-lighted rightwards arrowhead
1803 +
➤	black rightwards arrowhead
1804 +
➥	heavy black curved downwards and rightwards arrow
1805 +
➦	heavy black curved upwards and rightwards arrow
1806 +
➧	squat black rightwards arrow
1807 +
➨	heavy concave-pointed black rightwards arrow
1808 +
➩	right-shaded white rightwards arrow
1809 +
➪	left-shaded white rightwards arrow
1810 +
➫	back-tilted shadowed white rightwards arrow
1811 +
➬	front-tilted shadowed white rightwards arrow
1812 +
➭	heavy lower right-shadowed white rightwards arrow
1813 +
➮	heavy upper right-shadowed white rightwards arrow
1814 +
➯	notched lower right-shadowed white rightwards arrow
1815 +
➰	curly loop
1816 +
➱	notched upper right-shadowed white rightwards arrow
1817 +
➲	circled heavy white rightwards arrow
1818 +
➳	white-feathered rightwards arrow
1819 +
➴	black-feathered south east arrow
1820 +
➵	black-feathered rightwards arrow
1821 +
➶	black-feathered north east arrow
1822 +
➷	heavy black-feathered south east arrow
1823 +
➸	heavy black-feathered rightwards arrow
1824 +
➹	heavy black-feathered north east arrow
1825 +
➺	teardrop-barbed rightwards arrow
1826 +
➻	heavy teardrop-shanked rightwards arrow
1827 +
➼	wedge-tailed rightwards arrow
1828 +
➽	heavy wedge-tailed rightwards arrow
1829 +
➾	open-outlined rightwards arrow
1830 +
➿	double curly loop
1831 +
←	leftwards arrow
1832 +
↑	upwards arrow
1833 +
→	rightwards arrow
1834 +
↓	downwards arrow
1835 +
↔	left right arrow
1836 +
↕	up down arrow
1837 +
↖	north west arrow
1838 +
↗	north east arrow
1839 +
↘	south east arrow
1840 +
↙	south west arrow
1841 +
↚	leftwards arrow with stroke
1842 +
↛	rightwards arrow with stroke
1843 +
↜	leftwards wave arrow
1844 +
↝	rightwards wave arrow
1845 +
↞	leftwards two headed arrow
1846 +
↟	upwards two headed arrow
1847 +
↠	rightwards two headed arrow
1848 +
↡	downwards two headed arrow
1849 +
↢	leftwards arrow with tail
1850 +
↣	rightwards arrow with tail
1851 +
↤	leftwards arrow from bar
1852 +
↥	upwards arrow from bar
1853 +
↦	rightwards arrow from bar
1854 +
↧	downwards arrow from bar
1855 +
↨	up down arrow with base
1856 +
↩	leftwards arrow with hook
1857 +
↪	rightwards arrow with hook
1858 +
↫	leftwards arrow with loop
1859 +
↬	rightwards arrow with loop
1860 +
↭	left right wave arrow
1861 +
↮	left right arrow with stroke
1862 +
↯	downwards zigzag arrow
1863 +
↰	upwards arrow with tip leftwards
1864 +
↱	upwards arrow with tip rightwards
1865 +
↲	downwards arrow with tip leftwards
1866 +
↳	downwards arrow with tip rightwards
1867 +
↴	rightwards arrow with corner downwards
1868 +
↵	downwards arrow with corner leftwards
1869 +
↶	anticlockwise top semicircle arrow
1870 +
↷	clockwise top semicircle arrow
1871 +
↸	north west arrow to long bar
1872 +
↹	leftwards arrow to bar over rightwards arrow to bar
1873 +
↺	anticlockwise open circle arrow
1874 +
↻	clockwise open circle arrow
1875 +
↼	leftwards harpoon with barb upwards
1876 +
↽	leftwards harpoon with barb downwards
1877 +
↾	upwards harpoon with barb rightwards
1878 +
↿	upwards harpoon with barb leftwards
1879 +
⇀	rightwards harpoon with barb upwards
1880 +
⇁	rightwards harpoon with barb downwards
1881 +
⇂	downwards harpoon with barb rightwards
1882 +
⇃	downwards harpoon with barb leftwards
1883 +
⇄	rightwards arrow over leftwards arrow
1884 +
⇅	upwards arrow leftwards of downwards arrow
1885 +
⇆	leftwards arrow over rightwards arrow
1886 +
⇇	leftwards paired arrows
1887 +
⇈	upwards paired arrows
1888 +
⇉	rightwards paired arrows
1889 +
⇊	downwards paired arrows
1890 +
⇋	leftwards harpoon over rightwards harpoon
1891 +
⇌	rightwards harpoon over leftwards harpoon
1892 +
⇍	leftwards double arrow with stroke
1893 +
⇎	left right double arrow with stroke
1894 +
⇏	rightwards double arrow with stroke
1895 +
⇐	leftwards double arrow
1896 +
⇑	upwards double arrow
1897 +
⇒	rightwards double arrow
1898 +
⇓	downwards double arrow
1899 +
⇔	left right double arrow
1900 +
⇕	up down double arrow
1901 +
⇖	north west double arrow
1902 +
⇗	north east double arrow
1903 +
⇘	south east double arrow
1904 +
⇙	south west double arrow
1905 +
⇚	leftwards triple arrow
1906 +
⇛	rightwards triple arrow
1907 +
⇜	leftwards squiggle arrow
1908 +
⇝	rightwards squiggle arrow
1909 +
⇞	upwards arrow with double stroke
1910 +
⇟	downwards arrow with double stroke
1911 +
⇠	leftwards dashed arrow
1912 +
⇡	upwards dashed arrow
1913 +
⇢	rightwards dashed arrow
1914 +
⇣	downwards dashed arrow
1915 +
⇤	leftwards arrow to bar
1916 +
⇥	rightwards arrow to bar
1917 +
⇦	leftwards white arrow
1918 +
⇧	upwards white arrow
1919 +
⇨	rightwards white arrow
1920 +
⇩	downwards white arrow
1921 +
⇪	upwards white arrow from bar
1922 +
⇫	upwards white arrow on pedestal
1923 +
⇬	upwards white arrow on pedestal with horizontal bar
1924 +
⇭	upwards white arrow on pedestal with vertical bar
1925 +
⇮	upwards white double arrow
1926 +
⇯	upwards white double arrow on pedestal
1927 +
⇰	rightwards white arrow from wall
1928 +
⇱	north west arrow to corner
1929 +
⇲	south east arrow to corner
1930 +
⇳	up down white arrow
1931 +
⇴	right arrow with small circle
1932 +
⇵	downwards arrow leftwards of upwards arrow
1933 +
⇶	three rightwards arrows
1934 +
⇷	leftwards arrow with vertical stroke
1935 +
⇸	rightwards arrow with vertical stroke
1936 +
⇹	left right arrow with vertical stroke
1937 +
⇺	leftwards arrow with double vertical stroke
1938 +
⇻	rightwards arrow with double vertical stroke
1939 +
⇼	left right arrow with double vertical stroke
1940 +
⇽	leftwards open-headed arrow
1941 +
⇾	rightwards open-headed arrow
1942 +
⇿	left right open-headed arrow
1943 +
⬀	north east white arrow
1944 +
⬁	north west white arrow
1945 +
⬂	south east white arrow
1946 +
⬃	south west white arrow
1947 +
⬄	left right white arrow
1948 +
⬅	leftwards black arrow
1949 +
⬆	upwards black arrow
1950 +
⬇	downwards black arrow
1951 +
⬈	north east black arrow
1952 +
⬉	north west black arrow
1953 +
⬊	south east black arrow
1954 +
⬋	south west black arrow
1955 +
⬌	left right black arrow
1956 +
⬍	up down black arrow
1957 +
⬎	rightwards arrow with tip downwards
1958 +
⬏	rightwards arrow with tip upwards
1959 +
⬐	leftwards arrow with tip downwards
1960 +
⬑	leftwards arrow with tip upwards
1961 +
⬒	square with top half black
1962 +
⬓	square with bottom half black
1963 +
⬔	square with upper right diagonal half black
1964 +
⬕	square with lower left diagonal half black
1965 +
⬖	diamond with left half black
1966 +
⬗	diamond with right half black
1967 +
⬘	diamond with top half black
1968 +
⬙	diamond with bottom half black
1969 +
⬚	dotted square
1970 +
⬛	black large square
1971 +
⬜	white large square
1972 +
⬝	black very small square
1973 +
⬞	white very small square
1974 +
⬟	black pentagon
1975 +
⬠	white pentagon
1976 +
⬡	white hexagon
1977 +
⬢	black hexagon
1978 +
⬣	horizontal black hexagon
1979 +
⬤	black large circle
1980 +
⬥	black medium diamond
1981 +
⬦	white medium diamond
1982 +
⬧	black medium lozenge
1983 +
⬨	white medium lozenge
1984 +
⬩	black small diamond
1985 +
⬪	black small lozenge
1986 +
⬫	white small lozenge
1987 +
⬬	black horizontal ellipse
1988 +
⬭	white horizontal ellipse
1989 +
⬮	black vertical ellipse
1990 +
⬯	white vertical ellipse
1991 +
⬰	left arrow with small circle
1992 +
⬱	three leftwards arrows
1993 +
⬲	left arrow with circled plus
1994 +
⬳	long leftwards squiggle arrow
1995 +
⬴	leftwards two-headed arrow with vertical stroke
1996 +
⬵	leftwards two-headed arrow with double vertical stroke
1997 +
⬶	leftwards two-headed arrow from bar
1998 +
⬷	leftwards two-headed triple dash arrow
1999 +
⬸	leftwards arrow with dotted stem
2000 +
⬹	leftwards arrow with tail with vertical stroke
2001 +
⬺	leftwards arrow with tail with double vertical stroke
2002 +
⬻	leftwards two-headed arrow with tail
2003 +
⬼	leftwards two-headed arrow with tail with vertical stroke
2004 +
⬽	leftwards two-headed arrow with tail with double vertical stroke
2005 +
⬾	leftwards arrow through x
2006 +
⬿	wave arrow pointing directly left
2007 +
⭀	equals sign above leftwards arrow
2008 +
⭁	reverse tilde operator above leftwards arrow
2009 +
⭂	leftwards arrow above reverse almost equal to
2010 +
⭃	rightwards arrow through greater-than
2011 +
⭄	rightwards arrow through superset
2012 +
⭅	leftwards quadruple arrow
2013 +
⭆	rightwards quadruple arrow
2014 +
⭇	reverse tilde operator above rightwards arrow
2015 +
⭈	rightwards arrow above reverse almost equal to
2016 +
⭉	tilde operator above leftwards arrow
2017 +
⭊	leftwards arrow above almost equal to
2018 +
⭋	leftwards arrow above reverse tilde operator
2019 +
⭌	rightwards arrow above reverse tilde operator
2020 +
⭍	downwards triangle-headed zigzag arrow
2021 +
⭎	short slanted north arrow
2022 +
⭏	short backslanted south arrow
2023 +
⭐	white medium star
2024 +
⭑	black small star
2025 +
⭒	white small star
2026 +
⭓	black right-pointing pentagon
2027 +
⭔	white right-pointing pentagon
2028 +
⭕	heavy large circle
2029 +
⭖	heavy oval with oval inside
2030 +
⭗	heavy circle with circle inside
2031 +
⭘	heavy circle
2032 +
⭙	heavy circled saltire
2033 +
⭚	slanted north arrow with hooked head
2034 +
⭛	backslanted south arrow with hooked tail
2035 +
⭜	slanted north arrow with horizontal tail
2036 +
⭝	backslanted south arrow with horizontal tail
2037 +
⭞	bent arrow pointing downwards then north east
2038 +
⭟	short bent arrow pointing downwards then north east
2039 +
⭠	leftwards triangle-headed arrow
2040 +
⭡	upwards triangle-headed arrow
2041 +
⭢	rightwards triangle-headed arrow
2042 +
⭣	downwards triangle-headed arrow
2043 +
⭤	left right triangle-headed arrow
2044 +
⭥	up down triangle-headed arrow
2045 +
⭦	north west triangle-headed arrow
2046 +
⭧	north east triangle-headed arrow
2047 +
⭨	south east triangle-headed arrow
2048 +
⭩	south west triangle-headed arrow
2049 +
⭪	leftwards triangle-headed dashed arrow
2050 +
⭫	upwards triangle-headed dashed arrow
2051 +
⭬	rightwards triangle-headed dashed arrow
2052 +
⭭	downwards triangle-headed dashed arrow
2053 +
⭮	clockwise triangle-headed open circle arrow
2054 +
⭯	anticlockwise triangle-headed open circle arrow
2055 +
⭰	leftwards triangle-headed arrow to bar
2056 +
⭱	upwards triangle-headed arrow to bar
2057 +
⭲	rightwards triangle-headed arrow to bar
2058 +
⭳	downwards triangle-headed arrow to bar
2059 +
⭶	north west triangle-headed arrow to bar
2060 +
⭷	north east triangle-headed arrow to bar
2061 +
⭸	south east triangle-headed arrow to bar
2062 +
⭹	south west triangle-headed arrow to bar
2063 +
⭺	leftwards triangle-headed arrow with double horizontal stroke
2064 +
⭻	upwards triangle-headed arrow with double horizontal stroke
2065 +
⭼	rightwards triangle-headed arrow with double horizontal stroke
2066 +
⭽	downwards triangle-headed arrow with double horizontal stroke
2067 +
⭾	horizontal tab key
2068 +
⭿	vertical tab key
2069 +
⮀	leftwards triangle-headed arrow over rightwards triangle-headed arrow
2070 +
⮁	upwards triangle-headed arrow leftwards of downwards triangle-headed arrow
2071 +
⮂	rightwards triangle-headed arrow over leftwards triangle-headed arrow
2072 +
⮃	downwards triangle-headed arrow leftwards of upwards triangle-headed arrow
2073 +
⮄	leftwards triangle-headed paired arrows
2074 +
⮅	upwards triangle-headed paired arrows
2075 +
⮆	rightwards triangle-headed paired arrows
2076 +
⮇	downwards triangle-headed paired arrows
2077 +
⮈	leftwards black circled white arrow
2078 +
⮉	upwards black circled white arrow
2079 +
⮊	rightwards black circled white arrow
2080 +
⮋	downwards black circled white arrow
2081 +
⮌	anticlockwise triangle-headed right u-shaped arrow
2082 +
⮍	anticlockwise triangle-headed bottom u-shaped arrow
2083 +
⮎	anticlockwise triangle-headed left u-shaped arrow
2084 +
⮏	anticlockwise triangle-headed top u-shaped arrow
2085 +
⮐	return left
2086 +
⮑	return right
2087 +
⮒	newline left
2088 +
⮓	newline right
2089 +
⮔	four corner arrows circling anticlockwise
2090 +
⮕	rightwards black arrow
2091 +
⮗	symbol for type a electronics
2092 +
⮘	three-d top-lighted leftwards equilateral arrowhead
2093 +
⮙	three-d right-lighted upwards equilateral arrowhead
2094 +
⮚	three-d top-lighted rightwards equilateral arrowhead
2095 +
⮛	three-d left-lighted downwards equilateral arrowhead
2096 +
⮜	black leftwards equilateral arrowhead
2097 +
⮝	black upwards equilateral arrowhead
2098 +
⮞	black rightwards equilateral arrowhead
2099 +
⮟	black downwards equilateral arrowhead
2100 +
⮠	downwards triangle-headed arrow with long tip leftwards
2101 +
⮡	downwards triangle-headed arrow with long tip rightwards
2102 +
⮢	upwards triangle-headed arrow with long tip leftwards
2103 +
⮣	upwards triangle-headed arrow with long tip rightwards
2104 +
⮤	leftwards triangle-headed arrow with long tip upwards
2105 +
⮥	rightwards triangle-headed arrow with long tip upwards
2106 +
⮦	leftwards triangle-headed arrow with long tip downwards
2107 +
⮧	rightwards triangle-headed arrow with long tip downwards
2108 +
⮨	black curved downwards and leftwards arrow
2109 +
⮩	black curved downwards and rightwards arrow
2110 +
⮪	black curved upwards and leftwards arrow
2111 +
⮫	black curved upwards and rightwards arrow
2112 +
⮬	black curved leftwards and upwards arrow
2113 +
⮭	black curved rightwards and upwards arrow
2114 +
⮮	black curved leftwards and downwards arrow
2115 +
⮯	black curved rightwards and downwards arrow
2116 +
⮰	ribbon arrow down left
2117 +
⮱	ribbon arrow down right
2118 +
⮲	ribbon arrow up left
2119 +
⮳	ribbon arrow up right
2120 +
⮴	ribbon arrow left up
2121 +
⮵	ribbon arrow right up
2122 +
⮶	ribbon arrow left down
2123 +
⮷	ribbon arrow right down
2124 +
⮸	upwards white arrow from bar with horizontal bar
2125 +
⮹	up arrowhead in a rectangle box
2126 +
⮺	overlapping white squares
2127 +
⮻	overlapping white and black squares
2128 +
⮼	overlapping black squares
2129 +
⮽	ballot box with light x
2130 +
⮾	circled x
2131 +
⮿	circled bold x
2132 +
⯀	black square centred
2133 +
⯁	black diamond centred
2134 +
⯂	turned black pentagon
2135 +
⯃	horizontal black octagon
2136 +
⯄	black octagon
2137 +
⯅	black medium up-pointing triangle centred
2138 +
⯆	black medium down-pointing triangle centred
2139 +
⯇	black medium left-pointing triangle centred
2140 +
⯈	black medium right-pointing triangle centred
2141 +
⯉	neptune form two
2142 +
⯊	top half black circle
2143 +
⯋	bottom half black circle
2144 +
⯌	light four pointed black cusp
2145 +
⯍	rotated light four pointed black cusp
2146 +
⯎	white four pointed cusp
2147 +
⯏	rotated white four pointed cusp
2148 +
⯐	square position indicator
2149 +
⯑	uncertainty sign
2150 +
⯒	group mark
2151 +
⯓	pluto form two
2152 +
⯔	pluto form three
2153 +
⯕	pluto form four
2154 +
⯖	pluto form five
2155 +
⯗	transpluto
2156 +
⯘	proserpina
2157 +
⯙	astraea
2158 +
⯚	hygiea
2159 +
⯛	pholus
2160 +
⯜	nessus
2161 +
⯝	white moon selena
2162 +
⯞	black diamond on cross
2163 +
⯟	true light moon arta
2164 +
⯠	cupido
2165 +
⯡	hades
2166 +
⯢	zeus
2167 +
⯣	kronos
2168 +
⯤	apollon
2169 +
⯥	admetos
2170 +
⯦	vulcanus
2171 +
⯧	poseidon
2172 +
⯨	left half black star
2173 +
⯩	right half black star
2174 +
⯪	star with left half black
2175 +
⯫	star with right half black
2176 +
⯬	leftwards two-headed arrow with triangle arrowheads
2177 +
⯭	upwards two-headed arrow with triangle arrowheads
2178 +
⯮	rightwards two-headed arrow with triangle arrowheads
2179 +
⯯	downwards two-headed arrow with triangle arrowheads
2180 +
⯰	eris form one
2181 +
⯱	eris form two
2182 +
⯲	sedna
2183 +
⯳	russian astrological symbol vigintile
2184 +
⯴	russian astrological symbol novile
2185 +
⯵	russian astrological symbol quintile
2186 +
⯶	russian astrological symbol binovile
2187 +
⯷	russian astrological symbol sentagon
2188 +
⯸	russian astrological symbol tredecile
2189 +
⯹	equals sign with infinity below
2190 +
⯺	united symbol
2191 +
⯻	separated symbol
2192 +
⯼	doubled symbol
2193 +
⯽	passed symbol
2194 +
⯾	reversed right angle
2195 +
⯿	hellschreiber pause symbol
2196 +
🞀	black left-pointing isosceles right triangle
2197 +
🞁	black up-pointing isosceles right triangle
2198 +
🞂	black right-pointing isosceles right triangle
2199 +
🞃	black down-pointing isosceles right triangle
2200 +
🞄	black slightly small circle
2201 +
🞅	medium bold white circle
2202 +
🞆	bold white circle
2203 +
🞇	heavy white circle
2204 +
🞈	very heavy white circle
2205 +
🞉	extremely heavy white circle
2206 +
🞊	white circle containing black small circle
2207 +
🞋	round target
2208 +
🞌	black tiny square
2209 +
🞍	black slightly small square
2210 +
🞎	light white square
2211 +
🞏	medium white square
2212 +
🞐	bold white square
2213 +
🞑	heavy white square
2214 +
🞒	very heavy white square
2215 +
🞓	extremely heavy white square
2216 +
🞔	white square containing black very small square
2217 +
🞕	white square containing black medium square
2218 +
🞖	square target
2219 +
🞗	black tiny diamond
2220 +
🞘	black very small diamond
2221 +
🞙	black medium small diamond
2222 +
🞚	white diamond containing black very small diamond
2223 +
🞛	white diamond containing black medium diamond
2224 +
🞜	diamond target
2225 +
🞝	black tiny lozenge
2226 +
🞞	black very small lozenge
2227 +
🞟	black medium small lozenge
2228 +
🞠	white lozenge containing black small lozenge
2229 +
🞡	thin greek cross
2230 +
🞢	light greek cross
2231 +
🞣	medium greek cross
2232 +
🞤	bold greek cross
2233 +
🞥	very bold greek cross
2234 +
🞦	very heavy greek cross
2235 +
🞧	extremely heavy greek cross
2236 +
🞨	thin saltire
2237 +
🞩	light saltire
2238 +
🞪	medium saltire
2239 +
🞫	bold saltire
2240 +
🞬	heavy saltire
2241 +
🞭	very heavy saltire
2242 +
🞮	extremely heavy saltire
2243 +
🞯	light five spoked asterisk
2244 +
🞰	medium five spoked asterisk
2245 +
🞱	bold five spoked asterisk
2246 +
🞲	heavy five spoked asterisk
2247 +
🞳	very heavy five spoked asterisk
2248 +
🞴	extremely heavy five spoked asterisk
2249 +
🞵	light six spoked asterisk
2250 +
🞶	medium six spoked asterisk
2251 +
🞷	bold six spoked asterisk
2252 +
🞸	heavy six spoked asterisk
2253 +
🞹	very heavy six spoked asterisk
2254 +
🞺	extremely heavy six spoked asterisk
2255 +
🞻	light eight spoked asterisk
2256 +
🞼	medium eight spoked asterisk
2257 +
🞽	bold eight spoked asterisk
2258 +
🞾	heavy eight spoked asterisk
2259 +
🞿	very heavy eight spoked asterisk
2260 +
🟀	light three pointed black star
2261 +
🟁	medium three pointed black star
2262 +
🟂	three pointed black star
2263 +
🟃	medium three pointed pinwheel star
2264 +
🟄	light four pointed black star
2265 +
🟅	medium four pointed black star
2266 +
🟆	four pointed black star
2267 +
🟇	medium four pointed pinwheel star
2268 +
🟈	reverse light four pointed pinwheel star
2269 +
🟉	light five pointed black star
2270 +
🟊	heavy five pointed black star
2271 +
🟋	medium six pointed black star
2272 +
🟌	heavy six pointed black star
2273 +
🟍	six pointed pinwheel star
2274 +
🟎	medium eight pointed black star
2275 +
🟏	heavy eight pointed black star
2276 +
🟐	very heavy eight pointed black star
2277 +
🟑	heavy eight pointed pinwheel star
2278 +
🟒	light twelve pointed black star
2279 +
🟓	heavy twelve pointed black star
2280 +
🟔	heavy twelve pointed pinwheel star
2281 +
🟕	circled triangle
2282 +
🟖	negative circled triangle
2283 +
🟗	circled square
2284 +
🟘	negative circled square
2285 +
🟙	nine pointed white star
2286 +
🟠	large orange circle
2287 +
🟡	large yellow circle
2288 +
🟢	large green circle
2289 +
🟣	large purple circle
2290 +
🟤	large brown circle
2291 +
🟥	large red square
2292 +
🟦	large blue square
2293 +
🟧	large orange square
2294 +
🟨	large yellow square
2295 +
🟩	large green square
2296 +
🟪	large purple square
2297 +
🟫	large brown square
2298 +
🟰	heavy equals sign
rofi/nord.rasi (added) +105 −0
1 +
/* ROFI VERTICAL THEME USING THE NORD COLOR PALETTE */
2 +
/* Author: Newman Sanchez (https://github.com/newmanls) */
3 +
4 +
* {
5 +
    font:   "BerkeleyMono Nerd Font 13";
6 +
7 +
    nord0:     #2e3440;
8 +
    nord1:     #3b4252;
9 +
    nord2:     #434c5e;
10 +
    nord3:     #4c566a;
11 +
12 +
    nord4:     #d8dee9;
13 +
    nord5:     #e5e9f0;
14 +
    nord6:     #eceff4;
15 +
16 +
    nord7:     #8fbcbb;
17 +
    nord8:     #88c0d0;
18 +
    nord9:     #81a1c1;
19 +
    nord10:    #5e81ac;
20 +
    nord11:    #bf616a;
21 +
22 +
    nord12:    #d08770;
23 +
    nord13:    #ebcb8b;
24 +
    nord14:    #a3be8c;
25 +
    nord15:    #b48ead;
26 +
27 +
    background-color:   transparent;
28 +
    text-color:         @nord4;
29 +
    accent-color:       @nord8;
30 +
31 +
    margin:     0px;
32 +
    padding:    0px;
33 +
    spacing:    0px;
34 +
}
35 +
36 +
window {
37 +
    background-color:   @nord0;
38 +
    border-color:       @accent-color;
39 +
40 +
    location:   center;
41 +
    width:      480px;
42 +
    border:     1px;
43 +
}
44 +
45 +
inputbar {
46 +
    padding:    8px 12px;
47 +
    spacing:    12px;
48 +
    children:   [ prompt, entry ];
49 +
}
50 +
51 +
prompt, entry, element-text, element-icon {
52 +
    vertical-align: 0.5;
53 +
}
54 +
55 +
prompt {
56 +
    text-color: @accent-color;
57 +
}
58 +
59 +
listview {
60 +
    lines:      8;
61 +
    columns:    1;
62 +
63 +
    fixed-height:   false;
64 +
}
65 +
66 +
element {
67 +
    padding:    8px;
68 +
    spacing:    8px;
69 +
}
70 +
71 +
element normal urgent {
72 +
    text-color: @nord13;
73 +
}
74 +
75 +
element normal active {
76 +
    text-color: @accent-color;
77 +
}
78 +
79 +
element alternate active {
80 +
    text-color: @accent-color;
81 +
}
82 +
83 +
element selected {
84 +
    text-color: @nord0;
85 +
}
86 +
87 +
element selected normal {
88 +
    background-color:   @accent-color;
89 +
}
90 +
91 +
element selected urgent {
92 +
    background-color:   @nord13;
93 +
}
94 +
95 +
element selected active {
96 +
    background-color:   @nord8;
97 +
}
98 +
99 +
element-icon {
100 +
    size:   0.75em;
101 +
}
102 +
103 +
element-text {
104 +
    text-color: inherit;
105 +
}
rofi/scripts/rofi-audio (added) +108 −0
1 +
#!/bin/sh
2 +
# Requires: rofi, wireplumber (wpctl)
3 +
# Audio menu: volume, mute, and which sink the sound comes out of. This is
4 +
# the rofi replacement for the gum-based audio-menu/audio-output pair, so it
5 +
# no longer needs a terminal window to run in.
6 +
set -u
7 +
8 +
STEP=${ROFI_AUDIO_STEP:-5}
9 +
NOTIFY_ID=7303
10 +
11 +
notify() {
12 +
    if command -v dunstify >/dev/null 2>&1; then
13 +
        dunstify -r "$NOTIFY_ID" "Audio" "$1"
14 +
    else
15 +
        notify-send "Audio" "$1"
16 +
    fi
17 +
}
18 +
19 +
# wpctl has no machine-readable listing, so carve the Sinks block out of
20 +
# `status`. Output: "<*|space>\t<id>\t<name>".
21 +
sinks() {
22 +
    wpctl status 2>/dev/null | awk '
23 +
        /^Audio/                                { audio = 1; next }
24 +
        /^[A-Z]/                                { audio = 0 }
25 +
        audio && /Sinks:/ && !/endpoints:/      { insec = 1; next }
26 +
        audio && /Devices:|Sources:|Streams:|endpoints:|Filters:/ { insec = 0; next }
27 +
        insec {
28 +
            line = $0
29 +
            prefix = line; sub(/[0-9].*$/, "", prefix)
30 +
            def = (prefix ~ /\*/) ? "*" : " "
31 +
            sub(/^[^0-9]*/, "", line)
32 +
            if (line !~ /^[0-9]+\./) next
33 +
            id = line;   sub(/\..*$/, "", id)
34 +
            name = line; sub(/^[0-9]+\.[[:space:]]*/, "", name)
35 +
            sub(/[[:space:]]*\[vol:.*$/, "", name)
36 +
            sub(/[[:space:]]+$/, "", name)
37 +
            print def "\t" id "\t" name
38 +
        }
39 +
    '
40 +
}
41 +
42 +
# @DEFAULT_AUDIO_SINK@ always resolves to whatever is current, so the volume
43 +
# actions never need to know which sink that is.
44 +
volume() { wpctl get-volume @DEFAULT_AUDIO_SINK@ 2>/dev/null; }
45 +
46 +
vol_percent() { volume | awk '{ printf "%d", $2 * 100 }'; }
47 +
48 +
# The icon tracks the level the same way the status bar blocks do, so a
49 +
# notification reads the same whether it came from here or from a media key.
50 +
vol_icon() {
51 +
    case "$(volume)" in
52 +
        *MUTED*) printf '󰝟' ;;
53 +
        *) v=$(vol_percent)
54 +
           if   [ "$v" -eq 0 ];  then printf '󰕿'
55 +
           elif [ "$v" -lt 34 ]; then printf '󰖀'
56 +
           elif [ "$v" -lt 67 ]; then printf '󰕾'
57 +
           else                       printf '󰕾'
58 +
           fi ;;
59 +
    esac
60 +
}
61 +
62 +
report() { notify "$(vol_icon)  $(vol_percent)%"; }
63 +
64 +
SINKS=$(sinks)
65 +
[ -n "$SINKS" ] || { notify "No sinks found — is pipewire running?"; exit 1; }
66 +
67 +
CURRENT=$(printf '%s\n' "$SINKS" | awk -F'\t' '$1 == "*" { print $3; exit }')
68 +
MIC=$(wpctl get-volume @DEFAULT_AUDIO_SOURCE@ 2>/dev/null | grep -q MUTED && echo "muted" || echo "live")
69 +
70 +
ACTIONS=$(printf '󰝝  volume up (+%s%%)\n󰝞  volume down (-%s%%)\n󰝟  toggle mute\n󰍬  toggle mic (currently %s)\n󰓃  automatic output\n' "$STEP" "$STEP" "$MIC")
71 +
72 +
# Sinks are listed by name with their wpctl id hidden behind two spaces, the
73 +
# same split the actions use, so one case statement handles both.
74 +
SINKLIST=$(printf '%s\n' "$SINKS" | awk -F'\t' '{
75 +
    icon = ($1 == "*") ? "󰄬" : "󰓃"
76 +
    printf "%s  %s\t%s\n", icon, $3, $2
77 +
}')
78 +
79 +
CHOICE=$(printf '%s\n%s\n' "$ACTIONS" "$(printf '%s\n' "$SINKLIST" | cut -f1)" |
80 +
    rofi -dmenu -i -no-custom -l 10 -p "audio" \
81 +
        -mesg "$(vol_icon)  $(vol_percent)% — ${CURRENT:-no default sink}") || exit 0
82 +
[ -n "$CHOICE" ] || exit 0
83 +
84 +
case "$CHOICE" in
85 +
    *"volume up"*)
86 +
        # The cap keeps a stray keystroke from pushing the sink into the
87 +
        # clipping range above 100%.
88 +
        wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ "$STEP%+"
89 +
        report ;;
90 +
    *"volume down"*)
91 +
        wpctl set-volume @DEFAULT_AUDIO_SINK@ "$STEP%-"
92 +
        report ;;
93 +
    *"toggle mute"*)
94 +
        wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
95 +
        report ;;
96 +
    *"toggle mic"*)
97 +
        wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
98 +
        wpctl get-volume @DEFAULT_AUDIO_SOURCE@ | grep -q MUTED &&
99 +
            notify "󰍭  microphone muted" || notify "󰍬  microphone live" ;;
100 +
    *"automatic output"*)
101 +
        wpctl clear-default
102 +
        notify "󰓃  output: automatic (wireplumber picks)" ;;
103 +
    *)
104 +
        ID=$(printf '%s\n' "$SINKLIST" | awk -F'\t' -v c="$CHOICE" '$1 == c { print $2; exit }')
105 +
        [ -n "$ID" ] || exit 0
106 +
        wpctl set-default "$ID"
107 +
        notify "󰓃  output: ${CHOICE##*  }" ;;
108 +
esac
rofi/scripts/rofi-calc (added) +82 −0
1 +
#!/bin/sh
2 +
# Requires: rofi, bc, xclip
3 +
# Calculator. The rofi-calc plugin wants libqalculate; this needs nothing but
4 +
# bc, at the cost of results arriving on Enter rather than as you type:
5 +
#   type an expression, Enter   evaluate it (the result becomes a row)
6 +
#   Enter on a result row       copy it to the clipboard
7 +
# Past results stay listed until cleared, so earlier answers can be copied or
8 +
# pasted back into a new expression.
9 +
set -u
10 +
11 +
HIST="${XDG_CACHE_HOME:-$HOME/.cache}/rofi-calc-history"
12 +
HIST_MAX=${ROFI_CALC_HISTORY_MAX:-50}
13 +
SCALE=${ROFI_CALC_SCALE:-10}
14 +
15 +
if [ -z "${ROFI_RETV:-}" ]; then
16 +
    exec rofi -show calc -modes "calc:$0"
17 +
fi
18 +
19 +
US=$(printf '\037')
20 +
touch "$HIST"
21 +
22 +
list() {
23 +
    printf '\0prompt%scalc\n' "$US"
24 +
    printf '\0message%sType an expression and press Enter. + - * / ^%%, sqrt(), s()/c()/a() trig, l()/e() log.\n' "$US"
25 +
    printf '\0keep-selection%strue\n' "$US"
26 +
    while IFS='	' read -r expr result; do
27 +
        [ -n "$result" ] || continue
28 +
        printf '%s = %s\0info%s%s\n' "$expr" "$result" "$US" "$result"
29 +
    done < "$HIST"
30 +
    [ -s "$HIST" ] && printf 'clear history\0info%s@clear\n' "$US"
31 +
    return 0
32 +
}
33 +
34 +
evaluate() {
35 +
    # -l pulls in the math library (sqrt, s, c, a, l, e) and sets scale=20,
36 +
    # so scale has to be set after it to control the printed precision.
37 +
    result=$(printf 'scale=%s\n%s\n' "$SCALE" "$1" | bc -l 2>/dev/null | tail -n1)
38 +
    [ -n "$result" ] || return 1
39 +
40 +
    # bc pads to the full scale (2/1 = .5000000000) and leads with a bare dot;
41 +
    # trim both so results look like results.
42 +
    result=$(printf '%s' "$result" | sed -e 's/\([.][0-9]*[1-9]\)0*$/\1/' -e 's/[.]0*$//' -e 's/^\([-]\{0,1\}\)[.]/\10./')
43 +
    printf '%s' "$result"
44 +
}
45 +
46 +
case "$ROFI_RETV" in
47 +
    0) list ;;
48 +
    1)
49 +
        info=${ROFI_INFO:-}
50 +
        if [ "$info" = "@clear" ]; then
51 +
            : > "$HIST"
52 +
            list
53 +
        elif [ -n "$info" ]; then
54 +
            # Redirect: xclip backgrounds itself still holding the pipe rofi
55 +
            # reads this script on, and rofi hangs with the keyboard grabbed
56 +
            # until it sees EOF there.
57 +
            printf '%s' "$info" | xclip -selection clipboard -i >/dev/null 2>&1
58 +
        fi
59 +
        ;;
60 +
    2)
61 +
        expr=${1:-}
62 +
        [ -n "$expr" ] || { list; exit 0; }
63 +
        if result=$(evaluate "$expr") && [ -n "$result" ]; then
64 +
            tmp="$HIST.$$"
65 +
            printf '%s\t%s\n' "$expr" "$result" > "$tmp"
66 +
            grep -v "^$(printf '%s' "$expr" | sed 's/[][\.*^$/]/\\&/g')	" "$HIST" >> "$tmp" 2>/dev/null
67 +
            head -n "$HIST_MAX" "$tmp" > "$HIST"
68 +
            rm -f "$tmp"
69 +
        else
70 +
            printf '\0message%s<span foreground="#bf616a">Not a valid expression</span>\n' "$US"
71 +
        fi
72 +
        list
73 +
        ;;
74 +
    3)
75 +
        expr=$(printf '%s' "${1:-}" | sed 's/ = .*$//')
76 +
        if [ -n "$expr" ]; then
77 +
            grep -v "^$(printf '%s' "$expr" | sed 's/[][\.*^$/]/\\&/g')	" "$HIST" > "$HIST.$$" 2>/dev/null
78 +
            mv "$HIST.$$" "$HIST"
79 +
        fi
80 +
        list
81 +
        ;;
82 +
esac
rofi/scripts/rofi-clip (added) +111 −0
1 +
#!/bin/sh
2 +
# Requires: rofi, xclip, rofi-clipd running; xdotool for the paste step
3 +
# Clipboard history picker. Runs as a rofi script mode so each row can carry
4 +
# its entry's hash out of band — the visible text is a one-line preview, but
5 +
# what gets copied is the full original, newlines and all.
6 +
#   Enter          paste the entry into the window rofi was opened over
7 +
#   Shift+Delete   forget that entry
8 +
# The entry goes to the clipboard either way, so a manual Ctrl+V still works
9 +
# when the synthetic keystroke does not suit the app underneath.
10 +
# Called with no arguments it launches the rofi that then calls it back, so
11 +
# the keybinding stays a single path.
12 +
set -u
13 +
14 +
DIR="${XDG_CACHE_HOME:-$HOME/.cache}/rofi-clipboard"
15 +
STORE="$DIR/store"
16 +
INDEX="$DIR/index"
17 +
18 +
if [ -z "${ROFI_RETV:-}" ]; then
19 +
    exec rofi -show clipboard -modes "clipboard:$0"
20 +
fi
21 +
22 +
# Row options ride behind a NUL, with 0x1f between key and value. NUL cannot
23 +
# survive a shell variable, so it has to come from the format string itself.
24 +
US=$(printf '\037')
25 +
26 +
list() {
27 +
    if [ ! -s "$INDEX" ]; then
28 +
        printf '\0message%sClipboard history is empty — is rofi-clipd running?\n' "$US"
29 +
        return
30 +
    fi
31 +
    printf '\0prompt%sclipboard\n' "$US"
32 +
    # keep-selection stops the cursor jumping back to the top after a delete.
33 +
    printf '\0keep-selection%strue\n' "$US"
34 +
    while IFS='	' read -r hash preview; do
35 +
        printf '%s\0info%s%s\n' "$preview" "$US" "$hash"
36 +
    done < "$INDEX"
37 +
}
38 +
39 +
# Type the paste keystroke into whatever the window manager focuses once rofi
40 +
# is gone. It cannot be sent from here directly: rofi holds a keyboard grab
41 +
# for as long as it is up, and XTEST events go to the grab holder, so this
42 +
# runs detached and waits the grab out. Its stdout goes to /dev/null so it
43 +
# cannot hold that pipe open either — see the note on xclip below.
44 +
paste_into_focus() {
45 +
    if ! command -v xdotool >/dev/null 2>&1; then
46 +
        notify-send "Clipboard" "Copied — install xdotool to paste automatically." \
47 +
            >/dev/null 2>&1
48 +
        return 0
49 +
    fi
50 +
    (
51 +
        # Up to three seconds of waiting for focus to land somewhere that is
52 +
        # not rofi; if it never does, paste nowhere rather than into rofi.
53 +
        target=""
54 +
        i=0
55 +
        while [ "$i" -lt 60 ]; do
56 +
            class=$(xdotool getactivewindow getwindowclassname 2>/dev/null) || class=""
57 +
            case $class in
58 +
                ""|[Rr]ofi) ;;
59 +
                *) target=$class; break ;;
60 +
            esac
61 +
            sleep 0.05
62 +
            i=$((i + 1))
63 +
        done
64 +
        [ -n "$target" ] || exit 0
65 +
66 +
        # Terminals keep Ctrl+V for the readline binding and put paste behind
67 +
        # Shift; everything else takes the plain one.
68 +
        case $target in
69 +
            org.wezfurlong.wezterm|Alacritty|com.mitchellh.ghostty|kitty|foot|Foot)
70 +
                key=ctrl+shift+v ;;
71 +
            *)  key=ctrl+v ;;
72 +
        esac
73 +
74 +
        # Let the newly focused window settle before typing at it.
75 +
        sleep 0.05
76 +
        xdotool key --clearmodifiers "$key"
77 +
    ) >/dev/null 2>&1 &
78 +
}
79 +
80 +
case "$ROFI_RETV" in
81 +
    0) list ;;
82 +
    1)
83 +
        hash=${ROFI_INFO:-}
84 +
        [ -n "$hash" ] && [ -f "$STORE/$hash" ] || exit 0
85 +
        # xclip forks and holds the selection until something else claims it,
86 +
        # so it has to outlive this script — which it does on its own. Its
87 +
        # stdout has to go, though: it inherits the pipe rofi reads this script
88 +
        # on, and rofi waits for EOF there before closing and dropping its
89 +
        # keyboard grab. That EOF never comes while xclip holds the pipe open,
90 +
        # and a hung rofi still holding the grab looks like a frozen desktop.
91 +
        xclip -selection clipboard -i "$STORE/$hash" >/dev/null 2>&1
92 +
        paste_into_focus
93 +
        ;;
94 +
    2)
95 +
        # Typed text with no match: copy what was typed, it is the one thing
96 +
        # the user could have meant.
97 +
        if [ -n "${1:-}" ]; then
98 +
            printf '%s' "$1" | xclip -selection clipboard -i >/dev/null 2>&1
99 +
            paste_into_focus
100 +
        fi
101 +
        ;;
102 +
    3)
103 +
        hash=${ROFI_INFO:-}
104 +
        if [ -n "$hash" ]; then
105 +
            grep -v "^$hash	" "$INDEX" > "$INDEX.$$" 2>/dev/null
106 +
            mv "$INDEX.$$" "$INDEX"
107 +
            rm -f "$STORE/$hash"
108 +
        fi
109 +
        list
110 +
        ;;
111 +
esac
rofi/scripts/rofi-clipd (added) +104 −0
1 +
#!/bin/sh
2 +
# Requires: xclip
3 +
# Clipboard history daemon. cliphist is Wayland-only, so this is the X11
4 +
# stand-in: it polls the CLIPBOARD selection and keeps a copy of everything
5 +
# that passes through it. Copying is what makes it useful — an X selection
6 +
# lives in the process that owns it, so closing the app that copied a string
7 +
# takes the string with it. rofi-clip reads what this writes.
8 +
#
9 +
# Usage: rofi-clipd            run in the foreground (autostart target)
10 +
#        rofi-clipd --once     record the clipboard right now and exit
11 +
#        rofi-clipd --clear    forget the whole history
12 +
set -u
13 +
14 +
DIR="${XDG_CACHE_HOME:-$HOME/.cache}/rofi-clipboard"
15 +
STORE="$DIR/store"
16 +
INDEX="$DIR/index"
17 +
PIDFILE="$DIR/pid"
18 +
19 +
# How many entries to keep, and how often to look. A second is under the
20 +
# threshold where a copy-then-immediately-quit would be missed in practice.
21 +
LIMIT=${ROFI_CLIP_LIMIT:-200}
22 +
INTERVAL=${ROFI_CLIP_INTERVAL:-1}
23 +
24 +
mkdir -p "$STORE"
25 +
26 +
# md5sum is the entry's identity: same text, same file, so re-copying an old
27 +
# entry moves it to the top instead of duplicating it.
28 +
hash_of() { printf '%s' "$1" | md5sum | cut -d' ' -f1; }
29 +
30 +
# One index line per entry, newest first: "<hash>\t<single-line preview>".
31 +
# rofi rows cannot span lines, so newlines become a visible glyph and the
32 +
# text is cut to something that fits a menu width.
33 +
preview_of() {
34 +
    printf '%s' "$1" | awk '
35 +
        BEGIN { ORS = "" }
36 +
        NR > 1 { print " ⏎ " }
37 +
        { gsub(/\t/, " "); print }
38 +
    ' | cut -c1-160
39 +
}
40 +
41 +
record() {
42 +
    entry=$1
43 +
44 +
    # Whitespace-only copies are almost always an accident of a drag select.
45 +
    case $entry in
46 +
        *[![:space:]]*) ;;
47 +
        *) return 0 ;;
48 +
    esac
49 +
50 +
    hash=$(hash_of "$entry")
51 +
    printf '%s' "$entry" > "$STORE/$hash"
52 +
53 +
    tmp="$INDEX.$$"
54 +
    printf '%s\t%s\n' "$hash" "$(preview_of "$entry")" > "$tmp"
55 +
    if [ -f "$INDEX" ]; then
56 +
        grep -v "^$hash	" "$INDEX" >> "$tmp"
57 +
    fi
58 +
    head -n "$LIMIT" "$tmp" > "$INDEX"
59 +
    rm -f "$tmp"
60 +
61 +
    # Everything past the limit fell off the index above; drop its payload
62 +
    # too, or the store grows without bound.
63 +
    for f in "$STORE"/*; do
64 +
        [ -e "$f" ] || continue
65 +
        grep -q "^${f##*/}	" "$INDEX" || rm -f "$f"
66 +
    done
67 +
}
68 +
69 +
# UTF8_STRING keeps this to text: asking for whatever target an image or a
70 +
# file-manager copy offers would store a blob nothing can paste back.
71 +
current() { xclip -o -selection clipboard -t UTF8_STRING 2>/dev/null; }
72 +
73 +
case "${1:-}" in
74 +
    --once)
75 +
        clip=$(current) || exit 0
76 +
        [ -n "$clip" ] && record "$clip"
77 +
        exit 0
78 +
        ;;
79 +
    --clear)
80 +
        rm -rf "$STORE" "$INDEX"
81 +
        mkdir -p "$STORE"
82 +
        exit 0
83 +
        ;;
84 +
    "") ;;
85 +
    *) echo "usage: rofi-clipd [--once|--clear]" >&2; exit 2 ;;
86 +
esac
87 +
88 +
# A second daemon would double every entry, so check for a live one first.
89 +
if [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then
90 +
    echo "rofi-clipd: already running (pid $(cat "$PIDFILE"))" >&2
91 +
    exit 1
92 +
fi
93 +
echo $$ > "$PIDFILE"
94 +
trap 'rm -f "$PIDFILE"' EXIT INT TERM
95 +
96 +
last=""
97 +
while :; do
98 +
    clip=$(current) || clip=""
99 +
    if [ -n "$clip" ] && [ "$clip" != "$last" ]; then
100 +
        last=$clip
101 +
        record "$clip"
102 +
    fi
103 +
    sleep "$INTERVAL"
104 +
done
rofi/scripts/rofi-emoji (added) +41 −0
1 +
#!/bin/sh
2 +
# Requires: rofi, xclip, a color emoji font (Noto Color Emoji)
3 +
# Emoji and kaomoji picker: search by name, Enter copies the character to the
4 +
# clipboard. There is no paste-into-the-window step because that needs xdotool
5 +
# to fake a keystroke, which is not installed — copy and paste normally.
6 +
# Picks are remembered and float to the top, so the handful anyone actually
7 +
# uses stop needing to be searched for.
8 +
set -u
9 +
10 +
DATA=${ROFI_EMOJI_DATA:-$(dirname "$0")/../emoji.txt}
11 +
RECENT="${XDG_CACHE_HOME:-$HOME/.cache}/rofi-emoji-recent"
12 +
RECENT_MAX=${ROFI_EMOJI_RECENT_MAX:-30}
13 +
14 +
[ -f "$DATA" ] || { echo "rofi-emoji: no emoji data at $DATA" >&2; exit 1; }
15 +
touch "$RECENT"
16 +
17 +
# Two spaces between the character and its name: a kaomoji can contain single
18 +
# spaces, so a single space would be ambiguous when splitting the choice back
19 +
# apart. Names stay in the row because that is what the search filters on.
20 +
rows() {
21 +
    cat "$RECENT" "$DATA" | awk -F'\t' '!seen[$1]++ { printf "%s  %s\n", $1, $2 }'
22 +
}
23 +
24 +
CHOICE=$(rows | rofi -dmenu -i -no-custom -p "emoji" -matching normal) || exit 0
25 +
[ -n "$CHOICE" ] || exit 0
26 +
27 +
CHAR=${CHOICE%%  *}
28 +
NAME=${CHOICE#*  }
29 +
30 +
printf '%s' "$CHAR" | xclip -selection clipboard -i
31 +
32 +
# Rewrite the recents file with this pick first and its older copy dropped.
33 +
tmp="$RECENT.$$"
34 +
printf '%s\t%s\n' "$CHAR" "$NAME" > "$tmp"
35 +
grep -Fxv "$(printf '%s\t%s' "$CHAR" "$NAME")" "$RECENT" >> "$tmp" 2>/dev/null
36 +
head -n "$RECENT_MAX" "$tmp" > "$RECENT"
37 +
rm -f "$tmp"
38 +
39 +
command -v dunstify >/dev/null 2>&1 &&
40 +
    dunstify -r 7302 "Copied $CHAR" "$NAME" ||
41 +
    notify-send "Copied $CHAR" "$NAME"
rofi/scripts/rofi-power (added) +80 −0
1 +
#!/bin/sh
2 +
# Requires: rofi, and either xfce4-session or elogind (loginctl)
3 +
# Power menu, shared between the XFCE session and oxwm. Under XFCE the
4 +
# session manager owns these actions: it asks open applications to close and
5 +
# saves the session before handing the request on, which is what Ctrl+Alt+Del
6 +
# does. Under oxwm there is no session manager, so elogind is asked directly
7 +
# and doas is the backstop for a session it does not own. Every action asks
8 +
# for confirmation first, defaulting to no — this menu sits a keystroke away
9 +
# from the launcher.
10 +
set -u
11 +
12 +
# xfce4-session-logout's per-action flags skip its own dialog on their own;
13 +
# --fast is deliberately not passed, because that means "do not save the
14 +
# session" rather than "do not ask".
15 +
session=""
16 +
if [ "${XDG_CURRENT_DESKTOP:-}" = "XFCE" ] && command -v xfce4-session-logout >/dev/null 2>&1; then
17 +
    session=xfce4-session-logout
18 +
fi
19 +
20 +
# Only the lockers that are actually installed get offered. None of these
21 +
# ship with the system: `doas apk add slock` (or i3lock) to get a lock entry.
22 +
# xflock4 is not a locker itself — it asks xfce4-session to lock, which needs
23 +
# one of these installed all the same — but going through it means the
24 +
# session's own lock settings apply.
25 +
locker=""
26 +
for candidate in slock i3lock xsecurelock physlock xscreensaver light-locker; do
27 +
    if command -v "$candidate" >/dev/null 2>&1; then
28 +
        locker=$candidate
29 +
        break
30 +
    fi
31 +
done
32 +
if [ -n "$locker" ] && [ -n "$session" ] && command -v xflock4 >/dev/null 2>&1; then
33 +
    locker=xflock4
34 +
fi
35 +
36 +
menu() { rofi -dmenu -i -no-custom "$@"; }
37 +
38 +
confirm() {
39 +
    answer=$(printf 'no\nyes\n' | menu -p "$1?" -mesg "This will $2." -l 2) || exit 0
40 +
    [ "$answer" = "yes" ]
41 +
}
42 +
43 +
# The session manager when there is one, then loginctl, then doas.
44 +
#   $1 xfce4-session-logout flag   $2 loginctl verb   $3 doas fallback
45 +
power() {
46 +
    if [ -n "$session" ]; then
47 +
        "$session" "$1"
48 +
    else
49 +
        loginctl "$2" 2>/dev/null || doas "$3"
50 +
    fi
51 +
}
52 +
53 +
entries="󰤄  suspend
54 +
󰜉  reboot
55 +
󰐥  shutdown
56 +
󰍃  log out"
57 +
[ -n "$locker" ] && entries="󰌾  lock
58 +
$entries"
59 +
60 +
CHOICE=$(printf '%s\n' "$entries" | menu -p "power" -l 5) || exit 0
61 +
[ -n "$CHOICE" ] || exit 0
62 +
63 +
case ${CHOICE##*  } in
64 +
    lock)     exec "$locker" ;;
65 +
    suspend)  confirm "Suspend" "put the machine to sleep" && power --suspend suspend zzz ;;
66 +
    reboot)   confirm "Reboot" "close every open window and restart" && power --reboot reboot reboot ;;
67 +
    shutdown) confirm "Shut down" "close every open window and power off" && power --halt poweroff poweroff ;;
68 +
    "log out")
69 +
        confirm "Log out" "end the session and close every window" || exit 0
70 +
        if [ -n "$session" ]; then
71 +
            "$session" --logout
72 +
        else
73 +
            # Ending the session takes the whole X server with it, which is
74 +
            # what logging out means here; killing oxwm alone would leave X
75 +
            # running.
76 +
            loginctl terminate-session "${XDG_SESSION_ID:-}" 2>/dev/null ||
77 +
                pkill -u "$USER" -x oxwm
78 +
        fi
79 +
        ;;
80 +
esac
rofi/scripts/rofi-screenshot (added) +65 −0
1 +
#!/bin/sh
2 +
# Requires: rofi, maim, xclip, libnotify
3 +
# Screenshot menu. Every shot lands in the clipboard as image/png and, unless
4 +
# it was a clipboard-only pick, on disk as well — the clipboard copy is what
5 +
# gets pasted into a chat, the file is what survives the next copy.
6 +
# Mod+S still takes a plain region shot without going through this menu.
7 +
set -u
8 +
9 +
DIR=${ROFI_SCREENSHOT_DIR:-$HOME/Pictures/screenshots}
10 +
NOTIFY_ID=7304
11 +
12 +
mkdir -p "$DIR"
13 +
14 +
notify() {
15 +
    if command -v dunstify >/dev/null 2>&1; then
16 +
        dunstify -r "$NOTIFY_ID" ${2:+-i "$2"} "Screenshot" "$1"
17 +
    else
18 +
        notify-send "Screenshot" "$1"
19 +
    fi
20 +
}
21 +
22 +
# -u hides the cursor from the capture; without it the pointer shows up in
23 +
# the middle of whatever was being selected.
24 +
shoot() {
25 +
    file="$DIR/$(date +%Y%m%d-%H%M%S).png"
26 +
27 +
    # maim writes nothing and exits non-zero when a selection is cancelled
28 +
    # with Escape, so a cancelled shot must not leave an empty file behind.
29 +
    if ! maim -u "$@" "$file" 2>/dev/null || [ ! -s "$file" ]; then
30 +
        rm -f "$file"
31 +
        exit 0
32 +
    fi
33 +
34 +
    xclip -selection clipboard -t image/png -i "$file"
35 +
36 +
    if [ "$KEEP" -eq 0 ]; then
37 +
        rm -f "$file"
38 +
        notify "Copied to clipboard"
39 +
    else
40 +
        notify "Copied — saved to ${file#"$HOME"/}" "$file"
41 +
    fi
42 +
}
43 +
44 +
CHOICE=$(printf '%s\n' \
45 +
    "󰩭  region → clipboard + file" \
46 +
    "󰩭  region → clipboard only" \
47 +
    "󰖯  window → clipboard + file" \
48 +
    "󰍹  full screen → clipboard + file" \
49 +
    "󰔛  full screen after 5s" \
50 +
    "󰉖  open screenshots folder" |
51 +
    rofi -dmenu -i -no-custom -l 6 -p "screenshot" -mesg "Saving to ${DIR#"$HOME"/}") || exit 0
52 +
[ -n "$CHOICE" ] || exit 0
53 +
54 +
KEEP=1
55 +
case "$CHOICE" in
56 +
    *"region → clipboard only")  KEEP=0; shoot -s ;;
57 +
    *"region"*)                  shoot -s ;;
58 +
    # A huge -t makes maim wait for a click instead of a drag, which selects
59 +
    # the clicked window whole — the substitute for `maim -i $(xdotool
60 +
    # getactivewindow)`, since xdotool is not installed.
61 +
    *"window"*)                  shoot -st 9999999 ;;
62 +
    *"after 5s")                 notify "Shooting in 5s..."; sleep 5; shoot ;;
63 +
    *"full screen"*)             shoot ;;
64 +
    *"folder")                   exec xdg-open "$DIR" ;;
65 +
esac
rofi/scripts/rofi-websearch (added) +79 −0
1 +
#!/bin/sh
2 +
# Requires: rofi, a browser
3 +
# Web search: pick an engine, type a query, land in the browser. Typing a
4 +
# query straight into the engine list also works — anything that is not one
5 +
# of the listed engines is treated as a query for the first one.
6 +
# Add engines by adding lines to ENGINES: "<icon>  <name>\t<url with %s>".
7 +
set -u
8 +
9 +
BROWSER_CMD=${BROWSER:-}
10 +
if [ -z "$BROWSER_CMD" ]; then
11 +
    for candidate in helium.AppImage chromium firefox qutebrowser xdg-open; do
12 +
        if command -v "$candidate" >/dev/null 2>&1; then
13 +
            BROWSER_CMD=$candidate
14 +
            break
15 +
        fi
16 +
    done
17 +
fi
18 +
[ -n "$BROWSER_CMD" ] || { notify-send "Web search" "No browser found"; exit 1; }
19 +
20 +
# The AppImage refuses to start under this user without it, the same way the
21 +
# Mod+O keybinding launches it.
22 +
BROWSER_ARGS=""
23 +
case "$BROWSER_CMD" in
24 +
    *helium*) BROWSER_ARGS="--no-sandbox" ;;
25 +
esac
26 +
27 +
ENGINES=$(printf '%s\n' \
28 +
    "󰖟  duckduckgo	https://duckduckgo.com/?q=%s" \
29 +
    "󰊤  github	https://github.com/search?q=%s" \
30 +
    "󰛦  npm	https://www.npmjs.com/search?q=%s" \
31 +
    "󱘗  crates.io	https://crates.io/search?q=%s" \
32 +
    "󰅴  mdn	https://developer.mozilla.org/en-US/search?q=%s" \
33 +
    "󱆃  alpine packages	https://pkgs.alpinelinux.org/packages?name=%s" \
34 +
    "󰖬  wikipedia	https://en.wikipedia.org/w/index.php?search=%s" \
35 +
    "󰗃  youtube	https://www.youtube.com/results?search_query=%s" \
36 +
    "󰅩  stack overflow	https://stackoverflow.com/search?q=%s")
37 +
38 +
# Percent-encode by byte, so a query with an accent or an emoji survives the
39 +
# trip. od gives the bytes; awk decides which ones may travel as themselves.
40 +
urlencode() {
41 +
    printf '%s' "$1" | od -An -tx1 -v | tr -s ' ' '\n' | awk '
42 +
        function h2d(h,   i, c, d) {
43 +
            d = 0
44 +
            for (i = 1; i <= length(h); i++) {
45 +
                c = index("0123456789abcdef", substr(tolower(h), i, 1)) - 1
46 +
                d = d * 16 + c
47 +
            }
48 +
            return d
49 +
        }
50 +
        NF {
51 +
            d = h2d($1)
52 +
            ch = sprintf("%c", d)
53 +
            if (ch ~ /^[A-Za-z0-9._~-]$/) printf "%s", ch
54 +
            else printf "%%%s", toupper($1)
55 +
        }
56 +
    '
57 +
}
58 +
59 +
CHOICE=$(printf '%s\n' "$ENGINES" | cut -f1 | rofi -dmenu -i -l 9 -p "search") || exit 0
60 +
[ -n "$CHOICE" ] || exit 0
61 +
62 +
# rofi hands back whatever was typed when nothing matched: that is a query
63 +
# for the default engine, not an engine name.
64 +
URL=$(printf '%s\n' "$ENGINES" | awk -F'\t' -v c="$CHOICE" '$1 == c { print $2; exit }')
65 +
if [ -n "$URL" ]; then
66 +
    QUERY=$(rofi -dmenu -p "${CHOICE##*  }" -l 0 </dev/null) || exit 0
67 +
else
68 +
    QUERY=$CHOICE
69 +
    URL=$(printf '%s\n' "$ENGINES" | awk -F'\t' 'NR == 1 { print $2; exit }')
70 +
fi
71 +
[ -n "$QUERY" ] || exit 0
72 +
73 +
# A pasted or typed URL is a destination, not something to search for.
74 +
case "$QUERY" in
75 +
    http://*|https://*) TARGET=$QUERY ;;
76 +
    *) TARGET=$(printf "$URL" "$(urlencode "$QUERY")") ;;
77 +
esac
78 +
79 +
exec "$BROWSER_CMD" ${BROWSER_ARGS:+$BROWSER_ARGS} "$TARGET"
rofi/scripts/rofi-wifi (added) +214 −0
1 +
#!/bin/sh
2 +
# Requires: rofi, libnotify, iw, wpa_supplicant, udhcpc, openrc, doas
3 +
# WiFi menu: scan, connect, disconnect. This is the rofi rewrite of the old
4 +
# dm-wifi-connect, with two changes worth knowing about — the passphrase goes
5 +
# through `rofi -password` instead of the black-on-black dmenu trick, and a
6 +
# new network is merged into wpa_supplicant.conf beside the ones already
7 +
# there rather than replacing them, so the machine can still roam back to a
8 +
# network it has seen before.
9 +
#
10 +
# Prompting runs as the calling user so rofi keeps the X session and
11 +
# notifications keep the user's bus; only scanning, the config write and the
12 +
# bring-up are handed to doas.
13 +
set -u
14 +
15 +
CONF=/etc/wpa_supplicant/wpa_supplicant.conf
16 +
NOTIFY_ID=7301
17 +
18 +
menu() { rofi -dmenu -i "$@"; }
19 +
20 +
notify() {
21 +
    # dunstify can replace an earlier notification in place, so the progress
22 +
    # line becomes the result line instead of stacking up.
23 +
    if command -v dunstify >/dev/null 2>&1; then
24 +
        dunstify -r "$NOTIFY_ID" ${2:+-u "$2"} "WiFi" "$1"
25 +
    else
26 +
        notify-send ${2:+-u "$2"} "WiFi" "$1"
27 +
    fi
28 +
}
29 +
30 +
fail() { notify "$1" critical; exit 1; }
31 +
32 +
# doas asks for a passphrase on a tty, and launched from a keybinding there
33 +
# is none — fail with something readable instead of hanging invisibly.
34 +
doas -n true 2>/dev/null || fail "doas needs a password; add a nopass rule for this user."
35 +
36 +
# Ask the kernel which interfaces are wireless rather than assuming wlan0.
37 +
IFACES=$(iw dev | awk '$1 == "Interface" { print $2 }')
38 +
case $(printf '%s' "$IFACES" | grep -c .) in
39 +
    0) fail "No wireless interfaces found." ;;
40 +
    1) IFACE=$IFACES ;;
41 +
    *) IFACE=$(printf '%s\n' "$IFACES" | menu -l 5 -p "interface") ;;
42 +
esac
43 +
[ -n "$IFACE" ] || exit 1
44 +
45 +
link_ssid() { iw dev "$IFACE" link 2>/dev/null | sed -n 's/^[[:space:]]*SSID: //p'; }
46 +
ipv4() { ip -4 addr show "$IFACE" 2>/dev/null | awk '/inet /{ print $2; exit }'; }
47 +
48 +
saved_ssids() { doas -n grep -o 'ssid="[^"]*"' "$CONF" 2>/dev/null | sed 's/^ssid="//; s/"$//'; }
49 +
50 +
disconnect() {
51 +
    notify "󰤬  Disabling $IFACE..."
52 +
    doas sh -c '
53 +
        # wpa_supplicant runs under supervise-daemon, which respawns the
54 +
        # daemon a couple of seconds after any kill. Stopping the service is
55 +
        # what takes the supervisor down with it; pkill only kills the child.
56 +
        rc-service -s -q wpa_supplicant stop
57 +
        ifdown "$1" 2>/dev/null
58 +
59 +
        PIDFILE=/var/run/udhcpc.$1.pid
60 +
        if [ -f "$PIDFILE" ]; then
61 +
            kill "$(cat "$PIDFILE")" 2>/dev/null
62 +
            rm -f "$PIDFILE"
63 +
        fi
64 +
65 +
        ip addr flush dev "$1" 2>/dev/null
66 +
        ip link set "$1" down
67 +
    ' _ "$IFACE"
68 +
    notify "󰤭  $IFACE disabled"
69 +
    exit 0
70 +
}
71 +
72 +
bring_up() {
73 +
    ssid=$1
74 +
    notify "󰤨  Connecting to $ssid..."
75 +
    doas sh -c '
76 +
        # wpa_supplicant will not reread its config on its own, so restart it
77 +
        # rather than signalling it. This also covers the case where the link
78 +
        # was disabled outright. ifup is no help: wlan0 has no stanza in
79 +
        # /etc/network/interfaces.
80 +
        rc-service wpa_supplicant restart >/dev/null 2>&1
81 +
82 +
        # Give the supplicant time to associate before asking for a lease — a
83 +
        # DHCP request sent before association just burns its whole timeout.
84 +
        i=0
85 +
        while [ "$i" -lt 20 ]; do
86 +
            iw dev "$1" link 2>/dev/null | grep -q "^Connected to" && break
87 +
            sleep 1
88 +
            i=$((i + 1))
89 +
        done
90 +
91 +
        # Replace any DHCP client left over from a previous connect; without
92 +
        # this they stack up, one per run, all renewing the same lease.
93 +
        PIDFILE=/var/run/udhcpc.$1.pid
94 +
        if [ -f "$PIDFILE" ]; then
95 +
            kill "$(cat "$PIDFILE")" 2>/dev/null
96 +
            rm -f "$PIDFILE"
97 +
        fi
98 +
        ip addr flush dev "$1" 2>/dev/null
99 +
100 +
        # Same invocation ifupdown-ng uses for a dhcp stanza. udhcpc
101 +
        # daemonises once it has the lease, so this returns with the address
102 +
        # already set.
103 +
        udhcpc -b -R -p "$PIDFILE" -i "$1" -x "hostname:$(hostname)" >/dev/null 2>&1
104 +
    ' _ "$IFACE"
105 +
106 +
    if [ -n "$(ipv4)" ]; then
107 +
        notify "󰤨  $ssid on $IFACE — $(ipv4)"
108 +
    else
109 +
        fail "󰤮  Failed to connect to $ssid"
110 +
    fi
111 +
    exit 0
112 +
}
113 +
114 +
connect() {
115 +
    ssid=$1
116 +
117 +
    # A network already in the config has a working passphrase on file; only
118 +
    # ask again if there is nothing saved for it.
119 +
    if saved_ssids | grep -Fxq "$ssid"; then
120 +
        bring_up "$ssid"
121 +
    fi
122 +
123 +
    pass=$(rofi -dmenu -password -p "password for $ssid" -mesg "Leave empty for an open network" -l 0 </dev/null) || exit 0
124 +
125 +
    # Build the new stanza before touching anything: a rejected passphrase
126 +
    # must not disturb the config that is currently working. The PSK never
127 +
    # lands on disk unprivileged — it goes to the root shell over a pipe.
128 +
    if [ -z "$pass" ]; then
129 +
        NEW=$(printf 'network={\n\tssid="%s"\n\tkey_mgmt=NONE\n}\n' "$ssid")
130 +
    else
131 +
        NEW=$(wpa_passphrase "$ssid" "$pass" 2>/dev/null | grep -v '^[[:space:]]*#psk=') ||
132 +
            fail "Rejected by wpa_passphrase — password must be 8-63 characters."
133 +
    fi
134 +
    [ -n "$NEW" ] || fail "Could not generate a config for $ssid."
135 +
136 +
    # Merge: keep the global settings and every other network block, drop
137 +
    # any earlier block for this SSID, then append the new one. awk does the
138 +
    # dropping because a network={...} block spans lines; its program travels
139 +
    # as an argument so it needs no escaping inside the root shell.
140 +
    DROP_BLOCK='
141 +
        /^[[:space:]]*network[[:space:]]*=[[:space:]]*\{/ {
142 +
            block = $0 ORS; inblock = 1; matched = 0; next
143 +
        }
144 +
        inblock {
145 +
            block = block $0 ORS
146 +
            if (index($0, "ssid=\"" ssid "\"")) matched = 1
147 +
            if ($0 ~ /^[[:space:]]*\}/) {
148 +
                if (!matched) printf "%s", block
149 +
                inblock = 0
150 +
            }
151 +
            next
152 +
        }
153 +
        { print }
154 +
    '
155 +
156 +
    printf '%s\n' "$NEW" | doas sh -c '
157 +
        CONF=$1; SSID=$2; PROG=$3
158 +
        NEW=$(cat)
159 +
        [ -f "$CONF" ] && cp "$CONF" "$CONF.bak"
160 +
        {
161 +
            [ -f "$CONF.bak" ] && awk -v ssid="$SSID" "$PROG" "$CONF.bak"
162 +
            printf "%s\n" "$NEW"
163 +
        } > "$CONF"
164 +
        chmod 600 "$CONF"
165 +
    ' _ "$CONF" "$ssid" "$DROP_BLOCK" || fail "Could not write $CONF."
166 +
167 +
    bring_up "$ssid"
168 +
}
169 +
170 +
# --- menu -------------------------------------------------------------------
171 +
172 +
CURRENT=$(link_ssid)
173 +
IP=$(ipv4)
174 +
if [ -n "$CURRENT" ]; then
175 +
    STATUS="󰤨  connected to $CURRENT${IP:+ — $IP}"
176 +
else
177 +
    STATUS="󰤭  not connected on $IFACE"
178 +
fi
179 +
180 +
doas ip link set "$IFACE" up 2>/dev/null
181 +
notify "󰤬  Scanning for networks on $IFACE..."
182 +
183 +
# `scan dump` reuses cached results if the card is busy (already associated),
184 +
# which is when a live scan tends to fail.
185 +
SCAN=$(doas iw dev "$IFACE" scan 2>/dev/null || doas iw dev "$IFACE" scan dump 2>/dev/null)
186 +
187 +
# Only real SSID lines: bare "SSID: " is a hidden network, and "SSID List"
188 +
# under extended capabilities is not a network at all.
189 +
SSIDS=$(printf '%s\n' "$SCAN" | sed -n 's/^[[:space:]]*SSID: \(..*\)$/\1/p' | sort -u)
190 +
191 +
SAVED=$(saved_ssids)
192 +
LIST=$(printf '%s\n' "$SSIDS" | awk -v cur="$CURRENT" -v saved="$SAVED" '
193 +
    BEGIN { n = split(saved, s, "\n"); for (i = 1; i <= n; i++) known[s[i]] = 1 }
194 +
    NF {
195 +
        # 󰤪 marks a network this machine already has credentials for, 󰄬 the
196 +
        # one it is on right now.
197 +
        icon = ($0 == cur) ? "󰄬" : (known[$0] ? "󰤪" : "󰤟")
198 +
        printf "%s  %s\n", icon, $0
199 +
    }')
200 +
201 +
ACTIONS="󰑐  rescan
202 +
󰛳  hidden network"
203 +
[ -n "$CURRENT" ] && ACTIONS="$ACTIONS
204 +
󰤮  disconnect"
205 +
206 +
CHOICE=$(printf '%s\n%s\n' "$LIST" "$ACTIONS" | grep -v '^$' | menu -l 12 -p "wifi" -mesg "$STATUS") || exit 0
207 +
[ -n "$CHOICE" ] || exit 0
208 +
209 +
case ${CHOICE##*  } in
210 +
    rescan)           exec "$0" ;;
211 +
    disconnect)       disconnect ;;
212 +
    "hidden network") ssid=$(menu -p "ssid" -l 0 </dev/null); [ -n "$ssid" ] && connect "$ssid" ;;
213 +
    *)                connect "${CHOICE##*  }" ;;
214 +
esac
sesh/sesh.toml (added) +0 −0

Binary file — no preview.

starship/starship.toml (added) +60 −0
1 +
# format = """
2 +
# [](#434C5E)\
3 +
# $username\
4 +
# [](bg:#4C566A fg:#434C5E)\
5 +
# $directory\
6 +
# [](fg:#4C566A bg:#5E81AC)\
7 +
# $git_branch\
8 +
# $git_status\
9 +
# [](fg:#5E81AC bg:#2E3440)\
10 +
# $character
11 +
# """
12 +
# format = """
13 +
# $username\
14 +
# [](white)\
15 +
# $directory\
16 +
# [](white)\
17 +
# $character\
18 +
# $git_branch\
19 +
# $git_status\
20 +
# """
21 +
22 +
format = """
23 +
$character\
24 +
$directory\
25 +
$git_branch\
26 +
$git_status\
27 +
"""
28 +
29 +
30 +
# Disable the blank line at the start of the prompt
31 +
add_newline = true
32 +
33 +
# You can also replace your username with a neat symbol like  to save some space
34 +
[username]
35 +
show_always = true
36 +
style_user = "white bold"
37 +
style_root = "white bold"
38 +
format = '[$user ]($style)'
39 +
40 +
[character]
41 +
success_symbol = " [](bold white)"
42 +
error_symbol = " [](bold red)"
43 +
vimcmd_symbol = " [](bold yellow)"
44 +
# vimcmd_replace_one_symbol = "◌"
45 +
# vimcmd_replace_symbol = "□"
46 +
# vimcmd_visual_symbol = "▼"
47 +
48 +
49 +
[directory]
50 +
format = "[ $path/ ]($style)"
51 +
style = "white"
52 +
truncation_length = 1
53 +
truncation_symbol = ""
54 +
55 +
[git_branch]
56 +
symbol = ""
57 +
format = '[$symbol $branch]($style)'
58 +
59 +
[git_status]
60 +
format = ' [$all_status$ahead_behind]($style) '
tmux/.tmux.conf (added) +99 −0
1 +
set -g default-terminal "xterm-256color"
2 +
set-option -ga terminal-overrides ",xterm-256color:Tc"
3 +
set -ga terminal-overrides ",xterm-256color:Tc"
4 +
set -g extended-keys on
5 +
set -g extended-keys-format csi-u
6 +
7 +
# action key
8 +
unbind C-b
9 +
set -g prefix C-q
10 +
set-option -g repeat-time 0
11 +
12 +
set -g @tpm-clean 'u'
13 +
bind-key x kill-pane # skip "kill-pane 1? (y/n)" prompt
14 +
set -g detach-on-destroy off  # don't exit from tmux when closing a session
15 +
16 +
# Plugins
17 +
set -g @tpm_plugins '
18 +
tmux-plugins/tpm
19 +
tmux-plugins/tmux-sensible
20 +
christoomey/vim-tmux-navigator
21 +
'
22 +
# set -g @plugin 'joshmedeski/t-smart-tmux-session-manager'
23 +
# set -g @t-fzf-prompt '󰍉 '
24 +
25 +
# bind-key "T" display-popup -E "sesh connect \"(
26 +
#  sesh list -i | gum filter --limit 1 --placeholder "Choose a session" --height 50 --prompt="> " --indicator.foreground="2" --match.foreground="2"
27 +
# )\""
28 +
29 +
bind-key "T" run-shell "sesh connect \"$(
30 +
  sesh list --icons --hide-duplicates | fzf-tmux --no-sort --reverse \
31 +
    -p 100%,100% --ansi --padding 0,1 --prompt='󰘧  ' \
32 +
    --border=none --input-border=rounded --preview-border=rounded \
33 +
    --header '^a all ^t tmux ^g configs ^x zoxide ^f find ^d kill' \
34 +
    --bind 'tab:down,btab:up' \
35 +
    --bind 'ctrl-a:reload(sesh list --icons --hide-duplicates)' \
36 +
    --bind 'ctrl-t:reload(sesh list -t --icons)' \
37 +
    --bind 'ctrl-g:reload(sesh list -c --icons)' \
38 +
    --bind 'ctrl-x:reload(sesh list -z --icons)' \
39 +
    --bind 'ctrl-f:reload(fd -H -d 2 -t d -E .Trash . ~)' \
40 +
    --bind 'ctrl-d:execute(tmux kill-session -t {2..})+reload(sesh list --icons --hide-duplicates)' \
41 +
    --preview 'sesh preview {}' --preview-window 'right:55%' \
42 +
)\""
43 +
44 +
bind-key b set-option status
45 +
46 +
set-window-option -g mode-keys vi
47 +
48 +
# turn on mouse
49 +
set -g mouse on
50 +
51 +
#bind t send-key C-t
52 +
# Reload settings
53 +
bind r source-file ~/.tmux.conf \; display "Reloaded!"
54 +
# Open current directory
55 +
bind o run-shell "open #{pane_current_path}"
56 +
bind -r e kill-pane -a
57 +
58 +
# vim-like pane switching
59 +
bind -r k select-pane -U
60 +
bind -r j select-pane -D
61 +
bind -r h select-pane -L
62 +
bind -r l select-pane -R
63 +
64 +
# Moving window
65 +
bind-key -n C-S-Left swap-window -t -1 \; previous-window
66 +
bind-key -n C-S-Right swap-window -t +1 \; next-window
67 +
68 +
# Resizing pane
69 +
bind -r K resize-pane -U 5
70 +
bind -r J resize-pane -D 5
71 +
bind -r H resize-pane -L 5
72 +
bind -r L resize-pane -R 5
73 +
74 +
# Start windows and panes at 1, not 0
75 +
set -g base-index 1
76 +
set -g pane-base-index 1
77 +
set-window-option -g pane-base-index 1
78 +
set-option -g renumber-windows on
79 +
80 +
# Opens split panes in current path
81 +
bind '"' split-window -v -c "#{pan_current_path}"
82 +
bind % split-window -h -c "#{pane_current_path}"
83 +
84 +
85 +
#set-option utf8-default on
86 +
#set-option -g mouse-select-pane
87 +
set-window-option -g mode-keys vi
88 +
#set-window-option -g utf8 on
89 +
# look'n feel
90 +
set-option -g status-position "top"
91 +
set-option -g status-style bg=colour0,fg=default
92 +
set-option -g status-justify centre
93 +
set-option -g status-left '#[bg=default,fg=default,bold]#{?client_prefix,,  󰘧  }#[bg=default,fg=colour3,bold]#{?client_prefix,  󰘧  ,}'
94 +
set-option -g status-right '#S'
95 +
set-option -g window-status-format '#[bg=colour0,fg=colour2] 󰝣 #W '
96 +
set-option -g window-status-current-format '#[bg=colour0,fg=colour3] 󰝤 #W#{?window_zoomed_flag,  , }'
97 +
98 +
99 +
run '~/.tmux/plugins/tpm/tpm'
tmux/.tmux.conf.osx (added) +0 −0

Binary file — no preview.

via/mode_sonet_config_010423.json (added) +1 −0
1 +
/Users/stevedylandev/.config/via/mode_sonet_config_010423.json
via/mode_sonet_config_010723.json (added) +1 −0
1 +
/Users/stevedylandev/.config/via/mode_sonet_config_010723.json
wezterm/.wezterm.lua (added) +86 −0
1 +
local wezterm = require 'wezterm'
2 +
3 +
local config = {}
4 +
5 +
if wezterm.config_builder then
6 +
  config = wezterm.config_builder()
7 +
end
8 +
9 +
config.warn_about_missing_glyphs = false
10 +
11 +
-- config.color_scheme = 'Compline'
12 +
-- config.color_schemes = {
13 +
--   ["Compline"] = {
14 +
--     foreground = "#f0efeb",
15 +
--     background = "#1a1d21",
16 +
--     cursor_fg = "#1a1d21",
17 +
--     cursor_bg = "#d4ccb4",
18 +
--     cursor_border = "#d4ccb4",
19 +
--     selection_fg = "#f0efeb",
20 +
--     selection_bg = "#3d424a",
21 +
--     ansi = {
22 +
--       "#22262b", "#cdacac", "#b8c4b8", "#d4ccb4",
23 +
--       "#b4bcc4", "#ccc4b4", "#b4c0c8", "#8b919a"
24 +
--     },
25 +
--     brights = {
26 +
--       "#515761", "#cdacac", "#b8c4b8", "#d4ccb4",
27 +
--       "#b4bcc4", "#ccc4b4", "#b4c0c8", "#e0dcd4"
28 +
--     }
29 +
--   }
30 +
-- }
31 +
32 +
config.color_scheme = 'nord'
33 +
34 +
-- config.color_scheme = "Poimandres"
35 +
--config.color_scheme = 'Darkmatter'
36 +
config.color_schemes = {
37 +
  ["Darkmatter"] = {
38 +
    foreground = "#ffffff",
39 +
    background = "#121113",
40 +
    cursor_fg = "#121113",
41 +
    cursor_bg = "#ffffff",
42 +
    cursor_border = "#ffffff",
43 +
    selection_fg = "#000000",
44 +
    selection_bg = "#222222",
45 +
    ansi = {
46 +
      "#121113", "#5f8787", "#fbcb97", "#e78a53",
47 +
      "#888888", "#999999", "#aaaaaa", "#c1c1c1"
48 +
    },
49 +
    brights = {
50 +
      "#333333", "#5f8787", "#fbcb97", "#e78a53",
51 +
      "#888888", "#999999", "#aaaaaa", "#c1c1c1"
52 +
    }
53 +
  }
54 +
}
55 +
56 +
config.font = wezterm.font('BerkeleyMono Nerd Font')
57 +
config.font_size = 13
58 +
59 +
config.front_end = "WebGpu"
60 +
61 +
config.enable_tab_bar = false
62 +
config.window_decorations = "RESIZE"
63 +
config.window_padding = {
64 +
  left = 10,
65 +
  right = 10,
66 +
  top = 4,
67 +
  bottom = 4
68 +
}
69 +
70 +
config.initial_cols = 85
71 +
config.initial_rows = 30
72 +
73 +
-- config.default_prog = { '/opt/homebrew/bin/nu' }
74 +
--
75 +
config.keys = {
76 +
  {
77 +
    key = 'k',
78 +
    mods = 'SUPER|CTRL',
79 +
    action = wezterm.action.Multiple {
80 +
      wezterm.action.SendKey { key = 'q', mods = 'CTRL' },  -- send prefix (C-q)
81 +
      wezterm.action.SendKey { key = 'T' },                  -- send T
82 +
    },
83 +
  },
84 +
}
85 +
86 +
return config
wezterm/poimandres.toml (added) +79 −0
1 +
[colors]
2 +
ansi = [
3 +
    '#171922',
4 +
    '#D0679D',
5 +
    '#5DE4C7',
6 +
    '#FFFAC2',
7 +
    '#89DDFF',
8 +
    '#FCC5E9',
9 +
    '#89DDFF',
10 +
    '#FFFFFF',
11 +
]
12 +
brights = [
13 +
    '#506477',
14 +
    '#D0679D',
15 +
    '#5DE4C7',
16 +
    '#FFFAC2',
17 +
    '#ADD7FF',
18 +
    '#FCC5E9',
19 +
    '#ADD7FF',
20 +
    '#FFFFFF',
21 +
]
22 +
background = '#1B1E28'
23 +
foreground = '#E4F0FB'
24 +
compose_cursor = '#FCC5E9'
25 +
cursor_bg = '#A6ACCD'
26 +
cursor_border = '#A6ACCD'
27 +
cursor_fg = '#1B1E28'
28 +
scrollbar_thumb = '#303340'
29 +
selection_bg = '#506477'
30 +
selection_fg = '#E4F0FB'
31 +
split = '#171922'
32 +
visual_bell = '#506477'
33 +
34 +
[colors.indexed]
35 +
16 = '#5DE4C7'
36 +
17 = '#D0679D'
37 +
38 +
[colors.tab_bar]
39 +
background = '#171922'
40 +
41 +
[colors.tab_bar.active_tab]
42 +
bg_color = '#1B1E28'
43 +
fg_color = '#E4F0FB'
44 +
intensity = 'Normal'
45 +
italic = false
46 +
strikethrough = false
47 +
underline = 'None'
48 +
49 +
[colors.tab_bar.inactive_tab]
50 +
bg_color = '#171922'
51 +
fg_color = '#506477'
52 +
intensity = 'Normal'
53 +
italic = false
54 +
strikethrough = false
55 +
underline = 'None'
56 +
57 +
[colors.tab_bar.inactive_tab_hover]
58 +
bg_color = '#171922'
59 +
fg_color = '#767C9D'
60 +
intensity = 'Normal'
61 +
italic = false
62 +
strikethrough = false
63 +
underline = 'None'
64 +
65 +
[colors.tab_bar.new_tab]
66 +
bg_color = '#171922'
67 +
fg_color = '#506477'
68 +
intensity = 'Normal'
69 +
italic = false
70 +
strikethrough = false
71 +
underline = 'None'
72 +
73 +
[colors.tab_bar.new_tab_hover]
74 +
bg_color = '#171922'
75 +
fg_color = '#767C9D'
76 +
intensity = 'Normal'
77 +
italic = true
78 +
strikethrough = false
79 +
underline = 'None'
xfce/autostart/rofi-clipd.desktop (added) +10 −0
1 +
[Desktop Entry]
2 +
Type=Application
3 +
Version=1.0
4 +
Name=Clipboard history (rofi)
5 +
Comment=Records what passes through the clipboard so Super+V can bring it back
6 +
Exec=/home/stevedylandev/dotfiles/rofi/scripts/rofi-clipd
7 +
Icon=edit-paste
8 +
Terminal=false
9 +
StartupNotify=false
10 +
X-GNOME-Autostart-enabled=true
xfce/rofi-keybinds.sh (added) +130 −0
1 +
#!/bin/sh
2 +
# Requires: xfconf-query (xfce4-settings)
3 +
# Points the XFCE keyboard shortcuts at the rofi menus in ../rofi/scripts,
4 +
# and can put back whatever those keys did before.
5 +
#
6 +
# This is a script rather than a checked-in xfconf XML file because xfconf
7 +
# rewrites its own config atomically, by rename — which would replace a
8 +
# symlink from this repo with a regular file the first time anything changed
9 +
# a shortcut through the settings GUI.
10 +
#
11 +
# Usage: rofi-keybinds.sh            apply (idempotent, safe to re-run)
12 +
#        rofi-keybinds.sh --remove   restore what these keys did before
13 +
#        rofi-keybinds.sh --list     show which keys currently run rofi
14 +
#
15 +
# xfsettingsd watches xfconf, so changes take effect immediately — no logout.
16 +
set -u
17 +
18 +
CHANNEL=xfce4-keyboard-shortcuts
19 +
BACKUP="${XDG_DATA_HOME:-$HOME/.local/share}/rofi-keybinds.backup"
20 +
21 +
# Where the menu scripts live. The repo layout is the default; point
22 +
# ROFI_SCRIPTS somewhere else to bind an installed copy instead.
23 +
S=${ROFI_SCRIPTS:-$(CDPATH= cd -- "$(dirname -- "$0")/../rofi/scripts" 2>/dev/null && pwd)}
24 +
[ -n "${S:-}" ] && [ -d "$S" ] || S="$HOME/.config/rofi/scripts"
25 +
[ -d "$S" ] || { echo "rofi-keybinds: no rofi scripts directory found" >&2; exit 1; }
26 +
27 +
command -v xfconf-query >/dev/null 2>&1 ||
28 +
    { echo "rofi-keybinds: xfconf-query not found — is this an XFCE session?" >&2; exit 1; }
29 +
30 +
# key<TAB>command. Super+Tab, Super+f/h/l and Super+1-4 are missing from this
31 +
# list on purpose: xfwm4 grabs those for window and workspace handling, so a
32 +
# command bound to them would never fire.
33 +
binds() {
34 +
    cat <<BINDS
35 +
/commands/custom/<Super>d	rofi -show drun
36 +
/commands/custom/<Super>space	rofi -show drun
37 +
/commands/custom/<Alt>F2	rofi -show run
38 +
/commands/custom/<Super>r	rofi -show run
39 +
/commands/custom/<Super>w	rofi -show window
40 +
/commands/custom/<Shift><Super>f	rofi -show filebrowser
41 +
/commands/custom/<Super>v	$S/rofi-clip
42 +
/commands/custom/<Shift><Super>e	$S/rofi-emoji
43 +
/commands/custom/<Shift><Super>c	$S/rofi-calc
44 +
/commands/custom/<Shift><Super>x	$S/rofi-power
45 +
/commands/custom/<Shift><Super>n	$S/rofi-wifi
46 +
/commands/custom/<Shift><Super>u	$S/rofi-audio
47 +
/commands/custom/<Super>s	$S/rofi-screenshot
48 +
/commands/custom/Print	$S/rofi-screenshot
49 +
/commands/custom/<Super>slash	$S/rofi-websearch
50 +
BINDS
51 +
}
52 +
53 +
# Shortcuts for xfce4-screenshooter, which is not installed — these keys do
54 +
# nothing at all today, so they are dropped rather than repointed.
55 +
DEAD="/commands/custom/<Shift>Print
56 +
/commands/custom/<Alt>Print"
57 +
58 +
get() { xfconf-query -c "$CHANNEL" -p "$1" 2>/dev/null; }
59 +
exists() { xfconf-query -c "$CHANNEL" -p "$1" >/dev/null 2>&1; }
60 +
61 +
# One line per property, the first time it is touched: "prop<TAB>type<TAB>old
62 +
# value", with an empty value meaning the property did not exist. Re-running
63 +
# apply must not overwrite an entry, or the original would be lost behind a
64 +
# rofi command.
65 +
record() {
66 +
    mkdir -p "$(dirname "$BACKUP")"
67 +
    [ -f "$BACKUP" ] &&
68 +
        awk -F'\t' -v p="$1" '$1 == p { found = 1 } END { exit !found }' "$BACKUP" &&
69 +
        return 0
70 +
    printf '%s\t%s\t%s\n' "$1" "$2" "$3" >> "$BACKUP"
71 +
}
72 +
73 +
put() {
74 +
    if exists "$1"; then
75 +
        xfconf-query -c "$CHANNEL" -p "$1" -s "$3"
76 +
    else
77 +
        xfconf-query -c "$CHANNEL" -p "$1" -n -t "$2" -s "$3"
78 +
    fi
79 +
}
80 +
81 +
apply() {
82 +
    binds | while IFS='	' read -r prop cmd; do
83 +
        [ -n "$prop" ] || continue
84 +
        old=$(get "$prop")
85 +
        [ "$old" = "$cmd" ] && continue
86 +
87 +
        record "$prop" string "$old"
88 +
        put "$prop" string "$cmd" >/dev/null
89 +
90 +
        # The appfinder keys carry startup-notify. rofi never sends the
91 +
        # matching "I am up" message, so the busy cursor would spin for its
92 +
        # full timeout on every launch.
93 +
        sn="$prop/startup-notify"
94 +
        if exists "$sn"; then
95 +
            record "$sn" bool "$(get "$sn")"
96 +
            xfconf-query -c "$CHANNEL" -p "$sn" -s false
97 +
        fi
98 +
99 +
        printf '  %-40s → %s\n' "${prop#/commands/custom/}" "$cmd"
100 +
    done
101 +
102 +
    printf '%s\n' "$DEAD" | while read -r prop; do
103 +
        [ -n "$prop" ] && exists "$prop" || continue
104 +
        record "$prop" string "$(get "$prop")"
105 +
        xfconf-query -c "$CHANNEL" -p "$prop" -r
106 +
        printf '  %-40s → removed (xfce4-screenshooter is not installed)\n' "${prop#/commands/custom/}"
107 +
    done
108 +
}
109 +
110 +
remove() {
111 +
    [ -f "$BACKUP" ] || { echo "rofi-keybinds: nothing to restore"; exit 0; }
112 +
    while IFS='	' read -r prop type value; do
113 +
        [ -n "$prop" ] || continue
114 +
        if [ -z "$value" ]; then
115 +
            xfconf-query -c "$CHANNEL" -p "$prop" -r 2>/dev/null
116 +
            printf '  %-40s → unbound\n' "${prop#/commands/custom/}"
117 +
        else
118 +
            put "$prop" "$type" "$value" >/dev/null
119 +
            printf '  %-40s → %s\n' "${prop#/commands/custom/}" "$value"
120 +
        fi
121 +
    done < "$BACKUP"
122 +
    rm -f "$BACKUP"
123 +
}
124 +
125 +
case "${1:-}" in
126 +
    "")        echo "Binding rofi menus in $S:"; apply ;;
127 +
    --remove)  echo "Restoring shortcuts from $BACKUP:"; remove ;;
128 +
    --list)    xfconf-query -c "$CHANNEL" -p /commands/custom -lv | grep -i rofi ;;
129 +
    *)         echo "usage: rofi-keybinds.sh [--remove|--list]" >&2; exit 2 ;;
130 +
esac
yazi/theme.toml (added) +135 −0
1 +
[mgr]
2 +
cwd = { fg = "yellow" }
3 +
4 +
find_keyword  = { fg = "yellow", italic = true }
5 +
find_position = { fg = "magenta", bg = "reset", italic = true }
6 +
7 +
marker_copied   = { fg = "green",  bg = "green" }
8 +
marker_cut      = { fg = "red",    bg = "red" }
9 +
marker_marked   = { fg = "cyan",   bg = "cyan" }
10 +
marker_selected = { fg = "yellow", bg = "yellow" }
11 +
12 +
count_copied   = { fg = "black", bg = "green" }
13 +
count_cut      = { fg = "black", bg = "red" }
14 +
count_selected = { fg = "black", bg = "yellow" }
15 +
16 +
border_symbol = "│"
17 +
border_style  = { fg = "white" }
18 +
19 +
syntect_theme = ""
20 +
21 +
[tabs]
22 +
active   = { fg = "black", bg = "white" }
23 +
inactive = { fg = "white", bg = "black" }
24 +
25 +
[mode]
26 +
normal_main = { fg = "black", bg = "yellow", bold = true }
27 +
normal_alt  = { fg = "yellow", bg = "black" }
28 +
29 +
select_main = { fg = "black", bg = "green", bold = true }
30 +
select_alt  = { fg = "green", bg = "black" }
31 +
32 +
unset_main  = { fg = "black", bg = "magenta", bold = true }
33 +
unset_alt   = { fg = "magenta", bg = "black" }
34 +
35 +
[status]
36 +
sep_left  = { open = "", close = "" }
37 +
sep_right = { open = "", close = "" }
38 +
39 +
progress_label  = { bold = true }
40 +
progress_normal = { fg = "blue",   bg = "black" }
41 +
progress_error  = { fg = "red",    bg = "black" }
42 +
43 +
perm_type  = { fg = "cyan" }
44 +
perm_read  = { fg = "yellow" }
45 +
perm_write = { fg = "red" }
46 +
perm_exec  = { fg = "green" }
47 +
perm_sep   = { fg = "white" }
48 +
49 +
[pick]
50 +
border   = { fg = "yellow" }
51 +
active   = { fg = "magenta" }
52 +
inactive = {}
53 +
54 +
[input]
55 +
border   = { fg = "yellow" }
56 +
title    = {}
57 +
value    = {}
58 +
selected = { reversed = true }
59 +
60 +
[cmp]
61 +
border   = { fg = "yellow" }
62 +
active   = { bg = "black" }
63 +
inactive = {}
64 +
65 +
icon_file    = ""
66 +
icon_folder  = ""
67 +
icon_command = ""
68 +
69 +
[tasks]
70 +
border  = { fg = "yellow" }
71 +
title   = {}
72 +
hovered = { underline = true }
73 +
74 +
[which]
75 +
mask            = { bg = "black" }
76 +
cand            = { fg = "cyan" }
77 +
rest            = { fg = "white" }
78 +
desc            = { fg = "magenta" }
79 +
separator       = "  "
80 +
separator_style = { fg = "black" }
81 +
82 +
[help]
83 +
on      = { fg = "cyan" }
84 +
run     = { fg = "magenta" }
85 +
hovered = { reversed = true, bold = true }
86 +
footer  = { fg = "white", bg = "black" }
87 +
88 +
[notify]
89 +
title_info  = { fg = "green" }
90 +
title_warn  = { fg = "yellow" }
91 +
title_error = { fg = "red" }
92 +
93 +
icon_info  = ""
94 +
icon_warn  = ""
95 +
icon_error = ""
96 +
97 +
[icon]
98 +
prepend_dirs = [
99 +
	{ name = "Desktop", text = "", fg = "blue" },
100 +
	{ name = "Downloads", text = "", fg = "blue" },
101 +
	{ name = "Developer", text = "󱌣", fg = "blue" },
102 +
	{ name = "Pictures", text = "", fg = "blue" },
103 +
	{ name = "Documents", text = "", fg = "blue" },
104 +
	{ name = "Movies", text = "", fg = "blue" },
105 +
	{ name = "Library", text = "", fg = "blue" },
106 +
	{ name = "Music", text = "", fg = "blue" },
107 +
	{ name = "Public", text = "󰛳", fg = "blue" },
108 +
]
109 +
prepend_conds = [
110 +
  { if = "dir",          text = "󰉋", fg = "blue" },
111 +
  { if = "hidden & dir", text = "󰉋", fg = "blue" },
112 +
  { if = "link",         text = "󰌹", fg = "cyan" },
113 +
  { if = "orphan",       text = "", fg = "red" },
114 +
  { if = "exec",         text = "", fg = "green" },
115 +
  { if = "hidden",       text = "", fg = "yellow" },
116 +
]
117 +
118 +
prepend_exts = [
119 +
  { name = "png",        text = "", fg = "red" },
120 +
  { name = "jpg",        text = "", fg = "red" },
121 +
  { name = "jpeg",        text = "", fg = "red" },
122 +
  { name = "webp",        text = "", fg = "red" },
123 +
  { name = "gif",        text = "", fg = "red" },
124 +
  { name = "csv",        text = "", fg = "red" },
125 +
]
126 +
127 +
[filetype]
128 +
rules = [
129 +
  { mime = "image/*", fg = "cyan" },
130 +
  { mime = "{audio,video}/*", fg = "yellow" },
131 +
  { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "magenta" },
132 +
  { mime = "application/{pdf,doc*,rtf}", fg = "green" },
133 +
  { url = "*/", fg = "blue" },
134 +
  { url = "*",  fg = "white" },
135 +
]
yazi/yazi.toml (added) +4 −0
1 +
[mgr]
2 +
ratio = [1,3,4]
3 +
sort_by = "mtime"
4 +
sort_reverse = true
zsh/dot-zshrc (added) +252 −0
1 +
# ~/.zshrc — mirrors the nushell config
2 +
#
3 +
# Linked via: fling link -s zsh -l ~
4 +
5 +
# Interactive-only guard
6 +
case $- in
7 +
  *i*) ;;
8 +
  *) return ;;
9 +
esac
10 +
11 +
# =============================================================================
12 +
# History
13 +
# =============================================================================
14 +
HISTFILE="$HOME/.zsh_history"
15 +
HISTSIZE=10000
16 +
SAVEHIST=10000
17 +
setopt EXTENDED_HISTORY
18 +
setopt HIST_IGNORE_ALL_DUPS   # ~ HISTCONTROL=ignoredups
19 +
setopt HIST_IGNORE_SPACE      # ~ HISTCONTROL=ignorespace
20 +
setopt HIST_REDUCE_BLANKS
21 +
setopt APPEND_HISTORY         # ~ shopt -s histappend
22 +
setopt INC_APPEND_HISTORY
23 +
setopt share_history
24 +
setopt hist_verify
25 +
26 +
27 +
# vi mode (matches nushell edit_mode: vi)
28 +
set -o vi
29 +
30 +
# Edit command in $EDITOR
31 +
autoload -Uz edit-command-line
32 +
zle -N edit-command-line
33 +
bindkey '^O' edit-command-line
34 +
35 +
# =============================================================================
36 +
# Environment
37 +
# =============================================================================
38 +
export EDITOR="nvim"
39 +
export CLICOLOR=1
40 +
41 +
# Go
42 +
export GOPATH="$HOME/.local/share/go"
43 +
export GOMODCACHE="$HOME/.local/share/go-mod-cache"
44 +
45 +
# bat
46 +
export BAT_THEME="ansi"
47 +
export BAT_THEME_DARK="ansi"
48 +
49 +
# gpg
50 +
export GPG_TTY="$(tty)"
51 +
52 +
# misc
53 +
export BULLETS_FEEDS="feeds.stevedylan.dev/feed.xml"
54 +
55 +
# pnpm
56 +
export PNPM_HOME="$HOME/Library/pnpm"
57 +
58 +
# fzf
59 +
export FZF_DEFAULT_COMMAND='fd --type f --hidden --exclude ".git"'
60 +
export FZF_DEFAULT_OPTS='
61 +
  --color=fg:8:bold,fg+:15,bg:-1,bg+:-1
62 +
  --color=hl:10:bold,hl+:10:bold
63 +
  --color=info:8,spinner:9,header:4
64 +
  --color=prompt:2,pointer:9,marker:1
65 +
  --color=border:7,label:15:bold,query:15
66 +
  --border="rounded"
67 +
  --border-label=""
68 +
  --preview-window="border-rounded"
69 +
  --prompt="> "
70 +
  --marker=" "
71 +
  --pointer="◆"
72 +
  --separator=""
73 +
  --scrollbar=""
74 +
  --gutter=" "
75 +
  --info=inline-right'
76 +
77 +
# =============================================================================
78 +
# PATH
79 +
# =============================================================================
80 +
# path_add <dir>: prepend if not already present and dir exists
81 +
path_add() {
82 +
  case ":$PATH:" in
83 +
    *":$1:"*) ;;
84 +
    *) [ -d "$1" ] && PATH="$1:$PATH" ;;
85 +
  esac
86 +
}
87 +
88 +
path_add "/opt/homebrew/bin"
89 +
path_add "/usr/local/go/bin"
90 +
path_add "$HOME/.cargo/bin"
91 +
path_add "$HOME/.local/share/go/bin"
92 +
path_add "$HOME/.local/bin"
93 +
path_add "/usr/local/bin"
94 +
path_add "$HOME/.bun/bin"
95 +
path_add "/Applications/Docker.app/Contents/Resources/bin"
96 +
path_add "$HOME/.tmux/plugins/t-smart-tmux-session-manager/bin"
97 +
path_add "$HOME/.deno/bin"
98 +
path_add "$HOME/.foundry/bin"
99 +
path_add "$HOME/.local/share"
100 +
path_add "$HOME/.local/share/solana/install/active_release/bin"
101 +
path_add "$HOME/.aztec/bin"
102 +
path_add "$HOME/.nargo/bin"
103 +
path_add "$HOME/.helios/bin"
104 +
path_add "$HOME/.radicle/bin"
105 +
path_add "$PNPM_HOME"
106 +
107 +
export PATH
108 +
109 +
# fnm (node version manager)
110 +
if command -v fnm >/dev/null 2>&1; then
111 +
  eval "$(fnm env --shell zsh)"
112 +
  path_add "$FNM_MULTISHELL_PATH/bin"
113 +
  export PATH
114 +
  # auto-switch node version on cd when .node-version / .nvmrc present
115 +
  __fnm_autouse() {
116 +
    if [ -f .node-version ] || [ -f .nvmrc ]; then
117 +
      fnm use --silent-if-unchanged 2>/dev/null
118 +
    fi
119 +
  }
120 +
  autoload -Uz add-zsh-hook
121 +
  add-zsh-hook precmd __fnm_autouse
122 +
fi
123 +
124 +
# cargo
125 +
[ -f "$HOME/.cargo/env" ] && . "$HOME/.cargo/env"
126 +
127 +
# =============================================================================
128 +
# Aliases
129 +
# =============================================================================
130 +
alias ls='eza --icons=always'
131 +
alias ll='eza -l --icons=always'
132 +
alias la='eza -a --icons=always'
133 +
alias lg='lazygit'
134 +
alias nf='neofetch'
135 +
alias fl='fastfetch -c ~/.config/fastfetch/presets/examples/8.jsonc'
136 +
alias ff='fastfetch -c ~/.config/fastfetch/presets/examples/20.jsonc'
137 +
alias nvimrc='nvim ~/.config/nvim'
138 +
alias shitter='ssh itter'
139 +
# alias tailscale='/Applications/Tailscale.app/Contents/MacOS/Tailscale'
140 +
alias ai='aichat'
141 +
alias system='macchina'
142 +
alias bonsai='cbonsai -li -t 0.4'
143 +
alias lst='lstr --icons --color=always --size'
144 +
alias keys='keysmasher'
145 +
alias timestamp='node -e "process.stdout.write(new Date().toISOString())"'
146 +
alias cleardns='sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder'
147 +
148 +
# -------------------------------------------
149 +
# Suffix Aliases - Open Files by Extension
150 +
# -------------------------------------------
151 +
# Just type the filename to open it with the associated program
152 +
alias -s json=jless
153 +
alias -s md=bat
154 +
alias -s go='$EDITOR'
155 +
alias -s rs='$EDITOR'
156 +
alias -s txt=bat
157 +
alias -s log=bat
158 +
alias -s py='$EDITOR'
159 +
alias -s js='$EDITOR'
160 +
alias -s ts='$EDITOR'
161 +
alias -s html=open  # macOS: open in default browser
162 +
163 +
# =============================================================================
164 +
# Functions
165 +
# =============================================================================
166 +
# Open a sesh session via gum filter
167 +
t() {
168 +
  local selected
169 +
  selected=$(sesh list -i | gum filter --limit 1 --placeholder "Choose a session" --height 50 --prompt="> " --indicator.foreground="2" --match.foreground="2")
170 +
  if [ -z "$selected" ]; then
171 +
    echo "No session selected"
172 +
  else
173 +
    sesh connect "$selected"
174 +
  fi
175 +
}
176 +
177 +
# Fuzzy-find a file and open in nvim
178 +
nvimf() {
179 +
  local file
180 +
  file=$(fd --type f --hidden --exclude .git | fzf --preview "bat --color=always {}")
181 +
  if [ -z "$file" ]; then
182 +
    echo "No file selected"
183 +
  else
184 +
    nvim "$file"
185 +
  fi
186 +
}
187 +
188 +
# Install a tree-sitter parser into the nvim luarocks tree
189 +
tsi() {
190 +
  local parser="$1"
191 +
  local tree="$HOME/.local/share/nvim/site"
192 +
  luarocks --lua-version=5.1 "--tree=$tree" install "tree-sitter-$parser"
193 +
}
194 +
195 +
# nvim startup time -> grep summary line
196 +
ns() {
197 +
  rm -f ~/.nvim-startup.txt
198 +
  nvim --headless --startuptime ~/.nvim-startup.txt +qa
199 +
  grep "NVIM STARTED" ~/.nvim-startup.txt
200 +
}
201 +
202 +
# nvim startup time -> full bat dump
203 +
nh() {
204 +
  rm -f ~/.nvim-startup.txt
205 +
  nvim --headless --startuptime ~/.nvim-startup.txt +qa
206 +
  bat ~/.nvim-startup.txt
207 +
}
208 +
209 +
# Copy file contents to clipboard
210 +
cpf() {
211 +
  cat "$1" | pbcopy
212 +
  echo "✔︎ Copied to clipboard!"
213 +
}
214 +
215 +
# Set orbiter key to personal
216 +
orbiter-personal() {
217 +
  gum spin --spinner dot --spinner.foreground="2" --title "Updating..." -- orbiter auth --key "$(op read 'op://Personal/orbiter-api-key/credential')"
218 +
  local check
219 +
  check=$(gum style --foreground="2" "✓ ")
220 +
  gum join "$check" "Orbiter key set to personal!"
221 +
}
222 +
223 +
# Set orbiter key to orbiter account
224 +
orbiter-account() {
225 +
  gum spin --spinner dot --spinner.foreground="2" --title "Updating..." -- orbiter auth --key "$(op read 'op://Personal/orbiter-account-api-key/credential')"
226 +
  local check
227 +
  check=$(gum style --foreground="2" "✓ ")
228 +
  gum join "$check" "Orbiter key set to Orbiter account!"
229 +
}
230 +
231 +
# UTC timestamp for blog frontmatter
232 +
blogdate() {
233 +
  date -u +"%Y-%m-%dT%H:%M:%SZ"
234 +
}
235 +
236 +
# =============================================================================
237 +
# Completion
238 +
# =============================================================================
239 +
autoload -Uz compinit
240 +
compinit
241 +
242 +
# =============================================================================
243 +
# Tooling init
244 +
# =============================================================================
245 +
command -v zoxide >/dev/null 2>&1 && eval "$(zoxide init zsh)"
246 +
command -v starship >/dev/null 2>&1 && eval "$(starship init zsh)"
247 +
command -v fzf >/dev/null 2>&1 && eval "$(fzf --zsh)"
248 +
249 +
# zsh-autosuggestions and syntax highlighting
250 +
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
251 +
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
252 +
export PATH="$HOME/.local/bin:$PATH"