@@ -6,11 +6,9 @@ Installation. This repository contains the following: | |||
* The installation script | |||
* This is the only script that performs any installation tasks. | |||
* `etc/` | |||
* Configuration files | |||
* I've placed my own personal configurations here to suit my needs, | |||
though feel free to use, replace, or remove them. | |||
* `usr/local/gein` | |||
* This folder contains some helpful scripts | |||
* Configuration files for Portage | |||
* `usr/local/sbin` | |||
* This folder contains some "helpful" scripts | |||
* `gpkg` | |||
* emerge front-end for managing packages | |||
* Not needed at all. Think of this as a set of aliases in the form | |||
@@ -55,10 +53,10 @@ to remain somewhat agnostic when possible. | |||
* Very little to get Gentoo installed, but you'll need to understand | |||
how Gentoo and Portage work to maintain the system. As long as you | |||
can follow this Readme, then you can use `gein` without much thought. | |||
* Because I have configured Portage for my own needs, this may cause | |||
pain later on, such as when attempting to install a package that I | |||
haven't defined USE flags for. If you aren't familiar with Portage | |||
then you will gradually find yourself further and further at odds | |||
* Because I have configured Portage for my own needs, this may cause | |||
pain later on, such as when attempting to install a package that I | |||
haven't defined USE flags for. If you aren't familiar with Portage | |||
then you will gradually find yourself further and further at odds | |||
with the system unless you read the Gentoo Handbook for your system. | |||
* "I keep getting boot failures after installing in a VirtualBox VM?" | |||
* Remove the virtual disk drive from the boot order and restart. |
@@ -1,5 +0,0 @@ | |||
# /etc/Xresources | |||
Xcursor.theme: breeze | |||
Xcursor.size: 16 | |||
Xft.dpi: 96 |
@@ -1,11 +0,0 @@ | |||
# /etc/bash/bashrc | |||
[ -e /etc/profile ] && source /etc/profile | |||
if [ -v "$(command -v shopt)" ]; then | |||
shopt -s checkwinsize | |||
shopt -s no_empty_cmd_completion | |||
shopt -s histappend | |||
fi | |||
unset sh |
@@ -1,566 +0,0 @@ | |||
;;; /etc/emacs/default.el | |||
;;; | |||
;;; Startup | |||
;;; | |||
;; Inhibit things | |||
(when (fboundp 'menu-bar-mode) (menu-bar-mode -1)) | |||
(when (fboundp 'scroll-bar-mode) (scroll-bar-mode -1)) | |||
(when (fboundp 'tool-bar-mode) (tool-bar-mode -1)) | |||
(setq initial-scratch-message nil | |||
inhibit-splash-screen t | |||
inhibit-startup-buffer-menu t) | |||
;; Load theme and set font face | |||
(load-theme 'tango-dark) | |||
(set-face-attribute 'default nil :family "Monospace" :height 96) | |||
;; Force using UTF-8 | |||
(setq prefer-coding-system 'utf-8 | |||
set-default-coding-systems 'utf-8 | |||
set-language-environment "UTF-8" | |||
set-locale-environment "en_US.UTF-8") | |||
;; Load and set environment variables | |||
(setenv "EDITOR" "emacsclient") | |||
(setenv "GIT_EDITOR" "emacsclient") | |||
(setenv "GOPATH" (getenv "GOPATH")) | |||
(setenv "GOBIN" (getenv "GOBIN")) | |||
(setenv "MANPATH" (getenv "MANPATH")) | |||
(setenv "PATH" (getenv "PATH")) | |||
(setenv "PROMPT_COMMAND" "") | |||
(setenv "SHELL" (getenv "SHELL")) | |||
(setenv "TERM" (getenv "TERM")) | |||
;; Scrolling | |||
(setq auto-window-vscroll nil | |||
scroll-conservatively 101 | |||
scroll-margin 0 | |||
scroll-preserve-screen-position 1 | |||
scroll-step 1 | |||
scroll-up-aggressively 0.0 | |||
scroll-down-aggressively 0.0) | |||
;; Misc | |||
(add-hook 'after-init-hook | |||
(lambda() | |||
(show-paren-mode t) | |||
(fset 'yes-or-no-p 'y-or-n-p))) | |||
(setq custom-file "~/.emacs.d/custom.el" | |||
require-final-newline t | |||
save-interprogram-paste-before-kill t | |||
select-enable-primary nil | |||
visible-bell nil) | |||
;;; | |||
;;; Input | |||
;;; | |||
;; Split vertically and switch to frame using "-" | |||
(global-set-key (kbd "M--") | |||
(lambda() (interactive) | |||
(split-window-vertically) | |||
(other-window 1 nil) | |||
(switch-to-next-buffer))) | |||
;; Split horizontally and switch to frame using "+" | |||
(global-set-key (kbd "M-=") | |||
(lambda() (interactive) | |||
(split-window-horizontally) | |||
(other-window 1 nil) | |||
(switch-to-next-buffer))) | |||
;; Additional frame movement keys | |||
(global-set-key (kbd "<M-down>") 'windmove-down) | |||
(global-set-key (kbd "<M-left>") 'windmove-left) | |||
(global-set-key (kbd "<M-right>") 'windmove-right) | |||
(global-set-key (kbd "<M-up>") 'windmove-up) | |||
(global-set-key (kbd "C-c <down>") 'windmove-down) | |||
(global-set-key (kbd "C-c <left>") 'windmove-left) | |||
(global-set-key (kbd "C-c <right>") 'windmove-right) | |||
(global-set-key (kbd "C-c <up>") 'windmove-up) | |||
;; Mouse | |||
(setq mouse-wheel-follow-mouse 't | |||
mouse-wheel-progressive-speed nil | |||
mouse-wheel-scroll-amount '(1 ((shift) . 1)) | |||
mouse-yank-at-point t | |||
xterm-mouse-mode t) | |||
;; Set scroll "speed" | |||
(global-set-key (kbd "<mouse-4>") (lambda() (interactive) (scroll-down-line 3))) | |||
(global-set-key (kbd "<mouse-5>") (lambda() (interactive) (scroll-up-line 3))) | |||
;; | |||
;; Package Management | |||
;; | |||
;; Require built-in package manager | |||
(require 'package) | |||
;; Set package repositories and priority before initializing | |||
(setq package-user-dir "~/.emacs.d/pkg/" | |||
package-archives | |||
'(("GNU ELPA" . "http://elpa.gnu.org/packages/") | |||
("MELPA Stable" . "https://stable.melpa.org/packages/") | |||
("MELPA" . "https://melpa.org/packages/")) | |||
package-archive-priorities | |||
'(("GNU ELPA" . 1) | |||
("MELPA Stable" . 2) | |||
("MELPA" . 0))) | |||
(package-initialize) | |||
;; Install use-package if missing | |||
(unless (package-installed-p 'use-package) | |||
(package-refresh-contents) | |||
(package-install 'use-package)) | |||
;; Ensure that use-package and bind-key are loaded | |||
(eval-when-compile | |||
(require 'use-package) | |||
(require 'bind-key)) | |||
;; Configure use-package | |||
(setq use-package-always-defer t | |||
use-package-always-ensure t | |||
use-package-check-before-init t) | |||
;;; | |||
;;; Utilities | |||
;;; | |||
(use-package async | |||
:config (async-bytecomp-package-mode '(all))) | |||
(use-package auto-compile | |||
:config | |||
(auto-compile-on-load-mode) | |||
(auto-compile-on-save-mode)) | |||
(use-package auto-dictionary) | |||
(use-package counsel | |||
:bind (("<f1> f" . counsel-describe-function) | |||
("<f1> l" . counsel-find-library) | |||
("<f1> v" . counsel-describe-variable) | |||
("<f2> i" . counsel-info-lookup-symbol) | |||
("<f2> u" . counsel-unicode-char) | |||
("C-S-o" . counsel-rhythmbox) | |||
("C-c g" . counsel-git) | |||
("C-c j" . counsel-git-grep) | |||
("C-c l" . counsel-ag) | |||
("C-r" . counsel-minibuffer-history) | |||
("C-x C-f" . counsel-find-file) | |||
("C-x l" . counsel-locate) | |||
("M-x" . counsel-M-x))) | |||
(use-package ivy | |||
:bind (("C-c C-r" . ivy-resume) | |||
("<f6>" . ivy-resume)) | |||
:config | |||
(ivy-mode 1) | |||
(setq ivy-use-virtual-buffers t | |||
enable-recursive-minibuffers t)) | |||
(use-package ibuffer | |||
:bind (("C-x C-b" . ibuffer) | |||
("<C-tab>" . next-buffer) | |||
("<C-iso-lefttab>" . previous-buffer)) | |||
:config | |||
(add-hook 'ibuffer-hook | |||
(lambda() | |||
(ibuffer-auto-mode) | |||
(ibuffer-do-sort-by-alphabetic) | |||
(ibuffer-do-sort-by-major-mode)))) | |||
(use-package linum | |||
:demand t | |||
:config | |||
(add-hook 'lisp-mode-hook 'linum-mode) | |||
(add-hook 'prog-mode-hook 'linum-mode) | |||
(add-hook 'text-mode-hook 'linum-mode) | |||
(setq linum-delay t) | |||
(global-visual-line-mode t)) | |||
(use-package no-littering | |||
:demand t | |||
:config | |||
(setq auto-save-file-name-transforms | |||
`((".*" ,(no-littering-expand-var-file-name "auto-save/") t)))) | |||
(use-package org-beautify-theme | |||
:bind (("C-c l" . org-store-link) | |||
("C-c a" . org-agenda) | |||
("C-c C-c" . org-capture) | |||
("C-c b" . org-switchb)) | |||
:config | |||
(add-hook 'org-mode-hook (lambda() (load-theme 'org-beautify)))) | |||
(use-package package-utils | |||
:demand t) | |||
(use-package rainbow-delimiters | |||
:demand t | |||
:config | |||
(add-hook 'markdown-mode-hook 'rainbow-delimiters-mode) | |||
(add-hook 'prog-mode-hook 'rainbow-delimiters-mode) | |||
(add-hook 'text-mode-hook 'rainbow-delimiters-mode)) | |||
(use-package server | |||
:bind ("C-x C-c" . server-stop) | |||
:config (unless (server-running-p)(server-start)) | |||
(defun server-kill() | |||
"Delete current Emacs server, then kill Emacs" | |||
(interactive) | |||
(if (y-or-n-p "Kill Emacs without saving? ") | |||
(kill-emacs))) | |||
(defun server-stop() | |||
"Prompt to save buffers, then kill Emacs." | |||
(interactive) | |||
(if (y-or-n-p "Quit Emacs? ") | |||
(save-buffers-kill-emacs))) | |||
(defun server-update() | |||
"Refresh package contents, then update all packages." | |||
(interactive) | |||
(package-initialize) | |||
(unless package-archive-contents | |||
(package-refresh-contents)) | |||
(package-utils-upgrade-all))) | |||
(use-package smartparens | |||
:demand t | |||
:config | |||
(add-hook 'markdown-mode-hook 'smartparens-mode) | |||
(add-hook 'prog-mode-hook 'smartparens-mode) | |||
(add-hook 'text-mode-hook 'smartparens-mode) | |||
(setq sp-highlight-pair-overlay nil | |||
sp-highlight-wrap-overlay nil | |||
sp-highlight-wrap-tag-overlay nil)) | |||
(use-package swiper | |||
:demand t | |||
:bind ("C-s" . swiper)) | |||
(use-package undo-tree | |||
:demand t | |||
:config (global-undo-tree-mode)) | |||
(use-package xclip | |||
:config (xclip-mode 1)) | |||
;;; | |||
;;; Applications | |||
;;; | |||
(use-package circe | |||
:config | |||
(defun my-circe-message-option-chanserv (nick user host command args) | |||
(when (and (string= "ChanServ" nick) | |||
(string-match "^\\[#.+?\\]" (cadr args))) | |||
'((dont-display . t)))) | |||
(add-hook 'circe-message-option-functions 'my-circe-message-option-chanserv) | |||
(add-hook 'circe-chat-mode-hook | |||
(lambda() (lui-set-prompt | |||
(concat (propertize (concat (buffer-name) ":") | |||
'face 'circe-prompt-face) " ")))) | |||
(add-hook 'lui-mode-hook | |||
(lambda() | |||
(setq fringes-outside-margins t | |||
left-margin-width 9 | |||
word-wrap t | |||
wrap-prefix ""))) | |||
(setq circe-default-part-message "" | |||
circe-default-quit-message "" | |||
circe-format-server-topic "*** Topic: {userhost}: {topic-diff}" | |||
circe-reduce-lurker-spam t | |||
circe-use-cycle-completion t | |||
lui-fill-type nil | |||
lui-flyspell-alist '((".*" "american")) | |||
lui-flyspell-p t | |||
lui-logging-directory "~/.emacs.d/var/circe" | |||
lui-time-stamp-format "%H:%M:%S" | |||
lui-time-stamp-position 'left-margin) | |||
(load "lui-logging" nil t) | |||
(enable-lui-logging-globally) | |||
(require 'circe-chanop) | |||
(enable-circe-color-nicks) | |||
(setf (cdr (assoc 'continuation fringe-indicator-alist)) nil) | |||
(if (file-exists-p "~/.emacs.d/circe.el") | |||
(load-file "~/.emacs.d/circe.el"))) | |||
(use-package elfeed | |||
:bind ("C-x w" . elfeed) | |||
:config | |||
(setq elfeed-search-filter "@1-week-ago +unread " | |||
url-queue-timeout 30) | |||
(if (file-exists-p "~/.emacs.d/elfeed.el") | |||
(load-file "~/.emacs.d/elfeed.el"))) | |||
(use-package eshell | |||
:config | |||
(setq eshell-cmpl-cycle-completions nil | |||
eshell-error-if-no-glob t | |||
eshell-hist-ignoredups t | |||
eshell-history-size 4096 | |||
eshell-prefer-lisp-functions t | |||
eshell-save-history-on-exit t | |||
eshell-scroll-to-bottom-on-input nil | |||
eshell-scroll-to-bottom-on-output nil | |||
eshell-scroll-show-maximum-output nil | |||
eshell-prompt-regexp "^[^#$\n]*[#$] " | |||
eshell-prompt-function | |||
(lambda nil | |||
(concat "[" (user-login-name) "@" (system-name) " " | |||
(if (string= (eshell/pwd) (getenv "HOME")) | |||
"~" (eshell/basename (eshell/pwd))) "]" | |||
(if (= (user-uid) 0) "# " "$ "))) | |||
eshell-visual-commands '("alsamixer" "atop" "htop" "less" "mosh" | |||
"nano" "ssh" "tail" "top" "vi" "vim" | |||
"watch")) | |||
(defun eshell/clear() | |||
(interactive) | |||
(recenter 0)) | |||
(defun eshell-new() | |||
"Open a new instance of eshell." | |||
(interactive) | |||
(eshell 'N))) | |||
(use-package eww | |||
:config | |||
(setq browse-url-browser-function 'eww-browse-url | |||
shr-blocked-images "") | |||
(defun eww-toggle-images() | |||
"Toggle blocking images in eww." | |||
(interactive) | |||
(if (bound-and-true-p shr-blocked-images) | |||
(setq shr-blocked-images nil) | |||
(setq shr-blocked-images "")) | |||
(eww-reload)) | |||
(defun eww-new() | |||
"Open a new instance of eww." | |||
(interactive) | |||
(let ((url (read-from-minibuffer "Enter URL or keywords: "))) | |||
(switch-to-buffer (generate-new-buffer "*eww*")) | |||
(eww-mode) | |||
(eww url)))) | |||
(use-package eww-lnum | |||
:after (eww) | |||
:config | |||
(define-key eww-mode-map "f" 'eww-lnum-follow) | |||
(define-key eww-mode-map "F" 'eww-lnum-universal)) | |||
(use-package nov | |||
:config (add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))) | |||
(use-package pdf-tools) | |||
(use-package ranger) | |||
(use-package scratch | |||
:config | |||
(defun scratch-new() | |||
"Open a new scratch buffer." | |||
(interactive) | |||
(switch-to-buffer (generate-new-buffer "*scratch*")) | |||
(lisp-mode))) | |||
;;; | |||
;;; Development | |||
;;; | |||
;; Delete trailing whitespace on save | |||
(add-hook 'before-save-hook 'delete-trailing-whitespace) | |||
;; Comment or uncomment a region | |||
(global-set-key (kbd "C-c c") 'comment-or-uncomment-region) | |||
;; Allow C and C++ modes to read .h headers | |||
(add-hook 'c-mode-hook | |||
(lambda() | |||
(add-to-list 'auto-mode-alist '("\\.h\\'" . c-mode)))) | |||
(add-hook 'c++-mode-hook | |||
(lambda() | |||
(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode)))) | |||
;; Default indent | |||
(setq c-basic-offset 2 | |||
column-number-mode t | |||
cperl-indent-level 2 | |||
indent-tabs-mode nil | |||
js-indent-level 2 | |||
tab-width 2 | |||
show-paren-delay 0) | |||
(use-package company | |||
:demand t | |||
:config | |||
(add-hook 'lisp-mode-hook 'company-mode) | |||
(add-hook 'prog-mode-hook 'company-mode) | |||
(add-hook 'text-mode-hook 'company-mode) | |||
(setq company-tooltip-limit 20 | |||
company-idle-delay 0.3 | |||
company-echo-delay 0 | |||
company-begin-commands '(self-insert-command))) | |||
(use-package company-ansible | |||
:after (company ansible-vault)) | |||
(use-package company-emoji | |||
:after (company)) | |||
(use-package company-go | |||
:after (company)) | |||
(use-package company-irony | |||
:after (company irony) | |||
:config | |||
(add-to-list 'company-backends 'company-irony)) | |||
(use-package company-irony-c-headers | |||
:after (company irony company-irony) | |||
:config (add-to-list 'company-backends | |||
'(company-irony-c-headers company-irony))) | |||
(use-package company-php :after (company php-mode)) | |||
(use-package company-rtags | |||
:after (company) | |||
:config (push 'company-rtags company-backends)) | |||
(use-package company-shell | |||
:after (company)) | |||
(use-package company-web | |||
:after (company)) | |||
(use-package diff-hl | |||
:demand t | |||
:config | |||
(add-hook 'prog-mode-hook 'diff-hl-mode) | |||
(add-hook 'text-mode-hook 'diff-hl-mode)) | |||
(use-package flycheck | |||
:demand t | |||
:config (add-hook 'prog-mode-hook 'flycheck-mode)) | |||
(use-package flycheck-rtags | |||
:after (rtags flycheck) | |||
:config (add-hook 'prog-mode-hook 'flycheck-mode)) | |||
(use-package flyspell | |||
:demand t | |||
:config | |||
(add-hook 'flyspell-mode-hook (auto-dictionary-mode 1)) | |||
(add-hook 'markdown-mode-hook 'flyspell-mode) | |||
(add-hook 'prog-mode-hook 'flyspell-prog-mode) | |||
(add-hook 'text-mode-hook 'flyspell-mode)) | |||
(use-package gist) | |||
(use-package highlight-indent-guides | |||
:demand t | |||
:config | |||
(add-hook 'prog-mode-hook 'highlight-indent-guides-mode) | |||
(setq highlight-indent-guides-method 'character)) | |||
(use-package irony | |||
:demand t | |||
:config | |||
(add-hook 'c++-mode-hook 'irony-mode) | |||
(add-hook 'c-mode-hook 'irony-mode) | |||
(add-hook 'objc-mode-hook 'irony-mode) | |||
(add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options) | |||
(define-key irony-mode-map [remap completion-at-point] 'counsel-irony) | |||
(define-key irony-mode-map [remap complete-symbol] 'counsel-irony)) | |||
(use-package magit | |||
:demand t) | |||
(use-package realgud) | |||
(use-package rtags | |||
:config | |||
(add-hook 'c-mode-hook 'rtags-start-process-unless-running) | |||
(add-hook 'c++-mode-hook 'rtags-start-process-unless-running) | |||
(add-hook 'objc-mode-hook 'rtags-start-process-unless-running) | |||
(setq rtags-autostart-diagnostics t | |||
rtags-completions-enabled t | |||
rtags-display-result-backend 'ivy) | |||
(setq-local flycheck-highlighting-mode nil) | |||
(setq-local flycheck-check-syntax-automatically nil) | |||
(rtags-diagnostics)) | |||
;;; | |||
;;; Languages | |||
;;; | |||
(use-package ahk-mode) | |||
(use-package android-mode) | |||
(use-package angular-mode) | |||
(use-package ansible-vault) | |||
(use-package apache-mode) | |||
(use-package cmake-mode) | |||
(use-package coffee-mode) | |||
(use-package csharp-mode) | |||
(use-package cuda-mode) | |||
(use-package d-mode) | |||
(use-package dart-mode) | |||
(use-package docker-compose-mode) | |||
(use-package dockerfile-mode) | |||
(use-package dotenv-mode) | |||
(use-package es-mode) | |||
(use-package gitattributes-mode) | |||
(use-package gitconfig-mode) | |||
(use-package gitignore-mode) | |||
(use-package go-mode | |||
:config | |||
(add-hook 'before-save-hook 'gofmt-before-save) | |||
(add-hook 'go-mode-hook | |||
(lambda() | |||
(setq tab-width 4 | |||
indent-tabs-mode 1) | |||
(set (make-local-variable 'company-backends) | |||
'(company-go)) | |||
(company-mode t)))) | |||
(use-package gradle-mode) | |||
(use-package json-mode) | |||
(use-package jsx-mode) | |||
(use-package less-css-mode) | |||
(use-package lua-mode) | |||
(use-package markdown-mode) | |||
(use-package markdown-preview-mode) | |||
(use-package meson-mode) | |||
(use-package nginx-mode) | |||
(use-package ninja-mode) | |||
(use-package npm-mode) | |||
(use-package php-mode) | |||
(use-package protobuf-mode) | |||
(use-package qml-mode) | |||
(use-package rjsx-mode) | |||
(use-package rust-mode) | |||
(use-package sass-mode) | |||
(use-package swift-mode) | |||
(use-package systemd) | |||
(use-package typescript-mode) | |||
(use-package vue-mode) | |||
(use-package yaml-mode) |
@@ -1,213 +0,0 @@ | |||
# /etc/i3/config | |||
### Startup ###################################### | |||
## Disable DPMS | |||
exec --no-startup-id xset s off -dpms | |||
## i3wm modifier key | |||
set $mod Mod4 | |||
## Applications | |||
bindsym $mod+d exec --no-startup-id dmenu_run | |||
bindsym $mod+Return exec --no-startup-id st -f 'Noto Mono:10pt' | |||
## Display | |||
exec --no-startup-id "srandr" | |||
### Appearance ################################### | |||
## Xresources | |||
exec --no-startup-id "xrdb /etc/Xresources" | |||
## Font | |||
font pango:Noto Mono Regular 9.5 | |||
## Taskbar | |||
bar { | |||
position top | |||
status_command i3status | |||
colors { | |||
background #333333 | |||
statusline #eeeeee | |||
separator #eeeeee | |||
focused_workspace #eeeeee #00894e | |||
active_workspace #eeeeee #777777 | |||
inactive_workspace #eeeeee #333333 | |||
urgent_workspace #eeeeee #b22222 | |||
} | |||
} | |||
## Colors | |||
exec --no-startup-id xsetroot -solid '#333333' | |||
client.background #333333 | |||
client.focused #00894e #00894e #eeeeee #30f277 #00894e | |||
client.focused_inactive #333333 #333333 #eeeeee #888888 #333333 | |||
client.placeholder #333333 #333333 #eeeeee #333333 #333333 | |||
client.unfocused #333333 #333333 #888888 #888888 #333333 | |||
client.urgent #b22222 #b22222 #eeeeee #ff5454 #b22222 | |||
### System ####################################### | |||
## Reload | |||
set $Config Reload i3 config (r), Live restart of i3 (Shift+r) | |||
bindsym $mod+Shift+r mode "$Config" | |||
mode "$Config" { | |||
bindsym r reload | |||
bindsym Shift+r restart | |||
bindsym Escape mode "default" | |||
} | |||
## i3lock | |||
set $Locker xset s 10 dpms 10 && i3lock -c 333333 -n && xset s off -dpms | |||
## Menu | |||
set $System Lock (l), Logout (e), Reboot (r), Shutdown (s) | |||
bindsym $mod+Home mode "$System" | |||
mode "$System" { | |||
bindsym l exec --no-startup-id $Locker, mode "default" | |||
bindsym e exec --no-startup-id i3-msg exit, mode "default" | |||
bindsym r exec --no-startup-id reboot, mode "default" | |||
bindsym s exec --no-startup-id poweroff -i, mode "default" | |||
bindsym Escape mode "default" | |||
} | |||
#### Keybinds #################################### | |||
## Window splitting | |||
bindsym $mod+h split h | |||
bindsym $mod+v split v | |||
## Fullscreen focused container | |||
bindsym $mod+f fullscreen toggle | |||
## Kill focused window | |||
bindsym $mod+Shift+q kill | |||
## Cycle frame layout | |||
bindsym $mod+s layout stacking | |||
bindsym $mod+w layout tabbed | |||
bindsym $mod+e layout toggle split | |||
## Change focus | |||
bindsym $mod+j focus left | |||
bindsym $mod+k focus down | |||
bindsym $mod+l focus up | |||
bindsym $mod+semicolon focus right | |||
bindsym $mod+Left focus left | |||
bindsym $mod+Down focus down | |||
bindsym $mod+Up focus up | |||
bindsym $mod+Right focus right | |||
## Move focused window | |||
bindsym $mod+Shift+j move left | |||
bindsym $mod+Shift+k move down | |||
bindsym $mod+Shift+l move up | |||
bindsym $mod+Shift+semicolon move right | |||
bindsym $mod+Shift+Left move left | |||
bindsym $mod+Shift+Down move down | |||
bindsym $mod+Shift+Up move up | |||
bindsym $mod+Shift+Right move right | |||
## Switch to workspace | |||
bindsym $mod+1 workspace 1 | |||
bindsym $mod+2 workspace 2 | |||
bindsym $mod+3 workspace 3 | |||
bindsym $mod+4 workspace 4 | |||
bindsym $mod+5 workspace 5 | |||
bindsym $mod+6 workspace 6 | |||
bindsym $mod+7 workspace 7 | |||
bindsym $mod+8 workspace 8 | |||
bindsym $mod+9 workspace 9 | |||
bindsym $mod+0 workspace 10 | |||
## Move focused container to workspace | |||
bindsym $mod+Shift+1 move container to workspace 1 | |||
bindsym $mod+Shift+2 move container to workspace 2 | |||
bindsym $mod+Shift+3 move container to workspace 3 | |||
bindsym $mod+Shift+4 move container to workspace 4 | |||
bindsym $mod+Shift+5 move container to workspace 5 | |||
bindsym $mod+Shift+6 move container to workspace 6 | |||
bindsym $mod+Shift+7 move container to workspace 7 | |||
bindsym $mod+Shift+8 move container to workspace 8 | |||
bindsym $mod+Shift+9 move container to workspace 9 | |||
bindsym $mod+Shift+0 move container to workspace 10 | |||
## Focus the parent container | |||
bindsym $mod+a focus parent | |||
## Drag floating windows with Mouse+$mod | |||
floating_modifier $mod | |||
## Toggle floating on focused frame | |||
bindsym $mod+Shift+space floating toggle | |||
## Change focus between tiling / floating windows | |||
bindsym $mod+space focus mode_toggle | |||
## Floating rules | |||
for_window [window_role="pop-up"] floating enable | |||
## Resize | |||
bindsym $mod+r mode "resize" | |||
mode "resize" { | |||
bindsym j resize shrink width 10 px or 10 ppt | |||
bindsym k resize grow height 10 px or 10 ppt | |||
bindsym l resize shrink height 10 px or 10 ppt | |||
bindsym semicolon resize grow width 10 px or 10 ppt | |||
bindsym Left resize shrink width 10 px or 10 ppt | |||
bindsym Down resize grow height 10 px or 10 ppt | |||
bindsym Up resize shrink height 10 px or 10 ppt | |||
bindsym Right resize grow width 10 px or 10 ppt | |||
bindsym Escape mode "default" | |||
} | |||
#### Multimedia ################################## | |||
## Screenshot (scrot) | |||
bindsym Print exec --no-startup-id \ | |||
scrot $HOME/Pictures/`date +%Y-%m-%d_%H:%M:%S`.png | |||
bindsym $mod+Print exec --no-startup-id \ | |||
scrot -u $HOME/Pictures/`date +%Y-%m-%d_%H:%M:%S`.png | |||
bindsym Shift+Print --release exec --no-startup-id \ | |||
scrot -s $HOME/Pictures/`date +%Y-%m-%d_%H:%M:%S`.png | |||
## Audio (Alsa) | |||
# bindsym XF86AudioRaiseVolume exec --no-startup-id amixer set Master 5+ | |||
# bindsym XF86AudioLowerVolume exec --no-startup-id amixer set Master 5- | |||
# bindsym XF86AudioMute exec --no-startup-id amixer set Master toggle | |||
## Audio (PulseAudio) | |||
bindsym XF86AudioRaiseVolume exec --no-startup-id \ | |||
pactl set-sink-volume @DEFAULT_SINK@ +5% | |||
bindsym XF86AudioLowerVolume exec --no-startup-id \ | |||
pactl set-sink-volume @DEFAULT_SINK@ -5% | |||
bindsym XF86AudioMute exec --no-startup-id \ | |||
pactl set-sink-mute @DEFAULT_SINK@ toggle | |||
bindsym XF86AudioPlay exec --no-startup-id pactl play-pause | |||
bindsym XF86AudioPause exec --no-startup-id pactl pause | |||
bindsym XF86AudioNext exec --no-startup-id pactl next | |||
bindsym XF86AudioPrev exec --no-startup-id pactl previous | |||
## Audio (Sndio) | |||
# bindsym XF86AudioRaiseVolume exec --no-startup-id mixerctl | |||
# bindsym XF86AudioLowerVolume exec --no-startup-id mixerctl | |||
# bindsym XF86AudioMute \ | |||
# exec --no-startup-id mixerctl -t outputs.master.mute | |||
## Brightness (brightnessctl) | |||
# bindsym XF86MonBrightnessUp exec --no-startup-id brightnessctl set 5%+ | |||
# bindsym XF86MonBrightnessDown exec --no-startup-id brightnessctl set 5%- | |||
## Brightness (xbacklight) | |||
bindsym XF86MonBrightnessUp exec --no-startup-id xbacklight -inc 5 | |||
bindsym XF86MonBrightnessDown exec --no-startup-id xbacklight -dec 5 |
@@ -1,47 +0,0 @@ | |||
# /etc/i3status.conf | |||
general { | |||
colors = true | |||
interval = 5 | |||
} | |||
order += "ipv6" | |||
order += "wireless _first_" | |||
order += "ethernet _first_" | |||
order += "volume master" | |||
#order += "disk /" | |||
order += "battery all" | |||
order += "load" | |||
order += "tztime local" | |||
wireless _first_ { | |||
format_up = "W: (%quality at %essid) %ip" | |||
format_down = "W: down" | |||
} | |||
ethernet _first_ { | |||
format_up = "E: %ip (%speed)" | |||
format_down = "E: down" | |||
} | |||
volume master { | |||
format = "🔊: %volume" | |||
format_muted = "🔈: %volume" | |||
device = "default" | |||
} | |||
disk "/" { | |||
format = "%avail" | |||
} | |||
battery all { | |||
format = "%status %percentage %remaining" | |||
} | |||
tztime local { | |||
format = "%Y-%m-%d %H:%M:%S" | |||
} | |||
load { | |||
format = "%1min" | |||
} |
@@ -1,94 +0,0 @@ | |||
# /etc/profile | |||
# Check for an interactive shell and set umask accordingly. Currently the | |||
# threshold for system-reserved uid/guid's is 200 though you may check | |||
# '/usr/share/doc/setup/uidgid' to confirm this is valid. | |||
case $- in | |||
*i*) INTERACTIVE="true" ;; | |||
*) | |||
if [ "$UID" -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then | |||
# Mask current process as a daemon | |||
umask 002 | |||
else | |||
# Mask current process as an initscript | |||
umask 022 | |||
fi | |||
return | |||
esac | |||
# Gentoo has '/etc/profile.env' which needs to be read. Here we will | |||
# check if it exists and source it if found. | |||
[ -e /etc/profile.env ] && | |||
. /etc/profile.env | |||
# Setting PS1 correctly depending on the current shell can be important | |||
# for users of non-standard shells. Here we will attempt to accommodate | |||
# other shells if currently in use, and default to standard shell | |||
# semantics. | |||
if [ -e "$BASH_VERSION" ]; then | |||
PS1="[\u@\h \W]\$ " | |||
elif [ -e "$ZSH_VERSION" ]; then | |||
PS1="[%n@%M %d]$ " | |||
else | |||
PS1="[\u@\h \W]\$ " | |||
fi | |||
# This section defines all PATH and MANPATH locations and is mean to be a | |||
# somewhat exhaustive list for compatibility across various systems. It | |||
# may look quite upsetting but it works for our purposes. | |||
PATH="/usr/local/sbin/:/usr/local/bin:/usr/sbin:/usr/bin:/opt/bin" | |||
PATH="$PATH:/usr/local/gein:/sbin:/bin:$HOME/.local/bin:$HOME/.bin:$HOME/bin" | |||
MANPATH="/usr/man:/usr/share/man:/usr/local/man:/usr/local/share/man" | |||
MANPATH="$MANPATH:$HOME/.local/man:$HOME/.local/share/man" | |||
# This section defines our exports, including the PATH, MANPATH and PS1 | |||
# that we defined in previous sections. | |||
export EDITOR="emacs -nw" | |||
export LANG="en_US.UTF-8" | |||
export MANPATH | |||
export PAGER="less" | |||
export PATH | |||
export PROMPT_COMMAND="history -a" | |||
export PS1 | |||
export SSH_KEY_PATH="$HOME/.ssh/rsa_id" | |||
export TERM="xterm-256color" | |||
# This section will find and source all files in '/etc/profile.d' that | |||
# end in '.sh'. This is a mechanism to allow the use of multiple files | |||
# that will comprise environment settings or other configurations. | |||
for sh in /etc/profile.d/*.sh; do | |||
[ -r "$sh" ] && | |||
. "$sh" | |||
done | |||
# A $USER may want to maintain local shell configuration files. The | |||
# following section attempts to source '$HOME/.profile' along with all | |||
# files within '$HOME/profile.d' that end in '.sh' similarly to the above | |||
# section. | |||
if [ -d "$HOME"/.profile.d ]; then | |||
for sh in $HOME/.profile.d/*.sh; do | |||
[ -r "$sh" ] && | |||
. "$sh" | |||
done | |||
fi | |||
# Keeping things clean in our shell environment is rather important. Here | |||
# we will unset any variables that are no longer needed. | |||
unset sh |
@@ -1,7 +0,0 @@ | |||
# /etc/profile.d/alias.sh | |||
alias df="df -h" | |||
alias ls="ls -hSF" | |||
alias mkdir="mkdir -p" | |||
alias mv="mv -vi" | |||
alias rm="rm -vi" |
@@ -1,13 +0,0 @@ | |||
# /etc/profile.d/defaults.sh | |||
## User Directories | |||
if [ "$(whoami)" != 'root' ]; then | |||
Folders="Documents Downloads Music Pictures Projects Videos" | |||
for Folder in $Folders; do | |||
[ -d "$HOME"/"$Folder" ] || | |||
mkdir "$HOME"/"$Folder" | |||
done | |||
unset Folders | |||
fi |
@@ -1,8 +0,0 @@ | |||
# /etc/profile.d/golang.sh | |||
GOPATH="$HOME/.go" | |||
GOBIN="$GOPATH/bin" | |||
GODOC="$GOPATH/doc" | |||
export GOPATH GOBIN GODOC | |||
export PATH="$PATH:$GOBIN" |
@@ -1,15 +0,0 @@ | |||
# /etc/profile.d/racket.sh | |||
RKTPATH="/usr/racket:/usr/local/racket" | |||
RKTPATH="$RKTPATH:$HOME/racket:$HOME/.racket:$HOME/.local/racket" | |||
RKTBIN="/usr/racket/bin:/usr/local/racket/bin" | |||
RKTBIN="$RKTBIN:$HOME/racket/bin:$HOME/.racket/bin:$HOME/.local/racket/bin" | |||
RKTMAN="/usr/racket/man:/usr/local/racket/man" | |||
RKTMAN="$RKTMAN:$HOME/racket/man:$HOME/.racket/man:$HOME/.local/racket/man" | |||
export PATH="$PATH:$RKTBIN" | |||
export MANPATH="$MANPATH:$RKTMAN" | |||
unset RKTPATH RKTBIN RKTMAN |
@@ -1,3 +0,0 @@ | |||
# /etc/profile.d/rust.sh | |||
export PATH="$PATH:$HOME/.cargo/bin" |
@@ -1,61 +0,0 @@ | |||
# /etc/tmux.conf | |||
### General ###################################### | |||
## Force reload of config file | |||
unbind r | |||
bind r source-file ~/.tmux.conf | |||
## Terminal | |||
set-option -g xterm-keys on | |||
set -g default-terminal "tmux-256color" | |||
## Keybind preference | |||
setw -g mode-keys vi | |||
set-option -g status-keys vi | |||
#set -g mouse on | |||
## Display | |||
set -s escape-time 0 | |||
set-option -g repeat-time 0 | |||
set -g base-index 1 | |||
setw -g pane-base-index 1 | |||
## Activate inner-most session (when nesting tmux) to send commands | |||
bind b send-prefix | |||
## History | |||
set -g history-limit 8192 | |||
### Keybinds ##################################### | |||
## Return to previous window when prefix is pressed twice | |||
bind C-a last-window | |||
bind C-b last-window | |||
## Window cycle/swap | |||
bind e previous-window | |||
bind f next-window | |||
bind E swap-window -t -1 | |||
bind F swap-window -t +1 | |||
bind -n M-[ previous-window | |||
bind -n M-] next-window | |||
## Moving between panes | |||
bind h select-pane -L | |||
bind j select-pane -D | |||
bind k select-pane -U | |||
bind l select-pane -R | |||
bind -n M-h select-pane -L | |||
bind -n M-l select-pane -R | |||
bind -n M-k select-pane -U | |||
bind -n M-j select-pane -D | |||
## Easy split pane commands | |||
unbind '"' | |||
unbind % | |||
bind = split-window -h | |||
bind - split-window -v | |||
bind -n M-= split-window -h | |||
bind -n M-- split-window -v |
@@ -1,179 +0,0 @@ | |||
" /etc/vimrc | |||
""" Vim-Plug ==================================== | |||
if empty(glob('~/.vim/autoload/plug.vim')) | |||
silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim | |||
autocmd VimEnter * PlugInstall --sync | |||
endif | |||
call plug#begin('~/.vim/plugged') " Minimalist Vim Plugin Manager | |||
""" Settings ==================================== | |||
Plug 'tpope/vim-sensible' " Sensible Defaults | |||
set t_BE= " Disable bracketed paste | |||
set nocompatible " be iMproved, required | |||
set nobackup " | |||
set noswapfile " | |||
set termencoding=utf-8 " UTF8 as default encoding | |||
set encoding=utf-8 " ... | |||
set scrolloff=100 | |||
""" Input ======================================= | |||
"set mouse=a " Enable mouse support | |||
set clipboard=unnamedplus " Share X11 clipboard | |||
let mapleader = ',' | |||
" Change windows with C-w hjkl | |||
nnoremap <C-h> <C-w>h | |||
nnoremap <C-j> <C-w>j | |||
nnoremap <C-k> <C-w>k | |||
nnoremap <C-l> <C-w>l | |||
" Fold Mappings | |||
"set foldmethod=syntax | |||
"set foldnestmax=10 | |||
"set nofoldenable | |||
"set foldlevel=0 | |||
inoremap <leader>z <C-O>za | |||
nnoremap <leader>z za | |||
onoremap <leader>z <C-C>za | |||
vnoremap <leader>z zf | |||
" Use <leader>/ to clear search highlight | |||
nmap <silent> <leader>/ :nohlsearch<CR> | |||
" Paste Mode | |||
set pastetoggle=<F2> | |||
set listchars=tab:\|.,trail:.,extends:#,nbsp:. | |||
""" Display ===================================== | |||
Plug 'vim-airline/vim-airline' | |||
Plug 'vim-airline/vim-airline-themes' | |||
let g:airline#extensions#tabline#enabled = 1 | |||
Plug 'edkolev/tmuxline.vim' | |||
let g:tmuxline_powerline_separators = 0 | |||
if has('gui_running') | |||
colorscheme slate | |||
set guifont=Noto\ Mono\ Regular\ 10 | |||
set background=dark | |||
set guioptions-=m "remove menu bar | |||
set guioptions-=T "remove toolbar | |||
set guioptions-=r "remove right-hand scroll bar | |||
set guioptions-=L "remove left-hand scroll bar | |||
endif | |||
""" Utilities =================================== | |||
Plug 'spolu/dwm.vim' " Tiled Window Management | |||
Plug 'Shougo/vimfiler.vim' " Powerful file explorer | |||
Plug 'tpope/vim-eunuch' " Helpers for UNIX | |||
Plug 'tpope/vim-dispatch' " Async Build/Test | |||
Plug 'benmills/vimux' " tmux Integration | |||
Plug 'mileszs/ack.vim' " Enhanced Grepping within Vim | |||
if executable('ag') | |||
let g:ackprg = 'ag --vimgrep --smart-case' | |||
cnoreabbrev ag Ack | |||
cnoreabbrev aG Ack | |||
cnoreabbrev Ag Ack | |||
cnoreabbrev AG Ack | |||
endif | |||
Plug 'ctrlpvim/ctrlp.vim' " Fuzzy file/buffer/mru/tag/etc finder | |||
let g:ctrlp_map = '<c-p>' | |||
let g:ctrlp_cmd = 'CtrlP' | |||
let g:ctrlp_custom_ignore = { | |||
\ 'dir': '\v[\/]\.(git|hg|svn)$', | |||
\ 'file': '\v\.(exe|so|dll)$', | |||
\ 'link': 'some_bad_symbolic_links', | |||
\ } | |||
let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files -co --exclude-standard'] | |||
Plug 'universal-ctags/ctags' " ctags implementation | |||
Plug 'majutsushi/tagbar' " Displays tags in a window | |||
nmap <F8> :TagbarToggle<CR> | |||
Plug 'francoiscabrol/ranger.vim' | |||
""" Languages =================================== | |||
Plug 'sheerun/vim-polyglot' " Language Support | |||
Plug 'scrooloose/syntastic' " Syntax checking hacks for vim | |||
nmap <leader>c :SyntasticCheck<CR> | |||
set statusline+=%#warningmsg# | |||
set statusline+=%* | |||
let g:syntastic_always_populate_loc_list = 1 | |||
let g:syntastic_auto_loc_list = 1 | |||
let g:syntastic_check_on_open = 1 | |||
let g:syntastic_check_on_wq = 0 | |||
let g:syntastic_error_symbol="S>" | |||
let g:syntastic_style_error_symbol="E>" | |||
let g:syntastic_warning_symbol="W>" | |||
let g:syntastic_style_warning_symbol="W>" | |||
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' } | |||
let g:syntastic_go_checkers = ['go', 'golint', 'errcheck', 'gov'] | |||
let g:go_auto_type_info = 1 | |||
let g:go_fmt_command = "gofmt" | |||
let g:go_highlight_build_constraints = 1 | |||
let g:go_highlight_extra_types = 1 | |||
let g:go_highlight_functions = 1 | |||
let g:go_highlight_interfaces = 1 | |||
let g:go_highlight_methods = 1 | |||
let g:go_highlight_operators = 1 | |||
let g:go_highlight_structs = 1 | |||
" Auto creates tags for Go source files. | |||
au BufWritePost *.go silent! !ctags -R & | |||
""" Editor ====================================== | |||
set tabstop=4 " Tabs are 4 columns | |||
set shiftwidth=4 " ... | |||
set softtabstop=4 " ... | |||
set expandtab " Change tabs to spaces | |||
set list " Show whitespace | |||
set number " Show line numbers | |||
set wrap linebreak nolist | |||
autocmd BufWritePre * %s/\s\+$//e " Delete trailing whitespace on save | |||
Plug 'tpope/vim-sleuth' " Heuristically set buffer options | |||
Plug 'nathanaelkane/vim-indent-guides' " Visaully display indent level | |||
Plug 'junegunn/vim-easy-align' " Easier text alignment | |||
xmap ga <Plug>(EasyAlign) | |||
nmap ga <Plug>(EasyAlign) | |||
Plug 'ervandew/supertab' " Vim insert mode completions with Tab | |||
let g:SuperTabDefaultCompletionType = "context" | |||
Plug 'tpope/vim-surround' " Quoting/Parenthesizing made simple | |||
Plug 'junegunn/limelight.vim' " Hyperfocus-writing in Vim | |||
""" Version Control System ====================== | |||
Plug 'airblade/vim-gitgutter' " Show git diff in the gutter | |||
nmap <Leader>ha <Plug>GitGutterStageHunk | |||
nmap <Leader>hr <Plug>GitGutterUndoHunk | |||
Plug 'tpope/vim-fugitive' " Git wrapper | |||
Plug 'tpope/vim-git' " Git integration | |||
Plug 'mattn/gist-vim' " Gist upload (GitHub) | |||
call plug#end() |
@@ -1,3 +0,0 @@ | |||
# /etc/xinitrc | |||
exec i3 |
@@ -1,22 +0,0 @@ | |||
# ~/.zshrc | |||
### Setup | |||
ZSH="/home/$(whoami)/.oh-my-zsh" | |||
if [ ! -d "$ZSH" ]; then | |||
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" | |||
fi | |||
plugins=(git go man) | |||
ZSH_THEME="risto" | |||
COMPLETION_WAITING_DOTS="true" | |||
source "$ZSH"/oh-my-zsh.sh | |||
### Settings | |||
[ -e /etc/profile ] && source /etc/profile | |||
if [ -n "$TMUX" ]; then | |||
unset zle_bracketed_paste | |||
fi |
@@ -52,25 +52,8 @@ CONFIG() { | |||
/etc/portage/sets/gein-lxqt | |||
/etc/portage/sets/gein-laptop | |||
/etc/profile | |||
/etc/profile.d/alias.sh | |||
/etc/profile.d/defaults.sh | |||
/etc/profile.d/golang.sh | |||
/etc/profile.d/racket.sh | |||
/etc/Xresources | |||
/etc/bash/bashrc | |||
/etc/emacs/default.el | |||
/etc/i3/config | |||
/etc/i3status.conf | |||
/etc/tmux.conf | |||
/etc/vim/vimrc | |||
/etc/xinitrc | |||
/etc/zsh/zshrc | |||
/usr/local/gein/gpkg | |||
/usr/local/gein/kbuild | |||
/usr/local/gein/srandr | |||
/usr/local/sbin/gpkg | |||
/usr/local/sbin/kbuild | |||
" | |||
# Files/Folders that need to be removed and re-created. Sometimes | |||
@@ -78,19 +61,12 @@ CONFIG() { | |||
# be a folder so we'll remove it outright and create what we need. | |||
# Sure, this is wasting a little time, I know. | |||
ConfigFolders=" | |||
/etc/bash | |||
/etc/emacs | |||
/etc/i3 | |||
/etc/portage/package.use | |||
/etc/portage/sets | |||
/etc/profile.d | |||
/etc/zshrc | |||
/usr/local/gein | |||
" | |||
for Folder in $ConfigFolders; do | |||
[ -f "$Folder" ] && rm "$Folder" | |||
[ -d "$Folder" ] && rm -rf "$Folder"/ | |||
[ ! -d "$Folder" ] && mkdir -p "$Folder" | |||
done | |||
@@ -1,45 +0,0 @@ | |||
#!/usr/bin/env sh | |||
## Example ~/.display.sh Configuration | |||
# | |||
# #!/usr/bin/env sh | |||
# DisplayConfigs="LVDS1 VGA1" | |||
# LVDS1() { | |||
# xrandr --output LVDS1 --auto | |||
# } | |||
# VGA1() { | |||
# xrandr --output VGA1 --auto --above LVDS1 | |||
# } | |||
Displays="" | |||
while :; do | |||
if [[ $DISPLAY ]]; then | |||
CDisplays=$(xrandr | grep ' connected' | awk '{print $1}') | |||
DDisplays=$(xrandr | grep 'disconnected' | awk '{print $1}') | |||
if [ "$Displays" != "$CDisplays" ]; then | |||
for display in $CDisplays; do | |||
if [ -e "$HOME/.display.sh" ]; then | |||
. "$HOME/.display.sh" | |||
for config in $DisplayConfigs; do | |||
if [ "$display" == "$config" ]; then | |||
$config | |||
fi | |||
done | |||
else | |||
xrandr --output "$display" --auto | |||
fi | |||
done | |||
for display in $DDisplays; do | |||
xrandr --output "$display" --off | |||
done | |||
Displays="$Connected" | |||
fi | |||
fi | |||
sleep 5 | |||
done |