This commit is contained in:
Jeffrey Serio 2024-10-26 13:30:45 -05:00
parent 482ff562a8
commit eda1b5c9d0
17 changed files with 2831 additions and 603 deletions

View File

@ -0,0 +1,3 @@
--theme=Catppuccin-mocha
--style=plain
--pager="less -FRX"

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,22 @@
[core] [core]
editor = "emacsclient" editor = "emacsclient"
pager = "diff-so-fancy | less --tabs=4 -RFX" pager = "diff-so-fancy | less '--tabs=4' -RFX"
[diff-so-fancy]
changeHunkIndicators = true
markEmptyLines = true
stripLeadingSymbols = true
useUnicodeRuler = true
[init] [init]
defaultBranch = "main" defaultBranch = "main"
[interactive]
diffFilter = "diff-so-fancy --patch"
[pull] [pull]
rebase = true rebase = true
[user] [user]
email = "23226432+hyperreal64@users.noreply.github.com" email = "hyperreal@moonshadow.dev"
name = "Jeffrey Serio" name = "Jeffrey Serio"

View File

@ -1,113 +1,115 @@
# Sets user-defined palette "$schema" = 'https://starship.rs/config-schema.json'
palette = "catppuccin_mocha"
format = """$time$container$directory$all$line_break$username$hostname$character""" ## PROMPT FORMAT
right_format = """$cmd_duration $jobs $status""" format = """$time$container$directory$all$cmd_duration$jobs$status$line_break$username$hostname$character"""
# # PALETTE
palette = 'catppuccin_mocha'
[palettes.catppuccin_mocha]
rosewater = '#f5e0dc'
flamingo = '#f2cdcd'
pink = '#f5c2e7'
mauve = '#cba6f7'
red = '#f38ba8'
maroon = '#eba0ac'
peach = '#fab387'
yellow = '#f9e2af'
green = '#a6e3a1'
teal = '#94e2d5'
sky = '#89dceb'
sapphire = '#74c7ec'
blue = '#89b4fa'
lavender = '#b4befe'
text = '#cdd6f4'
subtext1 = '#bac2de'
subtext0 = '#a6adc8'
overlay2 = '#9399b2'
overlay1 = '#7f849c'
overlay0 = '#6c7086'
surface2 = '#585b70'
surface1 = '#45475a'
surface0 = '#313244'
base = '#1e1e2e'
mantle = '#181825'
crust = '#11111b'
## LEFT SIDE - FIRST LINE
[time] [time]
disabled = false disabled = false
format = '[\[ $time \]]($style) ' format = '[$time]($style) '
time_format = "%T" time_format = '%T'
style = "bold peach" style = 'bold peach'
[directory]
style = 'subtext0'
truncation_length = 8
truncate_to_repo = true
truncation_symbol = 'repo: '
[docker_context]
symbol = 'docker: '
format = '[$symbol$context]($style)'
[git_branch]
symbol = ' '
[git_status]
style = 'text'
ahead = '⇡${count}'
diverged = '⇕⇡${ahead_count}⇣${behind_count}'
behind = '⇣${count}'
deleted = 'x'
[golang]
symbol = 'go: '
format = '[$symbol($version )($style)'
[nix_shell]
symbol = 'nix: '
format = '[$symbol$state(\($name\))]($style)'
[nodejs]
symbol = 'node: '
format = '[$symbol($version)]($style)'
[python]
symbol = 'py: '
format = '[${symbol}${pyenv_prefix}(${version} )(\($virtualenv\) )]($style)'
[rust]
symbol = 'rust: '
format = '[$symbol($version)]($style)'
[cmd_duration]
min_time = 1
style = 'yellow'
format = 'duration: [$duration]($style) '
disabled = false
[status]
format = 'exit status: [$status = $common_meaning]($style) '
disabled = false
style = 'bold red'
recognize_signal_code = true
map_symbol = true
## LEFT SIDE - SECOND LINE
[username] [username]
format = "[$user]($style)@" format = '[$user]($style)@'
style_user = "red" style_user = 'red'
style_root = "bold red" style_root = 'bold red'
show_always = true show_always = true
# Second param
[hostname] [hostname]
format = "[$hostname]($style)" format = '[$hostname]($style)'
style = "lavender" style = 'lavender'
trim_at = ".local" trim_at = '.local'
ssh_only = false ssh_only = false
disabled = false disabled = false
# Third param
[directory]
style = "subtext0"
truncation_length = 8
truncate_to_repo = true
truncation_symbol = "repo: "
# Before all the version info (python, nodejs, php, etc.)
[git_status]
style = "text"
ahead = "⇡${count}"
diverged = "⇕⇡${ahead_count}⇣${behind_count}"
behind = "⇣${count}"
deleted = "x"
[container]
style = "bold pink"
format = "[$symbol \\[ $name \\]]($style) "
# Last param in the first line/row
[cmd_duration]
min_time = 1
style = "yellow"
format = "duration: [$duration]($style)"
disabled = false
# Prompt: param 2
[character] [character]
format = "$symbol " format = ' [$symbol]($style) '
success_symbol = ' [%](teal)' success_symbol = '[➜](bold teal)'
error_symbol = ' [%](red)' error_symbol = '[➜](bold red)'
vicmd_symbol = " [<](teal)" vimcmd_symbol = '[V](bold green)'
# SYMBOLS
[status]
format = 'exit status: [$status_common_meaning$status_signal_name$status]($style)'
disabled = false
style = "bold red"
[docker_context]
symbol = " "
[git_branch]
symbol = " "
[golang]
symbol = " "
[nodejs]
symbol = " "
[package]
symbol = " "
[python]
symbol = " "
[rust]
symbol = " "
[palettes.catppuccin_mocha]
rosewater = "#f5e0dc"
flamingo = "#f2cdcd"
pink = "#f5c2e7"
mauve = "#cba6f7"
red = "#f38ba8"
maroon = "#eba0ac"
peach = "#fab387"
yellow = "#f9e2af"
green = "#a6e3a1"
teal = "#94e2d5"
sky = "#89dceb"
sapphire = "#74c7ec"
blue = "#89b4fa"
lavender = "#b4befe"
text = "#cdd6f4"
subtext1 = "#bac2de"
subtext0 = "#a6adc8"
overlay2 = "#9399b2"
overlay1 = "#7f849c"
overlay0 = "#6c7086"
surface2 = "#585b70"
surface1 = "#45475a"
surface0 = "#313244"
base = "#1e1e2e"
mantle = "#181825"
crust = "#11111b"

View File

@ -0,0 +1,9 @@
[Unit]
Description=Daily sync_to_remotes.py
[Service]
Type=oneshot
ExecStart=/home/jas/repos/codeberg.org/hyperreal/admin-scripts/sync_to_remotes.py
[Install]
WantedBy=default.target

View File

@ -0,0 +1,10 @@
[Unit]
Description=Daily sync_to_remotes.py
DefaultDependencies=yes
[Timer]
OnCalendar=*-*-* 00:00:00
Persistent=true
[Install]
WantedBy=timers.target

View File

@ -0,0 +1 @@
/home/jas/.config/systemd/user/sync_to_remotes.timer

View File

@ -1,328 +1,19 @@
// If you'd like to override the default keybindings completely, be sure to change "keybinds" to "keybinds clear-defaults=true" copy_clipboard "system"
keybinds { copy_command "wl-copy"
normal { copy_on_select true
// uncomment this and adjust key if using copy_on_select=false theme "catppuccin-mocha"
// bind "Alt c" { Copy; }
}
locked {
bind "Ctrl g" { SwitchToMode "Normal"; }
}
resize {
bind "Ctrl n" { SwitchToMode "Normal"; }
bind "h" "Left" { Resize "Increase Left"; }
bind "j" "Down" { Resize "Increase Down"; }
bind "k" "Up" { Resize "Increase Up"; }
bind "l" "Right" { Resize "Increase Right"; }
bind "H" { Resize "Decrease Left"; }
bind "J" { Resize "Decrease Down"; }
bind "K" { Resize "Decrease Up"; }
bind "L" { Resize "Decrease Right"; }
bind "=" "+" { Resize "Increase"; }
bind "-" { Resize "Decrease"; }
}
pane {
bind "Ctrl p" { SwitchToMode "Normal"; }
bind "h" "Left" { MoveFocus "Left"; }
bind "l" "Right" { MoveFocus "Right"; }
bind "j" "Down" { MoveFocus "Down"; }
bind "k" "Up" { MoveFocus "Up"; }
bind "p" { SwitchFocus; }
bind "n" { NewPane; SwitchToMode "Normal"; }
bind "d" { NewPane "Down"; SwitchToMode "Normal"; }
bind "r" { NewPane "Right"; SwitchToMode "Normal"; }
bind "x" { CloseFocus; SwitchToMode "Normal"; }
bind "f" { ToggleFocusFullscreen; SwitchToMode "Normal"; }
bind "z" { TogglePaneFrames; SwitchToMode "Normal"; }
bind "w" { ToggleFloatingPanes; SwitchToMode "Normal"; }
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0;}
}
move {
bind "Ctrl h" { SwitchToMode "Normal"; }
bind "n" "Tab" { MovePane; }
bind "h" "Left" { MovePane "Left"; }
bind "j" "Down" { MovePane "Down"; }
bind "k" "Up" { MovePane "Up"; }
bind "l" "Right" { MovePane "Right"; }
}
tab {
bind "Ctrl t" { SwitchToMode "Normal"; }
bind "r" { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "h" "Left" "Up" "k" { GoToPreviousTab; }
bind "l" "Right" "Down" "j" { GoToNextTab; }
bind "n" { NewTab; SwitchToMode "Normal"; }
bind "x" { CloseTab; SwitchToMode "Normal"; }
bind "s" { ToggleActiveSyncTab; SwitchToMode "Normal"; }
bind "1" { GoToTab 1; SwitchToMode "Normal"; }
bind "2" { GoToTab 2; SwitchToMode "Normal"; }
bind "3" { GoToTab 3; SwitchToMode "Normal"; }
bind "4" { GoToTab 4; SwitchToMode "Normal"; }
bind "5" { GoToTab 5; SwitchToMode "Normal"; }
bind "6" { GoToTab 6; SwitchToMode "Normal"; }
bind "7" { GoToTab 7; SwitchToMode "Normal"; }
bind "8" { GoToTab 8; SwitchToMode "Normal"; }
bind "9" { GoToTab 9; SwitchToMode "Normal"; }
bind "Tab" { ToggleTab; }
}
scroll {
bind "Ctrl s" { SwitchToMode "Normal"; }
bind "e" { EditScrollback; SwitchToMode "Normal"; }
bind "s" { SwitchToMode "EnterSearch"; SearchInput 0; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "Normal"; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
// uncomment this and adjust key if using copy_on_select=false
// bind "Alt c" { Copy; }
}
search {
bind "Ctrl s" { SwitchToMode "Normal"; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "Normal"; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
bind "n" { Search "down"; }
bind "p" { Search "up"; }
bind "c" { SearchToggleOption "CaseSensitivity"; }
bind "w" { SearchToggleOption "Wrap"; }
bind "o" { SearchToggleOption "WholeWord"; }
}
entersearch {
bind "Ctrl c" "Esc" { SwitchToMode "Scroll"; }
bind "Enter" { SwitchToMode "Search"; }
}
renametab {
bind "Ctrl c" { SwitchToMode "Normal"; }
bind "Esc" { UndoRenameTab; SwitchToMode "Tab"; }
}
renamepane {
bind "Ctrl c" { SwitchToMode "Normal"; }
bind "Esc" { UndoRenamePane; SwitchToMode "Pane"; }
}
session {
bind "Ctrl o" { SwitchToMode "Normal"; }
bind "Ctrl s" { SwitchToMode "Scroll"; }
bind "d" { Detach; }
}
tmux {
bind "[" { SwitchToMode "Scroll"; }
bind "Ctrl b" { Write 2; SwitchToMode "Normal"; }
bind "\"" { NewPane "Down"; SwitchToMode "Normal"; }
bind "%" { NewPane "Right"; SwitchToMode "Normal"; }
bind "z" { ToggleFocusFullscreen; SwitchToMode "Normal"; }
bind "c" { NewTab; SwitchToMode "Normal"; }
bind "," { SwitchToMode "RenameTab"; }
bind "p" { GoToPreviousTab; SwitchToMode "Normal"; }
bind "n" { GoToNextTab; SwitchToMode "Normal"; }
bind "Left" { MoveFocus "Left"; SwitchToMode "Normal"; }
bind "Right" { MoveFocus "Right"; SwitchToMode "Normal"; }
bind "Down" { MoveFocus "Down"; SwitchToMode "Normal"; }
bind "Up" { MoveFocus "Up"; SwitchToMode "Normal"; }
bind "h" { MoveFocus "Left"; SwitchToMode "Normal"; }
bind "l" { MoveFocus "Right"; SwitchToMode "Normal"; }
bind "j" { MoveFocus "Down"; SwitchToMode "Normal"; }
bind "k" { MoveFocus "Up"; SwitchToMode "Normal"; }
bind "o" { FocusNextPane; }
bind "d" { Detach; }
}
shared_except "locked" {
bind "Ctrl g" { SwitchToMode "Locked"; }
bind "Ctrl q" { Quit; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
}
shared_except "normal" "locked" {
bind "Enter" "Esc" { SwitchToMode "Normal"; }
}
shared_except "pane" "locked" {
bind "Ctrl p" { SwitchToMode "Pane"; }
}
shared_except "resize" "locked" {
bind "Ctrl n" { SwitchToMode "Resize"; }
}
shared_except "scroll" "locked" {
bind "Ctrl s" { SwitchToMode "Scroll"; }
}
shared_except "session" "locked" {
bind "Ctrl o" { SwitchToMode "Session"; }
}
shared_except "tab" "locked" {
bind "Ctrl t" { SwitchToMode "Tab"; }
}
shared_except "move" "locked" {
bind "Ctrl h" { SwitchToMode "Move"; }
}
shared_except "tmux" "locked" {
bind "Ctrl b" { SwitchToMode "Tmux"; }
}
}
plugins {
tab-bar { path "tab-bar"; }
status-bar { path "status-bar"; }
strider { path "strider"; }
// compact-bar { path "compact-bar"; }
}
// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
// eg. when terminal window with an active zellij session is closed
// Options:
// - detach (Default)
// - quit
//
// on_force_close "quit"
// Send a request for a simplified ui (without arrow fonts) to plugins
// Options:
// - true
// - false (Default)
//
// simplified_ui true
// Choose the path to the default shell that zellij will use for opening new panes
// Default: $SHELL
//
// default_shell "fish"
// Toggle between having pane frames around the panes
// Options:
// - true (default)
// - false
//
// pane_frames true
// Define color themes for Zellij
// For more examples, see: https://github.com/zellij-org/zellij/tree/main/example/themes
// Once these themes are defined, one of them should to be selected in the "theme" section of this file
//
// themes {
// dracula {
// fg 248 248 242
// bg 40 42 54
// red 255 85 85
// green 80 250 123
// yellow 241 250 140
// blue 98 114 164
// magenta 255 121 198
// orange 255 184 108
// cyan 139 233 253
// black 0 0 0
// white 255 255 255
// }
// }
themes { themes {
catppuccin-mocha { catppuccin-mocha {
bg "#585b70" bg "#585b70"
fg "#cdd6f4" black "#181825"
red "#f38ba8"
green "#a6e3a1"
blue "#89b4fa" blue "#89b4fa"
yellow "#f9e2af" cyan "#89dceb"
fg "#cdd6f4"
green "#a6e3a1"
magenta "#f5c2e7" magenta "#f5c2e7"
orange "#fab387" orange "#fab387"
cyan "#89dceb" red "#f38ba8"
black "#181825"
white "#cdd6f4" white "#cdd6f4"
} yellow "#f9e2af"
rose-pine {
bg "#191724"
fg "#e0def4"
red "#eb6f92"
green "#31748f"
blue "#9ccfd8"
yellow "#f6c177"
magenta "#c4a7e7"
orange "#fe640b"
cyan "#ebbcba"
black "#26233a"
white "#e0def4"
} }
} }
// Choose the theme that is specified in the themes section.
// Default: default
//
theme "catppuccin-mocha"
// The name of the default layout to load on startup
// Default: "default"
//
default_layout "default"
// Choose the mode that zellij uses when starting up.
// Default: normal
//
// default_mode "locked"
// Toggle enabling the mouse mode.
// On certain configurations, or terminals this could
// potentially interfere with copying text.
// Options:
// - true (default)
// - false
//
// mouse_mode false
// Configure the scroll back buffer size
// This is the number of lines zellij stores for each pane in the scroll back
// buffer. Excess number of lines are discarded in a FIFO fashion.
// Valid values: positive integers
// Default value: 10000
//
// scroll_buffer_size 10000
// Provide a command to execute when copying text. The text will be piped to
// the stdin of the program to perform the copy. This can be used with
// terminal emulators which do not support the OSC 52 ANSI control sequence
// that will be used by default if this option is not set.
// Examples:
//
//copy_command "xclip -selection clipboard" // x11
copy_command "wl-copy" // wayland
// copy_command "pbcopy" // osx
// Choose the destination for copied text
// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
// Does not apply when using copy_command.
// Options:
// - system (default)
// - primary
//
copy_clipboard "system"
// Enable or disable automatic copy (and clear) of selection when releasing mouse
// Default: true
//
copy_on_select true
// Path to the default editor to use to edit pane scrollbuffer
// Default: $EDITOR or $VISUAL
//
scrollback_editor "/bin/emacs -nw"
// When attaching to an existing session with other users,
// should the session be mirrored (true)
// or should each user have their own cursor (false)
// Default: false
//
// mirror_session true
// The folder in which Zellij will look for layouts
//
layout_dir "/home/jas/.config/zellij/layouts"
// The folder in which Zellij will look for themes
//
// theme_dir "/path/to/my/theme_dir"

296
doom/.doom.d/config.el Normal file
View File

@ -0,0 +1,296 @@
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
;;;; Misc settings
;; start Emacs as a server process
(server-start)
(setq doom-user-dir "~/.doom.d/")
;; package-archives
(setq package-archives
'(("gnu" . "https://elpa.gnu.org/packages/")
("melpa" . "https://melpa.org/packages/")))
(after! projectile
(setq projectile-project-root-files-bottom-up
(remove ".git" projectile-project-root-files-bottom-up)))
;; Set fonts
(setq fontsize 18)
(setq monofontfam "JetBrainsMono Nerd Font Mono")
(setq doom-font (font-spec :family monofontfam :size fontsize)
doom-variable-pitch-font (font-spec :family monofontfam :size fontsize)
doom-symbol-font (font-spec :family monofontfam :size fontsize)
doom-big-font (font-spec :family monofontfam :size fontsize))
;; Use catppuccin-mocha theme
(setq doom-theme 'catppuccin)
(setq catppuccin-flavor 'mocha)
;; History
(setq savehist-file "~/.local/share/emacs/savehist")
(savehist-mode 1)
(setq history-length t)
(setq history-delete-duplicates t)
(setq savehist-save-minibuffer-history 1)
(setq savehist-additional-variables
'(kill-ring
search-ring
regexp-search-ring))
;; Display time in the modeline
(display-time-mode 1)
;; Enable blink cursor
(blink-cursor-mode 1)
;; Sentences end with a single space because it's right and proper
(setq sentence-end-double-space nil)
;; This determines the style of line numbers in effect. If set to `nil', line
;; numbers are disabled. For relative line numbers, set this to `relative'.
(setq display-line-numbers-type 'relative)
;; Keybinding to kill-whole-line
(global-set-key (kbd "M-9") 'kill-whole-line)
;; trim newline from string output
(defun string-trim-final-newline (string)
"Trim the last newline character from string.
Used with `shell-command-to-string'.
Source: https://emacs.stackexchange.com/a/21906"
(let ((len (length string)))
(cond
((and (> len 0) (eql (aref string (- len 1)) ?\n))
(substring string 0 (- len 1)))
(t string))))
;; wrapper around `shell-command-to-string' to remove newline
(defun shell-command-output-string (command)
(string-trim-final-newline (shell-command-to-string command)))
;; Copy all or text selection
(defun xah-copy-all-or-region ()
"Put the whole buffer content to `kill-ring', or text selection if there's one.
Respects `narrow-to-region'.
URL `https://ergomacs.org/emacs/emacs_copy_cut_all_or_region.html'
Version 2015-08-22"
(interactive)
(if (use-region-p)
(progn
(kill-new (buffer-substring (region-beginning) (region-end)))
(message "Text selection copied."))
(progn
(kill-new (buffer-string))
(message "Buffer content copied."))))
;; Cut all or text selection
(defun xah-cut-all-or-region ()
"Cut the whole buffer content to `kill-ring', or text selection if there's one.
Respects `narrow-to-region'.
URL `https://ergomacs.org/emacs/emacs_copy_cut_all_or_region.html'
Version 2015-08-22"
(interactive)
(if (use-region-p)
(progn
(kill-new (buffer-substring (region-beginning) (region-end)))
(delete-region (region-beginning) (region-end)))
(progn
(kill-new (buffer-string))
(delete-region (point-min) (point-max)))))
;; open URL in Firefox/LibreWolf
(defun browse-host-web (url)
"Browse URL with Firefox/LibreWolf/IceCat"
(interactive "sURL: ")
(shell-command (concat "librewolf" url)))
(setq browse-url-browser-function 'browse-host-web)
;; after copy Ctrl+c in Linux X11, you can paste by `yank' in emacs
(setq select-enable-clipboard t)
;; after mouse selection copy in X11, you can paste by `yank' in emacs
(setq select-enable-primary t)
;; set keybinding for paste
(global-set-key (kbd "C-S-V") #'clipboard-yank)
;; Smart home key
(defun smart-beginning-of-line ()
"Move point to first non-whitespace character or beginning-of-line.
Move point to the first non-whitespace character on this line.
If point was already at that position, move point to beginning of line."
(interactive "^")
(let ((oldpos (point)))
(back-to-indentation)
(and (= oldpos (point))
(beginning-of-line))))
(global-set-key (kbd "<home>") 'smart-beginning-of-line)
(global-set-key (kbd "<end>") 'end-of-line)
;; Autoformat on save
(setq +format-on-save-enabled-modes
'(emacs-lisp-mode))
;; UTF-8
(prefer-coding-system 'utf-8)
(when (display-graphic-p)
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)))
;;;; undo-tree-mode - visualize undos and branches
(global-undo-tree-mode)
(setq undo-tree-visualizer-timestamps t)
(setq undo-tree-visualizer-diff t)
(setq undo-tree-history-directory-alist '(("." . "~/.local/share/emacs/backups/undo-tree")))
;;;; evil-nerd-commenter
(global-set-key (kbd "M-;") 'evilnc-comment-or-uncomment-lines)
(global-set-key (kbd "C-c l") 'evilnc-quick-comment-or-uncomment-to-the-line)
(global-set-key (kbd "C-c c") 'evilnc-copy-and-comment-lines)
(global-set-key (kbd "C-c p") 'evilnc-comment-or-uncomment-paragraphs)
;;;; org-mode
(add-hook 'org-mode-hook (lambda () (org-superstar-mode 1)))
(require 'org-protocol)
(setq org-modules '(org-agenda
org-choose
org-collector
))
(eval-after-load 'org
'(org-load-modules-maybe t))
(setq org-directory "~/org/")
(setq org-default-notes-file "~/org/inbox.org")
(setq org-agenda-files '("~/org/inbox.org"))
;; support selecting lines by using shift
(setq org-support-shift-select t)
;; org-mode tags
;; I hardly use these but whatever
(setq org-tag-alist (quote (("@archiving" .?a)
("@blog" .?b)
("@homelab" . ?l)
("@hyperreal.coffee" .?h)
("@nirn.quest" .?n)
("@reading" . ?r)
("@selfcare" . ?s))))
;; org-mode keybindings
(with-eval-after-load 'org
(bind-key "C-c $" 'org-archive-subtree)
(bind-key "C-c r" 'org-capture)
(bind-key "C-c R" 'org-roam-capture)
(bind-key "C-c a" 'org-agenda)
(bind-key "C-c l" 'org-store-link)
(bind-key "C-c L" 'org-insert-link-global)
(bind-key "C-c O" 'org-open-at-point-global))
(setq org-use-effective-time t)
;; org-refile
(setq org-reverse-note-order nil) ; new notes prepended
(setq org-refile-use-outline-path 'full-file-path)
(setq org-outline-path-complete-in-steps nil)
(setq org-refile-allow-creating-parent-nodes nil)
(setq org-refile-use-cache nil)
(setq org-blank-before-new-entry '((heading . t) (plain-list-item . t)))
(setq org-refile-targets
`((("~/org/inbox.org"
"~/org/computing.org"
"~/org/todos.org")
. (:maxlevel . 5))))
;; org-todo-keywords
(with-eval-after-load 'org
(setq org-todo-keywords
'((sequence
"STARTED(s)"
"TODO(t)"
"WAITING(w@/!)"
"IDEA(i)"
"SOMEDAY(.)"
"BLOCKED(k@/!)"
"|"
"DONE(x!)"
"CANCELLED(c)")
(sequence "PROJECT" "|" "DONE(x)")
(sequence "MAYBE(,0)" "CHOSEN(c,+)" "|" "REJECTED")))
;; catppuccin palette
(setq org-todo-keyword-faces
'(("STARTED" . (:foreground "#a6d189" :weight bold))
("TODO" . (:foreground "#a6e3a1" :weight bold))
("WAITING" . (:foreground "#f9e2af" :weight bold))
("IDEA" . (:foreground "#74c7ec" :weight bold))
("SOMEDAY" . (:foreground "#f2cdcd" :weight bold))
("BLOCKED" . (:foreground "#c6d0f5" :weight bold))
("DONE" . (:foreground "#f38ba8" :weight bold))
("CANCELLED" . (:foreground "#e78284" :weight bold))
("MAYBE" . (:foreground "#c6d0f5" :weight bold))
("CHOSEN" . (:foreground "#89b4fa" :weight bold))
("REJECTED" . (:foreground "#d20f39" :weight bold)))))
(setq org-log-done 'time)
;; ox-hugo
(with-eval-after-load 'ox
(require 'ox-hugo))
;; colorize compilation buffer
;; from https://sachachua.com/dotemacs/index.html#orga33bac5
(require 'ansi-color)
(defun colorize-compilation-buffer ()
(when (eq major-mode 'compilation-mode)
(let ((inhibit-read-only t))
(ansi-color-apply-on-region compilation-filter-start (point-max)))))
(add-hook 'compilation-filter-hook 'colorize-compilation-buffer)
;;;; helpful
(global-set-key (kbd "C-h f") #'helpful-callable)
(global-set-key (kbd "C-h v") #'helpful-variable)
(global-set-key (kbd "C-h k") #'helpful-key)
(global-set-key (kbd "C-h x") #'helpful-command)
(global-set-key (kbd "C-c C-d") #'helpful-at-point)
;;;; dictionary
(global-set-key (kbd "C-c l") #'dictionary-lookup-definition)
(setq dictionary-server "dict.org")
;;;; dired
(map! :after dired
:map dired-mode-map
"C-o" #'casual-dired-tmenu)
;;;; elpher
(setq elpher-default-url-type "gemini")
;;;; vterm
(setq vterm-kill-buffer-on-exit t)
(setq vterm-always-compile-module t)
(setq vterm-other-window t)
(setq vterm-buffer-name-string "vterm %s")
(setq vterm-copy-exclude-prompt t)
(setq vterm-ignore-blink-cursor nil)

191
doom/.doom.d/init.el Normal file
View File

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

27
doom/.doom.d/packages.el Normal file
View File

@ -0,0 +1,27 @@
;; -*- no-byte-compile: t; -*-
;;; $DOOMDIR/packages.el
;; To install a package with Doom you must declare them here and run 'doom sync'
;; on the command line, then restart Emacs for the changes to take effect -- or
;; use 'M-x doom/reload'.
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
;(package! some-package)
(package! apheleia)
(package! autothemer)
(package! casual-dired)
(package! catppuccin-theme)
(package! dockerfile-mode)
(package! elpher)
(package! evil-nerd-commenter)
(package! gemini :recipe
(:host nil :repo "https://git.carcosa.net/jmcbray/gemini.el"))
(package! helpful)
(package! just-mode)
(package! license-templates)
(package! org-superstar)
(package! ox-hugo)
(package! pdf-tools)
(package! shell-pop)
(package! systemd)
(package! undo-tree)

View File

@ -1,39 +1,47 @@
# justfile for common household tasks # justfile for common household tasks
set shell := ["zsh", "-cu"] set shell := ["zsh", "-cu"]
dotfiles_repo := "/home/jas/repos/codeberg.org/hyperreal/dotfiles"
go-tools: homedir := "/home/jas/"
go install golang.org/x/tools/gpls@latest configdir := "/home/jas/.config/"
go install github.com/fatih/gomodifytags@latest
go install github.com/cweill/gotests/...@latest
go install github.com/x-motemen/gore/cmd/gore@latest
go install golang.org/x/tools/cmd/guru@latest
python-tools:
pipx install --include-deps ansible
pipx install black
pipx install nose
pipx install pytest
pipx install hyfetch
pip install --user pyright
webdev-tools:
sudo npm install -g @catppuccin/inkcat
sudo npm install -g prettier
sudo npm install -g js-beautify
sudo npm install -g stylelint
sudo dnf install -y tidy
rust-tools:
source "${HOME}/.cargo/env"
cargo install cargo-binstall
cargo_pkgs=(arp-scan bandwhich bat diskonaut du-dust fblog fd hyperfine procs ripgrep skim vivid wthrr)
for pkg in "${cargo_pkgs[@]}"; do cargo-binstall -y "$pkg"; done
refresh-doom-emacs: refresh-doom-emacs:
rm -rf "${HOME}/.config/emacs" rm -rf {{configdir}}/emacs
git clone --depth 1 https://github.com/doomemacs/doomemacs "${HOME}/.config/emacs" git clone --depth 1 https://github.com/doomemacs/doomemacs {{configdir}}/emacs
"${HOME}/.config/emacs/bin/doom" install --force --verbose {{configdir}}/emacs/bin/doom install --force --verbose
rustup: deploy-dotfiles:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh cp -rfv {{dotfiles_repo}}/just/.justfile {{homedir}}
cp -rfv {{dotfiles_repo}}/doom/.doom.d {{homedir}}
cp -fv {{dotfiles_repo}}/zsh/.zshrc {{homedir}}
cp -rfv {{dotfiles_repo}}/zsh/.zshrc.d {{homedir}}
cp -fv {{dotfiles_repo}}/zsh/.zshenv {{homedir}}
cp -rfv {{dotfiles_repo}}/config/.config/bat {{configdir}}
cp -rfv {{dotfiles_repo}}/config/.config/git {{configdir}}
cp -fv {{dotfiles_repo}}/config/.config/starship.toml {{configdir}}
cp -rfv {{dotfiles_repo}}/config/.config/zellij {{configdir}}
cp -rfv {{dotfiles_repo}}/config/.config/systemd {{configdir}}
save-dotfiles:
cp -fv {{homedir}}/.justfile {{dotfiles_repo}}/just/
cp -rfv {{homedir}}/.doom.d {{dotfiles_repo}}/doom/
cp -fv {{homedir}}/.zshrc {{dotfiles_repo}}/zsh/
cp -rfv {{homedir}}/.zshrc.d {{dotfiles_repo}}/zsh/
cp -fv {{homedir}}/.zshenv {{dotfiles_repo}}/zsh/
cp -rfv {{configdir}}/bat {{dotfiles_repo}}/config/.config/
cp -rfv {{configdir}}/git {{dotfiles_repo}}/config/.config/
cp -fv {{configdir}}/starship.toml {{dotfiles_repo}}/config/.config/
cp -rfv {{configdir}}/zellij {{dotfiles_repo}}/config/.config/
cp -rfv {{configdir}}/systemd {{dotfiles_repo}}/config/.config/
clean-dotfiles:
rm -fv {{homedir}}/.justfile
rm -rfv {{homedir}}/.doom.d
rm -fv {{homedir}}/.zshrc
rm -rfv {{homedir}}/.zshrc.d
rm -fv {{homedir}}/.zshenv
rm -rfv {{configdir}}/bat
rm -rfv {{configdir}}/git
rm -fv {{configdir}}/starship.toml
rm -rfv {{configdir}}/zellij
rm -rfv {{configdir}}/systemd

View File

@ -1,23 +1 @@
# eval "$(starship init zsh)"
# Generic .zshenv file for zsh
#
# .zshenv is sourced on ALL invocations of the shell, unless the -f option is
# set. It should NOT normally contain commands to set the command search path,
# or other common environment variables unless you really know what you're
# doing. E.g. running "PATH=/custom/path gdb program" sources this file (when
# gdb runs the program via $SHELL), so you want to be sure not to override a
# custom environment in such cases. Note also that .zshenv should not contain
# commands that produce output or assume the shell is attached to a tty.
#
# Some people insist on setting their PATH here to affect things like ssh.
# Those that do should probably use $SHLVL to ensure that this only happens
# the first time the shell is started (to avoid overriding a customized
# environment). Also, the various profile/rc/login files all get sourced
# *after* this file, so they will override this value. One solution is to
# put your path-setting code into a file named .zpath, and source it from
# both here (if we're not a login shell) and from the .zprofile file (which
# is only sourced if we are a login shell).
if [[ $SHLVL == 1 ]]; then
source ~/.zpath
fi

View File

@ -5,51 +5,14 @@
# #
# Zsh Manual - https://zsh-manual.netlify.app # Zsh Manual - https://zsh-manual.netlify.app
# Zsh Guide - https://zsh-guide.netlify.app # Zsh Guide - https://zsh-guide.netlify.app
#
# ,----[ man -k zsh ]
# |
# | zsh (1) - the Z shell
# | zshall (1) - the Z shell meta-man page
# | zshbuiltins (1) - zsh builtin commands
# | zshcalsys (1) - zsh calendar system
# | zshcompctl (1) - zsh programmable completion
# | zshcompsys (1) - zsh completion system
# | zshcompwid (1) - zsh completion widgets
# | zshcontrib (1) - user contributions to zsh
# | zshexpn (1) - zsh expansion and substitution
# | zshmisc (1) - everything and then some
# | zshmodules (1) - zsh loadable modules
# | zshoptions (1) - zsh options
# | zshparam (1) - zsh parameters
# | zshroadmap (1) - informal introduction to the zsh manual
# | zshtcpsys (1) - zsh tcp system
# | zshzftpsys (1) - zftp function front-end
# | zshzle (1) - zsh command line editor
# `----
#
# Zsh startup sequence
# 1) /etc/zshenv -> Always run for every zsh. (login + interactive + other)
# 2) ~/.zshenv -> Usually run for every zsh. (login + interactive + other)
# 3) /etc/zprofile -> Run for login shells. (login)
# 4) ~/.zprofile -> Run for login shells. (login)
# 5) /etc/zshrc -> Run for interactive shells. (login + interactive)
# 6) ~/.zshrc -> Run for interactive shells. (login + interactive)
# 7) /etc/zlogin -> Run for login shells. (login)
# 8) ~/.zlogin -> Run for login shells. (login)
#
# This file is based on Christian Schneider's zsh configuration
# https://www.strcat.de/dotfiles
# Load Homebrew
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
# Plugins # Plugins
if ! test -f ~/.zplug/init.zsh; then if ! test -f "${HOME}/.zplug/init.zsh"; then
export ZPLUG_HOME=~/.zplug export ZPLUG_HOME="${HOME}/.zplug"
git clone https://github.com/zplug/zplug $ZPLUG_HOME git clone https://github.com/zplug/zplug $ZPLUG_HOME
fi fi
source ~/.zplug/init.zsh source "${HOME}/.zplug/init.zsh"
# Use autosuggestions when typing commands # Use autosuggestions when typing commands
zplug "zsh-users/zsh-autosuggestions" zplug "zsh-users/zsh-autosuggestions"
@ -70,7 +33,7 @@ zplug "plugins/extract", from:oh-my-zsh
zplug "plugins/systemd", from:oh-my-zsh zplug "plugins/systemd", from:oh-my-zsh
# Load file from ~/.zshrc.d # Load file from ~/.zshrc.d
zplug "~/.zshrc.d", from:local, use:'*' zplug "${HOME}/.zshrc.d", from:local, use:'*'
if ! zplug check; then if ! zplug check; then
zplug install; zplug install;
@ -82,18 +45,18 @@ zplug load
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# ENVIRONMENT VARS # ENVIRONMENT VARS
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
export SHELL=/usr/bin/zsh export PATH="${HOME}/.config/emacs/bin:${PATH}"
export DOOMDIR="${HOME}/nextcloud/doom" export PAGER="less -FRX"
export LS_COLORS=$(vivid generate catppuccin-mocha)
export PAGER="less -X"
export MANWIDTH="88" export MANWIDTH="88"
export MANROFFOPT="-c" export MANROFFOPT="-c"
export MANPAGER="less -X" export MANPAGER="less -FRX"
export BAT_PAGER="less -FRX"
export BAT_STYLE="plain"
if test -x "$(command -v emacs)"; then if test -x "$(command -v emacs)"; then
EDITOR="emacs" EDITOR="emacsclient"
else else
EDITOR="nvim" EDITOR="vim"
fi fi
export EDITOR export EDITOR
@ -108,23 +71,6 @@ export LESS_TERMCAP_se=$'\e[0m' # reset reverse video
export LESS_TERMCAP_ue=$'\e[0m' # reset underline export LESS_TERMCAP_ue=$'\e[0m' # reset underline
export GROFF_NO_SGR=1 # for konsole and gnome-terminal export GROFF_NO_SGR=1 # for konsole and gnome-terminal
# Format of process time reports with 'time'
# %% A '%'
# %U CPU seconds spent in user mode
# %S CPU seconds spent in kernel mode
# %E Elapsed time in seconds
# %P CPU percentage, computed as (%U+%S)/%E
# %J The name of this job
# Default is:
# %E real %U user %S system %P %J
TIMEFMT="\
The name of this job : %J
CPU seconds spent in user mode : %U
CPU seconds spent in kernel mode : %S
Elapsed time in seconds : %E
CPU percentage : %P"
# HISTSIZE is the number of lines of history that is kept within any given # HISTSIZE is the number of lines of history that is kept within any given
# running zsh instance. SAVEHIST is the number of lines of history that is # running zsh instance. SAVEHIST is the number of lines of history that is
# written out to the HISTFILE when that event occurs. If you use the # written out to the HISTFILE when that event occurs. If you use the
@ -135,12 +81,7 @@ HISTSIZE=100000
SAVEHIST=65536 SAVEHIST=65536
# Name of the file used to store command history # Name of the file used to store command history
HISTFILE=~/.zsh_history HISTFILE="${HOME}/.zsh_history"
# If nonnegative, commands whose combined user and system execution times
# (measured in seconds) are greater than this value have timing stats printed
# for them.
REPORTTIME=10
# Language # Language
export LANG="en_US.UTF-8" export LANG="en_US.UTF-8"
@ -148,12 +89,11 @@ export LANG="en_US.UTF-8"
# Manpages # Manpages
export MANPATH="${MANPATH:-/usr/share/man:/usr/local/share/man}" export MANPATH="${MANPATH:-/usr/share/man:/usr/local/share/man}"
if [ -d "${HOME}/.fzf/man" ]; then # Add ~/.local/bin to PATH
export MANPATH="${MANPATH}:${HOME}/.fzf/man" export PATH="${HOME}/.local/bin:${PATH}"
fi
# Bat theme # Add ~/bin to PATH
export BAT_THEME="Catppuccin Mocha" export PATH="${HOME}/bin:${PATH}"
# Automatically remove duplicates from these arrays # Automatically remove duplicates from these arrays
typeset -gU path cdpath manpath fpath typeset -gU path cdpath manpath fpath
@ -162,5 +102,12 @@ typeset -gU path cdpath manpath fpath
autoload -U add-zsh-hook autoload -U add-zsh-hook
add-zsh-hook -Uz chpwd() { print -Pn "\e]2;%m:%2~\a" } add-zsh-hook -Uz chpwd() { print -Pn "\e]2;%m:%2~\a" }
# starship.rs # direnv
eval "$(starship init zsh)" eval "$(direnv hook zsh)"
# Ensure always loading the latest version of the emacs-vterm-zsh.sh file
if [[ "$INSIDE_EMACS" = 'vterm' ]] \
&& [[ -n ${EMACS_VTERM_PATH} ]] \
&& [[ -f ${EMACS_VTERM_PATH}/etc/emacs-vterm-zsh.sh ]]; then
source ${EMACS_VTERM_PATH}/etc/emacs-vterm-zsh.sh
fi

View File

@ -1,9 +1,3 @@
# Get top 10 shell commands
alias top10='print -l ${(o)history%% *} | uniq -c | sort -nr | head -n 10'
# history mechanism
alias h='history'
# Aliases for APT # Aliases for APT
if [ -e "/etc/debian_version" ]; then if [ -e "/etc/debian_version" ]; then
alias acs="sudo apt-cache search" alias acs="sudo apt-cache search"
@ -36,33 +30,22 @@ if [ -e "/etc/redhat-release" ]; then
alias dnfu='sudo dnf update' alias dnfu='sudo dnf update'
fi fi
# Convert UPPER to lower (or back)
alias UP2low='for i in *(.); mv $i ${i:l}'
alias low2UP='for i in *(.); mv $i ${i:u}'
# The ls family # The ls family
if test -x "$(command -v lsd)"; then if test -x "$(command -v lsd)"; then
alias ls='lsd' alias ls='lsd'
alias la='lsd -a'
alias ll='lsd -l'
alias lal='lsd -al'
else else
alias ls='ls --color=auto' alias ls='ls --color=auto'
fi
alias l='ls -lFhg'
alias la='ls -a' alias la='ls -a'
alias ll='ls -l' alias ll='ls -l'
alias lal='ls -al' alias lal='ls -al'
alias ldot='ls -gld .*'
alias lse='ls -lZ'
# greps
alias grep='grep --color'
alias sgrep='grep -R -n -H -C 5 --exclude-dir={.git,.svn,CVS}'
# Copy SSH public key to clipboard (requires xclip or xsel)
if test -x "$(command -v xclip)"; then
alias pubkey='printf "$(cat ~/.ssh/id_ed25519.pub)" | xclip -selection clipboard | echo "SSH public key copied"'
fi fi
# grep
alias grep='grep --color'
# Prompt user before overwriting files # Prompt user before overwriting files
alias cp='cp -i' alias cp='cp -i'
alias mv='mv -i' alias mv='mv -i'
@ -76,10 +59,10 @@ alias zfun='functions | bat -l zsh'
alias -g H='| head' alias -g H='| head'
alias -g T='| tail' alias -g T='| tail'
alias -g G='| grep' alias -g G='| grep'
alias -g L='| less -X' alias -g L='| less -FRX'
alias -g B='| bat' alias -g B='| bat'
alias -g J='| jq' alias -g J='| jq'
alias -g CC='| xclip -selection clipboard' alias -g CC='| wl-copy'
alias -g C='| wc -l' alias -g C='| wc -l'
# Get public IP address # Get public IP address
@ -110,10 +93,6 @@ alias lsocku='sudo lsof -nP | grep UDP'
# List TCP sockets in use # List TCP sockets in use
alias lsockt='sudo lsof -nP | grep TCP' alias lsockt='sudo lsof -nP | grep TCP'
# Reboot / Poweroff
alias rbt='sudo systemctl reboot'
alias shut='sudo systemctl poweroff'
# firewalld # firewalld
if test -x "$(command -v firewall-cmd)"; then if test -x "$(command -v firewall-cmd)"; then
alias fw='sudo firewall-cmd' alias fw='sudo firewall-cmd'
@ -134,12 +113,3 @@ alias grbi='git rebase -i'
alias grm='git rm' alias grm='git rm'
alias grv='git remote -v' alias grv='git remote -v'
alias gst='git status' alias gst='git status'
# doom emacs
alias doomdoc="~/.config/emacs/bin/doom doctor"
alias dsync="~/.config/emacs/bin/doom sync"
alias dclean="~/.config/emacs/bin/doom clean"
alias dcomp="~/.config/emacs/bin/doom compile"
alias dpurge="~/.config/emacs/bin/doom purge"
alias denv="~/.config/emacs/bin/doom env"
alias dupgrade="~/.config/emacs/bin/doom upgrade"

View File

@ -27,9 +27,9 @@ if test -x "$(command -v gumssh)"; then
bindkey -s '^[s' 'gumssh^M' bindkey -s '^[s' 'gumssh^M'
fi fi
## ranger ## yazi
if test -x "$(command -v ranger)"; then if test -x "$(command -v yazi)"; then
bindkey -s '^[f' 'ranger^M' bindkey -s '^[f' 'yazi^M'
fi fi
## history substring search ## history substring search

View File

@ -58,12 +58,18 @@ function rmknownhosts() {
} }
# Empty trash # Empty trash
function rubbish() { function trsh() {
if check_cmd trash-empty; then if check_cmd trash-empty; then
trash-empty -f -v trash-empty -f
fi fi
} }
# Copy SSH public key to clipboard (requires wl-copy)
function pubkey() {
cat "${HOME}/.ssh/id_ed25519.pub" | tr -d '\n' | wl-copy
echo "--> SSH public key copied to clipboard"
}
# Compatibility with emacs-libvterm # Compatibility with emacs-libvterm
function vterm_printf() { function vterm_printf() {
if [ -n "$TMUX" ] && ([ "${TERM%%-*}" = "tmux" ] || [ "${TERM%%-*}" = "screen" ]); then if [ -n "$TMUX" ] && ([ "${TERM%%-*}" = "tmux" ] || [ "${TERM%%-*}" = "screen" ]); then
@ -77,12 +83,12 @@ function vterm_printf() {
fi fi
} }
# Remove all .jpeg .jpg .png .svg files from downloads # Remove all .jpeg .jpg .png .svg .webp files from downloads
function rmpics() { function rmpics() {
find "${HOME}/downloads" \ find "${HOME}/downloads" \
-maxdepth 1 \ -maxdepth 1 \
-type f \ -type f \
\( -name "*.jpg" -o -name "*.jpg_original" -o -name "*.jpeg" -o -name "*.svg" -o -name "*.png" \) \ \( -name "*.jpg" -o -name "*.jpg_original" -o -name "*.jpeg" -o -name "*.svg" -o -name "*.png" -o -name "*.webp" \) \
-delete -delete
} }
@ -117,6 +123,8 @@ function mark() {
"${mark_to_add} added to shellmarks file" "${mark_to_add} added to shellmarks file"
fi fi
cat "${HOME}/.shellmarks" | sort | tee "${HOME}/.shellmarks" >/dev/null
return 0 return 0
} }
@ -177,13 +185,13 @@ function dstack() {
# Print timestamp as %Y-%m-%d %H:%M:%S. # Print timestamp as %Y-%m-%d %H:%M:%S.
function tstamp() { function tstamp() {
emulate -L zsh emulate -L zsh
date '+%Y-%m-%d %H:%M:%S' date '+%Y-%m-%d %H:%M:%S' | tr -d '\n'
} }
# Print timestamp as %Y-%m-%dT%H:%M:%S%:z # Print timestamp as %Y-%m-%dT%H:%M:%S%:z
function tstampz() { function tstampz() {
emulate -L zsh emulate -L zsh
date '+%Y-%m-%dT%H:%M:%S%:z' date '+%Y-%m-%dT%H:%M:%S%:z' | tr -d '\n'
} }
# Create a /overview/ of all available function()'s; the description for # Create a /overview/ of all available function()'s; the description for
@ -231,3 +239,30 @@ function restart() { exec $SHELL $SHELL_ARGS "$@"; }
# cd to ~, clear screen, and restart zsh. # cd to ~, clear screen, and restart zsh.
function rsrc() { cd && clear && restart; } function rsrc() { cd && clear && restart; }
# Set hostname:pwd for vterm buffer title
autoload -U add-zsh-hook
add-zsh-hook -Uz chpwd() { print -Pn "\e]2;%m:%2~\a" }
# For directory tracking and prompt tracking in Emacs Vterm
function vterm_prompt_end() {
vterm_printf "51;A$(whoami)@$(hostname):$(pwd)"
}
setopt PROMPT_SUBST
PROMPT=$PROMPT'%{$(vterm_prompt_end)%}'
# To read and execute Emacs commands in Vterm
function vterm_cmd() {
local vterm_elisp
vterm_elisp=""
while [ $# -gt 0 ]; do
vterm_elisp="$vterm_elisp""$(printf '"%s" ' "$(printf "%s" "$1" | sed -e 's|\\|\\\\|g' -e 's|"|\\"|g')")"
shift
done
vterm_printf "51;E$vterm_elisp"
}
# find-file in Emacs
function find_file() {
vterm_cmd find-file "$(realpath "${@:-.}")"
}