From c7fadb10da4efdfc40184a277e9f4374fe86d83d Mon Sep 17 00:00:00 2001 From: Amolith Date: Thu, 25 Nov 2021 02:45:48 -0500 Subject: [PATCH] initial commit --- LICENSE | 21 ++ README.md | 15 ++ dot_config/beets/config.yaml | 80 +++++++ dot_config/dunst/dunstrc | 427 ++++++++++++++++++++++++++++++++++ dot_config/git/config | 31 +++ dot_config/git/gitk | 63 +++++ dot_config/mpd/mpd.conf | 84 +++++++ dot_config/nvim/init.vim.tmpl | 184 +++++++++++++++ dot_doom.d/config.el.tmpl | 176 ++++++++++++++ dot_doom.d/init.el | 190 +++++++++++++++ dot_doom.d/packages.el | 57 +++++ private_dot_zimrc | 48 ++++ private_dot_zshrc.tmpl | 240 +++++++++++++++++++ 13 files changed, 1616 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 dot_config/beets/config.yaml create mode 100644 dot_config/dunst/dunstrc create mode 100644 dot_config/git/config create mode 100644 dot_config/git/gitk create mode 100644 dot_config/mpd/mpd.conf create mode 100644 dot_config/nvim/init.vim.tmpl create mode 100644 dot_doom.d/config.el.tmpl create mode 100644 dot_doom.d/init.el create mode 100644 dot_doom.d/packages.el create mode 100644 private_dot_zimrc create mode 100644 private_dot_zshrc.tmpl diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..e5846bb52d99ad94f450293c4830094bef2fc0e6 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. + +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..9cb56bc764df119ee87b43639470cd5daf868f78 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# YADR +***Y**et **A**nother **D**otfiles **R**epository* + +[Chezmoi][chezmoi], a tool designed for securely maintining configs across +diverse machines, manages everything found in this repo. Based on the device's +hostname, it deploys dotfiles across Linux, Windows, and (soon) BSD[^1]. + +Unless stated otherwise, I release everything here under [the +Unlicense][unlicense]. + +[^1]: I don't run BSD *yet* but I'm looking at setting it up on my Librebooted + Thinkpad X200 once I figure out GRUB payloads. + +[chezmoi]: https://www.chezmoi.io/ +[unlicense]: https://unlicense.org/ diff --git a/dot_config/beets/config.yaml b/dot_config/beets/config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8ea998969f52bfa50a4ea88cbdfd3e7f3ec66eed --- /dev/null +++ b/dot_config/beets/config.yaml @@ -0,0 +1,80 @@ +directory: ~/Music/Final +library: ~/.config/beets/library.db +plugins: + - acousticbrainz + - alternatives + - badfiles + - bandcamp + - convert + #- discogs + - embedart + - fetchart + - ftintitle + - fuzzy + #- lyrics + - lastgenre + - mbsync + - mpdupdate + - missing + - scrub + - thumbnails +ui: + color: yes +paths: + default: $albumartist/$album/$track $title + singleton: $albumartist/Singles/$title +lastgenre: + auto: yes + canonical: yes +embedart: + auto: yes +fetchart: + auto: yes + enforce_ratio: yes + sources: itunes amazon * +lyrics: + fallback: '' + sources: "*" +mpd: + host: localhost + port: 6600 +replaygain: + auto: yes + backend: gstreamer + noclip: yes +scrub: + auto: yes +bpd: + host: localhost + port: 6600 + volume: 90 +bandcamp: + lyrics: true + art: true +chroma: + auto: yes +alternatives: + mobile: + directory: ../Mobile + paths: + default: $albumartist/$album/$track $title + singleton: $albumartist/Singles/$title + formats: mp3 + query: "/home/amolith/Music/Final" +convert: + auto: no + embed: yes + never_convert_lossy_files: yes + formats: + mp3: + command: ffmpeg -i $source -codec:a libmp3lame -b:a 320k -compression_level 2 $dest + extension: mp3 +import: + move: no + write: yes + resume: ask + duplicate_action: skip + bell: no +ftintitle: + auto: yes + format: "feat. {0}" diff --git a/dot_config/dunst/dunstrc b/dot_config/dunst/dunstrc new file mode 100644 index 0000000000000000000000000000000000000000..fe4391462e097dd4bd68e49114d4d1c80a1f2601 --- /dev/null +++ b/dot_config/dunst/dunstrc @@ -0,0 +1,427 @@ +[global] + ### Display ### + + # Which monitor should the notifications be displayed on. + monitor = 0 + + # Display notification on focused monitor. Possible modes are: + # mouse: follow mouse pointer + # keyboard: follow window with keyboard focus + # none: don't follow anything + # + # "keyboard" needs a window manager that exports the + # _NET_ACTIVE_WINDOW property. + # This should be the case for almost all modern window managers. + # + # If this option is set to mouse or keyboard, the monitor option + # will be ignored. + follow = none + + # The geometry of the window: + # [{width}]x{height}[+/-{x}+/-{y}] + # The geometry of the message window. + # The height is measured in number of notifications everything else + # in pixels. If the width is omitted but the height is given + # ("-geometry x2"), the message window expands over the whole screen + # (dmenu-like). If width is 0, the window expands to the longest + # message displayed. A positive x is measured from the left, a + # negative from the right side of the screen. Y is measured from + # the top and down respectively. + # The width can be negative. In this case the actual width is the + # screen width minus the width defined in within the geometry option. + geometry = "300x0-23+46" + + # Show how many messages are currently hidden (because of geometry). + indicate_hidden = yes + + # Shrink window if it's smaller than the width. Will be ignored if + # width is 0. + shrink = no + + # The transparency of the window. Range: [0; 100]. + # This option will only work if a compositing window manager is + # present (e.g. xcompmgr, compiz, etc.). + transparency = 0 + + # The height of the entire notification. If the height is smaller + # than the font height and padding combined, it will be raised + # to the font height and padding. + notification_height = 0 + + # Draw a line of "separator_height" pixel height between two + # notifications. + # Set to 0 to disable. + separator_height = 2 + + # Padding between text and separator. + padding = 8 + + # Horizontal padding. + horizontal_padding = 8 + + # Defines width in pixels of frame around the notification window. + # Set to 0 to disable. + frame_width = 2 + + # Defines color of the frame around the notification window. + frame_color = "#F8F8F2" + + # Define a color for the separator. + # possible values are: + # * auto: dunst tries to find a color fitting to the background; + # * foreground: use the same color as the foreground; + # * frame: use the same color as the frame; + # * anything else will be interpreted as a X color. + separator_color = frame + + # Sort messages by urgency. + sort = yes + + # Don't remove messages, if the user is idle (no mouse or keyboard input) + # for longer than idle_threshold seconds. + # Set to 0 to disable. + # A client can set the 'transient' hint to bypass this. See the rules + # section for how to disable this if necessary + idle_threshold = 1 + + ### Text ### + + font = Triplicate T4 + + # The spacing between lines. If the height is smaller than the + # font height, it will get raised to the font height. + line_height = 0 + + # Possible values are: + # full: Allow a small subset of html markup in notifications: + # bold + # italic + # strikethrough + # underline + # + # For a complete reference see + # . + # + # strip: This setting is provided for compatibility with some broken + # clients that send markup even though it's not enabled on the + # server. Dunst will try to strip the markup but the parsing is + # simplistic so using this option outside of matching rules for + # specific applications *IS GREATLY DISCOURAGED*. + # + # no: Disable markup parsing, incoming notifications will be treated as + # plain text. Dunst will not advertise that it has the body-markup + # capability if this is set as a global setting. + # + # It's important to note that markup inside the format option will be parsed + # regardless of what this is set to. + markup = full + + # The format of the message. Possible variables are: + # %a appname + # %s summary + # %b body + # %i iconname (including its path) + # %I iconname (without its path) + # %p progress value if set ([ 0%] to [100%]) or nothing + # %n progress value if set without any extra characters + # %% Literal % + # Markup is allowed + format = "%s\n%b" + + # Alignment of message text. + # Possible values are "left", "center" and "right". + alignment = left + + # Vertical alignment of message text and icon. + # Possible values are "top", "center" and "bottom". + vertical_alignment = center + + # Show age of message if message is older than show_age_threshold + # seconds. + # Set to -1 to disable. + show_age_threshold = 60 + + # Split notifications into multiple lines if they don't fit into + # geometry. + word_wrap = yes + + # When word_wrap is set to no, specify where to make an ellipsis in long lines. + # Possible values are "start", "middle" and "end". + ellipsize = middle + + # Ignore newlines '\n' in notifications. + ignore_newline = no + + # Stack together notifications with the same content + stack_duplicates = true + + # Hide the count of stacked notifications with the same content + hide_duplicate_count = false + + # Display indicators for URLs (U) and actions (A). + show_indicators = yes + + ### Icons ### + + # Align icons left/right/off + icon_position = left + + # Scale small icons up to this size, set to 0 to disable. Helpful + # for e.g. small files or high-dpi screens. In case of conflict, + # max_icon_size takes precedence over this. + min_icon_size = 0 + + # Scale larger icons down to this size, set to 0 to disable + max_icon_size = 50 + + # Paths to default icons. + icon_path = /usr/share/icons/Suru++-Dark/status/48@2x/:/usr/share/icons/Suru++-Dark/devices/64@2x/ + + ### History ### + + # Should a notification popped up from history be sticky or timeout + # as if it would normally do. + sticky_history = yes + + # Maximum amount of notifications kept in history + history_length = 50 + + ### Misc/Advanced ### + + # dmenu path. + dmenu = /usr/bin/dmenu -p dunst: + + # Browser for opening urls in context menu. + browser = /usr/bin/firefox-developer-edition -new-tab + + # Always run rule-defined scripts, even if the notification is suppressed + always_run_script = true + + # Define the title of the windows spawned by dunst + title = Dunst + + # Define the class of the windows spawned by dunst + class = Dunst + + # Print a notification on startup. + # This is mainly for error detection, since dbus (re-)starts dunst + # automatically after a crash. + startup_notification = true + + # Manage dunst's desire for talking + # Can be one of the following values: + # crit: Critical features. Dunst aborts + # warn: Only non-fatal warnings + # mesg: Important Messages + # info: all unimportant stuff + # debug: all less than unimportant stuff + verbosity = mesg + + # Define the corner radius of the notification window + # in pixel size. If the radius is 0, you have no rounded + # corners. + # The radius will be automatically lowered if it exceeds half of the + # notification height to avoid clipping text and/or icons. + corner_radius = 10 + + # Ignore the dbus closeNotification message. + # Useful to enforce the timeout set by dunst configuration. Without this + # parameter, an application may close the notification sent before the + # user defined timeout. + ignore_dbusclose = false + + ### Legacy + + # Use the Xinerama extension instead of RandR for multi-monitor support. + # This setting is provided for compatibility with older nVidia drivers that + # do not support RandR and using it on systems that support RandR is highly + # discouraged. + # + # By enabling this setting dunst will not be able to detect when a monitor + # is connected or disconnected which might break follow mode if the screen + # layout changes. + force_xinerama = false + + ### mouse + + # Defines list of actions for each mouse event + # Possible values are: + # * none: Don't do anything. + # * do_action: If the notification has exactly one action, or one is marked as default, + # invoke it. If there are multiple and no default, open the context menu. + # * close_current: Close current notification. + # * close_all: Close all notifications. + # These values can be strung together for each mouse event, and + # will be executed in sequence. + mouse_left_click = close_current + mouse_middle_click = do_action, close_current + mouse_right_click = close_all + +# Experimental features that may or may not work correctly. Do not expect them +# to have a consistent behaviour across releases. +[experimental] + # Calculate the dpi to use on a per-monitor basis. + # If this setting is enabled the Xft.dpi value will be ignored and instead + # dunst will attempt to calculate an appropriate dpi value for each monitor + # using the resolution and physical size. This might be useful in setups + # where there are multiple screens with very different dpi values. + per_monitor_dpi = false + +[shortcuts] + + # Shortcuts are specified as [modifier+][modifier+]...key + # Available modifiers are "ctrl", "mod1" (the alt-key), "mod2", + # "mod3" and "mod4" (windows-key). + # Xev might be helpful to find names for keys. + + # Close all notifications. + close_all = mod4+n + + # Redisplay last message(s). + # On the US keyboard layout "grave" is normally above TAB and left + # of "1". Make sure this key actually exists on your keyboard layout, + # e.g. check output of 'xmodmap -pke' + #history = mod2+shift+n + + # Context menu. + context = mod4+shift+n + +[urgency_low] + # IMPORTANT: colors have to be defined in quotation marks. + # Otherwise the "#" and following would be interpreted as a comment. + background = "#282A36" + foreground = "#F8F8F2" + timeout = 0 + # Icon for notifications with low urgency, uncomment to enable + #icon = /path/to/icon + +[urgency_normal] + background = "#282A36" + foreground = "#F8F8F2" + timeout = 0 + # Icon for notifications with normal urgency, uncomment to enable + #icon = /path/to/icon + +[urgency_critical] + background = "#282A36" + foreground = "#F8F8F2" + timeout = 0 + # Icon for notifications with critical urgency, uncomment to enable + #icon = /path/to/icon + +# Every section that isn't one of the above is interpreted as a rules to +# override settings for certain messages. +# +# Messages can be matched by +# appname (discouraged, see desktop_entry) +# body +# category +# desktop_entry +# icon +# match_transient +# msg_urgency +# stack_tag +# summary +# +# and you can override the +# background +# foreground +# format +# frame_color +# fullscreen +# new_icon +# set_stack_tag +# set_transient +# timeout +# urgency +# +# Shell-like globbing will get expanded. +# +# Instead of the appname filter, it's recommended to use the desktop_entry filter. +# GLib based applications export their desktop-entry name. In comparison to the appname, +# the desktop-entry won't get localized. +# +# SCRIPTING +# You can specify a script that gets run when the rule matches by +# setting the "script" option. +# The script will be called as follows: +# script appname summary body icon urgency +# where urgency can be "LOW", "NORMAL" or "CRITICAL". +# +# NOTE: if you don't want a notification to be displayed, set the format +# to "". +# NOTE: It might be helpful to run dunst -print in a terminal in order +# to find fitting options for rules. + +# Disable the transient hint so that idle_threshold cannot be bypassed from the +# client +#[transient_disable] +# match_transient = yes +# set_transient = no +# +# Make the handling of transient notifications more strict by making them not +# be placed in history. +#[transient_history_ignore] +# match_transient = yes +# history_ignore = yes + +# fullscreen values +# show: show the notifications, regardless if there is a fullscreen window opened +# delay: displays the new notification, if there is no fullscreen window active +# If the notification is already drawn, it won't get undrawn. +# pushback: same as delay, but when switching into fullscreen, the notification will get +# withdrawn from screen again and will get delayed like a new notification +#[fullscreen_delay_everything] +# fullscreen = delay +#[fullscreen_show_critical] +# msg_urgency = critical +# fullscreen = show + +#[espeak] +# summary = "*" +# script = dunst_espeak.sh + +#[script-test] +# summary = "*script*" +# script = dunst_test.sh + +#[ignore] +# # This notification will not be displayed +# summary = "foobar" +# format = "" + +#[history-ignore] +# # This notification will not be saved in history +# summary = "foobar" +# history_ignore = yes + +#[skip-display] +# # This notification will not be displayed, but will be included in the history +# summary = "foobar" +# skip_display = yes + +#[signed_on] +# appname = Pidgin +# summary = "*signed on*" +# urgency = low +# +#[signed_off] +# appname = Pidgin +# summary = *signed off* +# urgency = low +# +#[says] +# appname = Pidgin +# summary = *says* +# urgency = critical +# +#[twitter] +# appname = Pidgin +# summary = *twitter.com* +# urgency = normal +# +#[stack-volumes] +# appname = "some_volume_notifiers" +# set_stack_tag = "volume" +# +# vim: ft=cfg diff --git a/dot_config/git/config b/dot_config/git/config new file mode 100644 index 0000000000000000000000000000000000000000..7405232e333d6af849e883f0c6e572f339e51e83 --- /dev/null +++ b/dot_config/git/config @@ -0,0 +1,31 @@ +[help] + autoCorrect = never +[init] + defaultBranch = master +[user] + signingkey = 0xDB98CDD6D0BFDD35 + name = Amolith + email = amolith@secluded.site +[commit] + gpgsign = true +[sendemail] + smtpserver = smtp.nixnet.email + smtpuser = amolith@secluded.site + smtpencryption = tls + smtpserverport = 587 +[core] + pager = delta +[delta] + line-numbers = true + syntax-theme = base16 +[interactive] + diffFilter = delta --color-only +[pull] + rebase = true +[push] + followTags = true +[filter "lfs"] + clean = git-lfs clean -- %f + smudge = git-lfs smudge -- %f + process = git-lfs filter-process + required = true diff --git a/dot_config/git/gitk b/dot_config/git/gitk new file mode 100644 index 0000000000000000000000000000000000000000..a6e6054731d57b58539c75a5a30d214aa19f2ec5 --- /dev/null +++ b/dot_config/git/gitk @@ -0,0 +1,63 @@ +set mainfont {sans 9} +set textfont {monospace 9} +set uifont {sans 9 bold} +set tabstop 8 +set findmergefiles 0 +set maxgraphpct 50 +set maxwidth 16 +set cmitmode patch +set wrapcomment none +set autoselect 1 +set autosellen 40 +set showneartags 1 +set maxrefs 20 +set visiblerefs {"master"} +set hideremotes 0 +set showlocalchanges 1 +set datetimeformat {%Y-%m-%d %H:%M:%S} +set limitdiffs 1 +set uicolor grey85 +set want_ttk 1 +set bgcolor white +set fgcolor black +set uifgcolor black +set uifgdisabledcolor #999 +set colors {"#00ff00" red blue magenta darkgrey brown orange} +set diffcolors {red "#00a000" blue} +set mergecolors {red blue "#00ff00" purple brown "#009090" magenta "#808000" "#009000" "#ff0080" cyan "#b07070" "#70b0f0" "#70f0b0" "#f0b070" "#ff70b0"} +set markbgcolor #e0e0ff +set diffcontext 3 +set selectbgcolor gray85 +set foundbgcolor yellow +set currentsearchhitbgcolor orange +set extdifftool meld +set perfile_attrs 0 +set headbgcolor #00ff00 +set headfgcolor black +set headoutlinecolor black +set remotebgcolor #ffddaa +set tagbgcolor yellow +set tagfgcolor black +set tagoutlinecolor black +set reflinecolor black +set filesepbgcolor #aaaaaa +set filesepfgcolor black +set linehoverbgcolor #ffff80 +set linehoverfgcolor black +set linehoveroutlinecolor black +set mainheadcirclecolor yellow +set workingfilescirclecolor red +set indexcirclecolor #00ff00 +set circlecolors {white blue gray blue blue} +set linkfgcolor blue +set circleoutlinecolor black +set web_browser xdg-open +set geometry(main) 1280x1365+1280+24 +set geometry(state) normal +set geometry(topwidth) 1280 +set geometry(topheight) 255 +set geometry(pwsash0) "465 1" +set geometry(pwsash1) "697 1" +set geometry(botwidth) 582 +set geometry(botheight) 1105 +set permviews {} diff --git a/dot_config/mpd/mpd.conf b/dot_config/mpd/mpd.conf new file mode 100644 index 0000000000000000000000000000000000000000..b6712baf38fb6334b02a4c0abc8f3884bd2aa69a --- /dev/null +++ b/dot_config/mpd/mpd.conf @@ -0,0 +1,84 @@ +music_directory "~/Music/Final" +playlist_directory "~/.config/mpd/playlists" +db_file "~/.config/mpd/database" +log_file "~/.config/mpd/log" +pid_file "~/.config/mpd/pid" +state_file "~/.config/mpd/state" +sticker_file "~/.config/mpd/sticker.sql" +bind_to_address "any" +bind_to_address "~/.config/mpd/socket" +port "6600" +log_level "default" +restore_paused "no" +save_absolute_paths_in_playlists "no" +metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc" +auto_update "yes" +follow_outside_symlinks "yes" +follow_inside_symlinks "yes" +zeroconf_enabled "yes" +zeroconf_name "Music Player @ %h" +#password "password@read,add,control,admin" +#default_permissions "read,add,control,admin" +input { + plugin "curl" +# proxy "proxy.isp.com:8080" +# proxy_user "user" +# proxy_password "password" +} +audio_output { + type "pulse" + name "pulse audio" +} +#audio_output { +# type "alsa" +# name "My ALSA Device" +## device "hw:0,0" # optional +## mixer_type "hardware" # optional +## mixer_device "default" # optional +## mixer_control "PCM" # optional +## mixer_index "0" # optional +#} +# +# An example of a shout output (for streaming to Icecast): +# +#audio_output { +# type "shout" +# encoder "vorbis" # optional +# name "My Shout Stream" +# host "localhost" +# port "8000" +# mount "/mpd.ogg" +# password "hackme" +# quality "5.0" +# bitrate "128" +# format "44100:16:1" +## protocol "icecast2" # optional +## user "source" # optional +## description "My Stream Description" # optional +## url "http://example.com" # optional +## genre "jazz" # optional +## public "no" # optional +## timeout "2" # optional +## mixer_type "software" # optional +#} +# +# An example of a recorder output: +# +#audio_output { +# type "recorder" +# name "My recorder" +# encoder "vorbis" # optional, vorbis or lame +# path "/var/lib/mpd/recorder/mpd.ogg" +## quality "5.0" # do not define if bitrate is defined +# bitrate "128" # do not define if quality is defined +# format "44100:16:1" +#} +replaygain "auto" +volume_normalization "yes" + +audio_output { + type "fifo" + name "my_fifo" + path "/tmp/mpd.fifo" + format "44100:16:2" +} diff --git a/dot_config/nvim/init.vim.tmpl b/dot_config/nvim/init.vim.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..63e81656ae6c2f866419bf243864b6ec624ebe43 --- /dev/null +++ b/dot_config/nvim/init.vim.tmpl @@ -0,0 +1,184 @@ +let mapleader ="," + +if ! filereadable(expand('~/.config/nvim/autoload/plug.vim')) + echo "Downloading junegunn/vim-plug to manage plugins..." + silent !mkdir -p ~/.config/nvim/autoload/ + silent !curl "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" > ~/.config/nvim/autoload/plug.vim +endif + +call plug#begin() +Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } " FZF integration +Plug 'junegunn/fzf.vim' " FZF integration +Plug 'ap/vim-css-color' " highlight css colour codes with that color +Plug 'vim-airline/vim-airline' " status bar +Plug 'vim-airline/vim-airline-themes' " status bar themes +Plug 'tpope/vim-surround' " highlight open/close characters like [], {}, () +Plug 'cespare/vim-toml' " toml syntax highlighting +Plug 'edkolev/tmuxline.vim' " apply vim statusbar theme to tmux +Plug 'christoomey/vim-tmux-navigator' " Tmux integration +" Plug 'chriskempson/base16-vim' " base16 color schemes +" Plug 'morhetz/gruvbox' " gruvbox theme +Plug 'rhysd/vim-grammarous' " LanguageTool integration +Plug 'vim-syntastic/syntastic' " syntax checking for various languages +Plug 'godlygeek/tabular' " required for aligning tables with next plugin +Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' } +call plug#end() + +" Set theme colours +set background=dark +"colorscheme wilmersdorf + +" LaTeX config +{{- if eq .chezmoi.os "linux" }} +let g:livepreview_previewer = 'zathura' +{{- end }} +let g:livepreview_use_biber = 1 + +" Grammorous config +{{- if eq .chezmoi.os "linux" }} +let g:grammarous#languagetool_cmd = 'java -cp ~/languagetool/languagetool-server.jar org.languagetool.server.HTTPServer --port 8081 --allow-origin "*"' +{{- end}} + +" netrw configuration +let g:netrw_banner=0 +let g:netrw_browse_split=4 +let g:netrw_altv=1 +let g:netrw_liststyle=3 +let g:netrw_list_hide=netrw_gitignore#Hide() +let g:netrw_list_hide.=',\(^\|\s\s\)\zs\.\S\+' + +" syntastic settings +set statusline+=%#warningmsg# +set statusline+=%{SyntasticStatuslineFlag()} +set statusline+=%* +let g:syntastic_always_populate_loc_list = 1 +let g:syntastic_auto_loc_list = 1 +let g:syntastic_check_on_open = 1 +let g:syntastic_check_on_wq = 0 + +"" +" Some basics +"" +" Make ctags for supported languages +command! MakeTags !ctags -R . +" Add all subdirs to working path so :find works well +set path+=** +" Status line completion menu +set wildmenu +" Set above menu to a vertical instead of horizontal list +set wildmode=full,list,full +" Wrap long lines that continue past the viewport +set linebreak +" Highlight the column the cursor is on +set cursorcolumn +" Highlight the line the cursor is on +set cursorline +" Enables more colors +set termguicolors +" If there are folds, close some of them on startup +set foldlevelstart=99 +" Use system clipboard for all yanking/pasting +set clipboard+=unnamedplus +" Use tabs but display them as 4 spaces instead of 8 +set ts=4 sts=4 sw=4 expandtab +" Round the indent to a multiple of sw +set shiftround +" Set hidden character characters +set listchars=tab:▸\ ,eol:¬,nbsp:␣,trail:•,space:.,extends:→,precedes:← +set backspace=indent,eol,start +" Keep 12 lines above and below the cursor when scrolling +set scrolloff=12 +" Disable mouse support +set mouse= +" Use indents to determine folds +set foldmethod=indent +" Set line numbers relative to current line +set number relativenumber +" Show partial commands in the bottom right +set showcmd +" Show which mode you're in +set showmode +" Display partial matches when searching +set incsearch +" Highlight search results—hide with :noh +set hlsearch +" Wrap searches around the end of the file +set wrapscan +" Tell Vim to be more liberal with creating hidden buffers +set hidden +" Case-insensitive search unless term contains uppercase chars +set smartcase + +" Statusbar theme +let g:airline_powerline_fonts = 1 +let g:airline_theme='bubblegum' +if !exists('g:airline_symbols') + let g:airline_symbols = {} +endif + +" Configure thesaurus +let g:tq_mthesaur_file="~/.config/nvim/thesaurus/mthesaur.txt" +let g:tq_enabled_backends=["datamuse_com","mthesaur_txt","openoffice_en"] + +"" +" Keybindings +"" +" Insert timestamp at the end of the line in this format: 20200527T113245 +nnoremap m'A=strftime('%Y%m%dT%H%M%S') +" Open a new tab +nnoremap t :tabnew +" Toggle hidden characters +nnoremap :set list! + +" Window management +map h +map j +map k +map l + +" Snippets +nnoremap ,nnm :read $HOME/.config/nvim/snippets/nnmail2jA +nnoremap ,sig :read $HOME/.config/nvim/snippets/signature + +" only enable persistent undo if vim supports +if has('persistent_undo') + set undodir=$HOME/.config/nvim/undofile + set undofile +endif + +" Only enable autocommands when Vim supports them +if has("autocmd") + " Disables automatic commenting on newline: + autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o + + "" + " File-specific indentation settings + "" + autocmd FileType make setlocal ts=8 sts=8 sw=8 noexpandtab + autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab + + "" + " Email configuration + "" + " Spellcheck in British English + autocmd FileType eml setlocal spell spelllang=en_gb + " Set lines to hard wrap at 72 chars + autocmd FileType eml set tw=72 + + "" + " Markdown Configuration + "" + " Treat all .md files as markdown + autocmd BufNewFile,BufRead *.md set filetype=markdown + " Spellcheck in British English + autocmd FileType markdown setlocal spell spelllang=en_gb + + "" + " Working with LaTeX + "" + " Reduce udpatetime for faster previews + autocmd BufNewFile,BufRead *.tex setfiletype tex + autocmd FileType tex set ut=250 + autocmd FileType tex set colorcolumn=72 + +endif diff --git a/dot_doom.d/config.el.tmpl b/dot_doom.d/config.el.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..2eed1991799fe8c64cf215698c4f0da5035314dc --- /dev/null +++ b/dot_doom.d/config.el.tmpl @@ -0,0 +1,176 @@ +;;; $DOOMDIR/config.el -*- lexical-binding: t; -*- + +;; Place your private configuration here! Remember, you do not need to run 'doom +;; sync' after modifying this file! + + +;; Some functionality uses this to identify you, e.g. GPG configuration, email +;; clients, file templates and snippets. +(setq user-full-name "Amolith" + user-mail-address "amolith@secluded.site") + +;; Doom exposes five (optional) variables for controlling fonts in Doom. Here +;; are the three important ones: +;; +;; + `doom-font' +;; + `doom-variable-pitch-font' +;; + `doom-big-font' -- used for `doom-big-font-mode'; use this for +;; presentations or streaming. +;; +;; They all accept either a font-spec, font string ("Input Mono-12"), or xlfd +;; font string. You generally only need these two: +(setq doom-font (font-spec :family "Triplicate T4c" :size 16) + doom-variable-pitch-font (font-spec :family "Valkyrie T4" :size 16)) + +;; There are two ways to load a theme. Both assume the theme is installed and +;; available. You can either set `doom-theme' or manually load a theme with the +;; `load-theme' function. This is the default: +(setq doom-theme 'doom-dracula) + +;; If you use `org' and don't want your org files in the default location below, +;; change `org-directory'. It must be set before org loads! +(setq org-directory "~/Org/") + +;; 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 t) + + +;; Here are some additional functions/macros that could help you configure Doom: +;; +;; - `load!' for loading external *.el files relative to this one +;; - `use-package!' for configuring packages +;; - `after!' for running code after a package has loaded +;; - `add-load-path!' for adding directories to the `load-path', relative to +;; this file. Emacs searches the `load-path' when you load packages with +;; `require' or `use-package'. +;; - `map!' for binding new keys +;; +;; To get information about any of these functions/macros, move the cursor over +;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k'). +;; This will open documentation for it, including demos of how they are used. +;; +;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how +;; they are implemented. + +;; Prettify bullets +(use-package org-bullets + :init + (add-hook 'org-mode-hook 'org-bullets-mode)) + +;; Replace ellipsis with downward-pointing arrow +(setq org-ellipsis " ⤵") + +;; Format Org text and hide markers +(setq org-hide-emphasis-markers t) + +;; Keep point in about the centre of the screen +(use-package smooth-scrolling + :ensure t + :config + (smooth-scrolling-mode 1) + (setq smooth-scroll-margin 20)) + +;; Use fancy lambdas +(global-prettify-symbols-mode t) + +;; Use email syntax highlighting in neomutt compositions +(add-to-list 'auto-mode-alist '("/tmp/neomutt-*" . mail-mode)) + +;; Prevent Emacs from indenting Org headers +;(setq org-adapt-indentation nil) + +;; Allow export to markdown and beamer (for presentations). +(require 'ox-md) +(require 'ox-beamer) + +;; Don't ask before evaluating code blocks +(setq org-confirm-babel-evaluate nil) + +;; Use =htmlize= to ensure that exported code blocks use syntax highlighting. +(use-package htmlize) + +;; Translate regular ol' straight quotes to typographically-correct curly quotes +;; when exporting. +(setq org-export-with-smart-quotes t) + +;; Always use =pdflatex= when compiling LaTeX documents. I don't really have any +;; use for DVIs. +(setq TeX-PDF-mode t) + +;; Add ox-hugo for exporting blog.org files to Hugo-compatible markdown +(use-package ox-hugo + :ensure t + :after ox) + + +;; I've taken to charting my guitar music out with [ChordPro]. [Chordpro mode] +;; just adds a major mode for syntax highlighting and some keybinds. +;; +;; [ChordPro]: https://www.chordpro.org +;; [Chordpro mode]: https://github.com/hading/chordpro-mode +(setq auto-mode-alist (cons '("\\.cho$" . chordpro-mode) auto-mode-alist)) +(autoload 'chordpro-mode "chordpro-mode") + +;; I use [LilyPond] for writing standard sheet music. When you install the +;; package, it comes with some elisp files that Emacs needs to load and +;; configure. +;; +;; [LilyPond]: https://lilypond.org/ +(require 'lilypond-mode) +(add-to-list 'auto-mode-alist '("\\.ly$" . LilyPond-mode)) +{{- if eq .chezmoi.os "linux" }} +(setq LilyPond-pdf-command "zathura") +{{- end }} + +;; Define prose modes for enabling prose-related niceties +(defvar prose-modes + '(gfm-mode + git-commit-mode + markdown-mode + message-mode + mail-mode + org-mode + text-mode)) +(defvar prose-mode-hooks + (mapcar (lambda (mode) (intern (format "%s-hook" mode))) + prose-modes)) + +;; Enable spell-checking for all prose-related modes +(use-package flyspell + :config + (dolist (hook prose-mode-hooks) + (add-hook hook 'flyspell-mode))) + +;; Wrap prose paragraphs automatically +(dolist (hook prose-mode-hooks) + (add-hook hook 'turn-on-auto-fill)) + +;; - Associate ~.md~ files with GitHub-flavoured Markdown +;; - Use ~pandoc~ to render the results +;; - Apply syntax highlighting in code blocks +(use-package markdown-mode + :commands gfm-mode + :mode (("\\.md$" . gfm-mode)) + :config + (custom-set-faces + '(markdown-pre-face ((t nil)))) + (setq markdown-command "pandoc --standalone --mathjax --from=markdown" + markdown-fontify-code-blocks-natively t)) + +;; When splitting windows, I want to switch to the new one immediately. By +;; default, you have to press a few bindings. This makes that automatic. +(defun amo/split-window-below-and-switch () + "Split the window horizontally, then switch to the new pane." + (interactive) + (split-window-below) + (balance-windows) + (other-window 1)) +(defun amo/split-window-right-and-switch () + "Split the window vertically, then switch to the new pane." + (interactive) + (split-window-right) + (balance-windows) + (other-window 1)) +(global-set-key (kbd "C-x 2") 'amo/split-window-below-and-switch) +(global-set-key (kbd "C-x 3") 'amo/split-window-right-and-switch) diff --git a/dot_doom.d/init.el b/dot_doom.d/init.el new file mode 100644 index 0000000000000000000000000000000000000000..8d3d23bcc57e6c7555c4d9ab010cf66026894883 --- /dev/null +++ b/dot_doom.d/init.el @@ -0,0 +1,190 @@ +;;; 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 "Module Index" link where you'll find +;; a comprehensive list of Doom's modules and 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 + ;;chinese + ;;japanese + ;;layout ; auie,ctsrnm is the superior home row + + :completion + company ; the ultimate code completion backend + ;;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 + ;;hydra + ;;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 ; 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) + ;;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) + ;;gist ; interacting with github gists + 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 + rgb ; creating color strings + ;;taskrunner ; taskrunner for all your projects + ;;terraform ; infrastructure as code + ;;tmux ; an API for interacting with tmux + upload ; map local to remote projects via ssh/ftp + + :os + (:if IS-MAC 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 ; 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 + ;;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 + (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 +meghanada) ; 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 ; 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 ; 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 + ;;twitter ; twitter client https://twitter.com/vnought + + :config + ;;literate + (default +bindings +smartparens)) diff --git a/dot_doom.d/packages.el b/dot_doom.d/packages.el new file mode 100644 index 0000000000000000000000000000000000000000..5acf0e0ec58f4e6a46cb4743f4b030b38b42538e --- /dev/null +++ b/dot_doom.d/packages.el @@ -0,0 +1,57 @@ +;; -*- 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! org-bullets) +(package! smooth-scrolling) +(package! htmlize) +(package! ox-hugo) +(package! flyspell) +(package! markdown-mode) + +;; To install a package directly from a remote git repo, you must specify a +;; `:recipe'. You'll find documentation on what `:recipe' accepts here: +;; https://github.com/raxod502/straight.el#the-recipe-format +;(package! another-package +; :recipe (:host github :repo "username/repo")) + +;; If the package you are trying to install does not contain a PACKAGENAME.el +;; file, or is located in a subdirectory of the repo, you'll need to specify +;; `:files' in the `:recipe': +;(package! this-package +; :recipe (:host github :repo "username/repo" +; :files ("some-file.el" "src/lisp/*.el"))) + +;; If you'd like to disable a package included with Doom, you can do so here +;; with the `:disable' property: +;(package! builtin-package :disable t) + +;; You can override the recipe of a built in package without having to specify +;; all the properties for `:recipe'. These will inherit the rest of its recipe +;; from Doom or MELPA/ELPA/Emacsmirror: +;(package! builtin-package :recipe (:nonrecursive t)) +;(package! builtin-package-2 :recipe (:repo "myfork/package")) + +;; Specify a `:branch' to install a package from a particular branch or tag. +;; This is required for some packages whose default branch isn't 'master' (which +;; our package manager can't deal with; see raxod502/straight.el#279) +;(package! builtin-package :recipe (:branch "develop")) + +;; Use `:pin' to specify a particular commit to install. +;(package! builtin-package :pin "1a2b3c4d5e") + + +;; Doom's packages are pinned to a specific commit and updated from release to +;; release. The `unpin!' macro allows you to unpin single packages... +;(unpin! pinned-package) +;; ...or multiple packages +;(unpin! pinned-package another-pinned-package) +;; ...Or *all* packages (NOT RECOMMENDED; will likely break things) +;(unpin! t) diff --git a/private_dot_zimrc b/private_dot_zimrc new file mode 100644 index 0000000000000000000000000000000000000000..12ef62ab57e54e77c3a375f818a1792a5c638823 --- /dev/null +++ b/private_dot_zimrc @@ -0,0 +1,48 @@ +# Start configuration added by Zim install {{{ +# ------- +# Modules +# ------- + +# Sets sane Zsh built-in environment options. +zmodule environment +# Provides handy git aliases and functions. +zmodule git +# Applies correct bindkeys for input events. +zmodule input +# Sets a custom terminal title. +zmodule termtitle +# Utility aliases and functions. Adds colour to ls, grep and less. +zmodule utility + +# +# Prompt +# +# Exposes to prompts how long the last command took to execute, used by asciiship. +zmodule duration-info +# Exposes git repository status information to prompts, used by asciiship. +zmodule git-info +# A heavily reduced, ASCII-only version of the Spaceship and Starship prompts. +zmodule asciiship + +# Additional completion definitions for Zsh. +zmodule zsh-users/zsh-completions +# Enables and configures smart and extensive tab completion. +# completion must be sourced after zsh-users/zsh-completions +zmodule completion +# Fish-like autosuggestions for Zsh. +zmodule zsh-users/zsh-autosuggestions +# Fish-like syntax highlighting for Zsh. +# zsh-users/zsh-syntax-highlighting must be sourced after completion +zmodule zsh-users/zsh-syntax-highlighting +# Fish-like history search (up arrow) for Zsh. +# zsh-users/zsh-history-substring-search must be sourced after zsh-users/zsh-syntax-highlighting +zmodule zsh-users/zsh-history-substring-search +# }}} End configuration added by Zim install + +zmodule archive +zmodule exa +zmodule fzf +zmodule git +zmodule prompt-pwd +zmodule pacman +zmodule s1ck94 diff --git a/private_dot_zshrc.tmpl b/private_dot_zshrc.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..8cbaf7d54a60e6a066edf7d649c82a4d1a480aac --- /dev/null +++ b/private_dot_zshrc.tmpl @@ -0,0 +1,240 @@ +# Start configuration added by Zim install +# +# User configuration sourced by interactive shells +# + +# ----------------- +# Zsh configuration +# ----------------- + +# +# History +# + +# Remove older command from the history if a duplicate is to be added. +setopt HIST_IGNORE_ALL_DUPS + +# +# Input/output +# + +# Set editor default keymap to emacs (`-e`) or vi (`-v`) +bindkey -e + +# Prompt for spelling correction of commands. +setopt CORRECT + +# Customize spelling correction prompt. +#SPROMPT='zsh: correct %F{red}%R%f to %F{green}%r%f [nyae]? ' + +# Remove path separator from WORDCHARS. +WORDCHARS=${WORDCHARS//[\/]} + +# ----------------- +# Zim configuration +# ----------------- + +# Use degit instead of git as the default tool to install and update modules. +#zstyle ':zim:zmodule' use 'degit' + +# -------------------- +# Module configuration +# -------------------- + +# +# completion +# + +# Set a custom path for the completion dump file. +# If none is provided, the default ${ZDOTDIR:-${HOME}}/.zcompdump is used. +#zstyle ':zim:completion' dumpfile "${ZDOTDIR:-${HOME}}/.zcompdump-${ZSH_VERSION}" + +# +# git +# + +# Set a custom prefix for the generated aliases. The default prefix is 'G'. +#zstyle ':zim:git' aliases-prefix 'g' + +# +# input +# + +# Append `../` to your input for each `.` you type after an initial `..` +zstyle ':zim:input' double-dot-expand yes + +# +# termtitle +# + +# Set a custom terminal title format using prompt expansion escape sequences. +# See http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Simple-Prompt-Escapes +# If none is provided, the default '%n@%m: %~' is used. +zstyle ':zim:termtitle' format '%1~' + +# +# zsh-autosuggestions +# + +# Customize the style that the suggestions are shown with. +# See https://github.com/zsh-users/zsh-autosuggestions/blob/master/README.md#suggestion-highlight-style +#ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=242' + +# +# zsh-syntax-highlighting +# + +# Set what highlighters will be used. +# See https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters.md +ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets) + +# Customize the main highlighter styles. +# See https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters/main.md#how-to-tweak-it +#typeset -A ZSH_HIGHLIGHT_STYLES +#ZSH_HIGHLIGHT_STYLES[comment]='fg=242' + +# ------------------ +# Initialize modules +# ------------------ + +if [[ ! -e ${ZIM_HOME}/zimfw.zsh ]]; then + # Download zimfw script if missing. + command mkdir -p ${ZIM_HOME} + if (( ${+commands[curl]} )); then + command curl -fsSL -o ${ZIM_HOME}/zimfw.zsh https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh + else + command wget -nv -O ${ZIM_HOME}/zimfw.zsh https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh + fi +fi +if [[ ! ${ZIM_HOME}/init.zsh -nt ${ZDOTDIR:-${HOME}}/.zimrc ]]; then + # Install missing modules, and update ${ZIM_HOME}/init.zsh if missing or outdated. + source ${ZIM_HOME}/zimfw.zsh init -q +fi +source ${ZIM_HOME}/init.zsh + +# ------------------------------ +# Post-init module configuration +# ------------------------------ + +# +# zsh-history-substring-search +# + +# Bind ^[[A/^[[B manually so up/down works both before and after zle-line-init +bindkey '^[[A' history-substring-search-up +bindkey '^[[B' history-substring-search-down + +# Bind up and down keys +zmodload -F zsh/terminfo +p:terminfo +if [[ -n ${terminfo[kcuu1]} && -n ${terminfo[kcud1]} ]]; then + bindkey ${terminfo[kcuu1]} history-substring-search-up + bindkey ${terminfo[kcud1]} history-substring-search-down +fi + +bindkey '^P' history-substring-search-up +bindkey '^N' history-substring-search-down +bindkey -M vicmd 'k' history-substring-search-up +bindkey -M vicmd 'j' history-substring-search-down +# End configuration added by Zim install + +# Executable paths +export PATH="$PATH:$HOME/dotfiles/bin" +export PATH="$PATH:$HOME/.emacs.d/bin" +export PATH="$PATH:$HOME/.cargo/bin" +export PATH="$PATH:$HOME/.local/bin" +export ANDROID_HOME="$HOME/SDKs/Android" +export PATH="$PATH:$ANDROID_HOME/cmdline-tools/tools/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator" +export PATH="$PATH:$HOME/.gem/ruby/2.7.0/bin" +export PATH="$PATH:$HOME/.gem/ruby/3.0.0/bin" +export PATH="$PATH:$HOME/go/bin" + +CASE_SENSITIVE="false" + +export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring + +#HYPHEN_INSENSITIVE="true" +# Uncomment the following line if pasting URLs and other text is messed up. +# DISABLE_MAGIC_FUNCTIONS=true + +# Uncomment the following line if you want to disable marking untracked files +# under VCS as dirty. This makes repository status check for large repositories +# much, much faster. +# DISABLE_UNTRACKED_FILES_DIRTY="true" + +#plugins=( +# git +# golang +# zsh-autosuggestions +# zsh-completions +# lxd-completion-zsh +# fzf-zsh +#) + +# Other completions +compctl -g '~/.teamocil/*(:t:r)' teamocil + +#source $ZSH/oh-my-zsh.sh +source /usr/share/z/z.sh + +# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. +#[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh + +#source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh + +# Ranger conf +export RANGER_LOAD_DEFAULT_RC=false + +export LANG=en_GB.UTF-8 +export EDITOR='devour emacsclient -c' +export VISUAL='devour emacsclient -c' +export _JAVA_AWT_WM_NONREPARENTING=1 +export MANPAGER="nvim +Man!" +export COLUMNS=80 +export MANWIDTH=80 + +alias e="$EDITOR" +alias u="linx-client" +alias vim="nvim" +alias tmp="cd $(mktemp -d)" +alias send="rsync -avmzzP" +alias tree="exa --tree" +alias bat="bat -n --theme base16 --tabs 2" +alias mov="ranger ~/Videos/Movies" +alias tv="ranger ~/Videos/TV\ Shows" +alias yt="ranger ~/Videos/YouTube" +alias pass='str="$(pwgen -s 25 1)" && echo "$str" && echo -n "$str" | xclip -selection clipboard' +alias secluded="cd ~/repos/sites/secluded/ && hugo --cleanDestinationDir && rsync -avmzz public/ hel1-srv1:/var/www/secluded/" +alias erase="shred -vzfun 32" +alias dl="youtube-dl -f bestvideo+bestaudio --write-sub --write-auto-sub --sub-lang en --sub-format srt/best --convert-subs srt --embed-subs -o '%(upload_date)s %(title)s.%(ext)s'" +alias us="unsilence -t 15 -as 1.25" +alias dotgit="python3 ~/dotfiles/dotgit/dotgit/__main__.py" +alias roll="roll -v" +alias dn="notify-send done" +alias sxiv="sxiv -p" +alias tt="tasktimer" + +# devour windows +function zathura() { devour zathura "$1" } +function inkscape() { devour inkscape "$1" } + +# Functions +function gi() { + curl -sLw n https://www.toptal.com/developers/gitignore/api/$@ ; +} +function noti() { + curl 'https://notify.nixnet.services/message?token={{- .gotify_token | quote -}}' -F "title=$1" -F "message=$2" -F "priority=4" +} + +PATH="{{ .chezmoi.homeDir }}/perl5/bin${PATH:+:${PATH}}"; export PATH; +PERL5LIB="{{ .chezmoi.homeDir }}/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB; +PERL_LOCAL_LIB_ROOT="{{ .chezmoi.homeDir }}/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT; +PERL_MB_OPT="--install_base \"{{ .chezmoi.homeDir }}/perl5\""; export PERL_MB_OPT; +PERL_MM_OPT="INSTALL_BASE={{ .chezmoi.homeDir }}/perl5"; export PERL_MM_OPT; +autoload -U +X bashcompinit && bashcompinit +complete -o nospace -C /usr/local/bin/bitcomplete bit + + +# Necessary for SSH & YubiKey +export GPG_TTY="$TTY" +export SSH_AUTH_SOCK="/run/user/1000/gnupg/S.gpg-agent.ssh" +gpgconf --launch gpg-agent