commit 68d97ad6a164f81feb9f417dab815e06e6c03dbb
Author: Jake Koroman <jakekoroman@gmail.com>
Date: Wed, 14 Feb 2024 14:00:03 -0500
Ready. Set. Go!
Diffstat:
45 files changed, 2051 insertions(+), 0 deletions(-)
diff --git a/.bash_aliases b/.bash_aliases
@@ -0,0 +1,27 @@
+alias grep='grep --color=auto'
+alias ls='ls --color=auto'
+alias l='ls -l'
+alias ll='ls -la'
+
+alias e='nvim'
+alias cs='ssh jake@mainframe'
+
+alias nt='firefox --new-tab'
+alias nw='firefox --new-window'
+
+if [ -z $I3SOCK ]; then
+ alias sw='$HOME/dotfiles/Scripts/myswallow'
+else
+ alias sw='swallow'
+fi
+
+alias sudo='sudo '
+
+alias dwmd='cd ~/dotfiles/dwm'
+alias std='cd ~/dotfiles/st-instantos'
+
+alias work='vncviewer -passwd ~/.vnc/passwd 192.168.0.247'
+alias nas='doas mount /media/nas && cd /media/nas'
+
+alias poweroff='doas /sbin/poweroff'
+alias reboot='doas /sbin/reboot'
diff --git a/.bash_profile b/.bash_profile
@@ -0,0 +1,14 @@
+# /etc/skel/.bash_profile
+
+# This file is sourced by bash for login shells. The following line
+# runs your .bashrc and is recommended by the bash info pages.
+if [[ -f ~/.bashrc ]] ; then
+ . ~/.bashrc
+fi
+
+if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
+ echo 'welcome bozo'
+ export MOZ_ENABLE_WAYLAND=1
+ export GTK_THEME=Adwaita-dark
+ dbus-run-session sway
+fi
diff --git a/.bashrc b/.bashrc
@@ -0,0 +1,30 @@
+# /etc/skel/.bashrc
+#
+# This file is sourced by all *interactive* bash shells on startup,
+# including some apparently interactive shells such as scp and rcp
+# that can't tolerate any output. So make sure this doesn't display
+# anything or bad things will happen !
+
+
+# Test for an interactive shell. There is no need to set anything
+# past this point for scp and rcp, and it's important to refrain from
+# outputting anything in those cases.
+if [[ $- != *i* ]] ; then
+ # Shell is non-interactive. Be done now!
+ return
+fi
+
+# Put your fun stuff here.
+
+export HISTCONTROL=ignoreboth:erasedups
+export HISTSIZE=2500
+export HISTFILESIZE=5000
+complete -cf doas
+
+source $HOME/.bash_aliases
+
+export PS1='\[\e[92m\]\w\[\e[0m\] \[\e[95m\]>\[\e[0m\] '
+#export PS1="${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "
+export PATH=$HOME/.local/bin:$HOME/scripts:$PATH
+
+clear
diff --git a/.config/nvim/colors/GruberDarker.vim b/.config/nvim/colors/GruberDarker.vim
@@ -0,0 +1,228 @@
+" GruberDarker Theme for Vim
+"
+" Adapted from an Emacs theme:
+" https://github.com/rexim/gruber-darker-theme
+"
+" Colorscheme template: https://github.com/mhartington/oceanic-next/blob/master/colors/OceanicNext.vim
+" --------------------------------------------
+
+" {{{ Setup
+ set background=dark
+ hi clear
+ if exists("syntax_on")
+ syntax reset
+ endif
+ let g:colors_name="GruberDarker"
+" }}}
+" {{{ Italics
+ let g:gruber_terminal_italic = get(g:, 'gruber_terminal_italic', 0)
+ let s:italic = ""
+ if g:gruber_terminal_italic == 1
+ let s:italic = "italic"
+ endif
+"}}}
+" {{{ Bold
+ let g:gruber_terminal_bold = get(g:, 'gruber_terminal_bold', 0)
+ let s:bold = ""
+ if g:gruber_terminal_bold == 1
+ let s:bold = "bold"
+ endif
+"}}}
+" {{{ Colors
+ let s:gruberFG=['#e4e4ef', '253']
+ let s:gruberFG1=['#f4f4ff', '254']
+ let s:gruberFG2=['#f5f5ff', '240']
+ let s:gruberFG3=['#65737e', '243']
+ let s:gruberWhite=['#ffffff', '15']
+ let s:gruberBlack=['#000000', '0']
+ let s:gruberBG=['#181818', '233']
+ let s:gruberBG1=['#282828', '235']
+ let s:gruberBG2=['#453d41', '238']
+ let s:gruberLightRed=['#c73c3f', '203']
+ let s:gruberRed=['#f43841', '160']
+ let s:gruberNiagara=['#96a6c8', '147']
+ let s:gruberQuartz=['#95a99f', '108']
+ let s:gruberGreen=['#73c936', '70']
+ let s:gruberMain=['#ffdd33', '220']
+ let s:gruberBrown=['#cc8c3c', '172']
+ let s:gruberPurple=['#9e95c7', '98']
+ let s:gruberLightBlue=['#0087d7', '32']
+ let s:gruberBlue=['#0000d7', '20']
+ let s:gruberGold=['#d7af00', '178']
+ let s:none=['NONE', 'NONE']
+
+" {{{ Highlight function
+function! <sid>hi(group, fg, bg, attr, attrsp)
+ " fg, bg, attr, attrsp
+ if !empty(a:fg)
+ exec "hi " . a:group . " guifg=" . a:fg[0]
+ exec "hi " . a:group . " ctermfg=" . a:fg[1]
+ endif
+ if !empty(a:bg)
+ exec "hi " . a:group . " guibg=" . a:bg[0]
+ exec "hi " . a:group . " ctermbg=" . a:bg[1]
+ endif
+ if a:attr != ""
+ exec "hi " . a:group . " gui=" . a:attr
+ exec "hi " . a:group . " cterm=" . a:attr
+ endif
+ if !empty(a:attrsp)
+ exec "hi " . a:group . " guisp=" . a:attrsp[0]
+ endif
+endfunction
+" }}}
+" {{{ call <sid>:hi(group, fg, bg, gui, guisp)
+call <sid>hi('Bold', '', '', 'bold', '')
+call <sid>hi('Debug', s:gruberFG2, '', '', '')
+call <sid>hi('Directory', s:gruberLightBlue, '', '', '')
+call <sid>hi('ErrorMsg', s:gruberWhite, s:gruberRed, '', '')
+call <sid>hi('Exception', s:gruberBrown, '', '', '')
+call <sid>hi('FoldColumn', s:gruberBrown, s:gruberFG2, '', '')
+call <sid>hi('Folded', s:gruberBrown, s:gruberFG2, s:italic, '')
+call <sid>hi('IncSearch', s:gruberBlack, s:gruberFG2, 'NONE', '')
+call <sid>hi('Italic', '', '', s:italic, '')
+
+call <sid>hi('Macro', s:gruberFG, '', '', '')
+call <sid>hi('MatchParen', s:gruberBG2, s:gruberMain, '', '')
+call <sid>hi('ModeMsg', s:gruberFG2, '', '', '')
+call <sid>hi('MoreMsg', s:gruberFG2, '', '', '')
+call <sid>hi('Question', s:gruberNiagara, '', '', '')
+call <sid>hi('Search', s:gruberBlack, s:gruberMain, '', '')
+call <sid>hi('SpecialKey', s:gruberFG2, '', '', '')
+call <sid>hi('TooLong', s:gruberFG2, '', '', '')
+call <sid>hi('Underlined', s:gruberPurple, '', '', '')
+call <sid>hi('Visual', '', s:gruberBG2, '', '')
+call <sid>hi('VisualNOS', s:gruberRed, '', '', '')
+call <sid>hi('WarningMsg', s:gruberRed, '', '', '')
+call <sid>hi('WildMenu', s:gruberBlack, s:gruberMain, '', '')
+call <sid>hi('Title', s:gruberQuartz, '', '', '')
+call <sid>hi('Conceal', s:gruberFG, s:gruberBG, '', '')
+call <sid>hi('Cursor', s:gruberBG, s:gruberFG, '', '')
+call <sid>hi('NonText', s:gruberFG2, '', '', '')
+call <sid>hi('Normal', s:gruberFG, s:gruberBG, '', '')
+call <sid>hi('EndOfBuffer', s:gruberFG, s:gruberBG, '', '')
+call <sid>hi('LineNr', s:gruberFG, s:gruberBG, '', '')
+call <sid>hi('SignColumn', s:none, s:none, '', '')
+call <sid>hi('VertSplit', s:gruberFG2, s:gruberBG1, '', '')
+call <sid>hi('ColorColumn', '', s:gruberBG2, '', '')
+call <sid>hi('CursorColumn', '', s:gruberBG2, '', '')
+call <sid>hi('CursorLine', '', s:gruberBG2, 'NONE', '')
+call <sid>hi('CursorLineNr', s:gruberMain, s:gruberBG, '', '')
+call <sid>hi('PMenu', s:gruberFG, s:gruberBG1, '', '')
+call <sid>hi('PMenuSel', s:gruberFG, s:gruberBG2, '', '')
+call <sid>hi('PmenuSbar', '', s:gruberBG, '', '')
+call <sid>hi('PmenuThumb', '', s:gruberBG, '', '')
+call <sid>hi('helpExample', s:gruberMain, '', '', '')
+call <sid>hi('helpCommand', s:gruberMain, '', '', '')
+
+" Standard syntax highlighting
+call <sid>hi('Boolean', s:gruberQuartz, '', '', '')
+call <sid>hi('Character', s:gruberGreen, '', '', '')
+call <sid>hi('Comment', s:gruberBrown, '', s:italic, '')
+call <sid>hi('Conditional', s:gruberMain, '', '', '')
+call <sid>hi('Constant', s:gruberQuartz, '', '', '')
+call <sid>hi('Define', s:gruberMain, '', '', '')
+call <sid>hi('Delimiter', s:gruberFG, '', '', '')
+call <sid>hi('Float', s:gruberQuartz, '', '', '')
+call <sid>hi('Function', s:gruberNiagara, '', '', '')
+call <sid>hi('Identifier', s:gruberNiagara, '', '', '')
+call <sid>hi('Include', s:gruberMain, '', '', '')
+call <sid>hi('Keyword', s:gruberMain, '', '', '')
+call <sid>hi('Label', s:gruberFG, '', '', '')
+call <sid>hi('Number', s:gruberQuartz, '', '', '')
+call <sid>hi('Operator', s:gruberFG, '', '', '')
+call <sid>hi('PreProc', s:gruberFG1, '', '', '')
+call <sid>hi('Repeat', s:gruberMain, '', '', '')
+call <sid>hi('Special', s:gruberMain, '', '', '')
+call <sid>hi('SpecialChar', s:gruberMain, '', '', '')
+call <sid>hi('Statement', s:gruberMain, '', '', '')
+call <sid>hi('StorageClass', s:gruberMain, '', '', '')
+call <sid>hi('String', s:gruberGreen, '', '', '')
+call <sid>hi('Structure', s:gruberMain, '', '', '')
+call <sid>hi('Todo', s:gruberBG, s:gruberMain, '', '')
+call <sid>hi('Type', s:gruberQuartz, '', '', '')
+call <sid>hi('Typedef', s:gruberQuartz, '', '', '')
+
+call <sid>hi('SpellBad', '', '', 'undercurl', '')
+call <sid>hi('SpellLocal', '', '', 'undercurl', '')
+call <sid>hi('SpellCap', '', '', 'undercurl', '')
+call <sid>hi('SpellRare', '', '', 'undercurl', '')
+
+" Haskell Highlighting
+call <sid>hi('hsTypeDef', s:gruberMain, '', '', '')
+call <sid>hi('hsStructure', s:gruberMain, '', '', '')
+call <sid>hi('hsStatement', s:gruberMain, '', '', '')
+call <sid>hi('hsconditional', s:gruberMain, '', '', '')
+call <sid>hi('hsconditional', s:gruberMain, '', '', '')
+call <sid>hi('hsconditional', s:gruberMain, '', '', '')
+
+" Java Highlighting
+" TODO Fix function definitions
+call <sid>hi('javaConstant', s:gruberQuartz, '', '', '')
+call <sid>hi('javaConditional', s:gruberMain, '', '', '')
+call <sid>hi('javaOperator', s:gruberMain, '', '', '')
+call <sid>hi('javaExceptions', s:gruberMain, '', '', '')
+call <sid>hi('javaAssert', s:gruberMain, '', '', '')
+call <sid>hi('javaClassDecl', s:gruberMain, '', '', '')
+call <sid>hi('javaBraces', s:gruberFG, '', '', '')
+call <sid>hi('javaLangObject', s:gruberFG, '', '', '')
+call <sid>hi('javaType', s:gruberQuartz, '', '', '')
+
+" Python Highlighting
+call <sid>hi('pythonRepeat', s:gruberMain, '', '', '')
+call <sid>hi('pythonOperator', s:gruberMain, '', '', '')
+call <sid>hi('pythonException', s:gruberMain, '', '', '')
+
+
+call <sid>hi('markdownCode', s:gruberGreen, '', '', '')
+call <sid>hi('markdownCodeBlock', s:gruberGreen, '', '', '')
+call <sid>hi('markdownHeadingDelimiter', s:gruberNiagara, '', '', '')
+call <sid>hi('markdownItalic', s:gruberPurple, '', s:italic, '')
+call <sid>hi('markdownBold', s:gruberMain, '', s:bold, '')
+call <sid>hi('markdownCodeDelimiter', s:gruberBrown, '', s:italic, '')
+call <sid>hi('markdownError', s:gruberFG, s:gruberBG1, '', '')
+
+call <sid>hi('ALEErrorSign', s:gruberRed, s:gruberBG2, s:bold, '')
+call <sid>hi('ALEWarningSign', s:gruberMain, s:gruberBG2, s:bold, '')
+call <sid>hi('ALEInfoSign', s:gruberGreen, s:gruberBG2, s:bold, '')
+
+call <sid>hi('NERDTreeExecFile', s:gruberFG, '', '', '')
+call <sid>hi('NERDTreeDirSlash', s:gruberNiagara, '', '', '')
+call <sid>hi('NERDTreeOpenable', s:gruberNiagara, '', '', '')
+call <sid>hi('NERDTreeFile', '', s:none, '', '')
+call <sid>hi('NERDTreeFlags', s:gruberNiagara, '', '', '')
+
+call <sid>hi('vimfilerLeaf', s:gruberFG, '', '', '')
+call <sid>hi('vimfilerNormalFile', s:gruberFG, s:gruberBG1, '', '')
+call <sid>hi('vimfilerOpenedFile', s:gruberNiagara, '', '', '')
+call <sid>hi('vimfilerClosedFile', s:gruberNiagara, '', '', '')
+
+" }}}
+
+let g:terminal_color_0=s:gruberBG1[0]
+let g:terminal_color_8=s:gruberBG1[0]
+
+let g:terminal_color_1=s:gruberLightRed[0]
+let g:terminal_color_9=s:gruberLightRed[0]
+
+let g:terminal_color_2=s:gruberGreen[0]
+let g:terminal_color_10=s:gruberGreen[0]
+
+let g:terminal_color_3=s:gruberMain[0]
+let g:terminal_color_11=s:gruberMain[0]
+
+let g:terminal_color_4=s:gruberNiagara[0]
+let g:terminal_color_12=s:gruberNiagara[0]
+
+let g:terminal_color_5=s:gruberPurple[0]
+let g:terminal_color_13=s:gruberPurple[0]
+
+let g:terminal_color_6=s:gruberNiagara[0]
+let g:terminal_color_14=s:gruberNiagara[0]
+
+let g:terminal_color_7=s:gruberFG[0]
+let g:terminal_color_15=s:gruberFG[0]
+
+let g:terminal_color_background=s:gruberBG1[0]
+let g:terminal_color_foreground=s:gruberWhite[0]
+
diff --git a/.config/nvim/colors/clean.vim b/.config/nvim/colors/clean.vim
@@ -0,0 +1,92 @@
+" to get font face under cursor: :echo synIDattr(synID(line("."), col("."), 1), "name")
+
+hi clear
+syntax reset
+let g:colors_name = 'clean'
+set background=dark
+
+hi Normal guifg=#cdaa7d guibg=#181818 gui=NONE cterm=NONE
+hi ColorColumn guifg=NONE guibg=#181818 gui=NONE cterm=NONE
+hi Conceal guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
+hi Cursor guifg=NONE guibg=NONE gui=reverse ctermfg=NONE ctermbg=NONE cterm=reverse
+hi CursorColumn guifg=NONE guibg=#181818 gui=NONE cterm=NONE
+hi CursorLine guifg=NONE guibg=#181818 gui=NONE cterm=NONE
+hi CursorLineNr guifg=#e4e4ef guibg=#181818 gui=NONE cterm=NONE
+hi DiffAdd guifg=#e4e4ef guibg=#181818 gui=reverse cterm=reverse
+hi DiffChange guifg=#e4e4ef guibg=#181818 gui=reverse cterm=reverse
+hi DiffDelete guifg=#e4e4ef guibg=#181818 gui=reverse cterm=reverse
+hi DiffText guifg=#e4e4ef guibg=#181818 gui=reverse cterm=reverse
+hi Directory guifg=#e4e4ef guibg=NONE gui=NONE cterm=NONE
+hi EndOfBuffer guifg=#e4e4ef guibg=NONE gui=NONE cterm=NONE
+hi ErrorMsg guifg=#ffff00 guibg=#181818 gui=NONE cterm=NONE
+hi FoldColumn guifg=#e4e4ef guibg=NONE gui=NONE cterm=NONE
+hi Folded guifg=#e4e4ef guibg=#181818 gui=NONE cterm=NONE
+hi IncSearch guifg=#ffaf00 guibg=#181818 gui=reverse cterm=reverse
+hi LineNr guifg=#7a7a7a guibg=NONE gui=NONE cterm=NONE
+hi MatchParen guifg=#ff0000 guibg=NONE gui=bold cterm=bold
+hi ModeMsg guifg=#e4e4ef guibg=NONE gui=bold cterm=bold
+hi MoreMsg guifg=#e4e4ef guibg=NONE gui=NONE cterm=NONE
+hi NonText guifg=#e4e4ef guibg=NONE gui=NONE cterm=NONE
+hi Pmenu guifg=#cdaa7d guibg=#101010 gui=NONE cterm=NONE
+hi PmenuSbar guifg=#e4e4ef guibg=#101010 gui=NONE cterm=NONE
+hi PmenuSel guifg=#cd950c guibg=#1F1F1F gui=NONE cterm=NONE
+hi PmenuThumb guifg=#e4e4ef guibg=#101010 gui=NONE cterm=NONE
+hi Question guifg=#e4e4ef guibg=NONE gui=NONE cterm=NONE
+hi QuickFixLine guifg=#ad7fa8 guibg=#181818 gui=reverse cterm=reverse
+hi Search guifg=#ffaf00 guibg=#181818 gui=reverse cterm=reverse
+hi SignColumn guifg=#e4e4ef guibg=NONE gui=NONE cterm=NONE
+hi SpecialKey guifg=#e4e4ef guibg=NONE gui=NONE cterm=NONE
+hi SpellBad guifg=#e4e4ef guibg=NONE guisp=#d7005f gui=undercurl cterm=underline
+hi SpellCap guifg=#e4e4ef guibg=NONE guisp=#0087d7 gui=undercurl cterm=underline
+hi SpellLocal guifg=#e4e4ef guibg=NONE guisp=#d787d7 gui=undercurl cterm=underline
+hi SpellRare guifg=#e4e4ef guibg=NONE guisp=#00afaf gui=undercurl cterm=underline
+hi StatusLine guifg=#e4e4ef guibg=#181818 gui=bold,reverse cterm=bold
+hi StatusLineNC guifg=#878787 guibg=#181818 gui=reverse cterm=reverse
+hi TabLine guifg=#e4e4ef guibg=#181818 gui=reverse cterm=reverse
+hi TabLineFill guifg=#e4e4ef guibg=NONE gui=NONE cterm=NONE
+hi TabLineSel guifg=#e4e4ef guibg=#181818 gui=bold cterm=bold
+hi Title guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
+hi VertSplit guifg=#e4e4ef guibg=#181818 gui=NONE cterm=NONE
+hi Visual guifg=#595959 guibg=#181818 gui=reverse cterm=reverse
+hi VisualNOS guifg=NONE guibg=#181818 gui=NONE cterm=NONE
+hi WarningMsg guifg=#e4e4ef guibg=NONE gui=NONE cterm=NONE
+hi WildMenu guifg=#e4e4ef guibg=#181818 gui=bold cterm=bold
+hi Comment guifg=#5e5e63 guibg=NONE gui=bold cterm=bold
+hi Constant guifg=#e4e4ef guibg=NONE gui=NONE cterm=NONE
+hi String guifg=#4e9a06 guibg=NONE gui=NONE cterm=NONE
+hi Error guifg=#ff0000 guibg=#181818 gui=bold,reverse cterm=bold,reverse
+hi Identifier guifg=#e4e4ef guibg=NONE gui=NONE cterm=NONE
+hi Ignore guifg=#e4e4ef guibg=NONE gui=NONE cterm=NONE
+hi PreProc guifg=#e4e4ef guibg=NONE gui=NONE cterm=NONE
+hi Special guifg=#cdaa7d guibg=NONE gui=NONE cterm=NONE
+hi Number guifg=#cdaa7d guibg=NONE gui=NONE cterm=NONE
+hi Statement guifg=#cd950c guibg=NONE gui=NONE cterm=NONE
+hi Todo guifg=#181818 guibg=#ffffff gui=bold,reverse cterm=bold,reverse
+hi Type guifg=#cd950c guibg=NONE gui=NONE cterm=NONE
+hi Underlined guifg=#e4e4ef guibg=NONE gui=underline cterm=underline
+hi CursorIM guifg=#e4e4ef guibg=#181818 gui=NONE cterm=NONE
+hi ToolbarLine guifg=NONE guibg=#181818 gui=NONE cterm=NONE
+hi ToolbarButton guifg=#e4e4ef guibg=#181818 gui=bold cterm=bold
+
+hi vimFgBgAttrib guifg=#cdaa7D guibg=#181818 gui=NONE cterm=NONE
+hi vimHiAttrib guifg=#cdaa7d guibg=#181818 gui=NONE cterm=NONE
+hi vimVar guifg=#cdaa7D guibg=#181818 gui=NONE cterm=NONE
+hi vimOption guifg=#cdaa7d guibg=#181818 gui=NONE cterm=NONE
+hi vimHighlight guifg=#cdaa7d guibg=#181818 gui=NONE cterm=NONE
+hi vimHigroup guifg=#cdaa7d guibg=#181818 gui=NONE cterm=NONE
+hi vimGroup guifg=#cdaa7d guibg=#181818 gui=NONE cterm=NONE
+
+hi zigVarDecl guifg=#cd950c guibg=NONE gui=NONE cterm=NONE
+hi zigMacro guifg=#cd950c guibg=NONE gui=NONE cterm=NONE
+hi zigOperator guifg=#cdaa7d guibg=NONE gui=NONE cterm=NONE
+hi zigType guifg=#cdaa7d guibg=NONE gui=NONE cterm=NONE
+hi zigPreProc guifg=#cd950c guibg=NONE gui=NONE cterm=NONE
+hi zigConstant guifg=#cdaa7d guibg=NONE gui=NONE cterm=NONE
+hi zigBoolean guifg=#cdaa7d guibg=NONE gui=NONE cterm=NONE
+hi zigBuiltinFn guifg=#f77454 guibg=#181818 gui=NONE cterm=NONE
+hi zigNull guifg=#cdaa7d guibg=#181818 gui=NONE cterm=NONE
+
+hi shVariable guifg=#cdaa7d guibg=#181818 gui=NONE cterm=NONE
+hi shDerefSimple guifg=#f77454 guibg=#181818 gui=NONE cterm=NONE
+
+hi luaConstant guifg=#cdaa7d guibg=#181818 gui=NONE cterm=NONE
diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua
@@ -0,0 +1,64 @@
+require('plugins')
+require('settings')
+require('keybinds')
+
+local api = vim.api
+
+-- Auto save when running :make
+api.nvim_create_autocmd({ "QuickFixCmdPre" }, {
+ callback = function()
+ vim.cmd ":w"
+ end,
+})
+
+-- Tree sitter settings
+-- require'nvim-treesitter.configs'.setup {
+-- -- A list of parser names, or "all"
+-- ensure_installed = { "c", "cpp", "lua", "python" },
+
+-- -- Install parsers synchronously (only applied to `ensure_installed`)
+-- sync_install = false,
+
+-- -- Automatically install missing parsers when entering buffer
+-- -- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally
+-- auto_install = true,
+
+-- highlight = {
+-- -- `false` will disable the whole extension
+-- enable = true,
+-- },
+-- }
+
+-- Snippet settings
+require('snippets').snippets = {
+ _global = {
+ todo = "/* TODO(jake): $0 */";
+ note = "/* NOTE(jake): $0 */";
+ inc = "#include <$0>";
+ incq = "#include \"$0\"";
+ }
+}
+
+require('marks').setup {
+ -- whether to map keybinds or not. default true
+ default_mappings = true,
+ -- whether movements cycle back to the beginning/end of buffer. default true
+ cyclic = true,
+ force_write_shada = true,
+ -- how often (in ms) to redraw signs/recompute mark positions.
+ -- higher values will have better performance but may cause visual lag,
+ -- while lower values may cause performance penalties. default 150.
+ refresh_interval = 250,
+ -- marks.nvim allows you to configure up to 10 bookmark groups, each with its own
+ -- sign/virttext. Bookmarks can be used to group together positions and quickly move
+ -- across multiple buffers. default sign is '!@#$%^&*()' (from 0 to 9), and
+ -- default virt_text is "".
+ bookmark_0 = {
+ sign = "⚑",
+ virt_text = "hello world",
+ -- explicitly prompt for a virtual line annotation when setting a bookmark from this group.
+ -- defaults to false.
+ annotate = false,
+ },
+ mappings = {}
+}
diff --git a/.config/nvim/lua/keybinds.lua b/.config/nvim/lua/keybinds.lua
@@ -0,0 +1,38 @@
+local snippets = require('snippets')
+
+local change_scale_factor = function(delta)
+ vim.g.neovide_scale_factor = vim.g.neovide_scale_factor * delta
+end
+
+-- General Editor binds
+vim.keymap.set('n', '<M-j>', '}')
+vim.keymap.set('n', '<M-k>', '{')
+vim.keymap.set('v', '<M-j>', '}')
+vim.keymap.set('v', '<M-k>', '{')
+vim.keymap.set('i', '<C-k>', snippets.expand_or_advance)
+vim.keymap.set('n', '<leader>e', '<CMD>Lexplore<CR>')
+
+-- Compilation bind
+vim.keymap.set('n', '<leader>c', '<CMD>make<CR>')
+vim.keymap.set('n', '<M-n>', '<CMD>cn<CR>')
+vim.keymap.set('n', '<M-p>', '<CMD>cp<CR>')
+vim.keymap.set('n', '<M-l>', '<CMD>cl<CR>')
+
+-- Buffer binds
+vim.keymap.set('n', '<leader>bp', '<CMD>bn<CR>')
+vim.keymap.set('n', '<leader>bn', '<CMD>bp<CR>')
+
+-- Window binds
+vim.keymap.set('n', '<leader>ww', '<C-w>w')
+vim.keymap.set('n', '<leader>wn', '<C-w>n')
+vim.keymap.set('n', '<leader>wv', '<C-w>v')
+vim.keymap.set('n', '<leader>wm', '<CMD>only<CR>')
+vim.keymap.set('n', '<M-o>', '<C-w>w')
+vim.keymap.set('n', '<leader>wc', '<CMD>close<CR>')
+
+-- Move line up and down in NORMAL and VISUAL modes
+-- Reference: https://vim.fandom.com/wiki/Moving_lines_up_or_down
+vim.keymap.set('n', '<C-j>', '<CMD>move .+1<CR>')
+vim.keymap.set('n', '<C-k>', '<CMD>move .-2<CR>')
+vim.keymap.set('v', '<C-j>', ":move '>+1<CR>gv=gv")
+vim.keymap.set('v', '<C-k>', ":move '<-2<CR>gv=gv")
diff --git a/.config/nvim/lua/plugins.lua b/.config/nvim/lua/plugins.lua
@@ -0,0 +1,31 @@
+local ensure_packer = function()
+ local fn = vim.fn
+ local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim'
+ if fn.empty(fn.glob(install_path)) > 0 then
+ fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path})
+ vim.cmd [[packadd packer.nvim]]
+ return true
+ end
+ return false
+end
+
+local packer_bootstrap = ensure_packer()
+
+return require('packer').startup({
+ function(use)
+ use('wbthomason/packer.nvim')
+ use('nvim-lua/plenary.nvim')
+
+ use('tpope/vim-commentary')
+ use('mg979/vim-visual-multi')
+ use('rhysd/clever-f.vim')
+ -- use({'nvim-treesitter/nvim-treesitter', run = ':TSUpdate'})
+ use('norcalli/snippets.nvim')
+ use('rbgrouleff/bclose.vim')
+ use('chentoast/marks.nvim')
+ -- use('chaoren/vim-wordmotion')
+ use { "catppuccin/nvim", as = "catppuccin" }
+ use('zekzekus/menguless')
+
+ end
+})
diff --git a/.config/nvim/lua/settings.lua b/.config/nvim/lua/settings.lua
@@ -0,0 +1,36 @@
+local o = vim.o
+local g = vim.g
+
+g.mapleader = " "
+g.netrw_keepdir = 0
+g.netrw_banner = 0
+g.netrw_winsize = 15
+g.netrw_localcopydircmd = 'cp -r'
+-- o.termguicolors = true
+g.zig_fmt_autosave = 0
+
+-- vim.cmd('set termguicolors')
+-- vim.cmd('colorscheme GruberDarker')
+vim.cmd('set wrap!')
+vim.cmd('set makeprg=./build.sh')
+
+o.mouse = 'a'
+o.relativenumber = true
+o.number = true
+o.expandtab = true
+o.tabstop = 4
+o.shiftwidth = 4
+-- o.autochdir = true
+o.guifont = "Liberation Mono:h10"
+
+-- my super cool c indentation style
+o.cindent = true
+o.cino = "l1,t0,(0" -- :0 will align case to the switch statement
+
+o.swapfile = false
+o.backup = false
+-- o.scrolloff = 8
+
+osmartcase = true
+
+o.clipboard = 'unnamedplus'
diff --git a/.config/sway/config b/.config/sway/config
@@ -0,0 +1,218 @@
+### Variables
+#
+# Logo key. Use Mod1 for Alt.
+set $mod Mod4
+
+# Home row direction keys, like vim
+set $left h
+set $down j
+set $up k
+set $right l
+
+# Your preferred terminal emulator
+set $term foot
+
+# Your preferred application launcher
+# Note: pass the final command to swaymsg so that the resulting window can be opened
+# on the original workspace that the command was run on.
+set $menu dmenu_path | wmenu | xargs swaymsg exec --
+
+include /etc/sway/config-vars.d/*
+
+include ./hardware-specific-config
+
+exec dbus-update-activation-environment WAYLAND_DISPLAY
+
+### Key bindings
+#
+# Basics:
+#
+ # Start a terminal
+ bindsym $mod+Return exec $term
+
+ # launch browser
+ bindsym $mod+b exec firefox
+
+ # bookmark script
+ bindsym $mod+Shift+b exec bookmarks
+
+ # ssh-client script
+ bindsym $mod+Shift+Return exec sshmenu
+
+ # emacs
+ bindsym $mod+e exec emacs
+
+ # launch pcmanfm
+ bindsym $mod+F2 exec pcmanfm
+
+ # screenshot
+ bindsym $mod+s exec grimshot copy window
+ bindsym $mod+Shift+s exec grimshot copy area
+
+ # passmenu
+ bindsym $mod+p exec passmenu-otp
+
+ # pavucontrol
+ bindsym $mod+F1 exec pavucontrol
+
+ # lock screen
+ bindsym $mod+Delete exec --no-startup-id "swaylock -f -c 181818"
+
+ # Kill focused window
+ bindsym $mod+Shift+c kill
+
+ # Start your launcher
+ bindsym $mod+d exec j4-dmenu-desktop --dmenu="wmenu -i" --term="foot"
+ bindsym $mod+Shift+d exec $menu
+
+ # Audio binds
+ bindsym XF86AudioMute exec wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
+ bindsym XF86AudioLowerVolume exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%-
+ bindsym XF86AudioRaiseVolume exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%+
+
+ bindsym XF86AudioPlay exec playerctl play-pause
+
+ # Brightness
+ bindsym XF86MonBrightnessUp exec brightness up
+ bindsym XF86MonBrightnessDown exec brightness down
+
+ # Drag floating windows by holding down $mod and left mouse button.
+ # Resize them with right mouse button + $mod.
+ # Despite the name, also works for non-floating windows.
+ # Change normal to inverse to use left mouse button for resizing and right
+ # mouse button for dragging.
+ floating_modifier $mod normal
+
+ # toggle bar
+ bindsym $mod+comma bar mode toggle
+
+ # Reload the configuration file
+ bindsym $mod+Control+r reload
+
+ # Exit sway (logs you out of your Wayland session)
+ bindsym $mod+Control+q exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit'
+
+#
+# Moving around:
+#
+ # Move your focus around
+ bindsym $mod+$left focus left
+ bindsym $mod+$down focus down
+ bindsym $mod+$up focus up
+ bindsym $mod+$right focus right
+ # Or use $mod+[up|down|left|right]
+ bindsym $mod+Left focus left
+ bindsym $mod+Down focus down
+ bindsym $mod+Up focus up
+ bindsym $mod+Right focus right
+
+ # Move the focused window with the same, but add Shift
+ bindsym $mod+Shift+$left move left
+ bindsym $mod+Shift+$down move down
+ bindsym $mod+Shift+$up move up
+ bindsym $mod+Shift+$right move right
+ # Ditto, with arrow keys
+ bindsym $mod+Shift+Left move left
+ bindsym $mod+Shift+Down move down
+ bindsym $mod+Shift+Up move up
+ bindsym $mod+Shift+Right move right
+#
+# Workspaces:
+#
+ # Switch to workspace
+ bindsym $mod+1 workspace number 1
+ bindsym $mod+2 workspace number 2
+ bindsym $mod+3 workspace number 3
+ bindsym $mod+4 workspace number 4
+ bindsym $mod+5 workspace number 5
+ bindsym $mod+6 workspace number 6
+ bindsym $mod+7 workspace number 7
+ bindsym $mod+8 workspace number 8
+ bindsym $mod+9 workspace number 9
+ bindsym $mod+0 workspace number 10
+ # Move focused container to workspace
+ bindsym $mod+Shift+1 move container to workspace number 1
+ bindsym $mod+Shift+2 move container to workspace number 2
+ bindsym $mod+Shift+3 move container to workspace number 3
+ bindsym $mod+Shift+4 move container to workspace number 4
+ bindsym $mod+Shift+5 move container to workspace number 5
+ bindsym $mod+Shift+6 move container to workspace number 6
+ bindsym $mod+Shift+7 move container to workspace number 7
+ bindsym $mod+Shift+8 move container to workspace number 8
+ bindsym $mod+Shift+9 move container to workspace number 9
+ bindsym $mod+Shift+0 move container to workspace number 10
+ # Note: workspaces can have any name you want, not just numbers.
+ # We just use 1-10 as the default.
+#
+# Layout stuff:
+#
+ # toggle split orientation
+ bindsym $mod+v split t
+
+ bindsym $mod+Tab layout toggle tabbed split
+
+ workspace_layout tabbed
+
+ # Make the current focus fullscreen
+ bindsym $mod+f fullscreen
+
+ # Toggle the current focus between tiling and floating mode
+ bindsym $mod+Shift+space floating toggle
+
+ # Swap focus between the tiling area and the floating area
+ bindsym $mod+space focus mode_toggle
+
+ # Move focus to the parent container
+ bindsym $mod+a focus parent
+
+ for_window [class="steam" title="Friends List"] floating enable
+#
+# Scratchpad:
+#
+ # Sway has a "scratchpad", which is a bag of holding for windows.
+ # You can send windows there and get them back later.
+
+ # Move the currently focused window to the scratchpad
+ bindsym $mod+Shift+minus move scratchpad
+
+ # Show the next scratchpad window or hide the focused scratchpad window.
+ # If there are multiple scratchpad windows, this command cycles through them.
+ bindsym $mod+minus scratchpad show
+#
+# Resizing containers:
+#
+mode "resize" {
+ # left will shrink the containers width
+ # right will grow the containers width
+ # up will shrink the containers height
+ # down will grow the containers height
+ bindsym $left resize shrink width 10px
+ bindsym $down resize grow height 10px
+ bindsym $up resize shrink height 10px
+ bindsym $right resize grow width 10px
+
+ # Ditto, with arrow keys
+ bindsym Left resize shrink width 10px
+ bindsym Down resize grow height 10px
+ bindsym Up resize shrink height 10px
+ bindsym Right resize grow width 10px
+
+ # Return to default mode
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+}
+bindsym $mod+r mode "resize"
+
+#
+# Status Bar:
+#
+# Read `man 5 sway-bar` for more information about this section.
+bar {
+ position bottom
+
+ # When the status_command prints a new line to stdout, swaybar updates.
+ # The default just shows the current date and time.
+ status_command i3status
+}
+
+include /etc/sway/config.d/*
diff --git a/.emacs b/.emacs
@@ -0,0 +1,530 @@
+;;; https://github.com/hrs/dotfiles/blob/main/emacs/.config/emacs/configuration.org
+
+(setq custom-file (concat user-emacs-directory "custom.el"))
+(add-to-list 'load-path "~/.emacs.local")
+(add-to-list 'custom-theme-load-path "~/.emacs.local")
+(when (file-exists-p custom-file)
+ (load custom-file))
+
+;;; Appearance and basic functionality
+(menu-bar-mode -1)
+(tool-bar-mode -1)
+(scroll-bar-mode -1)
+
+(setq default-frame-alist '((font . "Iosevka-12")))
+;; (setq default-frame-alist '((font . "Liberation Mono-10")))
+(defun my/disable-scroll-bars (frame)
+ (modify-frame-parameters frame
+ '((vertical-scroll-bars . nil)
+ (horizontal-scroll-bars . nil))))
+
+(add-hook 'after-make-frame-functions 'my/disable-scroll-bars)
+
+(setq-default indent-tabs-mode nil)
+(setq-default tab-width 4)
+(setq inhibit-splash-screen t
+ inhibit-startup-message t
+ scroll-step 3
+ auto-save-default nil
+ make-backup-files nil
+ blink-cursor-mode nil
+ ring-bell-function 'ignore
+ display-line-numbers-type 'relative
+ transient-mark-mode nil
+ dired-listing-switches "-alh --group-directories-first"
+ compilation-scroll-output t
+ gc-cons-threshold 100000000
+ compilation-ask-about-save nil
+ frame-resize-pixelwise t
+ mouse-drag-mode-line-buffer 1
+ display-time-24hr-format t
+ )
+
+;; (global-hl-line-mode 1)
+(global-display-line-numbers-mode)
+
+;;; Package installs and configuration
+(require 'package)
+(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
+(package-initialize)
+
+(eval-when-compile
+ (require 'use-package))
+
+(use-package gruber-darker-theme
+ :ensure)
+
+(use-package minions
+ :ensure t
+
+ :custom
+ (minions-mode-line-delimiters (cons "" ""))
+
+ :config
+ (defun +set-minions-mode-line-lighter ()
+ (setq minions-mode-line-lighter
+ (if (display-graphic-p) "⚙" "#")))
+
+ (add-hook 'server-after-make-frame-hook #'+set-minions-mode-line-lighter)
+ (display-time-mode 1)
+ (display-battery-mode 1)
+ (minions-mode 1))
+
+(use-package naysayer-theme
+ :ensure)
+
+(use-package zenburn-theme
+ :ensure)
+
+(use-package undo-fu
+ :ensure)
+
+(use-package savehist
+ :init
+ (savehist-mode))
+
+(use-package eat
+ :ensure)
+ ;; (add-hook 'eshell-first-time-mode-hook #'eat-eshell-mode))
+
+(use-package vertico
+ :ensure
+ :init
+ (vertico-mode)
+ (setq vertico-cycle t)
+ :config
+ (setq vertico-multiform-categories
+ '((consult-grep
+ buffer
+ (vertico-buffer-display-action . (display-buffer-same-window))))))
+
+(use-package orderless
+ :ensure
+ :init
+ ;; Configure a custom style dispatcher (see the Consult wiki)
+ ;; (setq orderless-style-dispatchers '(+orderless-consult-dispatch orderless-affix-dispatch)
+ ;; orderless-component-separator #'orderless-escapable-split-on-space)
+ (setq completion-styles '(orderless basic)
+ completion-category-defaults nil
+ completion-category-overrides '((file (styles partial-completion))))
+ :config
+ (vertico-multiform-mode)
+ (setq vertico-multiform-categories
+ '((consult-grep buffer))))
+
+(use-package dired
+ :config
+ (setq dired-clean-up-buffers-too t
+ dired-dwim-target t
+ dired-recursive-copies 'always
+ dired-recursive-deletes 'top
+ global-auto-revert-non-file-buffers t
+ auto-revert-verbose nil))
+
+(use-package marginalia
+ :ensure
+ :init
+ (marginalia-mode))
+
+(use-package consult
+ :ensure)
+
+(use-package evil
+ :ensure
+ :init
+ (setq evil-want-keybinding nil)
+ (setq evil-undo-system 'undo-fu)
+ :config
+ (evil-mode 1))
+
+(use-package evil-surround
+ :ensure
+ :config
+ (global-evil-surround-mode 1))
+
+(use-package evil-collection
+ :ensure
+ :init
+ (evil-collection-init))
+
+(use-package evil-multiedit
+ :ensure
+ :config
+ ;; Sets the colour of the region
+ (evil-multiedit-default-keybinds))
+
+(use-package evil-snipe
+ :ensure
+ :config
+ (add-hook 'magit-mode-hook 'turn-off-evil-snipe-override-mode)
+ (evil-snipe-override-mode 1))
+
+;; (use-package smex
+;; :ensure
+;; :config
+;; (smex-initialize)
+;; :bind
+;; ("M-x" . smex)
+;; ("M-X" . smex-major-mode-commands))
+
+(use-package which-key
+ :ensure
+ :config
+ (which-key-mode))
+
+(use-package company
+ :ensure
+ :config
+ (setq company-idle-delay nil)
+ (global-company-mode)
+ :bind
+ ("C-<return>" . company-complete)
+ ("C-<tab>" . dabbrev-expand))
+
+(use-package yasnippet
+ :ensure
+ :config
+ (require 'company)
+ ;; Add yasnippet support for all company backends
+ ;; https://github.com/syl20bnr/spacemacs/pull/179
+ (defvar company-mode/enable-yas t
+ "Enable yasnippet for all backends.")
+
+ (defun company-mode/backend-with-yas (backend)
+ (if (or (not company-mode/enable-yas) (and (listp backend) (member 'company-yasnippet backend)))
+ backend
+ (append (if (consp backend) backend (list backend))
+ '(:with company-yasnippet))))
+ (setq company-backends (mapcar #'company-mode/backend-with-yas company-backends))
+ (setq yas-snippet-dirs '("~/.emacs.snippets"))
+ (yas-global-mode 1))
+
+(use-package general
+ :ensure
+ :config
+ (general-evil-setup t))
+
+(use-package hl-todo
+ :ensure
+ :config
+ (setq hl-todo-keyword-faces
+ '(("TODO" . "#FF0000")
+ ("NOTE" . "#00FF00")
+ ("IMPORTANT" . "#FFFF00")))
+ :init
+ (global-hl-todo-mode))
+
+(use-package dumb-jump
+ :ensure
+ :config
+ (add-hook 'xref-backend-functions #'dumb-jump-xref-activate))
+
+(use-package magit
+ :ensure)
+
+(use-package go-mode
+ :ensure)
+
+(use-package lua-mode
+ :ensure)
+
+(use-package rust-mode
+ :ensure)
+
+(use-package zig-mode
+ :ensure
+ :config
+ (setq zig-format-on-save nil))
+
+(use-package glsl-mode
+ :ensure)
+
+(use-package evil-commentary
+ :ensure
+ :config
+ (evil-commentary-mode))
+
+(use-package org
+ :defer t
+ :hook (org-mode . (lambda ()
+ (display-line-numbers-mode -1))))
+
+(use-package org-download
+ :ensure
+ :after (org)
+ :init
+ ;; remove the stupid #+DOWNLOADED annotation
+ (defun dummy-org-download-annotate-function (link)
+ "")
+ (setq org-download-annotate-function #'dummy-org-download-annotate-function)
+
+ (setq org-download-method 'directory)
+ (setq org-download-image-dir (concat (file-name-sans-extension (buffer-file-name)) "-images"))
+ (setq org-download-image-org-width 600)
+ (setq org-download-link-format "[[file:%s]]\n")
+ (setq org-download-abbreviate-filename-function #'file-relative-name)
+ (setq org-download-link-format-function #'org-download-link-format-function-default))
+
+(use-package org-tempo
+ :after (org)
+ :config
+ (add-to-list 'org-structure-template-alist
+ '("el" . "src emacs-lisp")))
+
+(use-package evil-org
+ :ensure t
+ :after org
+ :hook (org-mode . (lambda () evil-org-mode))
+ :config
+ (require 'evil-org-agenda)
+ (evil-org-agenda-set-keys))
+
+(use-package org-bullets
+ :disabled
+ :ensure
+ :config
+ (add-hook 'org-mode-hook #'(lambda () (org-bullets-mode 1))))
+
+(use-package ido
+ :config
+ (setq ido-enable-flex-matching t
+ ido-everywhere t
+ ido-show-dot-for-dired t
+ ido-auto-merge-work-directories-length -1)
+ (ido-mode 0))
+
+(defun ido-goto-symbol (&optional symbol-list)
+ "Refresh imenu and jump to a place in the buffer using Ido."
+ (interactive)
+ (unless (featurep 'imenu)
+ (require 'imenu nil t))
+ (cond
+ ((not symbol-list)
+ (let ((ido-mode ido-mode)
+ (ido-enable-flex-matching
+ (if (boundp 'ido-enable-flex-matching)
+ ido-enable-flex-matching t))
+ name-and-pos symbol-names position)
+ (unless ido-mode
+ (ido-mode 1)
+ (setq ido-enable-flex-matching t))
+ (while (progn
+ (imenu--cleanup)
+ (setq imenu--index-alist nil)
+ (ido-goto-symbol (imenu--make-index-alist))
+ (setq selected-symbol
+ (ido-completing-read "Goto: " symbol-names))
+ (string= (car imenu--rescan-item) selected-symbol)))
+ (unless (and (boundp 'mark-active) mark-active)
+ (push-mark nil t nil))
+ (setq position (cdr (assoc selected-symbol name-and-pos)))
+ (cond
+ ((overlayp position)
+ (goto-char (overlay-start position)))
+ (t
+ (goto-char position)))))
+ ((listp symbol-list)
+ (dolist (symbol symbol-list)
+ (let (name position)
+ (cond
+ ((and (listp symbol) (imenu--subalist-p symbol))
+ (ido-goto-symbol symbol))
+ ((listp symbol)
+ (setq name (car symbol))
+ (setq position (cdr symbol)))
+ ((stringp symbol)
+ (setq name symbol)
+ (setq position
+ (get-text-property 1 'org-imenu-marker symbol))))
+ (unless (or (null position) (null name)
+ (string= (car imenu--rescan-item) name))
+ (add-to-list 'symbol-names name)
+ (add-to-list 'name-and-pos (cons name position))))))))
+
+;;; C-mode
+(setq-default c-basic-offset 4
+ c-default-style '((java-mode . "java")
+ (awk-mode . "awk")
+ (other . "bsd")))
+(c-set-offset 'case-label '+)
+
+(font-lock-add-keywords 'c-mode
+ '(("internal" . font-lock-keyword-face)
+ ("global" . 'font-lock-keyword-face)))
+
+;;; Keybinds
+(defun my/eshell ()
+ "Open eshell in other window"
+ (interactive)
+ (split-window-sensibly)
+ (other-window 1)
+ (eshell))
+
+;; Binds with SPC prefix
+(nvmap :keymaps 'override :prefix "SPC"
+ "." '(find-file :which-key "Find File")
+ ">" '(find-file-other-window :which-key "Open file in other window")
+ "," '(ido-switch-buffer :which-key "Switch Buffer")
+ "<" '(ido-switch-buffer-other-window :which-key "Open buffer in other window")
+ "/" '(consult-grep :which-key "Run grep in cwd")
+ "g g" '(magit :which-key "Magit")
+ "o -" '(dired-jump :which-key "Open Dired here")
+ "o t" '(eshell :which-key "Open eshell in other window")
+ "o T" '(my/eshell :which-key "Open eshell here")
+
+ ;; Compile Binds
+ "c" '(recompile :which-key "Recompile")
+ "C" '(compile :which-key "Compile")
+
+ ;; Window Binds
+ "w w" '(evil-window-next :which-key "Cycle through windows")
+ "w h" '(evil-window-left :which-key "Move left a window")
+ "w l" '(evil-window-right :which-key "Move right a window")
+ "w j" '(evil-window-down :which-key "Move down a window")
+ "w k" '(evil-window-up :which-key "Move up a window")
+ "w m" '(delete-other-windows :which-key "Maximize current window")
+ "w n" '(evil-window-new :which-key "Open a new window")
+ "w c" '(evil-window-delete :which-key "Close active window")
+ "w s" '(evil-window-split :which-key "Split current window horizontally")
+ "w v" '(evil-window-vsplit :which-key "Split current window vertically")
+
+ ;; Buffer Binds
+ "b p" '(previous-buffer :which-key "Open previous buffer")
+ "b n" '(next-buffer :which-key "Open next buffer")
+ "b k" '(kill-current-buffer :which-key "Kill current buffer"))
+
+(defun previous-blank-line ()
+ "Moves to the previous line containing nothing but whitespace."
+ (interactive)
+ (search-backward-regexp "^[ \t]*\n"))
+
+(defun next-blank-line ()
+ "Moves to the next line containing nothing but whitespace."
+ (interactive)
+ (forward-line)
+ (search-forward-regexp "^[ \t]*\n")
+ (forward-line -1))
+
+(defun indent-buffer ()
+ "Run indent-region on entire buffer"
+ (interactive)
+ (indent-region (point-min) (point-max) nil))
+;; (add-hook 'before-save-hook 'indent-buffer)
+
+(defun find-corresponding-file ()
+ "Find the file that corresponds to this one."
+ (interactive)
+ (setq CorrespondingFileName nil)
+ (setq BaseFileName (file-name-sans-extension buffer-file-name))
+ (if (string-match "\\.c" buffer-file-name)
+ (setq CorrespondingFileName (concat BaseFileName ".h")))
+ (if (string-match "\\.h" buffer-file-name)
+ (if (file-exists-p (concat BaseFileName ".c")) (setq CorrespondingFileName (concat BaseFileName ".c"))
+ (setq CorrespondingFileName (concat BaseFileName ".cpp"))))
+ (if (string-match "\\.hin" buffer-file-name)
+ (setq CorrespondingFileName (concat BaseFileName ".cin")))
+ (if (string-match "\\.cin" buffer-file-name)
+ (setq CorrespondingFileName (concat BaseFileName ".hin")))
+ (if (string-match "\\.cpp" buffer-file-name)
+ (setq CorrespondingFileName (concat BaseFileName ".h")))
+ (if CorrespondingFileName (find-file CorrespondingFileName)
+ (error "Unable to find a corresponding file")))
+
+(defun find-corresponding-file-other-window ()
+ "Finds the file that corresponds to this and opens it in the other window."
+ (interactive)
+ (find-file-other-window buffer-file-name)
+ (find-corresponding-file))
+
+;; Normal mode binds
+(general-nmap
+ "C-e" 'move-end-of-line
+ "C-j" 'evil-collection-unimpaired-move-text-down
+ "C-k" 'evil-collection-unimpaired-move-text-up
+ "C-d" 'kill-region
+ "M-j" 'evil-forward-paragraph
+ "M-k" 'evil-backward-paragraph
+ "M-v" 'find-corresponding-file
+ [(meta shift v)] 'find-corresponding-file-other-window)
+
+;; Insert mode binds
+(general-imap
+ "C-y" 'evil-paste-after
+ "C-a" 'move-beginning-of-line
+ "C-e" 'move-end-of-line)
+
+(general-imap
+ :keymaps 'eshell-mode-map
+ "M-p" 'eshell-previous-matching-input-from-input
+ "M-n" 'eshell-next-matching-input-from-input)
+
+;; Binds without SPC prefix
+(general-define-key
+ :keymaps 'override
+ "M-N" 'previous-error
+ "M-P" 'next-error
+ "M-o" 'other-window
+ "<f2>" 'ido-goto-symbol)
+
+;;; Launch gud-gdb in a new window
+(defun my/gud ()
+ "Run gud-gdb in other window"
+ (interactive)
+ (setq files (directory-files (file-name-directory buffer-file-name)))
+ (setq input (completing-read "executable: " files))
+ (split-window-sensibly)
+ (other-window 1)
+ (gud-gdb (concat "gdb --fullname " input)))
+
+;; Sets the default compile command based on OS
+(if (string= system-type "windows-nt")
+ (setq compile-command "build.bat")
+ (setq compile-command "./build.sh"))
+
+(defun disable-all-themes ()
+ "Disables all active themes."
+ (interactive)
+ (dolist (i custom-enabled-themes)
+ (disable-theme i)))
+
+(defun update-theme ()
+ "Set theme based on time of day"
+ (interactive)
+ (let ((hour (nth 2 (parse-time-string (current-time-string)))))
+ (disable-all-themes)
+ (if (and (> hour 9)
+ (< hour 18))
+ (load-theme 'zenburn t)
+ (load-theme 'gruber-darker t))))
+
+(defun swap-theme ()
+ "Swaps theme to either zenburn or gruber-darker"
+ (interactive)
+ (let ((theme (nth 0 custom-enabled-themes)))
+ (disable-all-themes)
+ (if (string= theme "gruber-darker")
+ (load-theme 'zenburn t)
+ (load-theme 'gruber-darker t))))
+
+(defun transparency (value)
+ "Sets the transparency of the frame window. 0=transparent/100=opaque"
+ (interactive "nTransparency Value 0 - 100 opaque: ")
+ (set-frame-parameter (selected-frame) 'alpha-background value))
+
+;; (split-window-horizontally)
+(toggle-frame-maximized)
+(set-default 'truncate-lines t)
+;; (list-colors-display) for a color picker
+(load-theme 'toxi t)
+(transparency 85)
+
+;; ;; Startup time
+;; (defun efs/display-startup-time ()
+;; (message
+;; "Emacs loaded in %s with %d garbage collections."
+;; (format
+;; "%.2f seconds"
+;; (float-time
+;; (time-subtract after-init-time before-init-time)))
+;; gcs-done))
+;; (add-hook 'emacs-startup-hook #'efs/display-startup-time)
diff --git a/.emacs.local/handmade-theme.el b/.emacs.local/handmade-theme.el
@@ -0,0 +1,38 @@
+(unless (<= 24 emacs-major-version)
+ (error "handmade-theme requires Emacs 24 or later."))
+
+(deftheme handmade
+ "Dark theme based on Casey Muratori's handmade hero theme")
+
+(custom-theme-set-faces
+ 'handmade
+ `(default ((t (:foreground "burlywood3" :background "#181818"))))
+ `(cursor ((t (:background "#40FF40"))))
+ `(region ((t (:background "dark blue"))))
+ `(font-lock-builtin-face ((t (:foreground "burlywood3"))))
+ `(font-lock-comment-face ((t (:foreground "gray50"))))
+ ;; `(font-lock-constant-face ((t (:foreground "olive drab"))))
+ `(font-lock-doc-face ((t (:foreground "gray50"))))
+ `(font-lock-function-name-face ((t (:foreground "burlywood3"))))
+ `(font-lock-keyword-face ((t (:foreground "DarkGoldenrod3"))))
+ `(font-lock-string-face ((t (:foreground "olive drab"))))
+ `(font-lock-type-face ((t (:foreground "burlywood3"))))
+ `(font-lock-variable-name-face ((t (:foreground "burlywood3"))))
+ `(font-lock-constant-face ((t (:foreground "burlywood3"))))
+ `(mode-line ((t (:background "#242424"))))
+ ;; dired
+ `(dired-directory ((t (:foreground "DarkGoldenrod3"))))
+ `(dired-symlink ((t (:foreground "cyan"))))
+ ;; vertico
+ `(vertico-current ((t (:background "navy"))))
+ ;; ido
+ `(ido-subdir ((t (:foreground "cyan"))))
+ ;; iedit
+ `(iedit-occurrence ((t (:background "navy")))))
+
+;;;###autoload
+(when load-file-name
+ (add-to-list 'custom-theme-load-path
+ (file-name-as-directory (file-name-directory load-file-name))))
+
+(provide-theme 'handmade)
diff --git a/.emacs.local/toxi-theme.el b/.emacs.local/toxi-theme.el
@@ -0,0 +1,65 @@
+(unless (<= 24 emacs-major-version)
+ (error "toxi-theme requires Emacs 24 or later."))
+
+(deftheme toxi
+ "toxi's dark color theme - forked to my liking")
+
+(custom-theme-set-faces
+ 'toxi
+ ;; frame
+ `(default ((t (:foreground "#a4ffd8" :background "#0b1210"))))
+ `(cursor ((t (:foreground "white"))))
+ `(hl-line ((t (:background "#272822"))))
+ `(minibuffer-prompt ((t (:foreground "#14bccc" :bold t))))
+ `(modeline ((t (:background "#465253" :foreground "#ffffff"))))
+ `(modeline-inactive ((t (:background "#162223" :foreground "#355e6b"))))
+ `(region ((t (:background "#441ea4"))))
+ `(show-paren-match-face ((t (:background "#ffff00"))))
+ ;; main
+ `(font-lock-builtin-face ((t (:foreground "#00ffff"))))
+ `(font-lock-comment-face ((t (:foreground "#7d7d7d"))))
+ `(font-lock-constant-face ((t (:foreground "#f2ee81"))))
+ `(font-lock-doc-string-face ((t (:foreground "#40be67"))))
+ `(font-lock-function-name-face ((t (:foreground "#a4ffd8"))))
+ `(font-lock-keyword-face ((t (:foreground "#ffff00"))))
+ `(font-lock-string-face ((t (:foreground "#50de77"))))
+ `(font-lock-type-face ((t (:foreground "#a4ffd8"))))
+ `(font-lock-variable-name-face ((t (:foreground "#a4ffd8"))))
+ `(font-lock-warning-face ((t (:bold t :foreground "#ff0055"))))
+ ;; dired
+ `(dired-directory ((t (:bold t :foreground "#ffff00"))))
+ `(dired-symlink ((t (:bold t :foreground "#00ffff"))))
+ ;; rainbow-delimiters
+ `(rainbow-delimiters-depth-1-face ((t (:foreground "#990000"))))
+ `(rainbow-delimiters-depth-2-face ((t (:foreground "#383838"))))
+ `(rainbow-delimiters-depth-3-face ((t (:foreground "#505050"))))
+ `(rainbow-delimiters-depth-4-face ((t (:foreground "#6c6c6c"))))
+ `(rainbow-delimiters-depth-5-face ((t (:foreground "#888888"))))
+ `(rainbow-delimiters-depth-6-face ((t (:foreground "#a7a7a7"))))
+ `(rainbow-delimiters-depth-7-face ((t (:foreground "#c4c4c4"))))
+ `(rainbow-delimiters-depth-8-face ((t (:foreground "#e1e1e1"))))
+ `(rainbow-delimiters-depth-9-face ((t (:foreground "#ffffff"))))
+ ;; ido
+ `(ido-first-match ((t (:foreground "#ffff00"))))
+ `(ido-only-match ((t (:foreground "#00ff00"))))
+ `(ido-subdir ((t (:foreground "#00ffff"))))
+ ;; iedit
+ `(iedit-occurrence ((t (:background "#441ea4"))))
+ ;; whitespace
+ `(whitespace-space ((t (:foreground "#595959"))))
+ ;; yasnippet
+ `(yas/field-highlight-face ((t (:background "#383830"))))
+ ;; vertico
+ `(vertico-current ((t (:background "#441ea4"))))
+ ;; org
+ `(org-hide ((t (:foreground "#0b1210"))))
+ `(org-block ((t (:background "#1b2220"))))
+ `(org-link ((t (:foreground "#56cff2" :underline t)))))
+
+;;;###autoload
+(when load-file-name
+ (add-to-list 'custom-theme-load-path
+ (file-name-as-directory (file-name-directory load-file-name))))
+
+(provide-theme 'toxi)
+
diff --git a/.emacs.snippets/c++-mode/.yas-parents b/.emacs.snippets/c++-mode/.yas-parents
@@ -0,0 +1 @@
+c-mode
+\ No newline at end of file
diff --git a/.emacs.snippets/c-mode/define b/.emacs.snippets/c-mode/define
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: define
+# key: d
+# --
+#define $0
+\ No newline at end of file
diff --git a/.emacs.snippets/c-mode/for b/.emacs.snippets/c-mode/for
@@ -0,0 +1,7 @@
+# -*- mode: snippet -*-
+# name: for
+# key: for
+# --
+for (size_t ${1:i} = 0; $1 < $2; ++$1) {
+ $0
+}
+\ No newline at end of file
diff --git a/.emacs.snippets/c-mode/fprintf b/.emacs.snippets/c-mode/fprintf
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: fprintf
+# key: fpr
+# --
+fprintf($1, "$2");
+\ No newline at end of file
diff --git a/.emacs.snippets/c-mode/if b/.emacs.snippets/c-mode/if
@@ -0,0 +1,7 @@
+# -*- mode: snippet -*-
+# name: if
+# key: if
+# --
+if ($1) {
+ $0
+}
+\ No newline at end of file
diff --git a/.emacs.snippets/c-mode/include b/.emacs.snippets/c-mode/include
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: include
+# key: inc
+# --
+#include <$0>
+\ No newline at end of file
diff --git a/.emacs.snippets/c-mode/includeq b/.emacs.snippets/c-mode/includeq
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: includeq
+# key: incq
+# --
+#include "$0"
+\ No newline at end of file
diff --git a/.emacs.snippets/c-mode/main b/.emacs.snippets/c-mode/main
@@ -0,0 +1,9 @@
+# -*- mode: snippet -*-
+# name: main
+# key: main
+# --
+int
+main(int argc, char **argv) {
+ $0
+ return 0;
+}
+\ No newline at end of file
diff --git a/.emacs.snippets/c-mode/note b/.emacs.snippets/c-mode/note
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: note
+# key: note
+# --
+/* NOTE(jake): $0 */
+\ No newline at end of file
diff --git a/.emacs.snippets/c-mode/printf b/.emacs.snippets/c-mode/printf
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: printf
+# key: pr
+# --
+printf("$0");
+\ No newline at end of file
diff --git a/.emacs.snippets/c-mode/printf_args b/.emacs.snippets/c-mode/printf_args
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: printf_args
+# key: pra
+# --
+printf("$1", $0);
+\ No newline at end of file
diff --git a/.emacs.snippets/c-mode/sdlboil b/.emacs.snippets/c-mode/sdlboil
@@ -0,0 +1,29 @@
+# -*- mode: snippet -*-
+# name: sdlboil
+# key: sdlboil
+# --
+SDL_Init(SDL_INIT_VIDEO);
+
+SDL_Window *window = SDL_CreateWindow("SDL Boilerplate",
+ 0, 0,
+ 1280, 720,
+ SDL_WINDOW_RESIZABLE);
+
+SDL_Renderer *renderer = SDL_CreateRenderer(window, -1,
+ SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED);
+
+bool running = true;
+while (running) {
+ SDL_Event event = {0};
+ while (SDL_PollEvent(&event)) {
+ switch (event.type) {
+ case SDL_QUIT: {
+ running = false;
+ } break;
+ }
+ }
+ SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
+ SDL_RenderClear(renderer);
+ SDL_RenderPresent(renderer);
+}
+$0
+\ No newline at end of file
diff --git a/.emacs.snippets/c-mode/stdio b/.emacs.snippets/c-mode/stdio
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: stdio
+# key: stdio
+# --
+#include <stdio.h>
+\ No newline at end of file
diff --git a/.emacs.snippets/c-mode/stdlib b/.emacs.snippets/c-mode/stdlib
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: stdlib
+# key: stdlib
+# --
+#include <stdlib.h>
+\ No newline at end of file
diff --git a/.emacs.snippets/c-mode/struct b/.emacs.snippets/c-mode/struct
@@ -0,0 +1,6 @@
+# -*- mode: snippet -*-
+# name: struct
+# key: st
+# --
+typedef struct {
+} $0;
+\ No newline at end of file
diff --git a/.emacs.snippets/c-mode/todo b/.emacs.snippets/c-mode/todo
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: todo
+# key: todo
+# --
+/* TODO(jake): $0 */
+\ No newline at end of file
diff --git a/.emacs.snippets/fundamental-mode/mit b/.emacs.snippets/fundamental-mode/mit
@@ -0,0 +1,24 @@
+# -*- mode: snippet -*-
+# name: mit
+# key: mit
+# --
+Copyright `(format-time-string "%Y")` Jake Koroman <jakekoroman@gmail.com>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+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 OR COPYRIGHT HOLDERS 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.
+\ No newline at end of file
diff --git a/.emacs.snippets/zig-mode/note b/.emacs.snippets/zig-mode/note
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: note
+# key: note
+# --
+// NOTE(jake): $0
+\ No newline at end of file
diff --git a/.emacs.snippets/zig-mode/todo b/.emacs.snippets/zig-mode/todo
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: todo
+# key: todo
+# --
+// TODO(jake): $0
+\ No newline at end of file
diff --git a/.gitignore b/.gitignore
@@ -0,0 +1,3 @@
+.config/sway/hardware-specific-config
+.config/i3status/config
+.config/foot/foot.ini
diff --git a/.stow-local-ignore b/.stow-local-ignore
@@ -0,0 +1,8 @@
+\.git
+\.gitignore
+README.md
+
+device-specific
+shared-configs
+
+deploy
diff --git a/.tmux.conf b/.tmux.conf
@@ -0,0 +1,19 @@
+unbind C-b
+set -g prefix C-x
+bind C-x send-prefix
+
+set -g mouse on
+set-option -g history-limit 10000
+set -s escape-time 0
+
+set -g base-index 1
+setw -g pane-base-index 1
+
+set-option -g status-position "bottom"
+set-option -g status-style bg=default,fg=default
+set-option -g status-justify centre
+# set-option -g status-left '#[bg=default,fg=default,bold]#{?client_prefix,, (._.) }#[bg=#ffff00,fg=black,bold]#{?client_prefix, (._.) ,}'
+set-option -g status-left '#[bg=default,fg=default,bold]#{?client_prefix,, (._.) }#[bg=default,fg=red,bold]#{?client_prefix, (._.) ,}'
+set-option -g status-right '#H:#S'
+set-option -g window-status-format ' #I:#W '
+set-option -g window-status-current-format '#[bg=#ffff00,fg=#000000] #I:#W#{?window_zoomed_flag, , }'
diff --git a/README b/README
@@ -0,0 +1,4 @@
+bullshit
+-----
+
+stuff
diff --git a/deploy b/deploy
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# MUST BE RUN IN THE THIS DIRECTORY !!
+
+USAGE="Usage: ./deploy [laptop|desktop]"
+
+if test -z "$1"; then
+ echo $USAGE
+ exit
+fi
+
+if test "$1" = "laptop" || test $(echo "$1" | cut -c1-1) = "l" ; then
+ hardware="laptop"
+ FOOT_FONT="monospace:size=12"
+elif test "$1" = "desktop" || test $(echo "$1" | cut -c1-1) = "d"; then
+ hardware="desktop"
+ FOOT_FONT="Iosevka Nerd Font:size=14"
+else
+ echo $USAGE
+ exit
+fi
+
+symlink_file() {
+ input=$1
+ output=$2
+
+ rm -f $output
+ ln -s $input $output
+}
+
+symlink_file "$(pwd)/device-specific/$hardware/hardware" "$(pwd)/.config/sway/hardware-specific-config"
+symlink_file "$(pwd)/device-specific/$hardware/i3status" "$(pwd)/.config/i3status/config"
+
+cat "$(pwd)/shared-configs/foot/template.ini" | sed "s/{FOOT_FONT}/$FOOT_FONT/g" > "$(pwd)/.config/foot/foot.ini"
+
+stow -D . 2> /dev/null
+stow .
+
+echo "Successfully deployed $hardware's configuration"
diff --git a/device-specific/desktop/hardware b/device-specific/desktop/hardware
@@ -0,0 +1,14 @@
+font pango:Terminus 8
+titlebar_padding 1
+
+output * bg ~/Pictures/wallpapers/watermon-ai.jpg fill
+output DP-2 mode 1920x1080@144Hz pos 1920 0
+output DP-3 mode 1920x1080@144Hz pos 0 0
+
+input "1133:50504:Logitech_USB_Receiver_Mouse" {
+ accel_profile "flat"
+ pointer_accel -0.15
+}
+
+exec gentoo-pipewire-launcher &
+exec /usr/libexec/polkit-gnome-authentication-agent-1 &
diff --git a/device-specific/desktop/i3status b/device-specific/desktop/i3status
@@ -0,0 +1,56 @@
+# i3status configuration file.
+# see "man i3status" for documentation.
+
+# It is important that this file is edited as UTF-8.
+# The following line should contain a sharp s:
+# ß
+# If the above line is not correctly displayed, fix your editor first!
+
+general {
+ colors = true
+ interval = 5
+}
+
+order += "wireless _first_"
+order += "ethernet _first_"
+order += "disk /"
+order += "load"
+order += "memory"
+order += "volume master"
+order += "tztime local"
+
+wireless _first_ {
+ # format_up = "W: (%quality at %essid) %ip"
+ format_up = "W: (Signal%quality) %ip"
+ format_down = "W: down"
+}
+
+ethernet _first_ {
+ format_up = "E: %ip (%speed)"
+ format_down = "E: down"
+}
+
+disk "/" {
+ format = "%avail"
+}
+
+load {
+ format = "%1min"
+}
+
+memory {
+ format = "%used | %total"
+ threshold_degraded = "1G"
+ format_degraded = "MEMORY < %available"
+}
+
+tztime local {
+ format = "%A %Y-%m-%d %H:%M:%S"
+ locale = "fr_CA.utf8"
+}
+
+volume master {
+ format = "Volume: %volume"
+ format_muted = "Volume: muted (%volume)"
+ # device = "pulse:0"
+}
diff --git a/device-specific/laptop/hardware b/device-specific/laptop/hardware
@@ -0,0 +1,18 @@
+font pango:monospace 10
+titlebar_padding 1
+
+output eDP-1 bg ~/Pictures/wallpaper.jpg fill
+output eDP-1 resolution 2560x1440 scale 1.5
+
+exec swayidle -w \
+ timeout 300 'swaylock -f -c 000000' \
+ timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \
+ before-sleep 'swaylock -f -c 000000'
+
+input "1:1:AT_Translated_Set_2_keyboard" {
+ xkb_options "caps:escape"
+}
+
+input "2:10:TPPS/2_Elan_TrackPoint" {
+ pointer_accel -0.2
+}
diff --git a/device-specific/laptop/i3status b/device-specific/laptop/i3status
@@ -0,0 +1,61 @@
+# i3status configuration file.
+# see "man i3status" for documentation.
+
+# It is important that this file is edited as UTF-8.
+# The following line should contain a sharp s:
+# ß
+# If the above line is not correctly displayed, fix your editor first!
+
+general {
+ colors = true
+ interval = 5
+}
+
+order += "wireless _first_"
+order += "ethernet _first_"
+order += "disk /"
+order += "load"
+order += "memory"
+order += "volume master"
+order += "battery all"
+order += "tztime local"
+
+wireless _first_ {
+ # format_up = "W: (%quality at %essid) %ip"
+ format_up = "W: (Signal%quality) %ip"
+ format_down = "W: down"
+}
+
+ethernet _first_ {
+ format_up = "E: %ip (%speed)"
+ format_down = "E: down"
+}
+
+battery all {
+ format = "%status %percentage %remaining"
+}
+
+disk "/" {
+ format = "%avail"
+}
+
+load {
+ format = "%1min"
+}
+
+memory {
+ format = "%used | %total"
+ threshold_degraded = "1G"
+ format_degraded = "MEMORY < %available"
+}
+
+tztime local {
+ format = "%A %Y-%m-%d %H:%M:%S"
+ locale = "fr_CA.utf8"
+}
+
+volume master {
+ format = "Volume: %volume"
+ format_muted = "Volume: muted (%volume)"
+ # device = "pulse:0"
+}
diff --git a/scripts/bookmarks b/scripts/bookmarks
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+readarray -t bookmarks < ~/.bookmarks
+
+url=$(printf '%s\n' "${bookmarks[@]}" | wmenu -p "Bookmark" -i -l 4 | sed 's/^.*: //g')
+
+[[ ! -z "$url" ]] && firefox --new-tab $url
diff --git a/scripts/brightness b/scripts/brightness
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+fifo_path="/tmp/wobpipe-brightness"
+
+if test ! -e $fifo_path; then
+ killall wob
+ mkfifo $fifo_path
+ tail -f $fifo_path | wob &
+fi
+
+if test "$1" = "up"; then
+ brightnessctl s 10%+ | egrep -o "[0-9]*%" | sed "s/%//g" > $fifo_path
+elif test "$1" = "down"; then
+ brightnessctl s 10%- | egrep -o "[0-9]*%" | sed "s/%//g" > $fifo_path
+else
+ echo "Usage: ./brightness [up|down]"
+fi
diff --git a/scripts/sshmenu b/scripts/sshmenu
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+readarray -t servers < ~/.sshmenu
+
+server=$(printf '%s\n' "${servers[@]}" | wmenu -p "Server" -i -l 4 | sed 's/^.*: //g')
+
+[[ ! -z "$server" ]] && foot -e ssh -Y -X $server
diff --git a/shared-configs/foot/template.ini b/shared-configs/foot/template.ini
@@ -0,0 +1,225 @@
+# -*- conf -*-
+
+# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd)
+# term=foot (or xterm-256color if built with -Dterminfo=disabled)
+# login-shell=no
+
+# app-id=foot # globally set wayland app-id. Default values are "foot" and "footclient" for desktop and server mode
+# title=foot
+# locked-title=no
+
+font={FOOT_FONT}
+# font-bold=<bold variant of regular font>
+# font-italic=<italic variant of regular font>
+# font-bold-italic=<bold+italic variant of regular font>
+# font-size-adjustment=0.5
+# line-height=<font metrics>
+# letter-spacing=0
+# horizontal-letter-offset=0
+# vertical-letter-offset=0
+# underline-offset=<font metrics>
+# underline-thickness=<font underline thickness>
+# box-drawings-uses-font-glyphs=no
+# dpi-aware=no
+
+# initial-window-size-pixels=700x500 # Or,
+# initial-window-size-chars=<COLSxROWS>
+# initial-window-mode=windowed
+# pad=0x0 # optionally append 'center'
+# resize-delay-ms=100
+
+# notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body}
+
+# bold-text-in-bright=no
+# word-delimiters=,│`|:"'()[]{}<>
+# selection-target=primary
+# workers=<number of logical CPUs>
+# utmp-helper=/usr/lib/utempter/utempter # When utmp backend is ‘libutempter’ (Linux)
+# utmp-helper=/usr/libexec/ulog-helper # When utmp backend is ‘ulog’ (FreeBSD)
+
+[environment]
+# name=value
+
+[bell]
+# urgent=no
+# notify=no
+# visual=no
+# command=
+# command-focused=no
+
+[scrollback]
+# lines=1000
+# multiplier=3.0
+# indicator-position=relative
+# indicator-format=""
+
+[url]
+# launch=xdg-open ${url}
+# label-letters=sadfjklewcmpgh
+# osc8-underline=url-mode
+# protocols=http, https, ftp, ftps, file, gemini, gopher
+# uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="'()[]
+
+[cursor]
+# style=block
+# color=<inverse foreground/background>
+# blink=no
+# beam-thickness=1.5
+# underline-thickness=<font underline thickness>
+
+[mouse]
+# hide-when-typing=no
+# alternate-scroll-mode=yes
+
+[touch]
+# long-press-delay=400
+
+[colors]
+alpha=0.9
+# background=242424
+# foreground=ffffff
+# flash=7f7f00
+# flash-alpha=0.5
+
+## Normal/regular colors (color palette 0-7)
+# regular0=242424 # black
+# regular1=f62b5a # red
+# regular2=47b413 # green
+# regular3=e3c401 # yellow
+# regular4=24acd4 # blue
+# regular5=f2affd # magenta
+# regular6=13c299 # cyan
+# regular7=e6e6e6 # white
+
+## Bright colors (color palette 8-15)
+# bright0=616161 # bright black
+# bright1=ff4d51 # bright red
+# bright2=35d450 # bright green
+# bright3=e9e836 # bright yellow
+# bright4=5dc5f8 # bright blue
+# bright5=feabf2 # bright magenta
+# bright6=24dfc4 # bright cyan
+# bright7=ffffff # bright white
+
+## dimmed colors (see foot.ini(5) man page)
+# dim0=<not set>
+# ...
+# dim7=<not-set>
+
+## The remaining 256-color palette
+# 16 = <256-color palette #16>
+# ...
+# 255 = <256-color palette #255>
+
+## Misc colors
+# selection-foreground=<inverse foreground/background>
+# selection-background=<inverse foreground/background>
+# jump-labels=<regular0> <regular3> # black-on-yellow
+# scrollback-indicator=<regular0> <bright4> # black-on-bright-blue
+# search-box-no-match=<regular0> <regular1> # black-on-red
+# search-box-match=<regular0> <regular3> # black-on-yellow
+# urls=<regular3>
+
+[csd]
+# preferred=server
+# size=26
+# font=<primary font>
+# color=<foreground color>
+# hide-when-maximized=no
+# double-click-to-maximize=yes
+# border-width=0
+# border-color=<csd.color>
+# button-width=26
+# button-color=<background color>
+# button-minimize-color=<regular4>
+# button-maximize-color=<regular2>
+# button-close-color=<regular1>
+
+[key-bindings]
+# scrollback-up-page=Shift+Page_Up
+# scrollback-up-half-page=none
+# scrollback-up-line=none
+# scrollback-down-page=Shift+Page_Down
+# scrollback-down-half-page=none
+# scrollback-down-line=none
+# scrollback-home=none
+# scrollback-end=none
+# clipboard-copy=Control+Shift+c XF86Copy
+# clipboard-paste=Control+Shift+v XF86Paste
+# primary-paste=Shift+Insert
+# search-start=Control+Shift+r
+# font-increase=Control+plus Control+equal Control+KP_Add
+# font-decrease=Control+minus Control+KP_Subtract
+# font-reset=Control+0 Control+KP_0
+# spawn-terminal=Control+Shift+n
+# minimize=none
+# maximize=none
+# fullscreen=none
+# pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none
+# pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none
+# pipe-selected=[xargs -r firefox] none
+# show-urls-launch=Control+Shift+o
+# show-urls-copy=none
+# show-urls-persistent=none
+# prompt-prev=Control+Shift+z
+# prompt-next=Control+Shift+x
+# unicode-input=Control+Shift+u
+# noop=none
+
+[search-bindings]
+# cancel=Control+g Control+c Escape
+# commit=Return
+# find-prev=Control+r
+# find-next=Control+s
+# cursor-left=Left Control+b
+# cursor-left-word=Control+Left Mod1+b
+# cursor-right=Right Control+f
+# cursor-right-word=Control+Right Mod1+f
+# cursor-home=Home Control+a
+# cursor-end=End Control+e
+# delete-prev=BackSpace
+# delete-prev-word=Mod1+BackSpace Control+BackSpace
+# delete-next=Delete
+# delete-next-word=Mod1+d Control+Delete
+# extend-char=Shift+Right
+# extend-to-word-boundary=Control+w Control+Shift+Right
+# extend-to-next-whitespace=Control+Shift+w
+# extend-line-down=Shift+Down
+# extend-backward-char=Shift+Left
+# extend-backward-to-word-boundary=Control+Shift+Left
+# extend-backward-to-next-whitespace=none
+# extend-line-up=Shift+Up
+# clipboard-paste=Control+v Control+Shift+v Control+y XF86Paste
+# primary-paste=Shift+Insert
+# unicode-input=none
+# scrollback-up-page=Shift+Page_Up
+# scrollback-up-half-page=none
+# scrollback-up-line=none
+# scrollback-down-page=Shift+Page_Down
+# scrollback-down-half-page=none
+# scrollback-down-line=none
+# scrollback-home=none
+# scrollback-end=none
+
+[url-bindings]
+# cancel=Control+g Control+c Control+d Escape
+# toggle-url-visible=t
+
+[text-bindings]
+# \x03=Mod4+c # Map Super+c -> Ctrl+c
+
+[mouse-bindings]
+# scrollback-up-mouse=BTN_BACK
+# scrollback-down-mouse=BTN_FORWARD
+# selection-override-modifiers=Shift
+# primary-paste=BTN_MIDDLE
+# select-begin=BTN_LEFT
+# select-begin-block=Control+BTN_LEFT
+# select-extend=BTN_RIGHT
+# select-extend-character-wise=Control+BTN_RIGHT
+# select-word=BTN_LEFT-2
+# select-word-whitespace=Control+BTN_LEFT-2
+# select-quote = BTN_LEFT-3
+# select-row=BTN_LEFT-4
+
+# vim: ft=dosini