commit 1d3954ef0b14f37e6cda417b8d6187b55e587c94 Author: starr-dusT Date: Sat Dec 10 17:09:35 2022 -0800 initially working chezmoi diff --git a/.chezmoiignore b/.chezmoiignore new file mode 100644 index 00000000..67f1d1bd --- /dev/null +++ b/.chezmoiignore @@ -0,0 +1,5 @@ +readme.md +.gitignore +.git +provision +additional-setup.md diff --git a/additional-setup.md b/additional-setup.md new file mode 100644 index 00000000..077a043b --- /dev/null +++ b/additional-setup.md @@ -0,0 +1,75 @@ +# Additional Setup + +The following documents Fedora setup that wasn't automated with ansible + +## Zen-link Kernel for Fedora + +I like a kernel simliar to the Arch Zen kernel for gaming. [Nobara](https://nobaraproject.org/) provides one in this [copr repo](https://copr.fedorainfracloud.org/coprs/sentry/kernel-fsync/). + +```bash +sudo dnf copr enable sentry/kernel-fsync +sudo dnf update --refresh +``` + +## Properitary Nvidia Drivers + +Nvidia drivers are installed with this nice [copr repo](https://copr.fedorainfracloud.org/coprs/t0xic0der/nvidia-auto-installer-for-fedora/). + +```bash +sudo dnf copr enable t0xic0der/nvidia-auto-installer-for-fedora -y +sudo dnf install nvautoinstall -y +sudo nvautoinstall rpmadd +sudo nvautoinstall driver +sudo nvautoinstall ffmpeg +sudo nvautoinstall vulkan +sudo nvautoinstall vidacc +``` + +## Wireguard Client + +Wireguard is nice for a home vpn. + +1. Create client on server and copy resulting `.conf` file to `/etc/wireguard` +2. Add connection with nmcli + +```bash +sudo nmcli connection import type wireguard file /etc/wireguard/your-wg-file.conf +``` + +The vpn can be enable/disabled through gnome. + +## btrbk + +[btrbk](https://github.com/digint/btrbk) is used to create (currently only local) snapshots of the root and user volumes. + +```bash +sudo btrbk -c ~/.config/btrbk/home_btrbk.conf -v run # creates user backups and snapshots +sudo btrbk -c ~/.config/btrbk/root_btrbk.conf -v run # creates root snapshots +``` + +## Automount network drive with fstab + +Fstab can be mounted when the network drive is accessed. This is done for the "engi" home server. + +```bash +sudo mkdir -p /mnt/engi + +# Add following line to fstab +///engi /mnt/engi cifs uid=1000,credentials=/home/tstarr/.smb,iocharset=utf8,noauto,x-systemd.automount 0 0 +``` +## Taskopen for taskwarrior + +taskopen needs is easier to install manually at this point since the fedora package is very old. + +```bash +curl https://nim-lang.org/choosenim/init.sh -sSf | sh # install nim for compile +git clone https://github.com/jschlatow/taskopen.git +cd taskopen +make PREFIX=/usr +sudo make PREFIX=/usr install +``` + +## PWA for Bitwarden + +The default Bitwarden application kind of sucks so I use a [PWA plugin](https://github.com/filips123/PWAsForFirefox). Follow instructions to install rpm and adjust ID in i3 config to launch correct PWA for Bitwarden. + diff --git a/bin/executable_chezmoi b/bin/executable_chezmoi new file mode 100644 index 00000000..beb160c8 Binary files /dev/null and b/bin/executable_chezmoi differ diff --git a/bin/executable_initial b/bin/executable_initial new file mode 100644 index 00000000..ebe8fcde --- /dev/null +++ b/bin/executable_initial @@ -0,0 +1,25 @@ +#!/usr/bin/env sh +set -e +echo -e "Starting initial setup for Fedora..." + +# Install ansible and run playbook +sudo dnf -y update && sudo dnf install -y ansible + +# Install ansible extensions +ansible-galaxy install -r ~/.dotfiles/provision/requirements.yml + +# Goto playbook and run it +cd ~/.dotfiles/provision +ansible-playbook setup.yml -i hosts --ask-become-pass + +# Return to where you were +cd - + +read -p "Reboot? " -n 1 -r +echo # (optional) move to a new line +if [[ ! $REPLY =~ ^[Yy]$ ]] +then + exit 1 +fi + +sudo reboot diff --git a/bin/executable_pacdef b/bin/executable_pacdef new file mode 100644 index 00000000..a06703b3 --- /dev/null +++ b/bin/executable_pacdef @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +set -e +# Search for package and return description +dnf search "$1" | cut -d ':' -f 2- | sed -n 2p diff --git a/bin/executable_tmux_dot b/bin/executable_tmux_dot new file mode 100644 index 00000000..94278ffd --- /dev/null +++ b/bin/executable_tmux_dot @@ -0,0 +1,17 @@ +#!/bin/sh + +DIR="~/.dotfiles" + +SESSION="Dots" +SESSIONEXISTS=$(tmux list-sessions | grep $SESSION) + +if [ "$SESSIONEXISTS" = "" ] +then + tmux new-session -s $SESSION -d + tmux rename-window -t $SESSION:1 'Edit' + tmux send-keys -t 'Edit' "cd ${DIR}" C-m 'nvim' C-m + tmux new-window -t $SESSION:2 -n 'Term' + tmux send-keys -t 'Term' "cd ${DIR}" C-m 'clear' C-m +fi + +tmux attach-session -t $SESSION:1 diff --git a/bin/executable_tmux_splat b/bin/executable_tmux_splat new file mode 100644 index 00000000..9050be99 --- /dev/null +++ b/bin/executable_tmux_splat @@ -0,0 +1,22 @@ +#!/bin/sh + +FRONT_DIR="~/devel/work/genisys/splat-react" +BACK_DIR="~/devel/work/genisys/splat-python" + +SESSION="Splat" +SESSIONEXISTS=$(tmux list-sessions | grep $SESSION) + +if [ "$SESSIONEXISTS" = "" ] +then + tmux new-session -s $SESSION -d + tmux rename-window -t $SESSION:1 'Edit' + tmux send-keys -t 'Edit' "cd ${FRONT_DIR}" C-m 'nvim' C-m + tmux new-window -t $SESSION:2 -n 'Term' + tmux send-keys -t 'Term' "cd ${FRONT_DIR}" C-m 'clear' C-m + tmux new-window -t $SESSION:3 -n 'Front' + tmux send-keys -t 'Front' "cd ${FRONT_DIR}" C-m 'npm run dev' C-m + tmux new-window -t $SESSION:4 -n 'Back' + tmux send-keys -t 'Back' "cd ${BACK_DIR}" C-m './start-dev.sh admin' C-m +fi + +tmux attach-session -t $SESSION:1 diff --git a/bin/executable_tof b/bin/executable_tof new file mode 100644 index 00000000..3e3030cb --- /dev/null +++ b/bin/executable_tof @@ -0,0 +1,10 @@ +#!/bin/bash + +if [[ $(task "$1" +fleeting 2>&1) == "No matches." ]]; +then + task "$1" modify +fleeting + task "$1" annotate fleeting + taskopen $1 +else + taskopen $1 +fi diff --git a/bin/executable_update b/bin/executable_update new file mode 100644 index 00000000..5546efad --- /dev/null +++ b/bin/executable_update @@ -0,0 +1,13 @@ +#!/usr/bin/env sh +# provide tags to update with comma seperation (e.g. updates,packages) +set -e +echo -e "Starting update for Fedora..." + +# Goto playbook and run it +cd ~/.dotfiles/provision + +# Install ansible and run playbook +ansible-playbook setup.yml -i hosts --ask-become-pass --tags "$1" --skip-tags "once" + +# Return to where you were +cd - diff --git a/dot_bashrc b/dot_bashrc new file mode 100644 index 00000000..23c20b41 --- /dev/null +++ b/dot_bashrc @@ -0,0 +1,26 @@ +# ~/.bashrc + +# Source global definitions +if [ -f /etc/bashrc ]; then + . /etc/bashrc +fi + +# User specific environment +if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]] +then + PATH="$HOME/.local/bin:$HOME/bin:$PATH" +fi +export PATH + +export EDITOR="/usr/bin/nvim" + +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm +[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion + +export PATH="$HOME/.nimble/bin:$PATH" + +. "$HOME/.cargo/env" + +alias spl="tmux_splat" +alias n="nnn -d -e -H -r" diff --git a/dot_config/btrbk/home_btrbk.conf b/dot_config/btrbk/home_btrbk.conf new file mode 100644 index 00000000..8bba93b5 --- /dev/null +++ b/dot_config/btrbk/home_btrbk.conf @@ -0,0 +1,29 @@ +# +# btrbk configuration file for /home +# + +# Enable transaction log +transaction_log /var/log/home_btrbk.log + +# Use sudo if btrbk or lsbtr is run by regular user +backend_local_user btrfs-progs-sudo + +# Enable stream buffer +stream_buffer 256m + +# Retention policy +snapshot_preserve_min 2d +snapshot_preserve 14d + +target_preserve_min no +target_preserve 20d 10w *m + +snapshot_dir .snapshots + +# Local snapshots +volume /home + subvolume tstarr + # Always create snapshot, even if targets are unreachable + snapshot_create always + # Need a btrfs server before this will work + #target /mnt/engi/backup/kestrel_backups \ No newline at end of file diff --git a/dot_config/btrbk/root_btrbk.conf b/dot_config/btrbk/root_btrbk.conf new file mode 100644 index 00000000..55fa0c38 --- /dev/null +++ b/dot_config/btrbk/root_btrbk.conf @@ -0,0 +1,26 @@ +# +# btrbk configuration file for root +# + +# Enable transaction log +transaction_log /var/log/root_btrbk.log + +# Use sudo if btrbk or lsbtr is run by regular user +backend_local_user btrfs-progs-sudo + +# Enable stream buffer +stream_buffer 256m + +# Retention policy +snapshot_preserve_min 2d +snapshot_preserve 14d + +target_preserve_min no +target_preserve 20d 10w *m + +snapshot_dir .snapshots + +# Local snapshots +volume / + subvolume . + snapshot_name root diff --git a/dot_config/crafted-emacs/config.el b/dot_config/crafted-emacs/config.el new file mode 100644 index 00000000..f6148417 --- /dev/null +++ b/dot_config/crafted-emacs/config.el @@ -0,0 +1,26 @@ +;;; config.el -*- lexical-binding: t; -*- + +;; Author: Tyler Starr + +;; Commentary + +;; Custom configuration for SystemCrafter's crafted-emacs + +;;; Enable crafted modules +(require 'crafted-defaults) ; Sensible default settings for Emacs +(require 'crafted-updates) ; Tools to upgrade Crafted Emacs +(require 'crafted-completion) ; selection framework based on `vertico` +(require 'crafted-ui) ; Better UI experience (modeline etc.) +(require 'crafted-windows) ; Window management configuration +(require 'crafted-editing) ; Whitspace trimming, auto parens etc. +(require 'crafted-evil) ; An `evil-mode` configuration +(require 'crafted-org) ; org-appear, clickable hyperlinks etc. +(require 'crafted-project) ; built-in alternative to projectile +(require 'crafted-speedbar) ; built-in file-tree + +;;; Enable local modules +(require 'theme) ; Colors and non-interactive UI elements +(require 'ux) ; Interactive UI elements and window management +(require 'custom-org) ; All the custom bits for org-mode and accesories! + +;;; Further settings and customizations follow... diff --git a/dot_config/crafted-emacs/custom-org.el b/dot_config/crafted-emacs/custom-org.el new file mode 100644 index 00000000..188492d8 --- /dev/null +++ b/dot_config/crafted-emacs/custom-org.el @@ -0,0 +1,131 @@ +;;; org.el -*- lexical-binding: t; -*- + +;; Author: Tyler Starr + +;; Commentary + +;; Custom configuration for org-mode stuff! + +;;; Org file locations + +;; Set default working directory for org files +(setq org-directory "~/documents/org") +;; Set default locations to store notes +(setq org-default-notes-file "~/documents/org/capture/refile.org") +;; Set agenda files +(setq org-agenda-files (quote ("~/documents/org/capture" + "~/documents/org/capture/agendas" + "~/documents/org/capture/bookmarks" + "~/documents/org/capture/notes"))) + +;;; Set Todo Options + +;; Set keywords for todo items +(setq org-todo-keywords + (quote ((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d)") + (sequence "WAITING(w@/!)" "HOLD(h@/!)" "|" "CANCELLED(c@/!)" )))) + +;; Set colors for todo items +(setq org-todo-keyword-faces + (quote (("TODO" :foreground "red" :weight bold) + ("NEXT" :foreground "blue" :weight bold) + ("DONE" :foreground "forest green" :weight bold) + ("WAITING" :foreground "orange" :weight bold) + ("HOLD" :foreground "magenta" :weight bold) + ("CANCELLED" :foreground "forest green" :weight bold)))) + +;; Set tags based on todo changes +(setq org-todo-state-tags-triggers + (quote (("CANCELLED" ("CANCELLED" . t)) + ("WAITING" ("WAITING" . t)) + ("HOLD" ("WAITING") ("HOLD" . t)) + (done ("WAITING") ("HOLD")) + ("TODO" ("WAITING") ("CANCELLED") ("HOLD")) + ("NEXT" ("WAITING") ("CANCELLED") ("HOLD"))))) +;; open org-capture +(global-set-key (kbd "C-c c") 'org-capture) + +(defvar ts-capture-prmt-history nil + "History of prompt answers for org capture.") + +(defun ts/prmt (prompt variable) + "PROMPT for string, save it to VARIABLE and insert it." + (make-local-variable variable) + (set variable (read-string (concat prompt ": ") nil ts-capture-prmt-history))) + +;; Capture templates for: TODO tasks, Notes, appointments, and meetings +(setq org-capture-templates + (quote (("t" "todo" entry (file "~/documents/org/capture/refile.org") + "* TODO %?\n%U\n%a\n") + ("r" "respond" entry (file "~/documents/org/capture/refile.org") + "* TODO Respond to %:from on %:subject\nSCHEDULED: %t\n%U\n%a\n") + ("w" "workout" entry (file+datetree "~/documents/org/tracking/workout.org") + "* Test: %(ts/prmt \"Hey\" 'lel) - %(ts/prmt \"Hey1\" 'lel)") + ("n" "note" entry (file "~/documents/org/capture/refile.org") + "* %? :NOTE:\n%U\n%a\n") + ("m" "Meeting" entry (file "~/documents/org/capture/refile.org") + "* MEETING with %? :MEETING:\n%U") + ("h" "Habit" entry (file "~/documents/org/capture/refile.org") + "* NEXT %?\n%U\n%a\nSCHEDULED: %(format-time-string \"%<<%Y-%m-%d %a .+1d/3d>>\")\n:PROPERTIES:\n:STYLE: habit\n:REPEAT_TO_STATE: NEXT\n:END:\n")))) + +;; Targets include this file and any file contributing to the agenda - up to 9 levels deep +(setq org-refile-targets (quote ((nil :maxlevel . 9) + (org-agenda-files :maxlevel . 9)))) +;; Use full outline paths for refile targets - we file directly with IDO +(setq org-refile-use-outline-path t) +;; Targets complete directly with IDO +(setq org-outline-path-complete-in-steps nil) +;; Allow refile to create parent tasks with confirmation +(setq org-refile-allow-creating-parent-nodes (quote confirm)) +;; Exclude DONE state tasks from refile targets +(defun bh/verify-refile-target () + "Exclude todo keywords with a done state from refile targets" + (not (member (nth 2 (org-heading-components)) org-done-keywords))) +(setq org-refile-target-verify-function 'bh/verify-refile-target) + + +(crafted-package-install-package 'org-super-agenda) +(org-super-agenda-mode) +(setq org-super-agenda-header-map (make-sparse-keymap)) + +(setq org-agenda-custom-commands + '(("c" "Custom Agenda" + ((agenda "" ((org-agenda-span 'day) + (org-super-agenda-groups + '((:name "--- LATE ---" + :face (:underline t) + :deadline past + :order 1) + (:name "--- DUE TODAY ---" + :time-grid t + :deadline today + :order 2) + (:name "--- SCHEDULED TODAY ---" + :time-grid t + :date today + :scheduled today + :order 3) + (:name "" + :discard (:anything) + :order 99)) + ))))))) + +;; Configure common tags +(setq org-tag-alist + '((:startgroup) + ; Put mutually exclusive tags here + (:endgroup) + ("@errand" . ?E) + ("@home" . ?H) + ("@work" . ?W) + ("agenda" . ?a) + ("planning" . ?p) + ("publish" . ?P) + ("batch" . ?b) + ("note" . ?n) + ("idea" . ?i) + ("thinking" . ?t) + ("recurring" . ?r))) + +;;; Provide the module +(provide 'custom-org) diff --git a/dot_config/crafted-emacs/custom.el b/dot_config/crafted-emacs/custom.el new file mode 100644 index 00000000..8a816b5c --- /dev/null +++ b/dot_config/crafted-emacs/custom.el @@ -0,0 +1,48 @@ +;;; custom.el --- l -*- lexical-binding: t; -*- + +;; Copyright (C) 2022 + +;; Author: +;; Keywords: + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; + +;;; Code: + + + +(provide 'custom) +;;; custom.el ends here +(custom-set-variables + ;; custom-set-variables was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + '(custom-safe-themes + '("eca44f32ae038d7a50ce9c00693b8986f4ab625d5f2b4485e20f22c47f2634ae" default)) + '(package-selected-packages + '((burly :host github :repo "alphapapa/burly.el" :branch "main") + (burly :host github :repo "alphapapa/burly.el" :branch "master") + burly dirvish vertico use-package org-appear orderless marginalia helpful evil-nerd-commenter evil-collection embark-consult elisp-demos doom-themes doom-modeline corfu-doc cape all-the-icons)) + '(warning-suppress-types '((frameset)))) +(custom-set-faces + ;; custom-set-faces was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + ) diff --git a/dot_config/crafted-emacs/early-config.el b/dot_config/crafted-emacs/early-config.el new file mode 100644 index 00000000..3d90a892 --- /dev/null +++ b/dot_config/crafted-emacs/early-config.el @@ -0,0 +1,5 @@ +(setq package-enable-at-startup t) +(defalias 'crafted-use-package 'straight-use-package) +(setq crafted-package-system 'straight) +(setq straight-base-dir "~/.emacs.d/straight") +(crafted-package-bootstrap crafted-package-system) diff --git a/dot_config/crafted-emacs/theme.el b/dot_config/crafted-emacs/theme.el new file mode 100644 index 00000000..18d7480d --- /dev/null +++ b/dot_config/crafted-emacs/theme.el @@ -0,0 +1,19 @@ +;;; theme.el -*- lexical-binding: t; -*- + +;; Author: Tyler Starr + +;; Commentary + +;; Custom theming for emacs + +;;; Colors + +;; Provide nice premade themes +(crafted-package-install-package 'doom-themes) + +;; Disable default theme and enable gruvbox +(disable-theme 'deeper-blue) +(load-theme 'doom-gruvbox t) + +;;; Provide the module +(provide 'theme) diff --git a/dot_config/crafted-emacs/ux.el b/dot_config/crafted-emacs/ux.el new file mode 100644 index 00000000..0491a72a --- /dev/null +++ b/dot_config/crafted-emacs/ux.el @@ -0,0 +1,31 @@ +;;; ux.el -*- lexical-binding: t; -*- + +;; Author: Tyler Starr + +;; Commentary + +;; Custom configuration of emacs ux elements + +;;; File Management + +(crafted-package-install-package 'dirvish) +(dirvish-override-dired-mode) + +(crafted-package-install-package 'treemacs) + +;;; Window Management + +(crafted-package-install-package '(burly :host github + :repo "alphapapa/burly.el" + :branch "master")) +(tab-bar-mode) +(burly-tabs-mode) + +;;; Keybinds + +(crafted-package-install-package 'which-key) +(which-key-mode) + + +;;; Provide the module +(provide 'ux) diff --git a/dot_config/herbstluftwm/executable_autostart b/dot_config/herbstluftwm/executable_autostart new file mode 100644 index 00000000..e12d238d --- /dev/null +++ b/dot_config/herbstluftwm/executable_autostart @@ -0,0 +1,187 @@ +#!/usr/bin/env bash + +# this is a simple config for herbstluftwm + +hc() { + herbstclient "$@" +} + +hc emit_hook reload + +xsetroot -solid '#FFFFFF' + +# remove all existing keybindings +hc keyunbind --all + +# keybindings +# if you have a super key you will be much happier with Mod set to Mod4 +#Mod=Mod1 # Use alt as the main modifier +Mod=Mod4 # Use the super key as the main modifier + +hc keybind $Mod-Shift-q quit +hc keybind $Mod-Shift-r reload +hc keybind $Mod-Shift-c close +TERMINAL="alacritty" +hc keybind $Mod-Return spawn "${TERMINAL:-xterm}" # use your $TERMINAL with xterm as fallback + +# basic movement in tiling and floating mode +# focusing clients +hc keybind $Mod-Left focus left +hc keybind $Mod-Down focus down +hc keybind $Mod-Up focus up +hc keybind $Mod-Right focus right +hc keybind $Mod-h focus left +hc keybind $Mod-j focus down +hc keybind $Mod-k focus up +hc keybind $Mod-l focus right + +# moving clients in tiling and floating mode +hc keybind $Mod-Shift-Left shift left +hc keybind $Mod-Shift-Down shift down +hc keybind $Mod-Shift-Up shift up +hc keybind $Mod-Shift-Right shift right +hc keybind $Mod-Shift-h shift left +hc keybind $Mod-Shift-j shift down +hc keybind $Mod-Shift-k shift up +hc keybind $Mod-Shift-l shift right + +# splitting frames +# create an empty frame at the specified direction +hc keybind $Mod-u split bottom 0.5 +hc keybind $Mod-o split right 0.5 +# let the current frame explode into subframes +hc keybind $Mod-Control-space split explode + +# resizing frames and floating clients +resizestep=0.02 +hc keybind $Mod-Control-h resize left +$resizestep +hc keybind $Mod-Control-j resize down +$resizestep +hc keybind $Mod-Control-k resize up +$resizestep +hc keybind $Mod-Control-l resize right +$resizestep +hc keybind $Mod-Control-Left resize left +$resizestep +hc keybind $Mod-Control-Down resize down +$resizestep +hc keybind $Mod-Control-Up resize up +$resizestep +hc keybind $Mod-Control-Right resize right +$resizestep + +# tags +tag_names=( {1..9} ) +tag_keys=( {1..9} 0 ) + +hc rename default "${tag_names[0]}" || true +for i in "${!tag_names[@]}" ; do + hc add "${tag_names[$i]}" + key="${tag_keys[$i]}" + if ! [ -z "$key" ] ; then + hc keybind "$Mod-$key" use_index "$i" + hc keybind "$Mod-Shift-$key" move_index "$i" + fi +done + +# cycle through tags +hc keybind $Mod-period use_index +1 --skip-visible +hc keybind $Mod-comma use_index -1 --skip-visible + +# layouting +hc keybind $Mod-r remove +hc keybind $Mod-s floating toggle +hc keybind $Mod-f fullscreen toggle +hc keybind $Mod-Shift-f set_attr clients.focus.floating toggle +hc keybind $Mod-Shift-m set_attr clients.focus.minimized true +hc keybind $Mod-Control-m jumpto last-minimized +hc keybind $Mod-p pseudotile toggle +# The following cycles through the available layouts within a frame, but skips +# layouts, if the layout change wouldn't affect the actual window positions. +# I.e. if there are two windows within a frame, the grid layout is skipped. +hc keybind $Mod-space \ + or , and . compare tags.focus.curframe_wcount = 2 \ + . cycle_layout +1 vertical horizontal max vertical grid \ + , cycle_layout +1 + +# mouse +hc mouseunbind --all +hc mousebind $Mod-Button1 move +hc mousebind $Mod-Button2 zoom +hc mousebind $Mod-Button3 resize + +# focus +hc keybind $Mod-BackSpace cycle_monitor +hc keybind $Mod-Tab cycle_all +1 +hc keybind $Mod-Shift-Tab cycle_all -1 +hc keybind $Mod-c cycle +hc keybind $Mod-i jumpto urgent + +# rofi + +# theme +hc attr theme.tiling.reset 1 +hc attr theme.floating.reset 1 +hc set frame_border_active_color '#222222cc' +hc set frame_border_normal_color '#101010cc' +hc set frame_bg_normal_color '#565656aa' +hc set frame_bg_active_color '#345F0Caa' +hc set frame_border_width 1 +hc set always_show_frame on +hc set frame_bg_transparent on +hc set frame_transparent_width 5 +hc set frame_gap 4 + +hc attr theme.title_height 15 +hc attr theme.title_font 'Dejavu Sans:pixelsize=12' # example using Xft +# hc attr theme.title_font '-*-fixed-medium-r-*-*-13-*-*-*-*-*-*-*' +hc attr theme.padding_top 2 # space below the title's baseline (i.e. text depth) +hc attr theme.active.color '#345F0Cef' +hc attr theme.title_color '#ffffff' +hc attr theme.normal.color '#323232dd' +hc attr theme.urgent.color '#7811A1dd' +hc attr theme.normal.title_color '#898989' +hc attr theme.inner_width 1 +hc attr theme.inner_color black +hc attr theme.border_width 3 +hc attr theme.floating.border_width 4 +hc attr theme.floating.outer_width 1 +hc attr theme.floating.outer_color black +hc attr theme.active.inner_color '#789161' +hc attr theme.urgent.inner_color '#9A65B0' +hc attr theme.normal.inner_color '#606060' +# copy inner color to outer_color +for state in active urgent normal ; do + hc substitute C theme.${state}.inner_color \ + attr theme.${state}.outer_color C +done +hc attr theme.active.outer_width 1 +hc attr theme.background_color '#141414' + +hc set window_gap 0 +hc set frame_padding 0 +hc set smart_window_surroundings off +hc set smart_frame_surroundings on +hc set mouse_recenter_gap 0 + +# rules +hc unrule -F +#hc rule class=XTerm tag=3 # move all xterms to tag 3 +hc rule focus=on # normally focus new clients +hc rule floatplacement=smart +#hc rule focus=off # normally do not focus new clients +# give focus to most common terminals +#hc rule class~'(.*[Rr]xvt.*|.*[Tt]erm|Konsole)' focus=on +hc rule windowtype~'_NET_WM_WINDOW_TYPE_(DIALOG|UTILITY|SPLASH)' floating=on +hc rule windowtype='_NET_WM_WINDOW_TYPE_DIALOG' focus=on +hc rule windowtype~'_NET_WM_WINDOW_TYPE_(NOTIFICATION|DOCK|DESKTOP)' manage=off +hc set tree_style '╾│ ├└╼─┐' + +# unlock, just to be sure +hc unlock + +# do multi monitor setup here, e.g.: +# hc set_monitors 1280x1024+0+0 1280x1024+1280+0 +# or simply: +hc detect_monitors + +# find the panel +panel=~/.config/herbstluftwm/panel.sh +[ -x "$panel" ] || panel=/etc/xdg/herbstluftwm/panel.sh +for monitor in $(hc list_monitors | cut -d: -f1) ; do + # start it on each monitor + "$panel" "$monitor" & +done diff --git a/dot_config/i3/config b/dot_config/i3/config new file mode 100644 index 00000000..0ce5d1cf --- /dev/null +++ b/dot_config/i3/config @@ -0,0 +1,195 @@ +# i3 config file (v4) +# TODO: add scratchpads (terminal, password manager, discord, task) + +#------------------------------------------------------------------------------- +#----- VARIABLES +#------------------------------------------------------------------------------- + +set $HOME /home/tstarr + +#set $DISP_PRI DP-4 +#set $DISP_SEC HDMI-0 + +set $DISP_PRI HDMI-0 +set $DISP_SEC DP-4 + +#set $DISP_PRI HDMI-0 +#set $DISP_SEC HDMI-0 + +set $BOR_WIDTH 2 +set $GAP_INNER 2 + +set $mod Mod4 + +set $tag1 "1:game" +set $tag2 "2:dev" +set $tag3 "3:web" +set $tag4 "4:web" +set $tag5 "5:web" +set $tag6 "6:web" +set $tag7 "7:comm" +set $tag8 "8:task" + +#------------------------------------------------------------------------------- +#----- COLORS +#------------------------------------------------------------------------------- + +# class border bground text indicator child_border +client.focused #6272A4 #6272A4 #F8F8F2 #6272A4 #6272A4 +client.focused_inactive #44475A #44475A #F8F8F2 #44475A #44475A +client.unfocused #282A36 #282A36 #BFBFBF #282A36 #282A36 +client.urgent #44475A #FF5555 #F8F8F2 #FF5555 #FF5555 +client.placeholder #282A36 #282A36 #F8F8F2 #282A36 #282A36 + +client.background #F8F8F2 + +#------------------------------------------------------------------------------- +#----- MISC. CONFIGURATION +#------------------------------------------------------------------------------- + +font pango:Google Noto 8.5 +default_border pixel 1 +default_floating_border pixel 1 + +#------------------------------------------------------------------------------- +#----- BINDING WORKSPACE TO DISPLAY +#------------------------------------------------------------------------------- + +workspace $tag1 output $DISP_PRI +workspace $tag2 output $DISP_PRI +workspace $tag3 output $DISP_PRI +workspace $tag4 output $DISP_PRI +workspace $tag5 output $DISP_SEC +workspace $tag6 output $DISP_SEC +workspace $tag7 output $DISP_SEC +workspace $tag8 output $DISP_SEC + +#------------------------------------------------------------------------------- +#----- CONTAINER GAPS +#------------------------------------------------------------------------------- + +# CREATING GAPS BETWEEN THE WINDOWS AND EDGES +gaps inner $GAP_INNER +gaps outer 0 +gaps horizontal 0 +gaps vertical 0 +gaps top 0 +gaps bottom 0 +gaps right 0 +gaps left 0 + +#------------------------------------------------------------------------------- +#----- FORCE FLOATING +#------------------------------------------------------------------------------- + +for_window [title="Steam - News"] floating enable +for_window [title="Friends List"] floating enable + +for_window [title="Picture-in-Picture"] sticky toggle + +for_window [con_mark="scratch-term"] floating enable, \ + resize set 800 px 600 px, \ + move position 880 px 420 px + +for_window [con_mark="scratch-nnn"] floating enable, \ + resize set 800 px 600 px, \ + move position 880 px 420 px + +for_window [con_mark="scratch-warden"] floating enable, \ + resize set 1000 px 800 px, \ + move position 780 px 320 px + +#------------------------------------------------------------------------------- +#----- BINDING APPLICATIONS TO WORKSPACE +#------------------------------------------------------------------------------- + +assign [class="Steam"] "1:game" +for_window [class="Steam"] move container to workspace "1:game" + +#------------------------------------------------------------------------------- +#----- KEY BINDINGS +#------------------------------------------------------------------------------- + +# i3 utility commands +bindsym $mod+Ctrl+r restart +bindsym $mod+Ctrl+q exit +bindsym $mod+Ctrl+h resize shrink width 50 +bindsym $mod+Ctrl+j resize shrink height 50 +bindsym $mod+Ctrl+k resize grow height 50 +bindsym $mod+Ctrl+l resize grow width 50 + +# layout commands +bindsym $mod+z layout splith +bindsym $mod+x layout tabbed +bindsym $mod+c layout stacked +bindsym $mod+v layout splitv +bindsym $mod+s split h +bindsym $mod+Shift+s split v + +# program management +bindsym $mod+d kill +bindsym $mod+f fullscreen toggle +bindsym $mod+t floating toggle +bindsym $mod+g sticky toggle +bindsym $mod+Tab focus mode_toggle +floating_modifier $mod + +# spatial container management +bindsym $mod+h focus left +bindsym $mod+j focus down +bindsym $mod+k focus up +bindsym $mod+l focus right +bindsym $mod+Shift+h move left +bindsym $mod+Shift+j move down +bindsym $mod+Shift+k move up +bindsym $mod+Shift+l move right + +# workspace management +bindsym $mod+1 workspace $tag1 +bindsym $mod+2 workspace $tag2 +bindsym $mod+3 workspace $tag3 +bindsym $mod+4 workspace $tag4 +bindsym $mod+q workspace $tag5 +bindsym $mod+w workspace $tag6 +bindsym $mod+e workspace $tag7 +bindsym $mod+r workspace $tag8 +bindsym $mod+Shift+1 move container to workspace $tag1 +bindsym $mod+Shift+2 move container to workspace $tag2 +bindsym $mod+Shift+3 move container to workspace $tag3 +bindsym $mod+Shift+4 move container to workspace $tag4 +bindsym $mod+Shift+q move container to workspace $tag5 +bindsym $mod+Shift+w move container to workspace $tag6 +bindsym $mod+Shift+e move container to workspace $tag7 +bindsym $mod+Shift+r move container to workspace $tag8 + +# system utils +bindsym XF86AudioRaiseVolume exec pactl set-sink-volume 0 +2% +bindsym XF86AudioLowerVolume exec pactl set-sink-volume 0 -2% +bindsym XF86AudioMute exec amixer -q set Master toggle +# TODO: flameshot (mod+Ctrl+f) +# TODO: gamemode (mod+Ctrl+g). Needs script to toggle + +# open applications +bindsym $mod+Return exec kitty +bindsym $mod+a exec rofi -show drun -theme gruvbox-dark-soft -show-icons +bindsym $mod+Shift+a exec rofi -show window -theme gruvbox-dark-soft -show-icons +bindsym $mod+u exec firefox +bindsym $mod+i exec steam + +# open scratchpads +bindsym $mod+Shift+Return exec $HOME/.config/i3/scripts/scratch.sh \ + 'scratch-term' 'kitty' + +bindsym $mod+n exec $HOME/.config/i3/scripts/scratch.sh \ + 'scratch-nnn' 'kitty -e nnn -d -e -H -r' + +bindsym $mod+b exec --no-startup-id $HOME/.config/i3/scripts/scratch.sh \ + 'scratch-warden' 'firefoxpwa site launch 01GKYZS658452DK05DVDCRF5V4' + +#------------------------------------------------------------------------------- +#----- AUTOSTART WITH I3 +#------------------------------------------------------------------------------- + +exec --no-startup-id $HOME/.config/i3/scripts/xrandr.sh +exec_always --no-startup-id $HOME/.config/i3/scripts/polybar.sh +exec_always --no-startup-id nitrogen --restore diff --git a/dot_config/i3/scripts/executable_polybar.sh b/dot_config/i3/scripts/executable_polybar.sh new file mode 100644 index 00000000..5c6be181 --- /dev/null +++ b/dot_config/i3/scripts/executable_polybar.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env sh + +# Terminate already running bar instances +killall -q polybar + +# Wait until the processes have been shut down +while pgrep -x polybar >/dev/null; do sleep 1; done + +# Launch polybar +polybar -c ~/.config/polybar/dracula & diff --git a/dot_config/i3/scripts/executable_scratch.sh b/dot_config/i3/scripts/executable_scratch.sh new file mode 100644 index 00000000..a71ec5a1 --- /dev/null +++ b/dot_config/i3/scripts/executable_scratch.sh @@ -0,0 +1,34 @@ +#!/bin/sh + +if [ $# -ne 2 ]; then + echo "Usage: "${0}" " + echo "Example: ${0} 'scratch-emacs' 'emacsclient -c -a emacs'" + exit 1 +fi + +I3_MARK=${1} +LAUNCH_CMD=${2} + +scratchpad_show() { + i3-msg "[con_mark=${I3_MARK}]" scratchpad show +} + +# try showing the scratchpad window +if ! scratchpad_show; then + # if there is no such window... + + # launch the application. + eval "${LAUNCH_CMD}" & + + # Wait for the next window event. + i3-msg -t subscribe '[ "window" ]' + + # Set a mark + i3-msg mark ${I3_MARK} + + # Move it to the scratchpad workspace + i3-msg move scratchpad + + # show the scratchpad window + scratchpad_show +fi diff --git a/dot_config/i3/scripts/executable_xrandr.sh b/dot_config/i3/scripts/executable_xrandr.sh new file mode 100644 index 00000000..8d549aae --- /dev/null +++ b/dot_config/i3/scripts/executable_xrandr.sh @@ -0,0 +1,20 @@ +#!/usr/bin/python +# +import subprocess + +def run_command(cmd, capture=False): + if capture: + return subprocess.getoutput(cmd) + else: + subprocess.run(cmd, shell=True) + return + +# Get current ip address +ip_addr = run_command("hostname -I", True) +ip_slice = ip_addr.split(".")[2] + +# Set monitor configuration based on ip address +if ip_slice == "1": + run_command("xrandr --output HDMI-0 --mode 2560x1440 --pos 0x0 --rate 144 --output DP-4 --mode 2560x1440 --pos 2561x0 --rate 144 --primary --right-of HDMI-0") +elif ip_slice == "2": + run_command("xrandr --output HDMI-0 --mode 2560x1440 --pos 0x0 --rate 144 --primary --output DP-4 --mode 2560x1440 --pos 2561x0 --rate 144 --right-of HDMI-0") diff --git a/dot_config/kitty/dracula.conf b/dot_config/kitty/dracula.conf new file mode 100644 index 00000000..8f05c52a --- /dev/null +++ b/dot_config/kitty/dracula.conf @@ -0,0 +1,66 @@ +# https://draculatheme.com/kitty +# +# Installation instructions: +# +# cp dracula.conf ~/.config/kitty/ +# echo "include dracula.conf" >> ~/.config/kitty/kitty.conf +# +# Then reload kitty for the config to take affect. +# Alternatively copy paste below directly into kitty.conf + +foreground #f8f8f2 +background #282a36 +selection_foreground #ffffff +selection_background #44475a + +url_color #8be9fd + +# black +color0 #21222c +color8 #6272a4 + +# red +color1 #ff5555 +color9 #ff6e6e + +# green +color2 #50fa7b +color10 #69ff94 + +# yellow +color3 #f1fa8c +color11 #ffffa5 + +# blue +color4 #bd93f9 +color12 #d6acff + +# magenta +color5 #ff79c6 +color13 #ff92df + +# cyan +color6 #8be9fd +color14 #a4ffff + +# white +color7 #f8f8f2 +color15 #ffffff + +# Cursor colors +cursor #f8f8f2 +cursor_text_color background + +# Tab bar colors +active_tab_foreground #282a36 +active_tab_background #f8f8f2 +inactive_tab_foreground #282a36 +inactive_tab_background #6272a4 + +# Marks +mark1_foreground #282a36 +mark1_background #ff5555 + +# Splits/Windows +active_border_color #f8f8f2 +inactive_border_color #6272a4 diff --git a/dot_config/kitty/kitty.conf b/dot_config/kitty/kitty.conf new file mode 100644 index 00000000..077a4fff --- /dev/null +++ b/dot_config/kitty/kitty.conf @@ -0,0 +1,2 @@ +include dracula.conf +confirm_os_window_close 0 diff --git a/dot_config/lazygit/empty_config.yml b/dot_config/lazygit/empty_config.yml new file mode 100644 index 00000000..e69de29b diff --git a/dot_config/lazygit/state.yml b/dot_config/lazygit/state.yml new file mode 100644 index 00000000..9ad099c1 --- /dev/null +++ b/dot_config/lazygit/state.yml @@ -0,0 +1,6 @@ +lastupdatecheck: 0 +recentrepos: +- /home/tstarr/.dotfiles +startuppopupversion: 5 +customcommandshistory: [] +hidecommandlog: false diff --git a/dot_config/mpd/executable_mpd.conf b/dot_config/mpd/executable_mpd.conf new file mode 100644 index 00000000..b9a1fe4c --- /dev/null +++ b/dot_config/mpd/executable_mpd.conf @@ -0,0 +1,390 @@ +# An example configuration file for MPD. +# Read the user manual for documentation: http://www.musicpd.org/doc/user/ + + +# Files and directories ####################################################### +# +# This setting controls the top directory which MPD will search to discover the +# available audio files and add them to the daemon's online database. This +# setting defaults to the XDG directory, otherwise the music directory will be +# be disabled and audio files will only be accepted over ipc socket (using +# file:// protocol) or streaming files over an accepted protocol. +# +music_directory "~/media/audio" +# +# This setting sets the MPD internal playlist directory. The purpose of this +# directory is storage for playlists created by MPD. The server will use +# playlist files not created by the server but only if they are in the MPD +# format. This setting defaults to playlist saving being disabled. +# +playlist_directory "~/.config/mpd/playlists" +# +# This setting sets the location of the MPD database. This file is used to +# load the database at server start up and store the database while the +# server is not up. This setting defaults to disabled which will allow +# MPD to accept files over ipc socket (using file:// protocol) or streaming +# files over an accepted protocol. +# +db_file "~/.config/mpd/mpd.db" +# +# These settings are the locations for the daemon log files for the daemon. +# These logs are great for troubleshooting, depending on your log_level +# settings. +# +# The special value "syslog" makes MPD use the local syslog daemon. This +# setting defaults to logging to syslog. +# +log_file "~/.config/mpd/mpd.log" +# +# This setting sets the location of the file which stores the process ID +# for use of mpd --kill and some init scripts. This setting is disabled by +# default and the pid file will not be stored. +# +pid_file "~/.config/mpd/mpd.pid" +# +# This setting sets the location of the file which contains information about +# most variables to get MPD back into the same general shape it was in before +# it was brought down. This setting is disabled by default and the server +# state will be reset on server start up. +# +state_file "~/.config/mpd/mpd.state" +# +# The location of the sticker database. This is a database which +# manages dynamic information attached to songs. +# +#sticker_file "~/.mpd/sticker.sql" +# +############################################################################### + + +# General music daemon options ################################################ +# +# This setting specifies the user that MPD will run as. MPD should never run as +# root and you may use this setting to make MPD change its user ID after +# initialization. This setting is disabled by default and MPD is run as the +# current user. +# +user "tstarr" +# +# This setting specifies the group that MPD will run as. If not specified +# primary group of user specified with "user" setting will be used (if set). +# This is useful if MPD needs to be a member of group such as "audio" to +# have permission to use sound card. +# +#group "nogroup" +# +# This setting sets the address for the daemon to listen on. Careful attention +# should be paid if this is assigned to anything other then the default, any. +# This setting can deny access to control of the daemon. Not effective if +# systemd socket activiation is in use. +# +# For network +bind_to_address "any" +# +# And for Unix Socket +#bind_to_address "~/.mpd/socket" +# +# This setting is the TCP port that is desired for the daemon to get assigned +# to. +# +port "6600" +# +# This setting controls the type of information which is logged. Available +# setting arguments are "default", "secure" or "verbose". The "verbose" setting +# argument is recommended for troubleshooting, though can quickly stretch +# available resources on limited hardware storage. +# +#log_level "default" +# +# Setting "restore_paused" to "yes" puts MPD into pause mode instead +# of starting playback after startup. +# +#restore_paused "no" +# +# This setting enables MPD to create playlists in a format usable by other +# music players. +# +#save_absolute_paths_in_playlists "no" +# +# This setting defines a list of tag types that will be extracted during the +# audio file discovery process. The complete list of possible values can be +# found in the user manual. +#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc" +# +# This example just enables the "comment" tag without disabling all +# the other supported tags: +#metadata_to_use "+comment" +# +# This setting enables automatic update of MPD's database when files in +# music_directory are changed. +# +auto_update "yes" +# +# Limit the depth of the directories being watched, 0 means only watch +# the music directory itself. There is no limit by default. +# +#auto_update_depth "3" +# +############################################################################### + + +# Symbolic link behavior ###################################################### +# +# If this setting is set to "yes", MPD will discover audio files by following +# symbolic links outside of the configured music_directory. +# +#follow_outside_symlinks "yes" +# +# If this setting is set to "yes", MPD will discover audio files by following +# symbolic links inside of the configured music_directory. +# +#follow_inside_symlinks "yes" +# +############################################################################### + + +# Zeroconf / Avahi Service Discovery ########################################## +# +# If this setting is set to "yes", service information will be published with +# Zeroconf / Avahi. +# +#zeroconf_enabled "yes" +# +# The argument to this setting will be the Zeroconf / Avahi unique name for +# this MPD server on the network. %h will be replaced with the hostname. +# +#zeroconf_name "Music Player @ %h" +# +############################################################################### + + +# Permissions ################################################################# +# +# If this setting is set, MPD will require password authorization. The password +# setting can be specified multiple times for different password profiles. +# +#password "password@read,add,control,admin" +# +# This setting specifies the permissions a user has who has not yet logged in. +# +#default_permissions "read,add,control,admin" +# +############################################################################### + + +# Database ####################################################################### +# + +#database { +# plugin "proxy" +# host "other.mpd.host" +# port "6600" +#} + +# Input ####################################################################### +# + +#input { +# plugin "curl" +# proxy "proxy.isp.com:8080" +# proxy_user "user" +# proxy_password "password" +#} + +# +############################################################################### + +# Audio Output ################################################################ +# +# MPD supports various audio output types, as well as playing through multiple +# audio outputs at the same time, through multiple audio_output settings +# blocks. Setting this block is optional, though the server will only attempt +# autodetection for one sound card. +# +# An example of an ALSA output: +# +#audio_output { +# type "alsa" +# name "My ALSA Device" +## device "hw:0,0" # optional +## mixer_type "hardware" # optional +## mixer_device "default" # optional +## mixer_control "PCM" # optional +## mixer_index "0" # optional +#} +# +# An example of an OSS output: +# +#audio_output { +# type "oss" +# name "My OSS Device" +## device "/dev/dsp" # optional +## mixer_type "hardware" # optional +## mixer_device "/dev/mixer" # optional +## mixer_control "PCM" # optional +#} +# +# An example of a shout output (for streaming to Icecast): +# +#audio_output { +# type "shout" +# encoder "vorbis" # optional +# name "My Shout Stream" +# host "localhost" +# port "8000" +# mount "/mpd.ogg" +# password "hackme" +# quality "5.0" +# bitrate "128" +# format "44100:16:1" +## protocol "icecast2" # optional +## user "source" # optional +## description "My Stream Description" # optional +## url "http://example.com" # optional +## genre "jazz" # optional +## public "no" # optional +## timeout "2" # optional +## mixer_type "software" # optional +#} +# +# An example of a recorder output: +# +#audio_output { +# type "recorder" +# name "My recorder" +# encoder "vorbis" # optional, vorbis or lame +# path "/var/lib/mpd/recorder/mpd.ogg" +## quality "5.0" # do not define if bitrate is defined +# bitrate "128" # do not define if quality is defined +# format "44100:16:1" +#} +# +# An example of a httpd output (built-in HTTP streaming server): +# +#audio_output { +# type "httpd" +# name "My HTTP Stream" +# encoder "vorbis" # optional, vorbis or lame +# port "8000" +# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6 +## quality "5.0" # do not define if bitrate is defined +# bitrate "128" # do not define if quality is defined +# format "44100:16:1" +# max_clients "0" # optional 0=no limit +#} +# +# An example of a pulseaudio output (streaming to a remote pulseaudio server) +# +audio_output { + type "pulse" + name "My Pulse Output" + server "127.0.0.1" # optional +# sink "remote_server_sink" # optional +} +# +# An example of a winmm output (Windows multimedia API). +# +#audio_output { +# type "winmm" +# name "My WinMM output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +# or +## device "0" # optional +## mixer_type "hardware" # optional +#} +# +# An example of an openal output. +# +#audio_output { +# type "openal" +# name "My OpenAL output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +#} +# +# An example of an sndio output. +# +#audio_output { +# type "sndio" +# name "sndio output" +# mixer_type "hardware" +#} +# +# An example of an OS X output: +# +#audio_output { +# type "osx" +# name "My OS X Device" +## device "Built-in Output" # optional +## channel_map "-1,-1,0,1" # optional +#} +# +## Example "pipe" output: +# +#audio_output { +# type "pipe" +# name "my pipe" +# command "aplay -f cd 2>/dev/null" +## Or if you're want to use AudioCompress +# command "AudioCompress -m | aplay -f cd 2>/dev/null" +## Or to send raw PCM stream through PCM: +# command "nc example.org 8765" +# format "44100:16:2" +#} +# +## An example of a null output (for no audio output): +# +#audio_output { +# type "null" +# name "My Null Output" +# mixer_type "none" # optional +#} +# +############################################################################### + + +# Normalization automatic volume adjustments ################################## +# +# This setting specifies the type of ReplayGain to use. This setting can have +# the argument "off", "album", "track" or "auto". "auto" is a special mode that +# chooses between "track" and "album" depending on the current state of +# random playback. If random playback is enabled then "track" mode is used. +# See for more details about ReplayGain. +# This setting is off by default. +# +#replaygain "album" +# +# This setting sets the pre-amp used for files that have ReplayGain tags. By +# default this setting is disabled. +# +#replaygain_preamp "0" +# +# This setting sets the pre-amp used for files that do NOT have ReplayGain tags. +# By default this setting is disabled. +# +#replaygain_missing_preamp "0" +# +# This setting enables or disables ReplayGain limiting. +# MPD calculates actual amplification based on the ReplayGain tags +# and replaygain_preamp / replaygain_missing_preamp setting. +# If replaygain_limit is enabled MPD will never amplify audio signal +# above its original level. If replaygain_limit is disabled such amplification +# might occur. By default this setting is enabled. +# +#replaygain_limit "yes" +# +# This setting enables on-the-fly normalization volume adjustment. This will +# result in the volume of all playing audio to be adjusted so the output has +# equal "loudness". This setting is disabled by default. +# +#volume_normalization "no" +# +############################################################################### + +# Character Encoding ########################################################## +# +# If file or directory names do not display correctly for your locale then you +# may need to modify this setting. +# +filesystem_charset "UTF-8" +# +############################################################################### diff --git a/dot_config/mpd/executable_mpd.log b/dot_config/mpd/executable_mpd.log new file mode 100644 index 00000000..648e6d80 --- /dev/null +++ b/dot_config/mpd/executable_mpd.log @@ -0,0 +1,126 @@ +Nov 14 13:52 : update: added youtube/Being CHEATED by Koreans; Mindset for Competition - 'Reflections' with NaNiwa (SC2) (2nd Appearance).mp3 +Nov 14 13:52 : update: added youtube/The Wonderfully Self-Flattering World Of Barack Obama _ Ep. 1137.mp3 +Nov 15 22:24 : player: played "youtube/The Wonderfully Self-Flattering World Of Barack Obama _ Ep. 1137.mp3" +Nov 16 18:26 : player: played "youtube/The Wonderfully Self-Flattering World Of Barack Obama _ Ep. 1137.mp3" +Nov 16 21:31 : update: added youtube/youtube-dl RESTORED, Github & the EFF RESPOND!!.m4a +Nov 16 21:31 : update: added youtube/youtube-dl RESTORED, Github & the EFF RESPOND!!.mp3 +Nov 16 21:31 : update: removing youtube/youtube-dl RESTORED, Github & the EFF RESPOND!!.m4a +Nov 16 21:31 : update: updating youtube/youtube-dl RESTORED, Github & the EFF RESPOND!!.mp3 +Nov 16 22:27 : player: played "youtube/The Wonderfully Self-Flattering World Of Barack Obama _ Ep. 1137.mp3" +Nov 17 21:55 : player: played "youtube/The Wonderfully Self-Flattering World Of Barack Obama _ Ep. 1137.mp3" +Nov 19 20:02 : player: played "youtube/The Wonderfully Self-Flattering World Of Barack Obama _ Ep. 1137.mp3" +Nov 20 21:31 : update: added youtube/Twitch's DMCA Debacle.webm +Nov 20 21:31 : update: added youtube/Twitch's DMCA Debacle.mp3 +Nov 20 21:32 : update: removing youtube/Twitch's DMCA Debacle.webm +Nov 20 21:32 : update: updating youtube/Twitch's DMCA Debacle.mp3 +Nov 20 22:13 : player: played "youtube/Twitch's DMCA Debacle.mp3" +Nov 21 10:44 : update: added youtube/Companies lobby against legislation prohibiting slave labor.webm +Nov 21 10:44 : update: added youtube/Companies lobby against legislation prohibiting slave labor.mp3 +Nov 21 10:45 : update: removing youtube/Companies lobby against legislation prohibiting slave labor.webm +Nov 21 10:45 : update: updating youtube/Companies lobby against legislation prohibiting slave labor.mp3 +Nov 21 10:46 : update: added youtube/Valve BANNED You Write Your OWN Story! - Banned Players Swim Against the Current (CS -GO).webm +Nov 21 10:46 : update: added youtube/Valve BANNED You Write Your OWN Story! - Banned Players Swim Against the Current (CS -GO).mp3 +Nov 21 10:46 : update: removing youtube/Valve BANNED You Write Your OWN Story! - Banned Players Swim Against the Current (CS -GO).webm +Nov 21 10:46 : update: updating youtube/Valve BANNED You Write Your OWN Story! - Banned Players Swim Against the Current (CS -GO).mp3 +Nov 21 10:47 : update: added youtube/Jamppi's Lawsuit Against Valve Looks DEAD.webm +Nov 21 10:47 : update: added youtube/Jamppi's Lawsuit Against Valve Looks DEAD.mp3 +Nov 21 10:47 : update: removing youtube/Jamppi's Lawsuit Against Valve Looks DEAD.webm +Nov 21 10:47 : update: updating youtube/Jamppi's Lawsuit Against Valve Looks DEAD.mp3 +Nov 21 10:47 : update: added youtube/Jack on Breaking the Bank for Perkz - Talk to Thorin (LoL).mp3 +Nov 21 10:47 : update: added youtube/Jack on Breaking the Bank for Perkz - Talk to Thorin (LoL).webm +Nov 21 10:48 : update: removing youtube/Jack on Breaking the Bank for Perkz - Talk to Thorin (LoL).webm +Nov 21 10:48 : update: updating youtube/Jack on Breaking the Bank for Perkz - Talk to Thorin (LoL).mp3 +Nov 21 17:32 : player: played "youtube/Valve BANNED You Write Your OWN Story! - Banned Players Swim Against the Current (CS -GO).mp3" +Nov 23 20:58 : exception: Failed to decode /home/tstarr/media/audio/youtube/Valve BANNED You Write Your OWN Story! - Banned Players Swim Against the Current (CS -GO).mp3; Failed to open '/home/tstarr/media/audio/youtube/Valve BANNED You Write Your OWN Story! - Banned Players Swim Against the Current (CS -GO).mp3': No such file or directory +Nov 23 20:58 : player: played "youtube/Valve BANNED You Write Your OWN Story! - Banned Players Swim Against the Current (CS -GO).mp3" +Nov 23 20:59 : exception: Failed to decode /home/tstarr/media/audio/youtube/Jamppi's Lawsuit Against Valve Looks DEAD.mp3; Failed to open '/home/tstarr/media/audio/youtube/Jamppi's Lawsuit Against Valve Looks DEAD.mp3': No such file or directory +Nov 23 20:59 : player: played "youtube/Jamppi's Lawsuit Against Valve Looks DEAD.mp3" +Nov 23 20:59 : update: removing youtube/Being CHEATED by Koreans; Mindset for Competition - 'Reflections' with NaNiwa (SC2) (2nd Appearance).mp3 +Nov 23 20:59 : update: removing youtube/Jamppi's Lawsuit Against Valve Looks DEAD.mp3 +Nov 23 20:59 : update: removing youtube/Jack on Breaking the Bank for Perkz - Talk to Thorin (LoL).mp3 +Nov 23 20:59 : update: removing youtube/Companies lobby against legislation prohibiting slave labor.mp3 +Nov 23 20:59 : update: removing youtube/Twitch's DMCA Debacle.mp3 +Nov 23 20:59 : update: removing youtube/The Wonderfully Self-Flattering World Of Barack Obama _ Ep. 1137.mp3 +Nov 23 20:59 : update: removing youtube/Valve BANNED You Write Your OWN Story! - Banned Players Swim Against the Current (CS -GO).mp3 +Nov 23 20:59 : update: removing youtube/youtube-dl RESTORED, Github & the EFF RESPOND!!.mp3 +Nov 23 20:59 : update: added youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3 +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : player: problems opening audio device while playing "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : player: played "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : player: problems opening audio device while playing "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 20:59 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:00 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:00 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:00 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:00 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:00 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:00 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:00 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:00 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:00 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:00 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:00 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:00 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:00 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:00 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:00 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:00 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:00 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:00 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:01 : update: updating youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3 +Nov 23 21:01 : update: added youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.webm +Nov 23 21:01 : update: updating youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3 +Nov 23 21:01 : update: removing youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.webm +Nov 23 21:03 : player: played "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Nov 23 21:03 : exception: Failed to open "pulse audio" (pulse); failed to connect: Connection refused +Nov 23 21:03 : exception: Failed to open "pulse audio" (pulse); failed to connect: Connection refused +Nov 23 21:03 : exception: Failed to open "pulse audio" (pulse); failed to connect: Connection refused +Nov 23 21:03 : exception: Failed to open "pulse audio" (pulse); failed to connect: Connection refused +Nov 23 21:03 : exception: Failed to open "pulse audio" (pulse); failed to connect: Connection refused +Nov 23 21:03 : exception: Failed to open "pulse audio" (pulse); failed to connect: Connection refused +Nov 23 21:03 : exception: Failed to open "pulse audio" (pulse); failed to connect: Connection refused +Nov 23 21:03 : exception: Failed to open "pulse audio" (pulse); failed to connect: Connection refused +Nov 23 21:03 : exception: Failed to open "pulse audio" (pulse); failed to connect: Connection refused +Nov 23 21:03 : exception: Failed to open "pulse audio" (pulse); failed to connect: Connection refused +Nov 23 21:03 : player: played "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Nov 23 21:04 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:04 : exception: Failed to open "My Pulse Output" (pulse); failed to connect: Connection refused +Nov 23 21:10 : player: played "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Nov 23 21:13 : player: played "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Nov 23 21:24 : player: played "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Nov 23 22:26 : player: played "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Nov 24 20:59 : player: played "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Nov 24 21:01 : player: played "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Nov 25 21:20 : player: played "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Dec 06 18:59 : player: played "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Dec 07 00:43 : player: played "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Dec 07 23:37 : player: played "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Dec 08 23:43 : player: played "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Dec 09 21:14 : player: played "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Dec 09 22:49 : player: played "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Dec 10 23:20 : player: played "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" +Dec 11 22:57 : player: played "youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3" diff --git a/dot_config/mpd/mpd.db b/dot_config/mpd/mpd.db new file mode 100644 index 00000000..78f8c897 Binary files /dev/null and b/dot_config/mpd/mpd.db differ diff --git a/dot_config/mpd/mpd.pid b/dot_config/mpd/mpd.pid new file mode 100644 index 00000000..e29bf83e --- /dev/null +++ b/dot_config/mpd/mpd.pid @@ -0,0 +1 @@ +1143 diff --git a/dot_config/mpd/mpd.state b/dot_config/mpd/mpd.state new file mode 100644 index 00000000..7eba1401 --- /dev/null +++ b/dot_config/mpd/mpd.state @@ -0,0 +1,15 @@ +sw_volume: 78 +audio_device_state:1:My Pulse Output +state: pause +current: 0 +time: 32.461000 +random: 0 +repeat: 0 +single: 0 +consume: 0 +crossfade: 0 +mixrampdb: 0.000000 +mixrampdelay: -1.000000 +playlist_begin +0:youtube/Egalitarianism Vs. Utilitarianism - Differences EXPLAINED.mp3 +playlist_end diff --git a/dot_config/ncmpcpp/executable_config b/dot_config/ncmpcpp/executable_config new file mode 100644 index 00000000..69bff037 --- /dev/null +++ b/dot_config/ncmpcpp/executable_config @@ -0,0 +1,544 @@ +############################################################################## +## This is the example configuration file. Copy it to $HOME/.ncmpcpp/config ## +## or $XDG_CONFIG_HOME/ncmpcpp/config and set up your preferences. ## +############################################################################## +# +##### directories ###### +## +## Directory for storing ncmpcpp related files. Changing it is useful if you +## want to store everything somewhere else and provide command line setting for +## alternative location to config file which defines that while launching +## ncmpcpp. +## +# +#ncmpcpp_directory = ~/.ncmpcpp +# +## +## Directory for storing downloaded lyrics. It defaults to ~/.lyrics since other +## MPD clients (eg. ncmpc) also use that location. +## +# +#lyrics_directory = ~/.lyrics +# +##### connection settings ##### +# +mpd_host = 192.168.1.24 +# +mpd_port = 6600 +# +mpd_connection_timeout = 5 +# +## Needed for tag editor and file operations to work. +## +#mpd_music_dir = /home/tstarr/media/audio +# +#mpd_crossfade_time = 5 +# +##### music visualizer ##### +## +## Note: In order to make music visualizer work you'll need to use mpd fifo +## output, whose format parameter has to be set to 44100:16:1 for mono +## visualization or 44100:16:2 for stereo visualization. Example configuration +## (it has to be put into mpd.conf): +## +## audio_output { +## type "fifo" +## name "Visualizer feed" +## path "/tmp/mpd.fifo" +## format "44100:16:2" +## } +## +# +#visualizer_fifo_path = /tmp/mpd.fifo +# +## +## Note: Below parameter is needed for ncmpcpp to determine which output +## provides data for visualizer and thus allow syncing between visualization and +## sound as currently there are some problems with it. +## +# +#visualizer_output_name = Visualizer feed +# +## +## If you set format to 44100:16:2, make it 'yes'. +## +#visualizer_in_stereo = yes +# +## +## Note: Below parameter defines how often ncmpcpp has to "synchronize" +## visualizer and audio outputs. 30 seconds is optimal value, but if you +## experience synchronization problems, set it to lower value. Keep in mind +## that sane values start with >=10. +## +# +#visualizer_sync_interval = 30 +# +## +## Note: To enable spectrum frequency visualization you need to compile ncmpcpp +## with fftw3 support. +## +# +## Available values: spectrum, wave, wave_filled, ellipse. +## +#visualizer_type = wave +# +#visualizer_look = ●▮ +# +#visualizer_color = blue, cyan, green, yellow, magenta, red +# +## Alternative subset of 256 colors for terminals that support it. +## +#visualizer_color = 41, 83, 119, 155, 185, 215, 209, 203, 197, 161 +# +##### system encoding ##### +## +## ncmpcpp should detect your charset encoding but if it failed to do so, you +## can specify charset encoding you are using here. +## +## Note: You can see whether your ncmpcpp build supports charset detection by +## checking output of `ncmpcpp --version`. +## +## Note: Since MPD uses UTF-8 by default, setting this option makes sense only +## if your encoding is different. +## +# +#system_encoding = "" +# +##### delays ##### +# +## Time of inactivity (in seconds) after playlist highlighting will be disabled +## (0 = always on). +## +#playlist_disable_highlight_delay = 5 +# +## Defines how long messages are supposed to be visible. +## +#message_delay_time = 5 +# +##### song format ##### +## +## For a song format you can use: +## +## %l - length +## %f - filename +## %D - directory +## %a - artist +## %A - album artist +## %t - title +## %b - album +## %y - date +## %n - track number (01/12 -> 01) +## %N - full track info (01/12 -> 01/12) +## %g - genre +## %c - composer +## %p - performer +## %d - disc +## %C - comment +## %P - priority +## $R - begin right alignment +## +## If you want to make sure that a part of the format is displayed only when +## certain tags are present, you can archieve it by grouping them with brackets, +## e.g. '{%a - %t}' will be evaluated to 'ARTIST - TITLE' if both tags are +## present or '' otherwise. It is also possible to define a list of +## alternatives by providing several groups and separating them with '|', +## e.g. '{%t}|{%f}' will be evaluated to 'TITLE' or 'FILENAME' if the former is +## not present. +## +## Note: If you want to set limit on maximal length of a tag, just put the +## appropriate number between % and character that defines tag type, e.g. to +## make album take max. 20 terminal cells, use '%20b'. +## +## In addition, formats support markers used for text attributes. They are +## followed by character '$'. After that you can put: +## +## - 0 - default window color (discards all other colors) +## - 1 - black +## - 2 - red +## - 3 - green +## - 4 - yellow +## - 5 - blue +## - 6 - magenta +## - 7 - cyan +## - 8 - white +## - 9 - end of current color +## - b - bold text +## - u - underline text +## - r - reverse colors +## - a - use alternative character set +## +## If you don't want to use a non-color attribute anymore, just put it again, +## but this time insert character '/' between '$' and attribute character, +## e.g. {$b%t$/b}|{$r%f$/r} will display bolded title tag or filename with +## reversed colors. +## +## If you want to use 256 colors and/or background colors in formats (the naming +## scheme is described below in section about color definitions), it can be done +## with the syntax $(COLOR), e.g. to set the artist tag to one of the +## non-standard colors and make it have yellow background, you need to write +## $(197_yellow)%a$(end). Note that for standard colors this is interchangable +## with attributes listed above. +## +## Note: colors can be nested. +## +# +#song_list_format = {%a - }{%t}|{$8%f$9}$R{$3(%l)$9} +# +#song_status_format = {{%a{ "%b"{ (%y)}} - }{%t}}|{%f} +# +#song_library_format = {%n - }{%t}|{%f} +# +#alternative_header_first_line_format = $b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b +# +#alternative_header_second_line_format = {{$4$b%a$/b$9}{ - $7%b$9}{ ($4%y$9)}}|{%D} +# +#current_item_prefix = $(yellow)$r +# +#current_item_suffix = $/r$(end) +# +#current_item_inactive_column_prefix = $(white)$r +# +#current_item_inactive_column_suffix = $/r$(end) +# +#now_playing_prefix = $b +# +#now_playing_suffix = $/b +# +#browser_playlist_prefix = "$2playlist$9 " +# +#selected_item_prefix = $6 +# +#selected_item_suffix = $9 +# +#modified_item_prefix = $3> $9 +# +## +## Note: attributes are not supported for the following variables. +## +#song_window_title_format = {%a - }{%t}|{%f} +## +## Note: Below variables are used for sorting songs in browser. The sort mode +## determines how songs are sorted, and can be used in combination with a sort +## format to specify a custom sorting format. Available values for +## browser_sort_mode are "name", "mtime", "format" and "noop". +## +# +#browser_sort_mode = name +# +#browser_sort_format = {%a - }{%t}|{%f} {(%l)} +# +##### columns settings ##### +## +## syntax of song columns list format is "column column etc." +## +## - syntax for each column is: +## +## (width of the column)[color of the column]{displayed tag} +## +## Note: Width is by default in %, if you want a column to have fixed size, add +## 'f' after the value, e.g. (10)[white]{a} will be the column that take 10% of +## screen (so the real width will depend on actual screen size), whereas +## (10f)[white]{a} will take 10 terminal cells, no matter how wide the screen +## is. +## +## - color is optional (if you want the default one, leave the field empty). +## +## Note: You can give a column additional attributes by putting appropriate +## character after displayed tag character. Available attributes are: +## +## - r - column will be right aligned +## - E - if tag is empty, empty tag marker won't be displayed +## +## You can also: +## +## - give a column custom name by putting it after attributes, separated with +## character ':', e.g. {lr:Length} gives you right aligned column of lengths +## named "Length". +## +## - define sequence of tags, that have to be displayed in case predecessor is +## empty in a way similar to the one in classic song format, i.e. using '|' +## character, e.g. {a|c|p:Owner} creates column named "Owner" that tries to +## display artist tag and then composer and performer if previous ones are not +## available. +## +# +#song_columns_list_format = (20)[]{a} (6f)[green]{NE} (50)[white]{t|f:Title} (20)[cyan]{b} (7f)[magenta]{l} +# +##### various settings ##### +# +## +## Note: Custom command that will be executed each time song changes. Useful for +## notifications etc. +## +#execute_on_song_change = "" +# +## +## Note: Custom command that will be executed each time player state +## changes. The environment variable MPD_PLAYER_STATE is set to the current +## state (either unknown, play, pause, or stop) for its duration. +## +# +#execute_on_player_state_change = "" +# +#playlist_show_mpd_host = no +# +#playlist_show_remaining_time = no +# +#playlist_shorten_total_times = no +# +#playlist_separate_albums = no +# +## +## Note: Possible display modes: classic, columns. +## +#playlist_display_mode = columns +# +#browser_display_mode = classic +# +#search_engine_display_mode = classic +# +#playlist_editor_display_mode = classic +# +#discard_colors_if_item_is_selected = yes +# +#show_duplicate_tags = yes +# +#incremental_seeking = yes +# +#seek_time = 1 +# +#volume_change_step = 2 +# +#autocenter_mode = no +# +#centered_cursor = no +# +## +## Note: You can specify third character which will be used to build 'empty' +## part of progressbar. +## +#progressbar_look = => +# +## Available values: database, playlist. +## +#default_place_to_search_in = database +# +## Available values: classic, alternative. +## +#user_interface = classic +# +#data_fetching_delay = yes +# +## Available values: artist, album_artist, date, genre, composer, performer. +## +#media_library_primary_tag = artist +# +#media_library_albums_split_by_date = yes +# +## Available values: wrapped, normal. +## +#default_find_mode = wrapped +# +#default_tag_editor_pattern = %n - %t +# +#header_visibility = yes +# +#statusbar_visibility = yes +# +#titles_visibility = yes +# +#header_text_scrolling = yes +# +#cyclic_scrolling = no +# +#lines_scrolled = 2 +# +#lyrics_fetchers = lyricwiki, azlyrics, genius, sing365, lyricsmania, metrolyrics, justsomelyrics, jahlyrics, plyrics, tekstowo, internet +# +#follow_now_playing_lyrics = no +# +#fetch_lyrics_for_current_song_in_background = no +# +#store_lyrics_in_song_dir = no +# +#generate_win32_compatible_filenames = yes +# +#allow_for_physical_item_deletion = no +# +## +## Note: If you set this variable, ncmpcpp will try to get info from last.fm in +## language you set and if it fails, it will fall back to english. Otherwise it +## will use english the first time. +## +## Note: Language has to be expressed as an ISO 639 alpha-2 code. +## +#lastfm_preferred_language = en +# +#space_add_mode = add_remove +# +#show_hidden_files_in_local_browser = no +# +## +## How shall screen switcher work? +## +## - "previous" - switch between the current and previous screen. +## - "screen1,...,screenN" - switch between given sequence of screens. +## +## Screens available for use: help, playlist, browser, search_engine, +## media_library, playlist_editor, tag_editor, outputs, visualizer, clock, +## lyrics, last_fm. +## +#screen_switcher_mode = playlist, browser +# +## +## Note: You can define startup screen by choosing screen from the list above. +## +#startup_screen = playlist +# +## +## Note: You can define startup slave screen by choosing screen from the list +## above or an empty value for no slave screen. +## +#startup_slave_screen = "" +# +#startup_slave_screen_focus = no +# +## +## Default width of locked screen (in %). Acceptable values are from 20 to 80. +## +# +#locked_screen_width_part = 50 +# +#ask_for_locked_screen_width_part = yes +# +#jump_to_now_playing_song_at_start = yes +# +#ask_before_clearing_playlists = yes +# +#clock_display_seconds = no +# +#display_volume_level = yes +# +display_bitrate = yes +# +#display_remaining_time = no +# +## Available values: none, basic, extended, perl. +## +#regular_expressions = perl +# +## +## Note: if below is enabled, ncmpcpp will ignore leading "The" word while +## sorting items in browser, tags in media library, etc. +## +#ignore_leading_the = no +# +## +## Note: if below is enabled, ncmpcpp will ignore diacritics while searching and +## filtering lists. This takes an effect only if boost was compiled with ICU +## support. +## +#ignore_diacritics = no +# +#block_search_constraints_change_if_items_found = yes +# +#mouse_support = yes +# +#mouse_list_scroll_whole_page = yes +# +#empty_tag_marker = +# +#tags_separator = " | " +# +#tag_editor_extended_numeration = no +# +#media_library_sort_by_mtime = no +# +#enable_window_title = yes +# +## +## Note: You can choose default search mode for search engine. Available modes +## are: +## +## - 1 - use mpd built-in searching (no regexes, pattern matching) +## +## - 2 - use ncmpcpp searching (pattern matching with support for regexes, but +## if your mpd is on a remote machine, downloading big database to process +## it can take a while +## +## - 3 - match only exact values (this mode uses mpd function for searching in +## database and local one for searching in current playlist) +## +# +#search_engine_default_search_mode = 1 +# +#external_editor = nano +# +## Note: set to yes if external editor is a console application. +## +#use_console_editor = yes +# +##### colors definitions ##### +## +## It is possible to set a background color by setting a color value +## "_", e.g. red_black will set foregound color to red +## and background color to black. +## +## In addition, for terminals that support 256 colors it is possible to set one +## of them by using a number in range [1, 256] instead of color name, +## e.g. numerical value corresponding to red_black is 2_1. To find out if the +## terminal supports 256 colors, run ncmpcpp and check out the bottom of the +## help screen for list of available colors and their numerical values. +## +## What is more, there are two special values for the background color: +## "transparent" and "current". The first one explicitly sets the background to +## be transparent, while the second one allows you to preserve current +## background color and change only the foreground one. It's used implicitly +## when background color is not specified. +## +## Moreover, it is possible to attach format information to selected color +## variables by appending to their end a colon followed by one or more format +## flags, e.g. black:b or red:ur. The following variables support this syntax: +## visualizer_color, color1, color2, empty_tag_color, volume_color, +## state_line_color, state_flags_color, progressbar_color, +## progressbar_elapsed_color, player_state_color, statusbar_time_color, +## alternative_ui_separator_color. +## +## Note: due to technical limitations of older ncurses version, if 256 colors +## are used there is a possibility that you'll be able to use only colors with +## transparent background. +# +#colors_enabled = yes +# +#empty_tag_color = cyan +# +#header_window_color = default +# +#volume_color = default +# +#state_line_color = default +# +#state_flags_color = default:b +# +#main_window_color = yellow +# +#color1 = white +# +#color2 = green +# +#progressbar_color = black:b +# +#progressbar_elapsed_color = green:b +# +#statusbar_color = default +# +#statusbar_time_color = default:b +# +#player_state_color = default:b +# +#alternative_ui_separator_color = black:b +# +#window_border_color = green +# +#active_window_border = red +# diff --git a/dot_config/nnn/bookmarks/.keep b/dot_config/nnn/bookmarks/.keep new file mode 100644 index 00000000..e69de29b diff --git a/dot_config/nnn/empty_dot_selection b/dot_config/nnn/empty_dot_selection new file mode 100644 index 00000000..e69de29b diff --git a/dot_config/nnn/mounts/.keep b/dot_config/nnn/mounts/.keep new file mode 100644 index 00000000..e69de29b diff --git a/dot_config/nnn/plugins/.keep b/dot_config/nnn/plugins/.keep new file mode 100644 index 00000000..e69de29b diff --git a/dot_config/nnn/sessions/.keep b/dot_config/nnn/sessions/.keep new file mode 100644 index 00000000..e69de29b diff --git a/dot_config/nvim/after/plugin/color.lua b/dot_config/nvim/after/plugin/color.lua new file mode 100644 index 00000000..c052830e --- /dev/null +++ b/dot_config/nvim/after/plugin/color.lua @@ -0,0 +1,2 @@ +vim.o.termguicolors = true +vim.cmd[[colorscheme dracula]] diff --git a/dot_config/nvim/after/plugin/keymap/harpoon.lua b/dot_config/nvim/after/plugin/keymap/harpoon.lua new file mode 100644 index 00000000..08a29b61 --- /dev/null +++ b/dot_config/nvim/after/plugin/keymap/harpoon.lua @@ -0,0 +1,16 @@ +local nnoremap = require("tstarr.keymap").nnoremap +local silent = { silent = true } + +require("harpoon").setup({ + menu = { + width = vim.api.nvim_win_get_width(0) - 4, + } +}) + +nnoremap("ha", function() require("harpoon.mark").add_file() end, silent) +nnoremap("hl", function() require("harpoon.ui").toggle_quick_menu() end, silent) + +nnoremap("1", function() require("harpoon.ui").nav_file(1) end, silent) +nnoremap("2", function() require("harpoon.ui").nav_file(2) end, silent) +nnoremap("3", function() require("harpoon.ui").nav_file(3) end, silent) +nnoremap("4", function() require("harpoon.ui").nav_file(4) end, silent) diff --git a/dot_config/nvim/after/plugin/keymap/lazygit.lua b/dot_config/nvim/after/plugin/keymap/lazygit.lua new file mode 100644 index 00000000..34a0cea1 --- /dev/null +++ b/dot_config/nvim/after/plugin/keymap/lazygit.lua @@ -0,0 +1,5 @@ +local Remap = require("tstarr.keymap") +local nnoremap = Remap.nnoremap +local silent = { silent = true } + +nnoremap("gg", "LazyGit", silent) diff --git a/dot_config/nvim/after/plugin/keymap/remap.lua b/dot_config/nvim/after/plugin/keymap/remap.lua new file mode 100644 index 00000000..1cccc2f4 --- /dev/null +++ b/dot_config/nvim/after/plugin/keymap/remap.lua @@ -0,0 +1,8 @@ +local nnoremap = require("tstarr.keymap").nnoremap + +nnoremap("pv", "Ex") + +nnoremap("tn", "tabnew") +nnoremap("th", "tabn") +nnoremap("tl", "tabp") +nnoremap("tc", "tabc") diff --git a/dot_config/nvim/after/plugin/keymap/telescope.lua b/dot_config/nvim/after/plugin/keymap/telescope.lua new file mode 100644 index 00000000..1bcf4bf3 --- /dev/null +++ b/dot_config/nvim/after/plugin/keymap/telescope.lua @@ -0,0 +1,20 @@ +local Remap = require("tstarr.keymap") +local nnoremap = Remap.nnoremap + +nnoremap("ff", function () + require('telescope.builtin').find_files({hidden=true, no_ignore=true}) +end) +nnoremap("fg", function () + require('telescope.builtin').live_grep() +end) +nnoremap("fb", function () + require('telescope.builtin').buffers() +end) +nnoremap("fh", function () + require('telescope.builtin').help_tags() +end) + +nnoremap("p", function () + require('telescope').extensions.project.project() +end) + diff --git a/dot_config/nvim/after/plugin/lsp.lua b/dot_config/nvim/after/plugin/lsp.lua new file mode 100644 index 00000000..4a4dab13 --- /dev/null +++ b/dot_config/nvim/after/plugin/lsp.lua @@ -0,0 +1,74 @@ +local Remap = require("tstarr.keymap") +local nnoremap = Remap.nnoremap +local inoremap = Remap.inoremap +local cmp = require('cmp') + +cmp.setup({ + snippet = { + expand = function(args) + require('luasnip').lsp_expand(args.body) -- For `luasnip` users. + end, + }, + window = { + completion = cmp.config.window.bordered(), + documentation = cmp.config.window.bordered(), + }, + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + else + fallback() + end + end, { "i" }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + else + fallback() + end + end, { "i" }), + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.complete(), + [''] = cmp.mapping.abort(), + [''] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. + }), + sources = cmp.config.sources({ + { name = 'nvim_lsp' }, + { name = 'luasnip' }, -- For luasnip users. + }, { + { name = 'buffer' }, + }) + }) + +local function config(_config) + return vim.tbl_deep_extend("force", { + on_attach = function() + local opts = { buffer = true }; + nnoremap("gd", function() vim.lsp.buf.definition() end, opts) + nnoremap("K", function() vim.lsp.buf.hover() end, opts) + nnoremap("vws", function() vim.lsp.buf.workspace_symbol() end, opts) + nnoremap("vd", function() vim.diagnostic.open_float() end, opts) + nnoremap("[d", function() vim.diagnostic.goto_next() end, opts) + nnoremap("]d", function() vim.diagnostic.goto_prev() end, opts) + nnoremap("vca", function() vim.lsp.buf.code_action() end, opts) + nnoremap("vco", function() vim.lsp.buf.code_action({ + filter = function(code_action) + if not code_action or not code_action.data then + return false + end + + local data = code_action.data.id + return string.sub(data, #data - 1, #data) == ":0" + end, + apply = true + }) end, opts) + nnoremap("vrr", function() vim.lsp.buf.references() end, opts) + nnoremap("vrn", function() vim.lsp.buf.rename() end, opts) + inoremap("", function() vim.lsp.buf.signature_help() end, opts) + end, + }, _config or {}) +end + +require("lspconfig").tsserver.setup(config()) diff --git a/dot_config/nvim/init.lua b/dot_config/nvim/init.lua new file mode 100644 index 00000000..b79c49d6 --- /dev/null +++ b/dot_config/nvim/init.lua @@ -0,0 +1 @@ +require("tstarr") diff --git a/dot_config/nvim/lua/tstarr/init.lua b/dot_config/nvim/lua/tstarr/init.lua new file mode 100644 index 00000000..7b5ca230 --- /dev/null +++ b/dot_config/nvim/lua/tstarr/init.lua @@ -0,0 +1,3 @@ +require("tstarr.set") +require("tstarr.packer") +require("tstarr.telescope") diff --git a/dot_config/nvim/lua/tstarr/keymap.lua b/dot_config/nvim/lua/tstarr/keymap.lua new file mode 100644 index 00000000..53c5cd37 --- /dev/null +++ b/dot_config/nvim/lua/tstarr/keymap.lua @@ -0,0 +1,20 @@ +local M = {} + +local function bind(op, outer_opts) + outer_opts = outer_opts or {noremap = true} + return function(lhs, rhs, opts) + opts = vim.tbl_extend("force", + outer_opts, + opts or {} + ) + vim.keymap.set(op, lhs, rhs, opts) + end +end + +M.nmap = bind("n", {noremap = false}) +M.nnoremap = bind("n") +M.vnoremap = bind("v") +M.xnoremap = bind("x") +M.inoremap = bind("i") + +return M diff --git a/dot_config/nvim/lua/tstarr/packer.lua b/dot_config/nvim/lua/tstarr/packer.lua new file mode 100644 index 00000000..9e588127 --- /dev/null +++ b/dot_config/nvim/lua/tstarr/packer.lua @@ -0,0 +1,30 @@ +-- This file can be loaded by calling `lua require('plugins')` from your init.vim + +return require('packer').startup(function(use) + -- Packer can manage itself + use 'wbthomason/packer.nvim' + + -- Colors + use ('dracula/vim') + + -- IDE + use('nvim-lua/plenary.nvim') + use("nvim-treesitter/nvim-treesitter", { + run = ":TSUpdate" + }) + use ('nvim-telescope/telescope.nvim') + use ('nvim-telescope/telescope-project.nvim') + + use ('ThePrimeagen/harpoon') + use ('kdheepak/lazygit.nvim') + use ('neovim/nvim-lspconfig') + use ('hrsh7th/cmp-nvim-lsp') + use ('hrsh7th/cmp-buffer') + use ('hrsh7th/cmp-path') + use ('hrsh7th/cmp-cmdline') + use ('hrsh7th/nvim-cmp') + use ('L3MON4D3/LuaSnip') + use ('saadparwaiz1/cmp_luasnip') + + +end) diff --git a/dot_config/nvim/lua/tstarr/set.lua b/dot_config/nvim/lua/tstarr/set.lua new file mode 100644 index 00000000..6474ba0b --- /dev/null +++ b/dot_config/nvim/lua/tstarr/set.lua @@ -0,0 +1,41 @@ +vim.opt.guicursor = "" + +vim.opt.nu = true +vim.opt.relativenumber = true + +vim.opt.errorbells = false + +vim.opt.tabstop = 4 +vim.opt.softtabstop = 4 +vim.opt.shiftwidth = 4 +vim.opt.expandtab = true + +vim.opt.smartindent = true + +vim.opt.wrap = false + +vim.opt.swapfile = false +vim.opt.backup = false +vim.opt.undodir = os.getenv("HOME") .. "/.vim/undodir" +vim.opt.undofile = true + +vim.opt.hlsearch = false +vim.opt.incsearch = true + +vim.opt.termguicolors = true + +vim.opt.scrolloff = 8 +vim.opt.signcolumn = "yes" +vim.opt.isfname:append("@-@") + +-- Give more space for displaying messages. +vim.opt.cmdheight = 1 + +-- Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable +-- delays and poor user experience. +vim.opt.updatetime = 50 + +-- Don't pass messages to |ins-completion-menu|. +vim.opt.shortmess:append("c") + +vim.g.mapleader = " " diff --git a/dot_config/nvim/lua/tstarr/telescope.lua b/dot_config/nvim/lua/tstarr/telescope.lua new file mode 100644 index 00000000..8c5d72b9 --- /dev/null +++ b/dot_config/nvim/lua/tstarr/telescope.lua @@ -0,0 +1,15 @@ +--require'telescope'.load_extension('project') + +require('telescope').setup { + extensions = { + project = { + base_dirs = { + '~/.dotfiles', + '~/devel/work/genisys/splat-react', + '~/devel/work/genisys/splat-python', + }, + hidden_files = true, + sync_with_nvim_tree = true, -- default false + } + } +} diff --git a/dot_config/nvim/plugin/packer_compiled.lua b/dot_config/nvim/plugin/packer_compiled.lua new file mode 100644 index 00000000..321f54ed --- /dev/null +++ b/dot_config/nvim/plugin/packer_compiled.lua @@ -0,0 +1,174 @@ +-- Automatically generated packer.nvim plugin loader code + +if vim.api.nvim_call_function('has', {'nvim-0.5'}) ~= 1 then + vim.api.nvim_command('echohl WarningMsg | echom "Invalid Neovim version for packer.nvim! | echohl None"') + return +end + +vim.api.nvim_command('packadd packer.nvim') + +local no_errors, error_msg = pcall(function() + +_G._packer = _G._packer or {} +_G._packer.inside_compile = true + +local time +local profile_info +local should_profile = false +if should_profile then + local hrtime = vim.loop.hrtime + profile_info = {} + time = function(chunk, start) + if start then + profile_info[chunk] = hrtime() + else + profile_info[chunk] = (hrtime() - profile_info[chunk]) / 1e6 + end + end +else + time = function(chunk, start) end +end + +local function save_profiles(threshold) + local sorted_times = {} + for chunk_name, time_taken in pairs(profile_info) do + sorted_times[#sorted_times + 1] = {chunk_name, time_taken} + end + table.sort(sorted_times, function(a, b) return a[2] > b[2] end) + local results = {} + for i, elem in ipairs(sorted_times) do + if not threshold or threshold and elem[2] > threshold then + results[i] = elem[1] .. ' took ' .. elem[2] .. 'ms' + end + end + if threshold then + table.insert(results, '(Only showing plugins that took longer than ' .. threshold .. ' ms ' .. 'to load)') + end + + _G._packer.profile_output = results +end + +time([[Luarocks path setup]], true) +local package_path_str = "/home/tstarr/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?.lua;/home/tstarr/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?/init.lua;/home/tstarr/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?.lua;/home/tstarr/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?/init.lua" +local install_cpath_pattern = "/home/tstarr/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/lua/5.1/?.so" +if not string.find(package.path, package_path_str, 1, true) then + package.path = package.path .. ';' .. package_path_str +end + +if not string.find(package.cpath, install_cpath_pattern, 1, true) then + package.cpath = package.cpath .. ';' .. install_cpath_pattern +end + +time([[Luarocks path setup]], false) +time([[try_loadstring definition]], true) +local function try_loadstring(s, component, name) + local success, result = pcall(loadstring(s), name, _G.packer_plugins[name]) + if not success then + vim.schedule(function() + vim.api.nvim_notify('packer.nvim: Error running ' .. component .. ' for ' .. name .. ': ' .. result, vim.log.levels.ERROR, {}) + end) + end + return result +end + +time([[try_loadstring definition]], false) +time([[Defining packer_plugins]], true) +_G.packer_plugins = { + LuaSnip = { + loaded = true, + path = "/home/tstarr/.local/share/nvim/site/pack/packer/start/LuaSnip", + url = "https://github.com/L3MON4D3/LuaSnip" + }, + ["cmp-buffer"] = { + loaded = true, + path = "/home/tstarr/.local/share/nvim/site/pack/packer/start/cmp-buffer", + url = "https://github.com/hrsh7th/cmp-buffer" + }, + ["cmp-cmdline"] = { + loaded = true, + path = "/home/tstarr/.local/share/nvim/site/pack/packer/start/cmp-cmdline", + url = "https://github.com/hrsh7th/cmp-cmdline" + }, + ["cmp-nvim-lsp"] = { + loaded = true, + path = "/home/tstarr/.local/share/nvim/site/pack/packer/start/cmp-nvim-lsp", + url = "https://github.com/hrsh7th/cmp-nvim-lsp" + }, + ["cmp-path"] = { + loaded = true, + path = "/home/tstarr/.local/share/nvim/site/pack/packer/start/cmp-path", + url = "https://github.com/hrsh7th/cmp-path" + }, + cmp_luasnip = { + loaded = true, + path = "/home/tstarr/.local/share/nvim/site/pack/packer/start/cmp_luasnip", + url = "https://github.com/saadparwaiz1/cmp_luasnip" + }, + harpoon = { + loaded = true, + path = "/home/tstarr/.local/share/nvim/site/pack/packer/start/harpoon", + url = "https://github.com/ThePrimeagen/harpoon" + }, + ["lazygit.nvim"] = { + loaded = true, + path = "/home/tstarr/.local/share/nvim/site/pack/packer/start/lazygit.nvim", + url = "https://github.com/kdheepak/lazygit.nvim" + }, + ["nvim-cmp"] = { + loaded = true, + path = "/home/tstarr/.local/share/nvim/site/pack/packer/start/nvim-cmp", + url = "https://github.com/hrsh7th/nvim-cmp" + }, + ["nvim-lspconfig"] = { + loaded = true, + path = "/home/tstarr/.local/share/nvim/site/pack/packer/start/nvim-lspconfig", + url = "https://github.com/neovim/nvim-lspconfig" + }, + ["nvim-treesitter"] = { + loaded = true, + path = "/home/tstarr/.local/share/nvim/site/pack/packer/start/nvim-treesitter", + url = "https://github.com/nvim-treesitter/nvim-treesitter" + }, + ["packer.nvim"] = { + loaded = true, + path = "/home/tstarr/.local/share/nvim/site/pack/packer/start/packer.nvim", + url = "https://github.com/wbthomason/packer.nvim" + }, + ["plenary.nvim"] = { + loaded = true, + path = "/home/tstarr/.local/share/nvim/site/pack/packer/start/plenary.nvim", + url = "https://github.com/nvim-lua/plenary.nvim" + }, + ["telescope-project.nvim"] = { + loaded = true, + path = "/home/tstarr/.local/share/nvim/site/pack/packer/start/telescope-project.nvim", + url = "https://github.com/nvim-telescope/telescope-project.nvim" + }, + ["telescope.nvim"] = { + loaded = true, + path = "/home/tstarr/.local/share/nvim/site/pack/packer/start/telescope.nvim", + url = "https://github.com/nvim-telescope/telescope.nvim" + }, + vim = { + loaded = true, + path = "/home/tstarr/.local/share/nvim/site/pack/packer/start/vim", + url = "https://github.com/dracula/vim" + } +} + +time([[Defining packer_plugins]], false) + +_G._packer.inside_compile = false +if _G._packer.needs_bufread == true then + vim.cmd("doautocmd BufRead") +end +_G._packer.needs_bufread = false + +if should_profile then save_profiles() end + +end) + +if not no_errors then + error_msg = error_msg:gsub('"', '\\"') + vim.api.nvim_command('echohl ErrorMsg | echom "Error in packer_compiled: '..error_msg..'" | echom "Please check your config for correctness" | echohl None') +end diff --git a/dot_config/polybar/common b/dot_config/polybar/common new file mode 100644 index 00000000..95761328 --- /dev/null +++ b/dot_config/polybar/common @@ -0,0 +1,23 @@ +width = 100% +height = 20 +radius = 0 +line-size = 0 +bottom = false + +font-0 = "Ubuntu:size=10;2" +font-1 = "Ubuntu:style=Bold:size=11;2" +font-2 = "Ubuntu Nerd Font:size=11;2" + +override-redirect = false +screenchange-reload = true +throttle-output = 5 +throttle-output-for = 10 +throttle-input-for = 30 +padding-left = 0 +padding-right = 0 +module-margin-left = 0 +module-margin-right = 0 + +tray-position = right +tray-padding = 2 +tray-detached = false diff --git a/dot_config/polybar/dracula b/dot_config/polybar/dracula new file mode 100644 index 00000000..478d651f --- /dev/null +++ b/dot_config/polybar/dracula @@ -0,0 +1,137 @@ +[bar/fullbar] +monitor = HDMI-0 +include-file = ~/.config/polybar/common + +background = #bb282a36 +foreground = #f8f8f2 +wm-restack = i3 + +modules-left = i3 spacing spacing xwindow +modules-center = date +modules-right = memory separator cpu separator spacing pulseaudio separator wlan separator bandwidth separator + +[module/xwindow] +type = internal/xwindow +label = %title:0:60:...% + +[module/memory] +type = internal/memory +internal = 1 +format-prefix = MEM: +format-prefix-foreground = "#8be9fd" +format =