diff --git a/.bmfiles b/.bmfiles index e794fa4..863796e 100644 --- a/.bmfiles +++ b/.bmfiles @@ -2,7 +2,7 @@ bf ~/.bmfiles bd ~/.bmdirs cfb ~/.bashrc cfz ~/.zshrc -cfv ~/.vimrc +cfv ~/.config/nvim/init.vim cfr ~/.config/ranger/rc.conf cfi ~/.config/i3/config cfq ~/.config/qutebrowser/config.py diff --git a/.config/getkeys/i3 b/.config/getkeys/i3 index 82be77d..cf026c5 100644 --- a/.config/getkeys/i3 +++ b/.config/getkeys/i3 @@ -15,7 +15,7 @@ This is a partial key list. q kill win kill win w browser browser e neomutt tutorials - r ranger sudo ranger + r ranger winresize t toggle hor/vert gaps=15px y calcurse resize left u dropdown term resize down diff --git a/.config/getkeys/i3keysguide b/.config/getkeys/i3keysguide deleted file mode 100644 index d2d49a1..0000000 --- a/.config/getkeys/i3keysguide +++ /dev/null @@ -1,43 +0,0 @@ -esc left workspace exit i3 -tab last workspace -- - vol -- vol -_ - vol -- vol -= + vol ++ vol -+ + vol ++ vol -q kill win kill win -w browser browser -e neomutt tutorials -r ranger sudo ranger -t toggle hor/vert gaps=15px -y calcurse resize left -u dropdown term resize down -i htop resize up -o sticky win resize right -p pause music -[ back 10 secs back 2 min -] forward 10 secs forward 2 min -\ last workspace -a calculator audio control -s + inner gaps - inner gaps -d dmenu remove gaps -f fullscreen freeze mode -g left workspace GIMP -h focus left move win left -j focus down move win down -k focus up move win up -l focus right move win right -; right workspace -' fast right win -z + outer gaps - outer gaps -x lock screen shutdown -c webcam -v visualizer projectm -b bar on/off stick/float win -n newsboat -m ncmpcpp mute audio -, previous song restart song -< previous song restart song -. next song -> next song -/ fast win below kill win -? fast win below kill win diff --git a/.config/i3/config b/.config/i3/config index c30ef9a..d9bcefc 100644 --- a/.config/i3/config +++ b/.config/i3/config @@ -44,6 +44,8 @@ for_window [instance="dropdown_dropdowncalc"] border pixel 2 for_window [instance="dropdown_*"] move position center # #---Starting External Scripts---# # +# mpd startup +exec --no-startup-id mpd # Setting the background: exec --no-startup-id setbg # Starts dunst for notifications: @@ -56,8 +58,6 @@ exec --no-startup-id remaps exec --no-startup-id unclutter # Run the script to update the mpd i3block on change. exec_always --no-startup-id mpdupdate -# mpd startup -exec --no-startup-id mpd # Podboat automatic queue and download exec_always --no-startup-id podentr @@ -198,7 +198,7 @@ bindsym $mod+Shift+x exec --no-startup-id prompt "Shutdown computer?" "$shutdow bindsym $mod+c exec --no-startup-id freealf bindsym $mod+Shift+c exec --no-startup-id camtoggle -bindsym $mod+v exec --no-startup-id st -e vim -c "VimwikiIndex" +bindsym $mod+v exec --no-startup-id $term -e $EDITOR -c "VimwikiIndex" #bindsym $mod+Shift+v bindsym $mod+b bar mode toggle @@ -267,11 +267,10 @@ bindsym $mod+Shift+0 move container to workspace $ws10 for_window [class="Pinentry"] sticky enable for_window [class="sent"] border pixel 0px -for_window [class="Blender"] move to workspace $ws6 -for_window [class="marble"] move to workspace $ws7 for_window [title="GIMP Startup"] move workspace $ws5 for_window [class="Gimp"] move workspace $ws5 -for_window [window_role="GtkFileChooserDialog"] resize shrink height 10 px +for_window [window_role="GtkFileChooserDialog"] resize set 800 600 +for_window [window_role="GtkFileChooserDialog"] move position center for_window [title="Default - Wine desktop"] floating enable # Bindings to make the webcam float and stick. @@ -286,7 +285,7 @@ bindsym $mod+F2 restart bindsym $mod+F3 exec --no-startup-id displayselect bindsym $mod+F4 exec --no-startup-id prompt "Hibernate computer?" "$hibernate" bindsym $mod+F5 exec --no-startup-id $netrefresh -bindsym $mod+F6 exec --no-startup-id $term -e transmission-remote-cli +bindsym $mod+F6 exec --no-startup-id torwrap bindsym $mod+F7 exec --no-startup-id td-toggle bindsym $mod+F8 exec --no-startup-id ~/.config/mutt/etc/mailsync.sh bindsym $mod+F9 exec --no-startup-id dmenumount @@ -413,5 +412,3 @@ bindsym XF86Documents exec $term -e $FILE ~/Documents ##bindsym XF86Battery exec ##bindsym XF86Bluetooth exec bindsym XF86WLAN exec $netrefresh - -exec --no-startup-id lukescripts diff --git a/.config/ncmpcpp/config b/.config/ncmpcpp/config index 999c6bc..6f87aab 100644 --- a/.config/ncmpcpp/config +++ b/.config/ncmpcpp/config @@ -11,7 +11,7 @@ ## ncmpcpp. ## # -#ncmpcpp_directory = ~/.ncmpcpp +ncmpcpp_directory = ~/.config/ncmpcpp # ## ## Directory for storing downloaded lyrics. It defaults to ~/.lyrics since other diff --git a/.vim/autoload/plug.vim b/.config/nvim/autoload/plug.vim similarity index 100% rename from .vim/autoload/plug.vim rename to .config/nvim/autoload/plug.vim diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim index b462bbd..2833984 100644 --- a/.config/nvim/init.vim +++ b/.config/nvim/init.vim @@ -1,19 +1,21 @@ -" _ -" __ _(_)_ __ ___ _ __ ___ -" \ \ / / | '_ ` _ \| '__/ __| -" \ V /| | | | | | | | | (__ -" \_/ |_|_| |_| |_|_| \___| +let mapleader ="," -let mapleader =" " - -call plug#begin('~/.vim/plugged') +call plug#begin('~/.config/nvim/plugged') +Plug 'tpope/vim-surround' +Plug 'scrooloose/nerdtree' Plug 'junegunn/goyo.vim' Plug 'PotatoesMaster/i3-vim-syntax' Plug 'jreybert/vimagit' Plug 'LukeSmithxyz/vimling' Plug 'vimwiki/vimwiki' +Plug 'bling/vim-airline' +Plug 'tpope/vim-commentary' call plug#end() +set bg=light +set mouse=a +set nohlsearch +set clipboard=unnamedplus " Some basics: set nocompatible filetype plugin on @@ -26,7 +28,7 @@ call plug#end() autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o " Goyo plugin makes text more readable when writing prose: - map f :Goyo \| set linebreak + map f :Goyo \| set bg=light \| set linebreak " Spell-check set to o, 'o' for 'orthography': map o :setlocal spell! spelllang=en_us @@ -34,6 +36,17 @@ call plug#end() " Splits open at the bottom and right, which is non-retarded, unlike vim defaults. set splitbelow splitright +" Nerd tree + map :NERDTreeToggle + autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif + +" vimling: + nm d :call ToggleDeadKeys() + imap d :call ToggleDeadKeys()a + nm i :call ToggleIPA() + imap i :call ToggleIPA()a + nm q :call ToggleProse() + " Shortcutting split navigation, saving a keypress: map h map j @@ -51,7 +64,7 @@ call plug#end() nnoremap S :%s//g " Compile document, be it groff/LaTeX/markdown/etc. - map c :w! \| !compiler % + map c :w! \| !compiler % " Open corresponding .pdf/.html or preview map p :!opout % @@ -61,17 +74,11 @@ call plug#end() " Ensure files are read as what I want: let g:vimwiki_ext2syntax = {'.Rmd': 'markdown', '.rmd': 'markdown','.md': 'markdown', '.markdown': 'markdown', '.mdown': 'markdown'} + let g:vimwiki_list = [{'path': '~/vimwiki', 'syntax': 'markdown', 'ext': '.md'}] autocmd BufRead,BufNewFile /tmp/calcurse*,~/.calcurse/notes/* set filetype=markdown autocmd BufRead,BufNewFile *.ms,*.me,*.mom,*.man set filetype=groff autocmd BufRead,BufNewFile *.tex set filetype=tex -" Readmes autowrap text: - autocmd BufRead,BufNewFile *.md set tw=79 - -" Use urlscan to choose and open a url: - :noremap u :w !urlscan -r 'linkhandler {}' - :noremap ,, !urlscan -r 'linkhandler {}' - " Copy selected text to system clipboard (requires gvim/nvim/vim-x11 installed): vnoremap "+y map "+P @@ -79,32 +86,25 @@ call plug#end() " Enable Goyo by default for mutt writting " Goyo's width will be the line limit in mutt. autocmd BufRead,BufNewFile /tmp/neomutt* let g:goyo_width=80 - autocmd BufRead,BufNewFile /tmp/neomutt* :Goyo + autocmd BufRead,BufNewFile /tmp/neomutt* :Goyo \| set bg=light " Automatically deletes all trailing whitespace on save. autocmd BufWritePre * %s/\s\+$//e " When shortcut files are updated, renew bash and ranger configs with new material: - autocmd BufWritePost ~/.bm* !shortcuts + autocmd BufWritePost ~/.bmdirs,~/.bmfiles !shortcuts " Run xrdb whenever Xdefaults or Xresources are updated. autocmd BufWritePost ~/.Xresources,~/.Xdefaults !xrdb % " Navigating with guides - inoremap /<++>"_c4l - vnoremap /<++>"_c4l - map /<++>"_c4l - - "____ _ _ -"/ ___| _ __ (_)_ __ _ __ ___| |_ ___ -"\___ \| '_ \| | '_ \| '_ \ / _ \ __/ __| - "___) | | | | | |_) | |_) | __/ |_\__ \ -"|____/|_| |_|_| .__/| .__/ \___|\__|___/ - "|_| |_| + inoremap /<++>"_c4l + vnoremap /<++>"_c4l + map /<++>"_c4l """LATEX " Word count: - autocmd FileType tex map o :w !detex \| wc -w + autocmd FileType tex map w :w !detex \| wc -w " Code snippets autocmd FileType tex inoremap ,fr \begin{frame}\frametitle{}<++>\end{frame}<++>6kf}i autocmd FileType tex inoremap ,fi \begin{fitch}\end{fitch}<++>3kA diff --git a/.inputrc b/.inputrc index 862d347..f9b94dd 100644 --- a/.inputrc +++ b/.inputrc @@ -2,6 +2,10 @@ $include /etc/inputrc set editing-mode vi $if mode=vi +set show-mode-in-prompt on +set vi-ins-mode-string \1\e[6 q\2 +set vi-cmd-mode-string \1\e[2 q\2 + set keymap vi-command # these are for vi-command mode Control-l: clear-screen diff --git a/.readme.mom b/.readme.mom index 37aa7cc..8461617 100644 --- a/.readme.mom +++ b/.readme.mom @@ -13,10 +13,10 @@ Use vim keys (\f(CWh/j/k/l\fP) to navigate this document. Pressing \f(CWs\fP will fit it to window width (\f(CWa\fP to revert). \f(CWK\fP and \f(CWJ\fP zoom in and out. -\f(CWMod+f\fP to toggle fullscreen. +\f(CWSuper+f\fP to toggle fullscreen. \f(CWf\fP will highlight links to follow which are selectable by typing the number that appears plus \f(CWEnter\fP. \f(CWq\fP to quit. -(These are general zathura shortcuts.) +(These are general shortcuts of \f(CWzathura\fP, the pdf reader.) .LI .ITEM \f(CWMod+F1\fP will show this document at any time. @@ -35,8 +35,9 @@ My website: .PDF_WWW_LINK "https://lukesmith.xyz" .ITEM Donate: -.PDF_WWW_LINK "https://paypal.me/LukeMSmith/20" "https://paypal.me/LukeMSmith" +.PDF_WWW_LINK "https://lukesmith.xyz/donate" "https://lukesmith.xyz/donate" .LIST OFF +FAQs are at the end of this document. .HEADING 1 "Welcome!" .HEADING 2 "Basic goals and principles of this system:" .LI @@ -69,12 +70,11 @@ but you can also hold it down and it will act as another Windows/super/mod key. The menu button (usually between the right Alt and Ctrl) is an alternative Super/Mod button. This is to make one-handing on laptops easier. .LIST OFF -.PP If you'd like to change any of these keyboard changes, you need only open and change \f(CW~/.scripts/tools/remaps\fP. Actually, this should go without saying, but \fIeverything\fP here can easily be changed. .PP Additionally, while this isn't a part of i3, the default editing mode in the shell is using vi bindings. -If you want to learn more of this, run \f(CWMod+Super+E\fP and type and select the option for "vi mode in shell". +If you want to learn more of this, run \f(CWMod+Shift+E\fP and type and select the option for "vi mode in shell". This setting can be changed if you don't like it by deleting or commenting out the contents of \f(CW~/.inputrc\fP. .HEADING 2 "The Status Bar" .PP @@ -113,13 +113,17 @@ To type capital letters, hold down the \f(CWShift\fP key\(emthat might sound lik , Be sure you play around with these. Be flexible with the basic commands and the system will grow on you quick. .LI .ITEM -\f(CWMod+Enter\fP \(en Spawn terminal +\f(CWMod+Enter\fP \(en Spawn terminal (the default terminal is \f(CWst\fP; run \f(CWman st\fP for more.) .ITEM \f(CWMod+q/Q\fP \(en Close window .ITEM \f(CWMod+d\fP \(en dmenu (For running commands or programs without shortcuts) .ITEM -\f(CWMod+t\fP \(en Toggle between spawning vertically and horizontally +\f(CWMod+t\fP \(en Toggle between spawning vertically and horizontally\c +.FOOTNOTE +You may notice that one side of your window border is a different color. +This indicates the direction that the next window will spawn. +.FOOTNOTE END .ITEM \f(CWMod+f\fP \(en Fullscreen .ITEM @@ -152,7 +156,7 @@ To type capital letters, hold down the \f(CWShift\fP key\(emthat might sound lik .ITEM \f(CWMod+B\fP \(en Toggle window float in bottom left corner (good for video watched intermittently) .ITEM -\f(CWMod+N\fP \(en Same as above, but for the botttom right corner. +\f(CWMod+N\fP \(en Same as above, but for the bottom right corner. .LIST OFF .HEADING 2 "Basic Programs" .PP @@ -162,7 +166,7 @@ Naturally, you can use \f(CWyay\fP to look for and install any you want to add. .ITEM \f(CWMod+r\fP \(en ranger (file browser/manager) .ITEM -\f(CWMod+e\fP \(en mutt (email) +\f(CWMod+e\fP \(en mutt (email; not installed by default, see below) .ITEM \f(CWMod+m\fP \(en ncmpcpp (music player) .ITEM @@ -300,42 +304,51 @@ previous recordings as their names are based on their exact times. I've mapped those extra buttons that some keyboards have (play and pause buttons, screen brightness, email, web browsing buttons, etc.) to what you would expect. -.HEADING 1 "Special traits of this system" -.HEADING 2 "Easy config access" +.HEADING 1 "Bookmarking Files and Directories" .PP -Open a terminal and type \f(CWbf\fP. This will open a file where you will see -customizable pairs of key shortcuts and config files and other important text -files. Enter any of these shortcuts in bash or ranger to immediately open the -file in vim. +Note the files \f(CW~/.bmdirs\fP and \f(CW~/.bmfiles\fP. +These files hold bookmarked directories and files respectively, along with shortcut keys to their left. +LARBS, specfically the \f(CWshortcuts\fP script, will automatically read these files and autogenerate aliases and shortcuts for bash/zsh and ranger from them. .PP -You may add new entries here and they will be refreshed when you save the file -in vim. This will take effect immediately once you start a new instance of bash -or ranger or reload your previous sessions. -.HEADING 2 "Folder and config shortcuts" +For example, by default, the shortcut key for \f(CW~/Documents\fP is simply \f(CWd\fP. +Thus, if you type and run \f(CWd\fP in bash, you will automatically \f(CWcd\fP to \f(CW~/Documents\fP. +It also generates four ranger shortcuts using the shortcut \f(CWd\fP: +.LI +.ITEM +\f(CWgd\fP \(en +Go to \f(CW~/Documents\fP +.ITEM +\f(CWmd\fP \(en +Move (mv) selected file(s) to \f(CW~/Documents\fP +.ITEM +\f(CWtd\fP \(en +Create a new tab in \f(CW~/Documents\fP +.ITEM +\f(CWYd\fP \(en +Copy/yank (cp) a copy of the selected file(s) to \f(CWDocuments\fP +.LIST OFF +Shortcuts like these are generated for all key sequence/directory pairs in \f(CW~/.bmdirs\fP. +Additionally, you may also add editable files to \f(CW~/.bmfiles\fP. +Each key sequence you pair with a file will become an alias to edit it in either bash or ranger. .PP -Open a terminal and type \f(CWbd\fP. This opens a file when you can keep and create -directory/folder shortcuts. There are only a few here now, because I don't know -what your folder structure is going to look like, but on my machine, I have 109 -and growing. -.PP -Each line has a shortcut key/keys and its target. These can be used in several -applications. In bash, simply press \f(CWd\fP, the shortcut for \f(CW~/Documents\fP and you -will cd there (and automatically \f(CWls -a\fP). -.PP -ranger works similarly. -When in ranger, just press \f(CWg\fP then the shortcut of the folder you want to go to. -You may also press \f(CWt\fP plus the shortcut to open a new tab there. -\f(CWm\fP plus the shortcut moves the selected files to the folder and \f(CWY\fP copies them there. -\fBGet good at this. It will make management of even the most complex file system easy.\fP -.HEADING 2 "Dynamically constructed configs" -.PP -Each time you save changes to either the config shortcut file or the folder shortcut file in vim, vim will automatically run a bash script that updates your bash/ranger config, allowing you to use your new shortcuts in your next instance of bash/ranger or after resourcing your rc files. +Whenever you edit and save one of the bookmark files, vim will automatically rerun the shortcut script, thus uupdating the shortcuts that will be used in new instances of bash and ranger. +It just werks. +Note that it is your responsibility to ensure that none of the bindings you add conflict with another necessary function or command. .HEADING 1 "Frequently Asked Questions (FAQs)" +.HEADING 2 "My keyboard isn't working as expected!" +.PP +LARBS runs some custom keyboard settings in \f(CW~/.scripts/tools/remaps\fP. +These settings may override your preferred settings, so you should open this file and comment out troublesome lines if you have issues. +.HEADING 2 "My audio isn't working!" +.PP +Sometimes, PulseAudio can be finicky on initial installation and configuration. +If you have no audio output, chances are your problems will be resolved by a reboot or manually killing and restarting PulseAudio. +You may also need to set your preferred default output sink which you can do by the command line, or by selecting one with \f(CWpulsemixer\fP (\f(CWmod+A\fP). .HEADING 2 "How do I change the background/wallpaper?" .PP -The easiest way is to use ranger, navigate to the file you want as your background, and press \f(CWbg\fP. -To be specific, i3 will always be looking to the file in \f(CW~/.config/wall.png\fP for the wallpaper, this ranger command copies the given file there and reruns feh to update it. -So if you want a persistent wallpaper, move/rename it to \f(CW~/.config/wall.png\fP. +The i3 configuration will always read the file \f(CW~/.config/wall.png\fP as the wallpaper. +The script \f(CWsetbg\fP, if run on an image will set it as the persistent background. +When using the file manager, you can simply hover over an image name and type \f(CWbg\fP and this will run \f(CWsetbg\fP. .HEADING 2 "How I change the colorscheme?" .PP You can edit \f(CW~/.Xresources\fP to change the colorscheme. @@ -347,10 +360,13 @@ LARBS is also compatible with pywal, but it is not installed or used by default .HEADING 2 "How do I set up my email?" .LI .ITEM -Create a GPG private/public key pair if you haven't already. +Install \f(CWneomutt\fP, \f(CWofflineimap\fP and \f(CWmsmtp\fP if you haven't already. +.ITEM +Create a GPG private/public key pair if you haven't already. Type \f(CWmod+shift+e\fP and you can select a tutorial for how to do this. .ITEM Download the mutt-wizard repository to the mutt config directory: \f(CWgit clone https://github.com/lukesmithxyz/mutt-wizard ~/.config/mutt\fP +\fBREAD THE README.\fP .PP .ITEM There run \f(CWmutt-wizard.sh\fP and follow the directions, specifically: @@ -360,7 +376,7 @@ Add an account. .ITEM Run \f(CWofflineimap -o\fP in the terminal. .ITEM -Select the "Autodetect mailboxes" option. +Then select the "Autodetect mailboxes" option. .LIST OFF .LIST OFF .PP @@ -379,6 +395,12 @@ By default, mpd, the music daemon assumes that \f(CW~/Music\fP is your music dir This can be changed in \f(CW~/.config/mpd/mpd.conf\fP. When you add music to your music folder, you may have to run \f(CWmpc up\fP in the terminal to update the database. mpd is controlled by ncmpcpp, which is accessible by \f(CWMod+m\fP. +.HEADING 2 "How do I update LARBS?" +.PP +LARBS is deployed as a git repository in your home directory. +You can use it as such to fetch, diff and merge changes from the remote repository. +If you don't want to do that or don't know how to use git, you can actually just rerun the script (as root) and reinstall LARBS and it will automatically update an existing install if you select the same username. +This will overwrite the original config files though, including changes you made for them, but this is an easier brute force approach that will also install any new dependencies. .HEADING 1 "Contact" .LI .ITEM @@ -388,15 +410,12 @@ mpd is controlled by ncmpcpp, which is accessible by \f(CWMod+m\fP. .PDF_WWW_LINK "http://lukesmith.xyz" "https://lukesmith.xyz" \(en For stalking! .ITEM -.PDF_WWW_LINK "https://paypal.me/LukeMSmith" "PayPal" -\(en For gratitude! -.ITEM -.PDF_WWW_LINK "https://patreon.com/lukesmith" "Patreon" -\(en For support! +.PDF_WWW_LINK "https://lukesmith.xyz/donate" "https://lukesmith.xyz/donate" +\(en To incentivize more development of LARBS! .ITEM .PDF_WWW_LINK "https://github.com/LukeSmithxyz" "My Github Page" \(en For the code behind it! .ITEM .PDF_WWW_LINK "http://lukesmith.xyz/rss.xml" "RSS" -\(en For even better updates! +\(en For updates! .LIST OFF diff --git a/.scripts/cron/checkup b/.scripts/cron/checkup index 770c349..a32cdcb 100755 --- a/.scripts/cron/checkup +++ b/.scripts/cron/checkup @@ -3,7 +3,7 @@ ping -q -w 1 -c 1 `ip r | grep -m 1 default | cut -d ' ' -f 3` >/dev/null || exit -notify-send -i "$PIX/larbs.gif" "Checking for pacakge updates..." +notify-send -i "$PIX/larbs.svg" "Checking for pacakge updates..." sudo pacman -Syyuw --noconfirm || notify-send "Error downloading updates. diff --git a/.scripts/cron/newsup b/.scripts/cron/newsup index 598cced..32f6a37 100755 --- a/.scripts/cron/newsup +++ b/.scripts/cron/newsup @@ -4,7 +4,7 @@ ping -q -t 1 -c 1 `ip r | grep -m 1 default | cut -d ' ' -f 3` >/dev/null || exit -/usr/bin/notify-send -i "$PIX/rss.gif" "Updating RSS feeds..." +/usr/bin/notify-send -i "$PIX/rss.svg" "Updating RSS feeds..." pgrep -x newsboat >/dev/null && /usr/bin/xdotool key --window "$(/usr/bin/xdotool search --name newsboat)" R && exit @@ -13,4 +13,4 @@ pkill -RTMIN+6 i3blocks /usr/bin/newsboat -x reload rm -f ~/.config/newsboat/.update pkill -RTMIN+6 i3blocks -/usr/bin/notify-send -i "$PIX/rss.gif" "RSS feed update complete." +/usr/bin/notify-send -i "$PIX/rss.svg" "RSS feed update complete." diff --git a/.scripts/i3cmds/displayselect b/.scripts/i3cmds/displayselect index 2c3133f..e526014 100755 --- a/.scripts/i3cmds/displayselect +++ b/.scripts/i3cmds/displayselect @@ -49,7 +49,7 @@ morescreen() { # If multi-monitor is selected and there are more than two screen multimon() { # Multi-monitor handler. case "$(echo "$screens" | wc -l)" in - 1) xrandr $(echo "$allposs" | awk '{print "--output", $1, "--off"}' | tr '\n' ' ') ;; + 1) xrandr $(echo "$allposs" | grep -v "$screens" | awk '{print "--output", $1, "--off"}' | tr '\n' ' ') ;; 2) twoscreen ;; *) morescreen ;; esac ;} @@ -65,7 +65,7 @@ chosen=$(printf "%s\\nmulti-monitor\\nmanual selection" "$screens" | dmenu -i -p case "$chosen" in "manual selection") arandr ; exit ;; "multi-monitor") multimon ;; - *) xrandr --output "$chosen" --auto --scale 1.0x1.0 $(echo "$screens" | grep -v "$chosen" | awk '{print "--output", $1, "--off"}' | tr '\n' ' ') ;; + *) xrandr --output "$chosen" --auto --scale 1.0x1.0 $(echo "$allposs" | grep -v "$chosen" | awk '{print "--output", $1, "--off"}' | tr '\n' ' ') ;; esac setbg # Fix background if screen size/arangement has changed. diff --git a/.scripts/i3cmds/dmenumount b/.scripts/i3cmds/dmenumount index 4de7438..a270886 100755 --- a/.scripts/i3cmds/dmenumount +++ b/.scripts/i3cmds/dmenumount @@ -17,21 +17,21 @@ getmount() { \ mountusb() { \ chosen="$(echo "$usbdrives" | dmenu -i -p "Mount which drive?" | awk '{print $1}')" - sudo -A mount "$chosen" && notify-send "$chosen mounted." && exit 0 + sudo -A mount "$chosen" && notify-send -i "$PIX/usb.svg" "$chosen mounted." && exit 0 getmount "/mnt /media /mount /home -maxdepth 5 -type d" partitiontype="$(lsblk -no "fstype" "$chosen")" case "$partitiontype" in "vfat") sudo -A mount -t vfat "$chosen" "$mp" -o rw,umask=0000;; *) sudo -A mount "$chosen" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; sudo -A chown "$user":"$ug" 741 "$mp";; esac - notify-send "$chosen mounted to $mp." + notify-send -i "$PIX/usb.svg" "$chosen mounted to $mp." } mountandroid() { \ chosen=$(echo "$anddrives" | dmenu -i -p "Which Android device?" | cut -d : -f 1) getmount "$HOME -maxdepth 3 -type d" simple-mtpfs --device "$chosen" "$mp" - notify-send "Android device mounted to $mp." + notify-send -i "$PIX/android.svg" "Android device mounted to $mp." } asktype() { \ diff --git a/.scripts/i3cmds/dmenuumount b/.scripts/i3cmds/dmenuumount index 260c1c8..e4ec064 100755 --- a/.scripts/i3cmds/dmenuumount +++ b/.scripts/i3cmds/dmenuumount @@ -7,13 +7,13 @@ unmountusb() { [ -z "$drives" ] && exit chosen=$(echo "$drives" | dmenu -i -p "Unmount which drive?" | awk '{print $1}') [ -z "$chosen" ] && exit - sudo -A umount "$chosen" && pgrep -x dunst && notify-send "$chosen unmounted." + sudo -A umount "$chosen" && pgrep -x dunst && notify-send -i "$PIX/usb.svg" "$chosen unmounted." } unmountandroid() { \ chosen=$(awk '/simple-mtpfs/ {print $2}' /etc/mtab | dmenu -i -p "Unmount which device?") [ -z "$chosen" ] && exit - sudo -A umount -l "$chosen" && pgrep -x dunst && notify-send "$chosen unmounted." + sudo -A umount -l "$chosen" && pgrep -x dunst && notify-send -i "$PIX/android.svg" "$chosen unmounted." } asktype() { \ diff --git a/.scripts/i3cmds/lockscreen b/.scripts/i3cmds/lockscreen index b745a6a..456857f 100755 --- a/.scripts/i3cmds/lockscreen +++ b/.scripts/i3cmds/lockscreen @@ -1,19 +1,9 @@ #!/bin/sh - -rm -f /tmp/locked.png - -# If `imagemagick` is not installed, use a blank screen. -[ -f /usr/bin/convert ] && -scrot -m -z /tmp/base.png && -pgrep -x dunst && notify-send -i ~/.scripts/pix/lock.png "Locking computer..." && -convert /tmp/base.png -blur 0x8 /tmp/locked.png - -# Pause music (mocp, mpd and send the pause key to all mpv videos): -mocp -P >/dev/null 2>&1 +# Pause mpd and send the pause key to all mpv videos: mpc pause >/dev/null 2>&1 pauseallmpv >/dev/null 2>&1 -i3lock -e -f -c 000000 -i /tmp/locked.png +i3lock -e -f -c 1d2021 # In five seconds, turn off display unless key press in last 4 seconds. sleep 5 && [ 4000 -lt "$(xssstate -i)" ] && pgrep -x i3lock && xset dpms force off diff --git a/.scripts/i3cmds/maimpick b/.scripts/i3cmds/maimpick index f3f72fe..07d032f 100755 --- a/.scripts/i3cmds/maimpick +++ b/.scripts/i3cmds/maimpick @@ -1,9 +1,9 @@ #!/bin/sh -case "$(printf "a selected area\\ncurrent window\\nfull screen\\na selected area (copy)\\ncurrent window (copy)\\nfullscreen (copy)" | dmenu -l 6 -i -p "Screenshot which area?")" in +case "$(printf "a selected area\\ncurrent window\\nfull screen\\na selected area (copy)\\ncurrent window (copy)\\nfull screen (copy)" | dmenu -l 6 -i -p "Screenshot which area?")" in "a selected area") maim -s pic-selected-"$(date '+%y%m%d-%H%M-%S').png" ;; "current window") maim -i "$(xdotool getactivewindow)" pic-window-"$(date '+%y%m%d-%H%M-%S').png" ;; "full screen") maim pic-full-"$(date '+%y%m%d-%H%M-%S').png" ;; "a selected area (copy)") maim -s | xclip -selection clipboard -t image/png ;; - "current window (copy)") maim -i | xclip -selection clipboard -t image/png ;; + "current window (copy)") maim -i "$(xdotool getactivewindow)" | xclip -selection clipboard -t image/png ;; "full screen (copy)") maim | xclip -selection clipboard -t image/png ;; esac diff --git a/.scripts/i3cmds/td-toggle b/.scripts/i3cmds/td-toggle index 6489626..729e697 100755 --- a/.scripts/i3cmds/td-toggle +++ b/.scripts/i3cmds/td-toggle @@ -1,15 +1,10 @@ #!/bin/sh - # If transmission-daemon is running, will ask to kill, else will ask to start. - -[ ! -f /usr/bin/transmission-daemon ] && notify-send "Transmission daemon not installed." && exit - -if pgrep -x transmission-da >/dev/null ; +if pgrep -x transmission-da >/dev/null ; then - yn=$(printf "No\\nYes" | dmenu -i -p "Kill transmission-daemon?") - [ "$yn" = "Yes" ] && killall transmission-da + [ "$(printf "No\\nYes" | dmenu -i -p "Kill transmission-daemon?")" = "Yes" ] && killall transmission-da && notify-send -i "$PIX/torrent.svg" "transmission-daemon killed." else - yn=$(printf "No\\nYes" | dmenu -i -p "Start transmission daemon?") - [ "$yn" = "Yes" ] && transmission-daemon + ifinstalled transmission-cli || exit + [ "$(printf "No\\nYes" | dmenu -i -p "Start transmission daemon?")" = "Yes" ] && transmission-daemon && notify-send -i "$PIX/torrent.svg" "tranmission-daemon started." fi sleep 3 && pkill -RTMIN+7 i3blocks diff --git a/.scripts/i3cmds/torwrap b/.scripts/i3cmds/torwrap new file mode 100755 index 0000000..6b501cc --- /dev/null +++ b/.scripts/i3cmds/torwrap @@ -0,0 +1,6 @@ +#!/bin/sh +ifinstalled transmission-remote-cli transmission-cli || exit + +! pgrep -x transmission-da >/dev/null && transmission-daemon && notify-send -i "$PIX/torrent.svg" "Starting torrent daemon..." && sleep 3 && pkill -RTMIN+7 i3blocks + +$TERMINAL -e transmission-remote-cli diff --git a/.scripts/i3cmds/xcqr b/.scripts/i3cmds/xcqr index 5e7b5f0..2352599 100755 --- a/.scripts/i3cmds/xcqr +++ b/.scripts/i3cmds/xcqr @@ -1,6 +1,6 @@ #!/bin/sh # Credit to Maddison Hellstrom (@b0o on Github) -qrencode -o - -s 1 \ +ifinstalled feh && qrencode -o - -s 1 \ "$(xclip -out -selection clipboard)" | feh --zoom max \ -F \ diff --git a/.scripts/statusbar/mpdupdate b/.scripts/statusbar/mpdupdate index 84c7ab1..9a57ca4 100755 --- a/.scripts/statusbar/mpdupdate +++ b/.scripts/statusbar/mpdupdate @@ -1,8 +1,7 @@ #!/bin/sh - [ "$(pgrep -x "$(basename "$0")" | wc -l)" -gt 2 ] && exit -while : ; do +sleep 5 && while : ; do pgrep -x mpd || exit mpc idle > /dev/null pkill -RTMIN+11 i3blocks ; diff --git a/.scripts/statusbar/torrent b/.scripts/statusbar/torrent index 06ddd3e..8534cb1 100755 --- a/.scripts/statusbar/torrent +++ b/.scripts/statusbar/torrent @@ -6,10 +6,12 @@ transmission-remote -l | grep % | s/.*Seeding.*/Z/g; s/.*100%.*/N/g; s/.*Idle.*/B/g; + s/.*Uploading.*/L/g; s/.*%.*/M/g" | sort -h | uniq -c | sed " # Now we replace the standin letters with icons. s/A/🛑/g; s/B/⌛️/g; + s/L/🔼/g; s/M/🔽/g; s/N/✅/g; s/Z/🌱/g" | awk '{print $2, $1}' | tr '\n' ' ' | sed -e "s/ $//g" @@ -18,7 +20,8 @@ case $BLOCK_BUTTON in 1) $TERMINAL -e transmission-remote-cli ;; 3) pgrep -x dunst >/dev/null && notify-send "Torrent module: 🛑: paused -⏳: waiting +⏳: idle (seeds needed) +🔼: uploading (unfinished) 🔽: downloading ✅: done 🌱: done and seeding" ;; diff --git a/.scripts/tools/compiler b/.scripts/tools/compiler index cf628aa..7d3bf1d 100755 --- a/.scripts/tools/compiler +++ b/.scripts/tools/compiler @@ -1,21 +1,14 @@ #!/bin/sh - # This script will compile or run another finishing operation on a document. I # have this script run via vim. # -# tex files: Compiles to pdf, including bibliography if necessary -# md files: Compiles to pdf via pandoc -# rmd files: Compiles via R Markdown -# c files: Compiles via whatever compiler is set to cc. Usually gcc. -# py files: runs via python command -# go files: compiles and runs with "go run" -# config.h files: (For suckless utils) recompiles and installs program. -# all others: run `sent` to show a presentation +# Compiles .tex. groff (.mom, .ms), .rmd, .md. +# Opens .sent files as sent presentations. +# Runs scripts based on extention or shebang file=$(readlink -f "$1") dir=$(dirname "$file") base="${file%.*}" -shebang=$(sed -n 1p "$file") cd "$dir" || exit @@ -29,22 +22,16 @@ textype() { \ $command --output-directory="$dir" "$base" } -shebangtest() { - case "$shebang" in - \#\!*) "$file" ;; - *) sent "$file" 2>/dev/null & ;; - esac -} - case "$file" in *\.ms) refer -PS -e "$file" | groff -me -ms -kejpt -T pdf > "$base".pdf ;; *\.mom) refer -PS -e "$file" | groff -mom -kejpt -T pdf > "$base".pdf ;; *\.rmd) echo "require(rmarkdown); render('$file')" | R -q --vanilla ;; *\.tex) textype "$file" ;; *\.md) pandoc "$file" --pdf-engine=xelatex -o "$base".pdf ;; - *config.h) make && sudo make install ;; + *config.h) sudo make install ;; *\.c) cc "$file" -o "$base" && "$base" ;; *\.py) python "$file" ;; *\.go) go run "$file" ;; - *) shebangtest ;; + *\.sent) setsid sent "$file" 2>/dev/null & ;; + *) sed 1q "$file" | grep "^#!/" | sed "s/^#!//" | xargs -r -I % "$file" ;; esac diff --git a/.scripts/tools/ifinstalled b/.scripts/tools/ifinstalled index bdbcbc4..bbaaf11 100755 --- a/.scripts/tools/ifinstalled +++ b/.scripts/tools/ifinstalled @@ -1,3 +1,3 @@ #!/bin/sh # If $1 command is not available, error code and notify. -command -v "$1" >/dev/null || { notify-send "$1 is not installed." && exit 1 ;} +command -v "$1" >/dev/null || { notify-send -i "$PIX/larbs.svg" "$1 must be installed for this function." && exit 1 ;} diff --git a/.scripts/tools/qndl b/.scripts/tools/qndl new file mode 100755 index 0000000..ffe3647 --- /dev/null +++ b/.scripts/tools/qndl @@ -0,0 +1,11 @@ +#!/bin/sh +# $1 is a url; $2 is a command +[ -z "$1" ] && exit +base="$(basename "$1")" +notify-send -i "$PIX/dl.svg" "Queuing $base..." +cmd="$2" +[ -z "$cmd" ] && cmd="youtube-dl --add-metadata" +idnum="$(tsp $cmd "$1")" +realname="$(echo "$base" | sed "s/?\(source\|dest\).*//;s/%20/ /g")" +tsp -D "$idnum" mv "$base" "$realname" +tsp -D "$idnum" notify-send -i "$PIX/check.svg" "$realname done." diff --git a/.scripts/tools/queueandnotify b/.scripts/tools/queueandnotify index 332668f..a1417ec 100755 --- a/.scripts/tools/queueandnotify +++ b/.scripts/tools/queueandnotify @@ -7,12 +7,7 @@ queuefile="$HOME/.local/share/newsboat/queue" while read -r line; do [ -z "$line" ] && continue url="$(echo "$line" | awk '{print $1}')" - base="$(basename "$url")" - notify-send -i "$PIX/dl.png" "Queuing $base..." - idnum="$(tsp curl -LO "$url")" - realname="$(echo "$base" | sed "s/?\(source\|dest\).*//;s/%20/ /g")" - tsp -D "$idnum" mv "$base" "$realname" - tsp -D "$idnum" notify-send -i "$PIX/check.png" "$realname done." + qndl "$url" "curl -LO" done < "$queuefile" echo > "$queuefile" diff --git a/.scripts/tools/setbg b/.scripts/tools/setbg index 00e996a..c9e4a94 100755 --- a/.scripts/tools/setbg +++ b/.scripts/tools/setbg @@ -1,4 +1,4 @@ #!/bin/sh # Sets the background. If given an argument, will set file as background. [ ! -z "$1" ] && cp "$1" ~/.config/wall.png && notify-send -i "$HOME/.config/wall.png" "Wallpaper changed." -xwallpaper --center ~/.config/wall.png +xwallpaper --maximize ~/.config/wall.png diff --git a/.scripts/tools/transadd b/.scripts/tools/transadd index 8cc7e80..0ab4784 100755 --- a/.scripts/tools/transadd +++ b/.scripts/tools/transadd @@ -7,6 +7,6 @@ # transmission-daemon sometimes fails to take remote requests in its first # moments. -pgrep -x transmission-da || (transmission-daemon && note "Starting daemon..." "$PIX/dl.png" && sleep 3 && pkill -RTMIN+7 i3blocks) +pgrep -x transmission-da || (transmission-daemon && note "Starting daemon..." "$PIX/dl.svg" && sleep 3 && pkill -RTMIN+7 i3blocks) -transmission-remote -a "$@" && note "Torrent added." "$PIX/dl.png" +transmission-remote -a "$@" && note "Torrent added." "$PIX/dl.svg" diff --git a/.vim b/.vim new file mode 120000 index 0000000..63c7159 --- /dev/null +++ b/.vim @@ -0,0 +1 @@ +.config/nvim/ \ No newline at end of file