From 4763b034cd46749605632d5590fb5d68b8ae492b Mon Sep 17 00:00:00 2001 From: Sam Talonborn Date: Sat, 15 Apr 2023 04:45:05 +0000 Subject: [PATCH] Initial commit. --- .config/fish/config.fish | 75 ++++ .config/git/config | 12 + .config/nvim/init.vim | 1 + .config/ranger/rc.conf | 759 +++++++++++++++++++++++++++++++++++ .config/starship/config.toml | 7 + .config/vim/code.vim | 8 + .config/vim/links.vim | 6 + .config/vim/text.vim | 12 + .config/vim/vimrc | 30 ++ .gitignore | 1 + .ssh/config | 7 + bin/dfilter | 28 ++ bin/gmi2html | 144 +++++++ bin/remind | 7 + bin/shp | 15 + bin/shp-mods/LINK | 91 +++++ bin/todo | 21 + 17 files changed, 1224 insertions(+) create mode 100644 .config/fish/config.fish create mode 100644 .config/git/config create mode 100644 .config/nvim/init.vim create mode 100644 .config/ranger/rc.conf create mode 100644 .config/starship/config.toml create mode 100644 .config/vim/code.vim create mode 100644 .config/vim/links.vim create mode 100644 .config/vim/text.vim create mode 100644 .config/vim/vimrc create mode 100644 .gitignore create mode 100644 .ssh/config create mode 100755 bin/dfilter create mode 100755 bin/gmi2html create mode 100755 bin/remind create mode 100755 bin/shp create mode 100755 bin/shp-mods/LINK create mode 100755 bin/todo diff --git a/.config/fish/config.fish b/.config/fish/config.fish new file mode 100644 index 0000000..ffa78e5 --- /dev/null +++ b/.config/fish/config.fish @@ -0,0 +1,75 @@ +set -x PATH "$HOME/bin:$PATH" + + + +if which doas > /dev/null 2>&1 + alias sudo="doas" +else + alias doas="sudo" +end + +if which nvim >/dev/null 2>&1 + alias vim="nvim" + set -x EDITOR nvim +else + alias nvim="vim -u ~/.config/vim/vimrc" + alias vim="vim -u ~/.config/vim/vimrc" + set -x EDITOR "vim -u ~/.config/vim/vimrc" +end + + + +function please + eval doas $history[1] +end + +function pingme + $argv + + tput bel + sleep 0.1 + tput bel + sleep 0.1 + tput bel +end + + + +fish_vi_key_bindings +function fish_mode_prompt; end; funcsave fish_mode_prompt > /dev/null + +set fish_cursor_default block blink +set fish_cursor_insert line blink +set fish_cursor_replace_one underscore blink +set fish_cursor_visual block + +if which starship >/dev/null 2>&1 + export STARSHIP_CONFIG="$HOME/.config/starship/config.toml" + starship init fish | source +end + + + +if status --is-login + echo "" +end + +if status --is-interactive + alias la="ls -a --color=always" + alias ll="ls -l --color=always" + alias ls="ls --color=always" + alias g="git" + + mkdir -p ~/.local + if [ (expr (date '+%s') - (cat "$HOME/.local/last_shell" 2>/dev/null || echo 0)) -gt "28800" ] + timeout 5 git sit && date '+%s' > "$HOME/.local/last_shell" + echo "" + end + + set remind (remind) + if [ ! -z "$remind" ] + echo Reminders: + echo "$remind" + echo "" + end +end diff --git a/.config/git/config b/.config/git/config new file mode 100644 index 0000000..ff3e719 --- /dev/null +++ b/.config/git/config @@ -0,0 +1,12 @@ +[init] + defaultBranch = main +[user] + name = Sam Greytalon + email = sam@oaktal.com +[pull] + rebase = false +[alias] + sit = pull --rebase + flush = "git add -A && git commit -a; git push" + unstage = reset HEAD -- + sync = !git sit && git flush diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim new file mode 100644 index 0000000..3bf3105 --- /dev/null +++ b/.config/nvim/init.vim @@ -0,0 +1 @@ +source ~/.config/vim/vimrc diff --git a/.config/ranger/rc.conf b/.config/ranger/rc.conf new file mode 100644 index 0000000..dcdc33b --- /dev/null +++ b/.config/ranger/rc.conf @@ -0,0 +1,759 @@ +# =================================================================== +# This file contains the default startup commands for ranger. +# To change them, it is recommended to create either /etc/ranger/rc.conf +# (system-wide) or ~/.config/ranger/rc.conf (per user) and add your custom +# commands there. +# +# If you copy this whole file there, you may want to set the environment +# variable RANGER_LOAD_DEFAULT_RC to FALSE to avoid loading it twice. +# +# The purpose of this file is mainly to define keybindings and settings. +# For running more complex python code, please create a plugin in "plugins/" or +# a command in "commands.py". +# +# Each line is a command that will be run before the user interface +# is initialized. As a result, you can not use commands which rely +# on the UI such as :delete or :mark. +# =================================================================== + +# =================================================================== +# == Options +# =================================================================== + +# Which viewmode should be used? Possible values are: +# miller: Use miller columns which show multiple levels of the hierarchy +# multipane: Midnight-commander like multipane view showing all tabs next +# to each other +set viewmode miller +#set viewmode multipane + +# How many columns are there, and what are their relative widths? +set column_ratios 1,3,4 + +# Which files should be hidden? (regular expression) +set hidden_filter ^\.|\.(?:pyc|pyo|bak|swp)$|^lost\+found$|^__(py)?cache__$ + +# Show hidden files? You can toggle this by typing 'zh' +set show_hidden false + +# Ask for a confirmation when running the "delete" command? +# Valid values are "always", "never", "multiple" (default) +# With "multiple", ranger will ask only if you delete multiple files at once. +set confirm_on_delete multiple + +# Use non-default path for file preview script? +# ranger ships with scope.sh, a script that calls external programs (see +# README.md for dependencies) to preview images, archives, etc. +#set preview_script ~/.config/ranger/scope.sh + +# Use the external preview script or display simple plain text or image previews? +set use_preview_script true + +# Automatically count files in the directory, even before entering them? +set automatically_count_files true + +# Open all images in this directory when running certain image viewers +# like feh or sxiv? You can still open selected files by marking them. +set open_all_images true + +# Be aware of version control systems and display information. +set vcs_aware false + +# State of the four backends git, hg, bzr, svn. The possible states are +# disabled, local (only show local info), enabled (show local and remote +# information). +set vcs_backend_git enabled +set vcs_backend_hg disabled +set vcs_backend_bzr disabled +set vcs_backend_svn disabled + +# Truncate the long commit messages to this length when shown in the statusbar. +set vcs_msg_length 50 + +# Use one of the supported image preview protocols +set preview_images true + +# Set the preview image method. Supported methods: +# +# * w3m (default): +# Preview images in full color with the external command "w3mimgpreview"? +# This requires the console web browser "w3m" and a supported terminal. +# It has been successfully tested with "xterm" and "urxvt" without tmux. +# +# * iterm2: +# Preview images in full color using iTerm2 image previews +# (http://iterm2.com/images.html). This requires using iTerm2 compiled +# with image preview support. +# +# This feature relies on the dimensions of the terminal's font. By default, a +# width of 8 and height of 11 are used. To use other values, set the options +# iterm2_font_width and iterm2_font_height to the desired values. +# +# * terminology: +# Previews images in full color in the terminology terminal emulator. +# Supports a wide variety of formats, even vector graphics like svg. +# +# * urxvt: +# Preview images in full color using urxvt image backgrounds. This +# requires using urxvt compiled with pixbuf support. +# +# * urxvt-full: +# The same as urxvt but utilizing not only the preview pane but the +# whole terminal window. +# +# * kitty: +# Preview images in full color using kitty image protocol. +# Requires python PIL or pillow library. +# If ranger does not share the local filesystem with kitty +# the transfer method is changed to encode the whole image; +# while slower, this allows remote previews, +# for example during an ssh session. +# Tmux is unsupported. +# +# * ueberzug: +# Preview images in full color with the external command "ueberzug". +# Images are shown by using a child window. +# Only for users who run X11 in GNU/Linux. +set preview_images_method kitty + +# Delay in seconds before displaying an image with the w3m method. +# Increase it in case of experiencing display corruption. +set w3m_delay 0.02 + +# Manually adjust the w3mimg offset when using a terminal which needs this +set w3m_offset 0 + +# Default iTerm2 font size (see: preview_images_method: iterm2) +set iterm2_font_width 8 +set iterm2_font_height 11 + +# Use a unicode "..." character to mark cut-off filenames? +set unicode_ellipsis false + +# BIDI support - try to properly display file names in RTL languages (Hebrew, Arabic). +# Requires the python-bidi pip package +set bidi_support false + +# Show dotfiles in the bookmark preview box? +set show_hidden_bookmarks true + +# Which colorscheme to use? These colorschemes are available by default: +# default, jungle, snow, solarized +set colorscheme default + +# Preview files on the rightmost column? +# And collapse (shrink) the last column if there is nothing to preview? +set preview_files true +set preview_directories true +set collapse_preview true + +# Wrap long lines in plain text previews? +set wrap_plaintext_previews false + +# Save the console history on exit? +set save_console_history true + +# Draw the status bar on top of the browser window (default: bottom) +set status_bar_on_top false + +# Draw a progress bar in the status bar which displays the average state of all +# currently running tasks which support progress bars? +set draw_progress_bar_in_status_bar true + +# Draw borders around columns? (separators, outline, both, or none) +# Separators are vertical lines between columns. +# Outline draws a box around all the columns. +# Both combines the two. +set draw_borders both + +# Display the directory name in tabs? +set dirname_in_tabs false + +# Enable the mouse support? +set mouse_enabled true + +# Display the file size in the main column or status bar? +set display_size_in_main_column true +set display_size_in_status_bar true + +# Display the free disk space in the status bar? +set display_free_space_in_status_bar true + +# Display files tags in all columns or only in main column? +set display_tags_in_all_columns true + +# Set a title for the window? Updates both `WM_NAME` and `WM_ICON_NAME` +set update_title false + +# Set the tmux/screen window-name to "ranger"? +set update_tmux_title true + +# Shorten the title if it gets long? The number defines how many +# directories are displayed at once, 0 turns off this feature. +set shorten_title 3 + +# Show hostname in titlebar? +set hostname_in_titlebar true + +# Abbreviate $HOME with ~ in the titlebar (first line) of ranger? +set tilde_in_titlebar false + +# How many directory-changes or console-commands should be kept in history? +set max_history_size 20 +set max_console_history_size 50 + +# Try to keep so much space between the top/bottom border when scrolling: +set scroll_offset 8 + +# Flush the input after each key hit? (Noticeable when ranger lags) +set flushinput true + +# Padding on the right when there's no preview? +# This allows you to click into the space to run the file. +set padding_right true + +# Save bookmarks (used with mX and `X) instantly? +# This helps to synchronize bookmarks between multiple ranger +# instances but leads to *slight* performance loss. +# When false, bookmarks are saved when ranger is exited. +set autosave_bookmarks true + +# Save the "`" bookmark to disk. This can be used to switch to the last +# directory by typing "``". +set save_backtick_bookmark true + +# You can display the "real" cumulative size of directories by using the +# command :get_cumulative_size or typing "dc". The size is expensive to +# calculate and will not be updated automatically. You can choose +# to update it automatically though by turning on this option: +set autoupdate_cumulative_size false + +# Turning this on makes sense for screen readers: +set show_cursor false + +# One of: size, natural, basename, atime, ctime, mtime, type, random +set sort natural + +# Additional sorting options +set sort_reverse false +set sort_case_insensitive true +set sort_directories_first true +set sort_unicode false + +# Enable this if key combinations with the Alt Key don't work for you. +# (Especially on xterm) +set xterm_alt_key false + +# Whether to include bookmarks in cd command +set cd_bookmarks true + +# Changes case sensitivity for the cd command tab completion +set cd_tab_case sensitive + +# Use fuzzy tab completion with the "cd" command. For example, +# ":cd /u/lo/b" expands to ":cd /usr/local/bin". +set cd_tab_fuzzy false + +# Avoid previewing files larger than this size, in bytes. Use a value of 0 to +# disable this feature. +set preview_max_size 0 + +# The key hint lists up to this size have their sublists expanded. +# Otherwise the submaps are replaced with "...". +set hint_collapse_threshold 10 + +# Add the highlighted file to the path in the titlebar +set show_selection_in_titlebar true + +# The delay that ranger idly waits for user input, in milliseconds, with a +# resolution of 100ms. Lower delay reduces lag between directory updates but +# increases CPU load. +set idle_delay 2000 + +# When the metadata manager module looks for metadata, should it only look for +# a ".metadata.json" file in the current directory, or do a deep search and +# check all directories above the current one as well? +set metadata_deep_search false + +# Clear all existing filters when leaving a directory +set clear_filters_on_dir_change false + +# Disable displaying line numbers in main column. +# Possible values: false, absolute, relative. +set line_numbers false + +# When line_numbers=relative show the absolute line number in the +# current line. +set relative_current_zero false + +# Start line numbers from 1 instead of 0 +set one_indexed false + +# Save tabs on exit +set save_tabs_on_exit false + +# Enable scroll wrapping - moving down while on the last item will wrap around to +# the top and vice versa. +set wrap_scroll false + +# Set the global_inode_type_filter to nothing. Possible options: d, f and l for +# directories, files and symlinks respectively. +set global_inode_type_filter + +# This setting allows to freeze the list of files to save I/O bandwidth. It +# should be 'false' during start-up, but you can toggle it by pressing F. +set freeze_files false + +# Print file sizes in bytes instead of the default human-readable format. +set size_in_bytes false + +# Warn at startup if RANGER_LEVEL env var is greater than 0, in other words +# give a warning when you nest ranger in a subshell started by ranger. +# Special value "error" makes the warning more visible. +set nested_ranger_warning true + +# =================================================================== +# == Local Options +# =================================================================== +# You can set local options that only affect a single directory. + +# Examples: +# setlocal path=~/downloads sort mtime + +# =================================================================== +# == Command Aliases in the Console +# =================================================================== + +alias e edit +alias q quit +alias q! quit! +alias qa quitall +alias qa! quitall! +alias qall quitall +alias qall! quitall! +alias setl setlocal + +alias filter scout -prts +alias find scout -aets +alias mark scout -mr +alias unmark scout -Mr +alias search scout -rs +alias search_inc scout -rts +alias travel scout -aefklst + +# =================================================================== +# == Define keys for the browser +# =================================================================== + +# Basic +map Q quitall +map q quit +copymap q ZZ ZQ + +map R reload_cwd +map F set freeze_files! +map reset +map redraw_window +map abort +map change_mode normal +map ~ set viewmode! + +map i display_file +map scroll_preview 1 +map scroll_preview -1 +map ? help +map W display_log +map w taskview_open +map S shell $SHELL + +map : console +map ; console +map ! console shell%space +map @ console -p6 shell %%s +map # console shell -p%space +map s console shell%space +map r chain draw_possible_programs; console open_with%space +map f console find%space +map cd console cd%space + +map chain console; eval fm.ui.console.history_move(-1) + +# Change the line mode +map Mf linemode filename +map Mi linemode fileinfo +map Mm linemode mtime +map Mh linemode humanreadablemtime +map Mp linemode permissions +map Ms linemode sizemtime +map MH linemode sizehumanreadablemtime +map Mt linemode metatitle + +# Tagging / Marking +map t tag_toggle +map ut tag_remove +map " tag_toggle tag=%any +map mark_files toggle=True +map v mark_files all=True toggle=True +map uv mark_files all=True val=False +map V toggle_visual_mode +map uV toggle_visual_mode reverse=True + +# For the nostalgics: Midnight Commander bindings +map help +map rename_append +map display_file +map edit +map copy +map cut +map console mkdir%space +map console delete +#map console trash +map exit + +# In case you work on a keyboard with dvorak layout +map move up=1 +map move down=1 +map move left=1 +map move right=1 +map move to=0 +map move to=-1 +map move down=1 pages=True +map move up=1 pages=True +map move right=1 +#map console delete +map console touch%space + +# VIM-like +copymap k +copymap j +copymap h +copymap l +copymap gg +copymap G +copymap +copymap + +map J move down=0.5 pages=True +map K move up=0.5 pages=True +copymap J +copymap K + +# Jumping around +map H history_go -1 +map L history_go 1 +map ] move_parent 1 +map [ move_parent -1 +map } traverse +map { traverse_backwards +map ) jump_non + +map gh cd ~ +map ge cd /etc +map gu cd /usr +map gd cd /dev +map gl cd -r . +map gL cd -r %f +map go cd /opt +map gv cd /var +map gm cd /media +map gi eval fm.cd('/run/media/' + os.getenv('USER')) +map gM cd /mnt +map gs cd /srv +map gp cd /tmp +map gr cd / +map gR eval fm.cd(ranger.RANGERDIR) +map g/ cd / +map g? cd /usr/share/doc/ranger + +# External Programs +map E edit +map du shell -p du --max-depth=1 -h --apparent-size +map dU shell -p du --max-depth=1 -h --apparent-size | sort -rh +map yp yank path +map yd yank dir +map yn yank name +map y. yank name_without_extension + +# Filesystem Operations +map = chmod + +map cw console rename%space +map a rename_append +map A eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%")) +map I eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"), position=7) + +map pp paste +map po paste overwrite=True +map pP paste append=True +map pO paste overwrite=True append=True +map pl paste_symlink relative=False +map pL paste_symlink relative=True +map phl paste_hardlink +map pht paste_hardlinked_subtree +map pd console paste dest= +map p` paste dest=%any_path +map p' paste dest=%any_path + +map dD console delete +map dT console trash + +map dd cut +map ud uncut +map da cut mode=add +map dr cut mode=remove +map dt cut mode=toggle + +map yy copy +map uy uncut +map ya copy mode=add +map yr copy mode=remove +map yt copy mode=toggle + +# Temporary workarounds +map dgg eval fm.cut(dirarg=dict(to=0), narg=quantifier) +map dG eval fm.cut(dirarg=dict(to=-1), narg=quantifier) +map dj eval fm.cut(dirarg=dict(down=1), narg=quantifier) +map dk eval fm.cut(dirarg=dict(up=1), narg=quantifier) +map ygg eval fm.copy(dirarg=dict(to=0), narg=quantifier) +map yG eval fm.copy(dirarg=dict(to=-1), narg=quantifier) +map yj eval fm.copy(dirarg=dict(down=1), narg=quantifier) +map yk eval fm.copy(dirarg=dict(up=1), narg=quantifier) + +# Searching +map / console search%space +map n search_next +map N search_next forward=False +map ct search_next order=tag +map cs search_next order=size +map ci search_next order=mimetype +map cc search_next order=ctime +map cm search_next order=mtime +map ca search_next order=atime + +# Tabs +map tab_new +map tab_close +map tab_move 1 +map tab_move -1 +map tab_move 1 +map tab_move -1 +map gt tab_move 1 +map gT tab_move -1 +map gn tab_new +map gc tab_close +map uq tab_restore +map tab_open 1 +map tab_open 2 +map tab_open 3 +map tab_open 4 +map tab_open 5 +map tab_open 6 +map tab_open 7 +map tab_open 8 +map tab_open 9 +map tab_shift 1 +map tab_shift -1 + +# Sorting +map or set sort_reverse! +map oz set sort=random +map os chain set sort=size; set sort_reverse=False +map ob chain set sort=basename; set sort_reverse=False +map on chain set sort=natural; set sort_reverse=False +map om chain set sort=mtime; set sort_reverse=False +map oc chain set sort=ctime; set sort_reverse=False +map oa chain set sort=atime; set sort_reverse=False +map ot chain set sort=type; set sort_reverse=False +map oe chain set sort=extension; set sort_reverse=False + +map oS chain set sort=size; set sort_reverse=True +map oB chain set sort=basename; set sort_reverse=True +map oN chain set sort=natural; set sort_reverse=True +map oM chain set sort=mtime; set sort_reverse=True +map oC chain set sort=ctime; set sort_reverse=True +map oA chain set sort=atime; set sort_reverse=True +map oT chain set sort=type; set sort_reverse=True +map oE chain set sort=extension; set sort_reverse=True + +map dc get_cumulative_size + +# Settings +map zc set collapse_preview! +map zd set sort_directories_first! +map zh set show_hidden! +map set show_hidden! +copymap +copymap +map zI set flushinput! +map zi set preview_images! +map zm set mouse_enabled! +map zp set preview_files! +map zP set preview_directories! +map zs set sort_case_insensitive! +map zu set autoupdate_cumulative_size! +map zv set use_preview_script! +map zf console filter%space +copymap zf zz + +# Filter stack +map .d filter_stack add type d +map .f filter_stack add type f +map .l filter_stack add type l +map .m console filter_stack add mime%space +map .n console filter_stack add name%space +map .# console filter_stack add hash%space +map ." filter_stack add duplicate +map .' filter_stack add unique +map .| filter_stack add or +map .& filter_stack add and +map .! filter_stack add not +map .r filter_stack rotate +map .c filter_stack clear +map .* filter_stack decompose +map .p filter_stack pop +map .. filter_stack show + +# Bookmarks +map ` enter_bookmark %any +map ' enter_bookmark %any +map m set_bookmark %any +map um unset_bookmark %any + +map m draw_bookmarks +copymap m um ` ' + +# Generate all the chmod bindings with some python help: +eval for arg in "rwxXst": cmd("map +u{0} shell -f chmod u+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +g{0} shell -f chmod g+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +o{0} shell -f chmod o+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +a{0} shell -f chmod a+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +{0} shell -f chmod u+{0} %s".format(arg)) + +eval for arg in "rwxXst": cmd("map -u{0} shell -f chmod u-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -g{0} shell -f chmod g-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -o{0} shell -f chmod o-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -a{0} shell -f chmod a-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -{0} shell -f chmod u-{0} %s".format(arg)) + +# =================================================================== +# == Define keys for the console +# =================================================================== +# Note: Unmapped keys are passed directly to the console. + +# Basic +cmap eval fm.ui.console.tab() +cmap eval fm.ui.console.tab(-1) +cmap eval fm.ui.console.close() +cmap eval fm.ui.console.execute() +cmap redraw_window + +copycmap +copycmap + +# Move around +cmap eval fm.ui.console.history_move(-1) +cmap eval fm.ui.console.history_move(1) +cmap eval fm.ui.console.move(left=1) +cmap eval fm.ui.console.move(right=1) +cmap eval fm.ui.console.move(right=0, absolute=True) +cmap eval fm.ui.console.move(right=-1, absolute=True) +cmap eval fm.ui.console.move_word(left=1) +cmap eval fm.ui.console.move_word(right=1) + +copycmap +copycmap + +# Line Editing +cmap eval fm.ui.console.delete(-1) +cmap eval fm.ui.console.delete(0) +cmap eval fm.ui.console.delete_word() +cmap eval fm.ui.console.delete_word(backward=False) +cmap eval fm.ui.console.delete_rest(1) +cmap eval fm.ui.console.delete_rest(-1) +cmap eval fm.ui.console.paste() + +# And of course the emacs way +copycmap +copycmap +copycmap +copycmap +copycmap +copycmap +copycmap +copycmap +copycmap + +# Note: There are multiple ways to express backspaces. (code 263) +# and (code 127). To be sure, use both. +copycmap + +# This special expression allows typing in numerals: +cmap false + +# =================================================================== +# == Pager Keybindings +# =================================================================== + +# Movement +pmap pager_move down=1 +pmap pager_move up=1 +pmap pager_move left=4 +pmap pager_move right=4 +pmap pager_move to=0 +pmap pager_move to=-1 +pmap pager_move down=1.0 pages=True +pmap pager_move up=1.0 pages=True +pmap pager_move down=0.5 pages=True +pmap pager_move up=0.5 pages=True + +copypmap k +copypmap j +copypmap h +copypmap l +copypmap g +copypmap G +copypmap d +copypmap u +copypmap n f +copypmap p b + +# Basic +pmap redraw_window +pmap pager_close +copypmap q Q i +pmap E edit_file + +# =================================================================== +# == Taskview Keybindings +# =================================================================== + +# Movement +tmap taskview_move up=1 +tmap taskview_move down=1 +tmap taskview_move to=0 +tmap taskview_move to=-1 +tmap taskview_move down=1.0 pages=True +tmap taskview_move up=1.0 pages=True +tmap taskview_move down=0.5 pages=True +tmap taskview_move up=0.5 pages=True + +copytmap k +copytmap j +copytmap g +copytmap G +copytmap u +copytmap n f +copytmap p b + +# Changing priority and deleting tasks +tmap J eval -q fm.ui.taskview.task_move(-1) +tmap K eval -q fm.ui.taskview.task_move(0) +tmap dd eval -q fm.ui.taskview.task_remove() +tmap eval -q fm.ui.taskview.task_move(-1) +tmap eval -q fm.ui.taskview.task_move(0) +tmap eval -q fm.ui.taskview.task_remove() + +# Basic +tmap redraw_window +tmap taskview_close +copytmap q Q w diff --git a/.config/starship/config.toml b/.config/starship/config.toml new file mode 100644 index 0000000..25688be --- /dev/null +++ b/.config/starship/config.toml @@ -0,0 +1,7 @@ +add_newline = false + +[line_break] +disabled = true + +[username] +show_always = true diff --git a/.config/vim/code.vim b/.config/vim/code.vim new file mode 100644 index 0000000..e74fd3b --- /dev/null +++ b/.config/vim/code.vim @@ -0,0 +1,8 @@ +set cpo-=< +autocmd FileType c,javascript,go,json inoremap { {}ko +autocmd FileType c,javascript,go,json inoremap ( ()i +autocmd FileType c inoremap < <>i +autocmd FileType c,javascript,go,json,text,markdown,html inoremap " ""i +autocmd FileType c,javascript,go,json,html inoremap ' ''i + +autocmd FileType c,javascript,go setlocal formatoptions=croqan diff --git a/.config/vim/links.vim b/.config/vim/links.vim new file mode 100644 index 0000000..cc585e4 --- /dev/null +++ b/.config/vim/links.vim @@ -0,0 +1,6 @@ +nnoremap gf :let @a='../'.expand('%')vi>y:tabnew ":let @"=@a +vnoremap gf y:let @a='../'.expand('%'):tabnew ":let @"=@a +nnoremap mf viwc[]hpla(<>)=expand('%')F/l"_dt>hpa.md +vnoremap mf c[]hpla(<>)=expand('%')F/l"_dt>hpa.md +nnoremap ml :r!grep -Rl '' . +vnoremap ml y:execute 'r!grep -Rl '.shellescape(@", 1).' .' diff --git a/.config/vim/text.vim b/.config/vim/text.vim new file mode 100644 index 0000000..fab1403 --- /dev/null +++ b/.config/vim/text.vim @@ -0,0 +1,12 @@ +autocmd FileType markdown inoremap * **i +autocmd FileType markdown inoremap * * +autocmd FileType markdown inoremap _ __i +autocmd FileType markdown set wrap +autocmd FileType markdown set columns=80 +autocmd FileType markdown set linebreak +autocmd FileType markdown setlocal comments+=">" + +autocmd FileType text setlocal textwidth=120 +autocmd FileType text setlocal formatoptions=tcroqawn +autocmd FileType text,markdown,gemtext set spell +set spellfile=~/.config/vim/spell/en.utf-8.add diff --git a/.config/vim/vimrc b/.config/vim/vimrc new file mode 100644 index 0000000..b0010dd --- /dev/null +++ b/.config/vim/vimrc @@ -0,0 +1,30 @@ +syntax on + +set number relativenumber +set hlsearch +set ignorecase +set incsearch + +set tabstop=4 +set shiftwidth=4 +set expandtab + +set foldmethod=syntax + +source ~/.config/vim/code.vim +source ~/.config/vim/text.vim +source ~/.config/vim/links.vim + +" Stolen auto mkdir code +function s:MkNonExDir(file, buf) + if empty(getbufvar(a:buf, '&buftype')) && a:file!~#'\v^\w+\:\/' + let dir=fnamemodify(a:file, ':h') + if !isdirectory(dir) + call mkdir(dir, 'p') + endif + endif +endfunction +augroup BWCCreateDir + autocmd! + autocmd BufWritePre * :call s:MkNonExDir(expand(''), +expand('')) +augroup END diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..72e8ffc --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +* diff --git a/.ssh/config b/.ssh/config new file mode 100644 index 0000000..2a9c537 --- /dev/null +++ b/.ssh/config @@ -0,0 +1,7 @@ +Include config.d/* + +Host * + IgnoreUnknown UseKeychain + UseKeychain yes + AddKeysToAgent yes + IdentityFile ~/.ssh/id_rsa diff --git a/bin/dfilter b/bin/dfilter new file mode 100755 index 0000000..140bf78 --- /dev/null +++ b/bin/dfilter @@ -0,0 +1,28 @@ +#! /bin/sh + +filter="$1" +src="$2" +dest="$3" + +root="$(pwd)" + +rm -r "$dest" +cp -r "$src" "$dest" + +files="$(find "$dest" -type f)" + +for file in $files; do + file "$file" | grep -q 'text' || continue + cd "$(dirname "$file")" || exit 1 + + file="$(basename "$file")" + + exec 3< "$file" + rm "$file" + + sh -c "$filter" <&3 > "$file" + + exec 3>&- + + cd "$root" +done diff --git a/bin/gmi2html b/bin/gmi2html new file mode 100755 index 0000000..898e0d5 --- /dev/null +++ b/bin/gmi2html @@ -0,0 +1,144 @@ +#! /usr/bin/perl + +use strict; +use warnings; +use feature qw(state); +use experimental qw(switch); + +my $input_file = $ARGV[0]; +my $output_file = $ARGV[1]; +my $style_sheet = $ARGV[2]; + +if (defined $input_file and $input_file ne "-") { + open IN, $input_file or die "Could not open input file $input_file!"; +} +else { + *IN = *STDIN; +} + +if (defined $output_file and $output_file ne "-") { + open OUT, $output_file or die "Could not open output file $output_file!"; +} +else { + *OUT = *STDOUT; +} + +my $style_stanza = <<'END_HTML'; + +END_HTML +if (defined $style_sheet) { + $style_stanza = <<"END_HTML"; + + +END_HTML +} + +print OUT <<'END_HTML'; + + + +END_HTML + +my $title = ; +chomp $title; +my $old_title = $title; +$title =~ s/^#\s*//; + +print OUT <<"END_HTML"; + $title + $style_stanza + +END_HTML + +my $line = convert_gmi_line($old_title); +print OUT " $line\n"; + +foreach $line () { + chomp $line; + my $out = convert_gmi_line($line); + + if (defined $out) { + print OUT " $out\n"; + } +} + +print OUT <<'END_HTML'; + + +END_HTML + +sub convert_gmi_line { + state $mode = 'normal'; + state $list = 0; + + my ($line) = @_; + + if ($mode eq 'pre') { + if ($line eq '```') { + $mode = 'normal'; + return undef; + } + + return $line; + } + + if ($line =~ /^\* /) { + if ($list == 0) { + return '
    '; + $list = 1; + } + } + else { + if ($list == 1) { + return '
'; + $list = 0; + } + } + + given($line) { + when(/^=>/) { + $line =~ m/^=>\s*([^\s]*)\s*(.*)$/; + my $link = $1; + my $text = $2; + $link =~ s/\.gmi/\.html/; + + return "

$text

"; + } + when(/^#[^#]/) { + $line =~ s/^#\s*//; + + return "

$line

"; + } + when(/^##[^#]/) { + $line =~ s/^##\s*//; + + return "

$line

"; + } + when(/^###/) { + $line =~ s/^###\s*//; + + return "

$line

"; + } + when(/^\*\s*/) { + $line =~ s/^\*\s*//; + + return "
  • $line
  • "; + } + when(/^>/) { + $line =~ s/^>//; + + return "
    $line
    "; + } + when('```') { + $mode = 'pre'; + return undef; + } + default { + if ($line eq '') { + return undef; + } + + return "

    $line

    "; + } + } +} diff --git a/bin/remind b/bin/remind new file mode 100755 index 0000000..c9a257e --- /dev/null +++ b/bin/remind @@ -0,0 +1,7 @@ +#! /bin/sh + +[ -z "$REMIND_FILE" ] && REMIND_FILE="$HOME/.local/remind" + +export TODO_FILE="$REMIND_FILE" + +todo $* diff --git a/bin/shp b/bin/shp new file mode 100755 index 0000000..db1be11 --- /dev/null +++ b/bin/shp @@ -0,0 +1,15 @@ +#! /usr/bin/awk -f + +/^[ \t]*#\$.*/ { + match($0,/^[ \t]*/) + whitespace=substr($0,RSTART,RLENGTH) + + match($0,/#\$.*/) + command=substr($0,RSTART+2,RLENGTH) + + while (command | getline line) print whitespace line +} + +!/^[ \t]*#\$.*/ { + print $0 +} diff --git a/bin/shp-mods/LINK b/bin/shp-mods/LINK new file mode 100755 index 0000000..d8242c3 --- /dev/null +++ b/bin/shp-mods/LINK @@ -0,0 +1,91 @@ +#! /bin/sh + +timestamp() { + output="$(stat -c'%Y' "$1" 2>/dev/null)" + + if [ $? != 0 ]; then + eval "$(stat -s "$1" 2>/dev/null)" + + output="$st_mtime" + fi + + echo "$output" +} + +limit="$1" +shift + +files="" +while [ $# -ne 0 ]; do + case "$1" in + FROM) + files="$files$(find "$2" -depth 1)$(echo)" + + shift + shift + ;; + SORT) + case "$2" in + ALPHA) + files="$(echo "$files" | sort -f -k 1,1)" + ;; + TIME) + files="$(echo "$files" | while read -r file; do + path="$(echo "$file" | awk '{ print $1 }')" + time="$(timestamp "$path")" + echo "$time $file" + done | sort -k 1,1 | awk '{ $1="" }1')" + ;; + esac + + shift + shift + ;; + REV) + files="$(echo "$files" | tac)" + + shift + ;; + EXCLUDE) + files="$(echo "$files" | sed "/$2/d")" + + shift + shift + ;; + INCLUDE) + files="$(echo "$files" | grep -E "$2")" + + shift + shift + ;; + LABEL) + case "$2" in + DATE) + files="$(echo "$files" | while read -r file; do + [ "$file" = "" ] && continue + path="$(echo "$file" | awk '{ print $1 }')" + time="$(timestamp "$path")" + echo "$file $(date -r "$path" '+%Y-%m-%d')" + done)" + ;; + TITLE) + files="$(echo "$files" | while read -r file; do + [ "$file" = "" ] && continue + path="$(echo "$file" | awk '{ print $1 }')" + echo "$file $(head -n1 "$path" 2> /dev/null | sed 's/^#//g' | sed 's/^ //g')" + done)" + ;; + esac + + shift + shift + ;; + esac +done + +[ "$files" = "" ] && exit 0 +[ "$limit" != "ALL" ] && files="$(echo "$files" | head -n"$limit")" + +echo "$files" | while read -r file; do + echo "=> $file" +done diff --git a/bin/todo b/bin/todo new file mode 100755 index 0000000..3a8c5aa --- /dev/null +++ b/bin/todo @@ -0,0 +1,21 @@ +#! /bin/sh + +[ -z "$TODO_FILE" ] && TODO_FILE=".todo" + +if [ "$1" = "" ]; then + cat "$TODO_FILE" 2>/dev/null + exit 0 +fi + +mkdir -p "$(dirname "$TODO_FILE")" + +if [ "$(echo "$*" | cut -c1)" = "-" ]; then + exec 3< "$TODO_FILE" || exit 0 + + pattern="$(echo "$*" | cut -c2-)" + + rm "$TODO_FILE" + sed "/^$pattern/d" <&3 > "$TODO_FILE" +else + echo "$*" >> "$TODO_FILE" +fi