Browse Source

Backport work on AzrynOS; gein returns

master
jcmdln 2 years ago
parent
commit
8c2e1648ea

+ 1
- 0
CNAME View File

@@ -0,0 +1 @@
gein.jcmdln.org

License → License.md View File

@@ -1,7 +1,7 @@
Azryn Software Labs Public License
Version 1.0.0, 2017-07-28
Version 1.1.0, 2017-10-26

Copyright (C) 2017 Azryn Software Labs, Inc. <http://www.aswl.org/apl/>
Copyright (C) 2017 Johnathan C Maudlin <jcmdln@gmail.com>

Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
@@ -12,7 +12,7 @@ right without limitation or restriction to use, copy, modify, merge,
publish, and distribute copies of this software provided the following
conditions are met:

* Redistributions of source code must retain the above copyright
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright
@@ -21,11 +21,12 @@ conditions are met:

Should any persons wish to sell copies of the Software or the contents
of the Software, in part or in full, said permission is hereby granted
provided one the following conditions are met:
provided one the following two conditions are met:

* You have explicit, written permission to do so.
* You have explicit, written, unanimous permission to do so by the
copyright holders and contributors.

* You forego using this license in favor of using the GNU GENERAL
* You forego using this license in favor of using the GNU GENERAL
PUBLIC LICENSE of version 3 or later (the "GPLv3").

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
@@ -34,8 +35,8 @@ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+ 65
- 44
Readme.md View File

@@ -1,44 +1,65 @@
#### NOTE: This project has been deprecated by https://github.com/Azryn/AzrynOS


```
$ sh gein
gein - GEntoo INstaller

-h help Suggests to read the script and Gentoo documentation

Required first step:
-b bootstrap Bootstrap the stage3 tarball

Post-bootstrap options:
-m minimal Only install required gentoo packages
-d desktop Install required and desktop packages
-l laptop Install required, desktop, and laptop packages
```

0) Read the entire script, I may do things you won't like or want.
1) Download and boot the Gentoo livecd of your choosing.
2) Configure and mount your partitions.
3) Download `gein` into `/mnt/gentoo`.
```
cd /mnt/gentoo
wget https://raw.githubusercontent.com/jcmdln/gein/master/gein
```

4) Bootstrap the Gentoo installation.
```
# Once this command completes, you should be in your new chroot
sh /mnt/gentoo/gein -b
```

5) From the new chroot, install your desired version
```
# Minimal install (only bare minimum packages)
sh gein -m

# Desktop install (a full desktop with baked-in configs)
sh gein -d

# Laptop install (add power monitoring, wifi)
sh gein -l
```
`gein` is a Linux-based derivative of Gentoo. The primary goal is to
automate the installation of my own ideal Gentoo setup though the
current design allows for others to fork or submit PR's should it be
desired. Keep in mind that this project is NOT a replacement for reading
the Gentoo Handbook.

You may review the source code at https://github.com/jcmdln/gein for
more information if needed.


## FAQ
- "How much about Gentoo will I need to know to use gein?"
- I would suggest reading the Gentoo Handbook and every file in this
project before proceeding.
- "I keep getting boot failures after installing in a VirtualBox VM?"
- Remove the virtual disk drive from the boot order and restart.
- "The display is lagging when using LXQT on my Nvidia GPU?"
- Run `eselect opengl set nvidia` as root.


## Warnings
- Read the warnings at the top of `install.sh` FIRST!
- You must manually partition and mount your disks.
- Consult your Gentoo Handbook.
- gein does not install a web browser or office suite.


## Getting Started
1. Download a Gentoo LiveCD from https://www.gentoo.org/downloads/

2. Write the ISO to a USB drive:

$ dd if=~/Downloads/<iso> of=/dev/<usb>

3. Boot from the USB drive on the target device


## Installing
1. Partition and mount your disk(s)
2. Download and run `install.sh`:

$ wget http://gein.jcmdln.net/install.sh
$ sh install.sh
gein: Linux-based derivative of Gentoo
-h help Shows this output
-b bootstrap Bootstrap the stage3 tarball

Post-bootstrap:
-m minimal Perform a basic Gentoo installation
-d desktop Install a complete gein desktop

3. Read the information at the top of `install.sh` and modify the
variables as needed:

$ vi install.sh

4. Start the bootstrap:

$ sh install.sh bootstrap

5. Install your desired variant:

$ sh install.sh desktop

Enjoy your Gentoo installation!

+ 4
- 0
etc/Xresources View File

@@ -0,0 +1,4 @@
# /etc/Xresources

Xcursor.theme: breeze
Xcursor.size: 16

+ 33
- 0
etc/bash/bashrc View File

@@ -0,0 +1,33 @@
# /etc/bash/bashrc

# Test for an interactive shell.
if [[ $- != *i* ]] ; then
# Shell is non-interactive. Be done now!
return
fi

shopt -s checkwinsize
shopt -s no_empty_cmd_completion
shopt -s histappend
#PROMPT_COMMAND='history -a'

# Change the window title of X terminals
case ${TERM} in
[aEkx]term*|rxvt*|gnome*|konsole*|interix)
PS1='\[\033]0;\u@\h:\w\007\]'
;;
screen*)
PS1='\[\033k\u@\h:\w\033\\\]'
;;
*)
unset PS1
;;
esac

for sh in /etc/bash/bashrc.d/* ; do
[[ -r ${sh} ]] && source "${sh}"
done

source /etc/profile

unset use_color sh

+ 476
- 0
etc/emacs/default.el View File

@@ -0,0 +1,476 @@
;; /etc/emacs/default.el

;; Disable menubar, scrollbar, and toolbar before they initialize
(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))

;; Theme/Font
(load-theme 'tango-dark)
(set-face-attribute 'default nil
:family "Monospace" :weight 'normal
:width 'normal :height 96)

(add-hook
'after-init-hook
(lambda()
;; Line number column
(add-hook 'lisp-mode-hook 'linum-mode)
(add-hook 'prog-mode-hook 'linum-mode)
(add-hook 'text-mode-hook 'linum-mode)

;; Saving
(add-hook 'before-save-hook 'delete-trailing-whitespace)

;; Shorter y/n prompts
(fset 'yes-or-no-p 'y-or-n-p)

;; Globally enable word-wrap
(global-visual-line-mode t)

;; Highlight matching parenthesis
(show-paren-mode t)

;; Enable Emacs mouse commands
(xterm-mouse-mode t)

;; Environment Variables
(setenv "EDITOR" "emacsclient")
(setenv "GIT_EDITOR" "emacsclient")
(setenv "GOPATH" (getenv "GOPATH"))
(setenv "MANPATH" (getenv "MANPATH"))
(setenv "PATH" (getenv "PATH"))
(setenv "PROMPT_COMMAND" "")
(setenv "SHELL" (getenv "SHELL"))
(setenv "TERM" (getenv "TERM"))))

(setq
;; Misc
initial-scratch-message nil
inhibit-splash-screen t
inhibit-startup-buffer-menu t
column-number-mode t
visible-bell t

;; Encoding
prefer-coding-system 'utf-8
set-default-coding-systems 'utf-8
set-language-environment "UTF-8"
set-locale-environment "en_US.UTF-8"

;; Cut/Paste
require-final-newline t
save-interprogram-paste-before-kill t
select-enable-primary nil

;; Indentation
c-basic-offset 2
cperl-indent-level 2
js-indent-level 2
tab-width 2
indent-tabs-mode nil

;; Mouse
mouse-wheel-follow-mouse 't
mouse-wheel-progressive-speed nil
mouse-wheel-scroll-amount '(3 ((shift) . 3))
mouse-yank-at-point t

;; Scrolling
auto-window-vscroll nil
scroll-conservatively 101
scroll-down-aggressively 0.0
scroll-margin 0
scroll-preserve-screen-position 1
scroll-step 1
scroll-up-aggressively 0.0)

;; Autoload custom file on start
(setq custom-file "~/.emacs.d/custom.el")
(if (file-exists-p custom-file)
(load custom-file)
(write-region "" nil custom-file))


;;; Helper Functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun append-to-list (list-var elements)
"Append ELEMENTS to the end of LIST-VAR."
(set list-var (append (symbol-value list-var) elements)))


;;; Input ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; Buffers
(global-set-key (kbd "C-x C-b") 'ibuffer)
(global-set-key (kbd "C-x x") 'kill-buffer-and-window)
(global-set-key (kbd "<C-tab>") 'next-buffer)
(global-set-key (kbd "<C-iso-lefttab>") 'previous-buffer)
(global-set-key (kbd "M--") (lambda() (interactive)
(split-window-vertically)
(other-window 1 nil)
(switch-to-next-buffer)))
(global-set-key (kbd "M-=") (lambda() (interactive)
(split-window-horizontally)
(other-window 1 nil)
(switch-to-next-buffer)))

;; Comments
(global-set-key (kbd "C-c c") 'comment-or-uncomment-region)

;; Mouse
(global-set-key (kbd "<mouse-4>") (lambda() (interactive)
(scroll-down 4)))
(global-set-key (kbd "<mouse-5>") (lambda() (interactive)
(scroll-up 4)))

;; Movement
(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)


;;; Package Manager ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(require 'package)
(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
'(("MELPA Stable" . 3)
("GNU ELPA" . 2)
("MELPA" . 1)))
(package-initialize)

;; Install 'use-package' if not present
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
(require 'use-package)
(setq use-package-always-ensure t)


;;; Built-in Packages ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(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 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 'all)

(setq eshell-prompt-function
(lambda nil
(concat
"[" (user-login-name) "@" (system-name) " "
(if (= (length (eshell/pwd)) (length (getenv "HOME")))
"~" (eshell/basename (eshell/pwd))) "]"
(if (= (user-uid) 0) "# " "$ ")))
eshell-prompt-regexp "^[^#$\n]*[#$] ")

(add-hook
'eshell-mode-hook
(lambda()
(append-to-list 'eshell-visual-commands
'("alsamixer" "htop" "top" "nano" "vi" "vim" "less" "ssh"
"tail" "watch"))

(eshell/alias "clear" "eshell-clear")
(eshell/alias "cp" "cp -ip $1 $2")
(eshell/alias "cr" "cp -ipr $1 $2")
(eshell/alias "hurl" "curl --fail --location --remote-name-all --progress-bar $*")
(eshell/alias "df" "df -h $*")
(eshell/alias "di" "df -hi $*")
(eshell/alias "free" "free -h $*")
(eshell/alias "l" "ls -hSC --color=auto --group-directories-first $*")
(eshell/alias "la" "ls -ahSC --color=auto --group-directories-first $*")
(eshell/alias "ll" "ls -halS --color=auto --group-directories-first $*")
(eshell/alias "ls" "ls -hSC --color=auto --group-directories-first $*")
(eshell/alias "mkcd" "mkdir -vp $1; cd $1")
(eshell/alias "mkdir" "mkdir -vp $*")
(eshell/alias "rf" "rm -rf $*")
(eshell/alias "rm" "rm -i $*")
(eshell/alias "rr" "rm -ir $*")))

(defun eshell-clear()
"Clear the eshell buffer"
(let ((inhibit-read-only t))
(erase-buffer)
(eshell-send-input)))

(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)))

(defun eww-open-url-in-new()
"Open link under cursor in new instance of eww"
(interactive)
(let ((url (get-text-property (point) 'shr-url)))
(print url)
(switch-to-buffer (generate-new-buffer "*eww*"))
(eww-mode)
(eww url))))

(use-package gnus
:config
(gnus-add-configuration
'(article
(horizontal 1.0
(vertical 25 (group 1.0))
(vertical 1.0
(summary 0.25 point)
(article 1.0)))))
(gnus-add-configuration
'(summary
(horizontal 1.0
(vertical 25 (group 1.0))
(vertical 1.0 (summary 1.0 point))))))

(use-package ibuffer
:config
(add-hook 'ibuffer-hook
(lambda()
(ibuffer-do-sort-by-alphabetic)
(ibuffer-do-sort-by-major-mode))))

(use-package scratch
:config
(defun scratch-new()
"Open a new scratch buffer."
(interactive)
(switch-to-buffer (generate-new-buffer "*scratch*"))
(lisp-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)
(server-force-delete)
(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 xclip
:config (xclip-mode 1))


;;; Extras ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(use-package circe
:config
(add-hook 'circe-chat-mode-hook 'my-circe-prompt)
(add-hook 'circe-message-option-functions 'my-circe-message-option-chanserv)
(add-hook 'lui-mode-hook (lambda() (my-lui-setup) (my-circe-set-margin)))
(if (file-exists-p "~/.emacs.d/circe.el")
(load-file "~/.emacs.d/circe.el"))

(setq circe-default-part-message ""
circe-default-quit-message ""
circe-format-server-topic "*** Topic change by {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-time-stamp-format "%H:%M:%S"
lui-time-stamp-position 'left-margin)

(require 'circe-chanop)
(enable-circe-color-nicks)

(defun my-circe-set-margin() (setq left-margin-width 9))
(setf (cdr (assoc 'continuation fringe-indicator-alist)) nil)

(defun my-lui-setup()
(setq fringes-outside-margins t
left-margin-width 9
word-wrap t
wrap-prefix ""))

(defun my-circe-prompt()
(lui-set-prompt
(concat (propertize
(concat (buffer-name) ">")
'face 'circe-prompt-face) " ")))

(defun my-circe-message-option-chanserv (nick user host command args)
(when (and (string= "ChanServ" nick)
(string-match "^\\[#.+?\\]" (cadr args)))
'((dont-display . t)))))

(use-package cmake-ide
:config (cmake-ide-setup))

(use-package company
:config
(add-hook 'prog-mode-hook 'company-mode)
(add-hook 'text-mode-hook 'company-mode))

(use-package company-irony
:config (add-to-list 'company-backends 'company-irony))

(use-package company-irony-c-headers
:config
(add-to-list 'company-backends '(company-irony-c-headers company-irony)))

(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-expression-history)
("C-x C-f" . counsel-find-file)
("C-x l" . counsel-locate)
("M-x" . counsel-M-x)))

(use-package diff-hl
:config
(add-hook 'prog-mode-hook 'diff-hl-mode)
(add-hook 'text-mode-hook 'diff-hl-mode))

(use-package eww-lnum
:config
(define-key eww-mode-map "f" 'eww-lnum-follow)
(define-key eww-mode-map "F" 'eww-lnum-universal))

(use-package flycheck
:config (add-hook 'prog-mode-hook 'flycheck-mode))

(use-package flymake)

(use-package flyspell
: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 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))))

(use-package highlight-indent-guides
:config
(add-hook 'prog-mode-hook 'highlight-indent-guides-mode)
(setq highlight-indent-guides-method 'character))

(use-package irony
: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)
(setq irony-additional-clang-options '("-std=c++14")))

(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 magit)

(use-package no-littering)

(use-package nov
:config (add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode)))

(use-package rainbow-delimiters
: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 ranger)

(use-package smartparens
: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
:bind ("C-s" . swiper))

(use-package undo-tree
:config (global-undo-tree-mode))

+ 219
- 0
etc/i3/config View File

@@ -0,0 +1,219 @@
# /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 dmenu_run
bindsym $mod+Return exec dbus-launch gnome-terminal


### Appearance ###################################

## 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"
}


### Display ######################################

## Auto-enable/disable HDMI-1
exec --no-startup-id \
while :; do \
if [ $(xrandr | grep -c 'HDMI-1 connected') == 1 ]; then \
xrandr \
--output DP-1 --off \
--output LVDS-1 --primary --mode 1366x768 --pos 554x1080 --rotate normal \
--output HDMI-1 --mode 1920x1080 --pos 0x0 --rotate normal \
--output VGA-1 --off; \
else \
xrandr --output DP-1 --off \
--output LVDS-1 --primary --mode 1366x768 --pos 0x0 --rotate normal \
--output VGA-1 --off \
--output HDMI-1 --off; \
fi; \
sleep 2; \
done


#### 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"
}

## 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 (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 (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

## 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 15
bindsym XF86MonBrightnessDown exec --no-startup-id xbacklight -dec 15

+ 47
- 0
etc/i3status.conf View File

@@ -0,0 +1,47 @@
# /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"
}

+ 10
- 21
etc/portage/make.conf View File

@@ -1,30 +1,19 @@
# /etc/portage/make.conf

# System
CHOST="x86_64-gentoo-linux-musl"

# Portage
PORTDIR="/usr/portage"
DISTDIR="${PORTDIR}/distfiles"
PKGDIR="${PORTDIR}/packages"

# Hardware
CPU_FLAGS_X86="aes avx avx2 fma3 mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3"
INPUT_DEVICES="libinput"
CPU_FLAGS_X86="mmx mmxext sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3"
L10N="en-US"
LINGUAS="en_US"
VIDEO_CARDS="Video_Cards"

# Language
LINGUAS="en_US"
L10N="en-US"
# Portage
GENTOO_MIRRORS="http://distfiles.gentoo.org"
PORTDIR="/usr/portage"
DISTDIR="$PORTDIR/distfiles"
PKGDIR="$PORTDIR/packages"

# Compilation
MAKEOPTS="Make_Opts"
CFLAGS="-march=native -O3"
CXXFLAGS="${CFLAGS}"

# Package
USE="-avahi -bindist -doc -gnome-keyring -llvm -offensive -multilib -pulseaudio \
-sslv3 -static -static-libs -systemd -tls-heartbeat \
alsa deblob ipv6 minimal threads unicode"

GENTOO_MIRRORS="https://mirrors.kernel.org/gentoo/"
CFLAGS="-O3 -march=native -pipe"
CXXFLAGS="$CFLAGS"

+ 19
- 0
etc/portage/package.accept_keywords View File

@@ -0,0 +1,19 @@
# /etc/portage/package.accept_keywords

## General
dev-util/bcc
lxqt-base/*
media-gfx/lximage-qt
net-libs/libnsl
sys-devel/gcc
sys-kernel/gentoo-sources
sys-kernel/linux-headers
sys-libs/glibc
x11-misc/obconf-qt
x11-misc/pcmanfm-qt

## amd64
app-emulation/wine-mono ~amd64
app-emulation/wine-staging ~amd64
net-misc/cmst ~amd64
sys-firmware/nvidia-firmware ~amd64

+ 1
- 0
etc/portage/package.env View File

@@ -0,0 +1 @@
# /etc/portage/package.env

+ 4
- 0
etc/portage/package.license View File

@@ -0,0 +1,4 @@
# /etc/portage/package.license

app-emulation/virtualbox-bin PUEL
www-client/google-chrome google-chrome

+ 194
- 123
etc/portage/package.use View File

@@ -1,88 +1,77 @@
# /etc/portage/package.use

### Global #######################################

## Blacklist
*/* -avahi -bindist -doc -gnome-keyring -handbook -introspection -kdesu -kwallet -llvm -multilib -offensive -qt4 -sslv3 -static -static-libs -systemd -tls-heartbeat -wayland

## Whitelist
*/* alsa bzip2 dbus deblob ffmpeg gif gnutls imagemagick jpeg jpeg2k minimal png pulseaudio svg threads tiff unicode xft xpm zlib

## Desktop
*/* X cairo egl gles openal opengl sdl sdl2 vaapi vdpau


### Packages #####################################

app-admin/sudo -gcrypt -openssl sendmail
app-arch/bzip2 abi_x86_32
app-editors/emacs X acl alsa gof gtk3 gzip-el imagemagick inotify jpeg libxml2 png sound ssl svg threads tiff xft xpm xwidgets zlib -aqua -athena -games -gtk
app-editors/vim X -minimal -perl -python -racket -tcl
app-emacs/emacs-common-gentoo X -games
app-emulation/qemu sdl2 usb
app-arch/zip -bzip2
app-editors/emacs -athena -games -gtk acl dynamic-loading gtk3 gzip-el inotify libxml2 sound ssl xwidgets
app-editors/vim -X -minimal -perl -python -racket -tcl
app-emacs/emacs-common-gentoo -games
app-emulation/qemu usb
app-laptop/laptop-mode-tools acpi bluetooth
app-misc/screenfetch -X
app-office/libreoffice branding collada cups gltf gstreamer gtk mysql pdfimport postgres
app-shells/zsh unicode
app-office/libreoffice branding collada gltf gstreamer gtk mysql pdfimport postgres
app-text/ghostscript-gpl cups
app-text/poppler cairo
app-text/poppler -qt5
app-text/xmlto text
dev-cpp/cairomm aqua X
dev-cpp/gtkmm X
dev-db/sqlite abi_x86_32
dev-games/ogre threads examples ois
dev-games/openscenegraph qt5 jpeg ffmpeg svg sdl truetype png
dev-games/ogre examples ois
dev-games/openscenegraph truetype
dev-lang/python:2.7 sqlite
dev-libs/atk abi_x86_32
dev-libs/expat abi_x86_32
dev-libs/glib dbus abi_x86_32
dev-libs/icu abi_x86_32
dev-libs/libcroco abi_x86_32
dev-libs/libffi abi_x86_32
dev-libs/libpcre abi_x86_32 pcre16
dev-libs/libpthread-stubs abi_x86_32
dev-libs/libxml2 abi_x86_32 python
dev-libs/lzo abi_x86_32
dev-libs/nspr abi_x86_32
dev-libs/nss abi_x86_32
dev-libs/openssl abi_x86_32 zlib
dev-util/pkgconfig abi_x86_32
dev-libs/libpcre pcre16
dev-libs/libxml2 icu python
dev-qt/qtcore icu
dev-qt/qtmultimedia gstreamer qml
dev-qt/qtnetwork connman
dev-util/cmake -ncurses -qt5
dev-util/geany gtk3 vte
dev-vcs/git -gpg
gnome-base/librsvg abi_x86_32
media-gfx/feh curl exif cinerma
media-gfx/graphite2 abi_x86_32
media-gfx/inkscape imagemagick jpeg latex
kde-frameworks/kidletime xscreensaver
kde-plasma/kde-cli-tools -X
kde-plasma/kwin multimedia
kde-plasma/systemsettings gtk
lxqt-base/lxqt-meta -oxygen about admin filemanager icons lximage powermanagement sddm
lxqt-base/lxqt-panel clock colorpicker cpuload desktopswitch kbindicator mainmenu mount quicklaunch sensors showdesktop statusnotifier sysstat taskbar tray volume
mail-client/thunderbird lightning system-cairo system-harfbuzz system-icu system-jpeg system-libevent system-libvpx system-sqlite
media-fonts/noto cjk
media-gfx/blender boost bullet collada colorio cuda cuda cycles dds elbeem game-engine jemalloc openimageio opensubdiv player sndfile valgrind
media-gfx/feh curl exif cinerma xinerama
media-gfx/gimp smp
media-gfx/imagemagick corefonts cxx djvu fontconfig fpx fttw hdri jbig lcms lzma openexr raw opencl truetype webp wmf xml
media-gfx/inkscape latex
media-gfx/pstoedit plotutils
media-libs/alsa-lib abi_x86_32
media-libs/fontconfig abi_x86_32
media-libs/freetype abi_x86_32
media-libs/harfbuzz abi_x86_32 icu
media-libs/imlib2 X
media-libs/libpng abi_x86_32 apng
media-libs/libsdl2 X opengl
media-libs/libsndfile abi_x86_32
media-libs/libtxc_dxtn abi_x86_32
media-libs/mesa -llvm abi_x86_32 dri3 vaapi vdpau
media-libs/openal abi_x86_32
media-plugins/alsa-plugins pulseaudio abi_x86_32
media-sound/cmus aac alsa ffmpeg flac libsamplerate mad mp4 opus oss unicode vorbis wavpack
media-sound/pulseaudio abi_x86_32
media-video/ffmpeg X aac hevc libass mp3 network ogg openssl opus rtmp sdl theora vorbis vpx x264 x265 xvid wavpack
net-libs/libasyncns abi_x86_32
net-misc/connman bluetooth ethernet openvpn wifi
net-misc/curl abi_x86_32
net-misc/openssh -static
net-vpn/openvpn -static
net-wireless/wpa_supplicant dbus
sys-apps/attr abi_x86_32
sys-apps/tcp-wrappers abi_x86_32
sys-apps/util-linux abi_x86_32
media-libs/harfbuzz icu
media-libs/libpng apng
media-libs/mesa -vaapi gles2
media-libs/phonon -vlc gstreamer
media-plugins/gst-plugins-meta ogg vorbis
media-sound/cmus aac alsa flac libsamplerate mad mp4 opus oss vorbis wavpack
media-video/ffmpeg aac amr blueray cdio encode gme hevc libass mp3 network ogg openh264 openssl opus rtmp theora vorbis vpx wavpack x264 x265 xvid
media-video/mpv libass libmpv
net-misc/connman bluetooth ethernet iptables openvpn wifi
net-misc/openssh -X
net-vpn/openvpn lz4 lzo plugins
net-wireless/wpa_supplicant -qt5
sys-apps/openrc -netifrc
sys-auth/consolekit policykit
sys-auth/pambase consolekit
sys-devel/gcc cxx nls nplt
sys-devel/gettext abi_x86_32
sys-devel/llvm abi_x86_32 clang
sys-fs/eudev -static -static-lib abi_x86_32
sys-fs/udev -static -static-lib abi_x86_32
sys-libs/binutils-libs abi_x86_32
sys-libs/gpm abi_x86_32
sys-libs/libcap abi_x86_32
sys-devel/llvm clang
sys-libs/libcxx libcxxabi
sys-libs/ncurses abi_x86_32
sys-libs/readline abi_x86_32
sys-libs/zlib abi_x86_32
sys-libs/zlib minizip
virtual/libffi abi_x86_32
virtual/libiconv abi_x86_32
virtual/libintl abi_x86_32
virtual/libudev -static -static-libs abi_x86_32 x32
virtual/opengl abi_x86_32
virtual/pkgconfig abi_x86_32
www-client/chromium cups hangouts proprietary-codecs pulseaudio system-ffmpeg system-icu system-libvpx
www-client/chromium hangouts proprietary-codecs system-ffmpeg system-icu system-libvpx
www-client/w3m -X
www-plugins/adobe-flash ppapi
x11-base/xorg-drivers libinput
x11-base/xorg-server -minimal
@@ -91,56 +80,138 @@ x11-drivers/xf86-video-amdgpu glamor
x11-drivers/xf86-video-ati glamor
x11-drivers/xf86-video-intel dri3 sna
x11-drivers/xf86-video-virtualbox dri
x11-libs/cairo X xcb abi_x86_32
x11-libs/gdk-pixbuf X abi_x86_32
x11-libs/gtk+:2 abi_x86_32
x11-libs/libICE abi_x86_32
x11-libs/libSM abi_x86_32
x11-libs/libX11 abi_x86_32
x11-libs/libXScrnSaver abi_x86_32
x11-libs/libXau abi_x86_32
x11-libs/libXcomposite abi_x86_32
x11-libs/libXcursor abi_x86_32
x11-libs/libXdamage abi_x86_32
x11-libs/libXdmcp abi_x86_32
x11-libs/libXext abi_x86_32
x11-libs/libXfixes abi_x86_32
x11-libs/libXft abi_x86_32
x11-libs/libXi abi_x86_32
x11-libs/libXinerama abi_x86_32
x11-libs/libXrandr abi_x86_32
x11-libs/libXrender abi_x86_32
x11-libs/libXtst abi_x86_32
x11-libs/libXxf86vm abi_x86_32
x11-libs/libdrm abi_x86_32
x11-libs/libpciaccess abi_x86_32
x11-libs/libva abi_x86_32 X
x11-libs/libva-vdpau-driver abi_x86_32
x11-libs/libxcb xkb abi_x86_32
x11-libs/libxkbcommon X
x11-libs/libxshmfence abi_x86_32
x11-libs/pango X abi_x86_32
x11-libs/pixman abi_x86_32
x11-libs/cairo xcb
x11-libs/libfm vala
x11-libs/libva -egl
x11-libs/libxcb xkb
x11-misc/dmenu xinerama
x11-misc/i3status filecaps
x11-proto/compositeproto abi_x86_32
x11-proto/damageproto abi_x86_32
x11-proto/dri2proto abi_x86_32
x11-proto/dri3proto abi_x86_32
x11-proto/fixesproto abi_x86_32
x11-proto/glproto abi_x86_32
x11-proto/inputproto abi_x86_32
x11-proto/kbproto abi_x86_32
x11-proto/presentproto abi_x86_32
x11-proto/randrproto abi_x86_32
x11-proto/recordproto abi_x86_32
x11-proto/renderproto abi_x86_32
x11-proto/scrnsaverproto abi_x86_32
x11-proto/xcb-proto abi_x86_32
x11-proto/xextproto abi_x86_32
x11-proto/xf86bigfontproto abi_x86_32
x11-proto/xf86driproto abi_x86_32
x11-proto/xf86vidmodeproto abi_x86_32
x11-proto/xineramaproto abi_x86_32
x11-proto/xproto abi_x86_32
x11-terms/rxvt-unicode 256-color blink fading-colors font-styles mousewheel perl pixbuf unicode3 xft
x11-misc/sddm consolekit
x11-terms/gnome-terminal -gnome-shell -nautilus
x11-terms/rxvt-unicode 256-color blink fading-colors font-styles mousewheel perl pixbuf unicode3


### Multilib #####################################

# app-accessibility/at-spi2-atk abi_x86_32
# app-accessibility/at-spi2-core abi_x86_32
# app-arch/bzip2 abi_x86_32
# app-emulation/wine-gecko abi_x86_32
# dev-db/sqlite abi_x86_32
# dev-libs/atk abi_x86_32
# dev-libs/expat abi_x86_32
# dev-libs/glib abi_x86_32
# dev-libs/gmp abi_x86_32
# dev-libs/icu abi_x86_32
# dev-libs/libcroco abi_x86_32
# dev-libs/libffi abi_x86_32
# dev-libs/libgcrypt abi_x86_32
# dev-libs/libgpg-error abi_x86_32
# dev-libs/libpcre abi_x86_32
# dev-libs/libpthread-stubs abi_x86_32
# dev-libs/libtasn1 abi_x86_32
# dev-libs/libunistring abi_x86_32
# dev-libs/libxml2 abi_x86_32
# dev-libs/libxslt abi_x86_32
# dev-libs/lzo abi_x86_32
# dev-libs/nettle abi_x86_32
# dev-libs/nspr abi_x86_32
# dev-libs/nss abi_x86_32
# dev-libs/openssl abi_x86_32
# dev-libs/wayland abi_x86_32
# dev-util/pkgconfig abi_x86_32
# gnome-base/librsvg abi_x86_32
# media-gfx/graphite2 abi_x86_32
# media-libs/alsa-lib abi_x86_32
# media-libs/fontconfig abi_x86_32
# media-libs/freeglut abi_x86_32
# media-libs/freetype abi_x86_32
# media-libs/glu abi_x86_32
# media-libs/harfbuzz abi_x86_32
# media-libs/jasper abi_x86_32
# media-libs/lcms abi_x86_32
# media-libs/libjpeg-turbo abi_x86_32
# media-libs/libpng abi_x86_32
# media-libs/libsndfile abi_x86_32
# media-libs/libtxc_dxtn abi_x86_32
# media-libs/mesa abi_x86_32
# media-libs/openal abi_x86_32
# media-libs/tiff abi_x86_32
# media-plugins/alsa-plugins abi_x86_32
# media-sound/pulseaudio abi_x86_32
# net-dns/libidn2 abi_x86_32
# net-libs/gnutls abi_x86_32
# net-libs/libasyncns abi_x86_32
# net-misc/curl abi_x86_32
# sys-apps/attr abi_x86_32
# sys-apps/dbus abi_x86_32
# sys-apps/tcp-wrappers abi_x86_32
# sys-apps/util-linux abi_x86_32
# sys-devel/gettext abi_x86_32
# sys-fs/eudev abi_x86_32
# sys-fs/udev abi_x86_32
# sys-libs/binutils-libs abi_x86_32
# sys-libs/gpm abi_x86_32
# sys-libs/libcap abi_x86_32
# sys-libs/ncurses abi_x86_32
# sys-libs/readline abi_x86_32
# sys-libs/zlib abi_x86_32
# virtual/glu abi_x86_32
# virtual/jpeg abi_x86_32
# virtual/libffi abi_x86_32
# virtual/libiconv abi_x86_32
# virtual/libintl abi_x86_32
# virtual/libudev abi_x86_32 x32
# virtual/opengl abi_x86_32
# virtual/pkgconfig abi_x86_32
# x11-libs/cairo abi_x86_32
# x11-libs/gdk-pixbuf abi_x86_32
# x11-libs/libICE abi_x86_32
# x11-libs/libSM abi_x86_32
# x11-libs/libX11 abi_x86_32
# x11-libs/libXScrnSaver abi_x86_32
# x11-libs/libXau abi_x86_32
# x11-libs/libXcomposite abi_x86_32
# x11-libs/libXcursor abi_x86_32
# x11-libs/libXdamage abi_x86_32
# x11-libs/libXdmcp abi_x86_32
# x11-libs/libXext abi_x86_32
# x11-libs/libXfixes abi_x86_32
# x11-libs/libXft abi_x86_32
# x11-libs/libXi abi_x86_32
# x11-libs/libXinerama abi_x86_32
# x11-libs/libXmu abi_x86_32
# x11-libs/libXrandr abi_x86_32
# x11-libs/libXrender abi_x86_32
# x11-libs/libXt abi_x86_32
# x11-libs/libXtst abi_x86_32
# x11-libs/libXxf86vm abi_x86_32
# x11-libs/libdrm abi_x86_32
# x11-libs/libpciaccess abi_x86_32
# x11-libs/libva abi_x86_32
# x11-libs/libva-intel-driver abi_x86_32
# x11-libs/libvdpau abi_x86_32
# x11-libs/libxcb abi_x86_32
# x11-libs/libxshmfence abi_x86_32
# x11-libs/pango abi_x86_32
# x11-libs/pixman abi_x86_32
# x11-proto/compositeproto abi_x86_32
# x11-proto/damageproto abi_x86_32
# x11-proto/dri2proto abi_x86_32
# x11-proto/dri3proto abi_x86_32
# x11-proto/fixesproto abi_x86_32
# x11-proto/glproto abi_x86_32
# x11-proto/inputproto abi_x86_32
# x11-proto/kbproto abi_x86_32
# x11-proto/presentproto abi_x86_32
# x11-proto/randrproto abi_x86_32
# x11-proto/recordproto abi_x86_32
# x11-proto/renderproto abi_x86_32
# x11-proto/scrnsaverproto abi_x86_32
# x11-proto/xcb-proto abi_x86_32
# x11-proto/xextproto abi_x86_32
# x11-proto/xf86bigfontproto abi_x86_32
# x11-proto/xf86driproto abi_x86_32
# x11-proto/xf86vidmodeproto abi_x86_32
# x11-proto/xineramaproto abi_x86_32
# x11-proto/xproto abi_x86_32

+ 10
- 0
etc/portage/repos.conf/gentoo.conf View File

@@ -0,0 +1,10 @@
# /etc/portage/repos.conf/gentoo.conf

[DEFAULT]
main-repo = gentoo

[gentoo]
location = /usr/portage
sync-type = git
sync-uri = https://github.com/gentoo/gentoo.git
auto-sync = yes

+ 4
- 43
etc/profile View File

@@ -1,52 +1,13 @@
# /etc/profile

## Set user file-creation mask
umask 022

## Load 'env-update' settings
if [ -e /etc/profile.env ]; then
source /etc/profile.env
fi
[ -e /etc/profile.env ] && source /etc/profile.env

## Load scripts in '/etc/profile.d/'
for sh in /etc/profile.d/*.sh ; do
[ -r "$sh" ] && source "$sh"
for sh in /etc/profile.d/*.sh; do
[ -r "$sh" ] && . "$sh"
done

## Give root a separate PATH including sbin
if [ "${EUID-}" = "0" ] || [ "${USER-}" = "root" ]; then
PATH="${ROOTPATH}:/usr/share/bcc/tools/"
MANPATH="${MANPATH}:/usr/share/bcc/man/man8"
fi
[ -e $HOME/.profile ] && source $HOME/.profile

## Exports
export ARCHFLAGS="-arch x86_64"
export EDITOR='vi'
export HISTTIMEFORMAT="(%m/%d/%y) %T "
export MANPATH
export PAGER="${PAGER:-/usr/bin/less}"
export PATH
export PROMPT_COMMAND="history -a"
export SSH_KEY_PATH="${HOME}/.ssh/rsa_id"
export TERM="xterm-256color"
export ZSH="${HOME}/.oh-my-zsh"
export ZSH_THEME="gentoo"

## Bash settings
if [ -n "${BASH_VERSION-}" ]; then
[ -f /etc/bash/bashrc ] && source /etc/bash/bashrc
export PS1="[\u@\h \w]\$ "
fi

## Zsh settings
if [ -n "${ZSH_VERSION-}" ]; then
[ -f /etc/zsh/zprofile ] && source /etc/zsh/zprofile
[ ! -e ${ZSH} ] && \
rawGH="https://raw.githubusercontent.com/robbyrussell/oh-my-zsh" && \
curl -fsSL $rawGH/master/tools/install.sh | sh
export PS1="[%n@%m %1d]$ "
fi

## Cleanup
unset ROOTPATH
unset sh

+ 49
- 0
etc/profile.d/alias.sh View File

@@ -0,0 +1,49 @@
# /etc/profile.d/alias.sh

## cp
alias cp="cp -ip"
alias cr="cp -ipr"

## curl
alias hurl="curl -f#LO"

## df
alias df="df -h"
alias di="df -hi"

## free
alias free="free -h"

## ls
ls="-hSF --group-directories-first --color=auto"
alias l="ls -C $ls"
alias la="ls -aC $ls"
alias ll="ls -al $ls"
alias ls="ls -C $ls"

## mkdir
alias mkdir="mkdir -vp"

## mv
alias mv="mv -i"

## rm
alias rf="rm -rf"
alias rm="rm -i"
alias rr="rm -ir"

## tar
mktgz() {
tar -cfz $1.tar.gz $@
}
mktxz() {
tar -cfJ $1.tar.xz $@
}
alias untar="tar -xf"


### Extras #######################################

weather() {
curl http://wttr.in/$1
}

+ 49
- 0
etc/profile.d/env.sh View File

@@ -0,0 +1,49 @@
# /etc/profile.d/env.sh

## Environment variables
export ARCHFLAGS="-arch x86_64"
export EDITOR="emacs -Q -nw"
export HISTTIMEFORMAT="(%m/%d/%y) %T "
export LANG="en_US.UTF-8"
export PAGER="${PAGER:-/usr/bin/less}"
export PROMPT_COMMAND="history -a"
export PS1="[\u@\h \w]\$ "
export SSH_KEY_PATH="${HOME}/.ssh/rsa_id"
export TERM="xterm"

## Golang
GOPATH="$HOME/.go"
GOBIN="$GOPATH/bin"
GODOC="$GOPATH/doc"
export GOBIN GODOC GOPATH

## Racket
RKTROOT="/usr/racket:/usr/local/racket:$HOME/racket:$HOME/.racket"
RKTPATH="$RKTROOT/bin"
RKTMAN="$RKTROOT/man"

## Path
CODEPATH="$GOBIN:$RKTPATH"
GLOBALPATH="/usr/local/sbin/:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin"
LOCALPATH="$HOME/.local/bin:$HOME/.bin:$HOME/bin"
export PATH="$GLOBALPATH:$LOCALPATH:$CODEPATH"

## Man
PROGMAN="$RKTMAN"
GLOBALMAN="/usr/man:/usr/share/man:/usr/local/man:/usr/local/share/man"
LOCALMAN="$HOME/.local/man:$HOME/.local/share/man"
export MANPATH="$GLOBALMAN:$LOCALMAN:$PROGMAN"

if [ $(whoami) != 'root' ]; then
## Create missing directories
[ -d $HOME/Documents ] || mkdir $HOME/Documents
[ -d $HOME/Downloads ] || mkdir $HOME/Downloads
[ -d $HOME/Music ] || mkdir $HOME/Music
[ -d $HOME/Pictures ] || mkdir $HOME/Pictures
[ -d $HOME/Projects ] || mkdir $HOME/Projects
[ -d $HOME/Templates ] || mkdir $HOME/Templates
[ -d $HOME/Videos ] || mkdir $HOME/Videos

## Add missing configuration
[ ! -e $HOME/.xinitrc ] && cp /etc/xinitrc $HOME/.xinitrc
fi

+ 103
- 8
etc/profile.d/gein.sh View File

@@ -1,9 +1,104 @@
#!/bin/env sh

gein-update() {
emerge --sync
emerge -av -uDN @system
emerge -av -uDN @world
emerge -av depclean
revdep-rebuild -av
# /etc/profile.d/gein.sh

gein() {
if [ $EUID -ne 0 ]; then
echo "gein: Current user has insufficient permissions"
if [ -e $(command -v sudo) ]; then
echo "gein: Found 'sudo' to proceed"
SU="sudo"
else
echo "gein: Fallback to 'su' to proceed"
SU="su -c"
fi
fi

case $1 in
sync|-s)
$SU emerge -v --sync
;;

install|-i)
$SU emerge -av --quiet-build ${@:2}
;;

remove|-r)
$SU emerge -avc --quiet-build ${@:2} && \
$SU revdep-rebuild -q
;;

update|-u)
$SU emerge -avuDU \
--keep-going --with-bdeps=y --quiet-build @world && \
$SU revdep-rebuild -q
;;

upgrade|-U)
$SU emerge -avuDN --quiet-build @system && \
$SU revdep-rebuild -q
;;

clean|-c)
$SU emerge -avuDN --quiet-build @world && \
$SU eclean --deep distfiles && \
$SU revdep-rebuild -q
;;

purge|-p)
$SU gein -r $(qlist -CI ${@:2})
$SU revdep-rebuild -q
;;

reconfig|-R)
Source="https://raw.githubusercontent.com/Gein/GeinOS/master"
Files="
/etc/portage/repos.conf/gentoo.conf
/etc/portage/make.conf
/etc/portage/package.accept_keywords
/etc/portage/package.env
/etc/portage/package.license
/etc/portage/package.use
/etc/profile
/etc/profile.d/alias.sh
/etc/profile.d/gein.sh
/etc/profile.d/environment.sh
/etc/Xresources
/etc/emacs/default.el
/etc/i3/config
/etc/sudoers
/etc/tmux.conf
/etc/vimrc
/etc/xinitrc
"

echo "gein: WARNING: This will overwrite the following scripts:"
for cfg in $Files; do echo $cfg; done
read -ep "Proceed with replacing configurations? [Y/N]: " Proceed
if echo $Proceed | grep -iq "^n"; then exit; fi

MakeOpts=`grep MAKEOPTS /etc/portage/make.conf|sed 's/.*MAKEOPTS=//'`
VideoCards=`grep VIDEO_CARDS /etc/portage/make.conf|sed 's/.*VIDEO_CARDS=//'`

for cfg in $Files; do
$SU wget -q $Source/$cfg -O $cfg
done

$SU sed -i "s/MAKEOPTS=.*/MAKEOPTS=$MakeOpts/g;
s/VIDEO_CARDS=.*/VIDEO_CARDS=$VideoCards/g" \
/etc/portage/make.conf

unset Source MakeOpts VideoCards
;;

*)
echo "gein: Available options:"
echo " -c, clean Remove unneeded packages"
echo " -i, install Install a package"
echo " -p, purge Remove unneeded packages"
echo " -r, remove Safely remove a package"
echo " -s, sync Sync portage"
echo " -u, update Update @world without rebuild"
echo " -U, upgrade Update @system and @world with rebuild"
echo " -C config Get latest configuration files"
;;
esac
}

+ 93
- 2
etc/sudoers View File

@@ -1,6 +1,97 @@
# /etc/sudoers
## sudoers file.
##
## This file MUST be edited with the 'visudo' command as root.
## Failure to use 'visudo' may result in syntax or file permission errors
## that prevent sudo from running.
##
## See the sudoers man page for the details on how to write a sudoers file.
##

##
## Host alias specification
##
## Groups of machines. These may include host names (optionally with wildcards),
## IP addresses, network numbers or netgroups.
# Host_Alias WEBSERVERS = www1, www2, www3

##
## User alias specification
##
## Groups of users. These may consist of user names, uids, Unix groups,
## or netgroups.
# User_Alias ADMINS = millert, dowdy, mikef

##
## Cmnd alias specification
##
## Groups of commands. Often used to group related commands together.
# Cmnd_Alias PROCESSES = /usr/bin/nice, /bin/kill, /usr/bin/renice, \
# /usr/bin/pkill, /usr/bin/top
# Cmnd_Alias REBOOT = /sbin/halt, /sbin/reboot, /sbin/poweroff

##
## Defaults specification
##
## You may wish to keep some of the following environment variables
## when running commands via sudo.
##
## Locale settings
# Defaults env_keep += "LANG LANGUAGE LINGUAS LC_* _XKB_CHARSET"
##
## Run X applications through sudo; HOME is used to find the
## .Xauthority file. Note that other programs use HOME to find
## configuration files and this may lead to privilege escalation!
# Defaults env_keep += "HOME"
##
## X11 resource path settings
# Defaults env_keep += "XAPPLRESDIR XFILESEARCHPATH XUSERFILESEARCHPATH"
##
## Desktop path settings
# Defaults env_keep += "QTDIR KDEDIR"
##
## Allow sudo-run commands to inherit the callers' ConsoleKit session
# Defaults env_keep += "XDG_SESSION_COOKIE"
##
## Uncomment to enable special input methods. Care should be taken as
## this may allow users to subvert the command being run via sudo.
# Defaults env_keep += "XMODIFIERS GTK_IM_MODULE QT_IM_MODULE QT_IM_SWITCHER"
##
## Uncomment to use a hard-coded PATH instead of the user's to find commands
# Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
##
## Uncomment to send mail if the user does not enter the correct password.
# Defaults mail_badpass
##
## Uncomment to enable logging of a command's output, except for
## sudoreplay and reboot. Use sudoreplay to play back logged sessions.
# Defaults log_output
# Defaults!/usr/bin/sudoreplay !log_output
# Defaults!/usr/local/bin/sudoreplay !log_output
# Defaults!REBOOT !log_output

##
## Runas alias specification
##

##
## User privilege specification
##
root ALL=(ALL) ALL

## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL
%wheel ALL=(ALL) NOPASSWD: /sbin/poweroff,/sbin/restart,/sbin/shutdown

## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL

## Uncomment to allow members of group sudo to execute any command
# %sudo ALL=(ALL) ALL

## Uncomment to allow any user to run sudo if they know the password
## of the user they are running the command as (root by default).
# Defaults targetpw # Ask for the password of the target user
# ALL ALL=(ALL) ALL # WARNING: only use this together with 'Defaults targetpw'

## Read drop-in files from /etc/sudoers.d
## (the '#' here does not indicate a comment)
#includedir /etc/sudoers.d

+ 61
- 0
etc/tmux.conf View File

@@ -0,0 +1,61 @@
# /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 a 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

+ 171
- 0
etc/vimrc View File

@@ -0,0 +1,171 @@
" /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 | source $MYVIMRC
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 = ','

"
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
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>

"
set pastetoggle=<F2>
set listchars=tab:\|.,trail:.,extends:#,nbsp:.

" Write target file as sudo using 'tee' buffer
function SudoWrite()
w !sudo tee %
endfunction


""" 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'
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+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
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' " Go development plugin for Vim
let g:go_auto_type_info = 1
let g:go_highlight_functions = 1
let g:go_highlight_methods = 1
let g:go_highlight_structs = 1
let g:go_highlight_interfaces = 1
let g:go_highlight_operators = 1
let g:go_highlight_build_constraints = 1
let g:go_highlight_extra_types = 1


""" 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
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()

+ 3
- 0
etc/xinitrc View File

@@ -0,0 +1,3 @@
# /etc/xinitrc

exec i3

+ 0
- 259
gein View File

@@ -1,259 +0,0 @@
#!/usr/bin/env sh

## Commands
Emerge="emerge -q"
Read="read -ep"

## Gein Settings
Gein_Extras="enable"
Grub_Target="/dev/sda"
Hostname="gein"
Locale="en_US.UTF-8 UTF-8"
Swap_Size="4G"
Time_Zone="America/New_York"
Video_Cards="intel"

## Gentoo Settings
Base_Url="https://raw.githubusercontent.com/jcmdln/gein/master"
#Kernel_Config="$Base_Url/usr/src/linux/4.12-config"
Make_Conf="$Base_Url/etc/portage/make.conf"
#Package_Env="$Base_Url/etc/portage/package.env"
Package_Use="$Base_Url/etc/portage/package.use"
Stage3_Arch="amd64"
Stage3_Date="20171004"
Stage3_Vers="${Stage3_Arch}-musl-vanilla"
Stage3_Url="http://distfiles.gentoo.org/experimental/"


Bootstrap() {
## Confirm the user has setup their disks
echo "Please ensure that you have performed the following: "
echo " - Edited the environment variables at the top of this script."
echo " - Partitioned and mounted your disk(s)."
$Read "Proceed with installation? [Y/N]: " Proceed && \
if echo $Proceed | grep -iq "^n"; then exit; fi &&

## Set time via ntpd
ntpd -q -g &&

## Download and extract stage3 tarball
cd /mnt/gentoo && \
wget ${Stage3_Url}/${Stage3_Arch}/musl/stage3-${Stage3_Vers}-${Stage3_Date}.tar.bz2 && \
tar xvjpf stage3-*.tar.bz2 --xattrs --numeric-owner &&

## Mount hardware devices
mount -t proc /proc /mnt/gentoo/proc && \
mount --rbind /sys /mnt/gentoo/sys && \
mount --make-rslave /mnt/gentoo/sys && \
mount --rbind /dev /mnt/gentoo/dev && \
mount --make-rslave /mnt/gentoo/dev &&

## Setup '/swapfile'
Swap_File="/mnt/gentoo/swapfile"
if [ ! -e $Swap_File ]; then
fallocate -l $Swap_Size $Swap_File && \
mkswap $Swap_File && \
chmod 0600 $Swap_File && \
swapon $Swap_File
fi &&

## Configure Portage
if [ ! -z $Make_Conf ]; then
wget $Make_Conf -O /mnt/gentoo/etc/portage/make.conf
fi && \
if [ ! -z $Package_Use ]; then
rm -rf /mnt/gentoo/etc/portage/package.use && \
wget $Package_Use -O /mnt/gentoo/etc/portage/package.use
fi && \
if [ ! -z $Package_Env ]; then
wget $Package_Env -O /mnt/gentoo/etc/portage/package.env
fi &&

## Setup Portage mirrors
mkdir -vp /mnt/gentoo/etc/portage/repos.conf && \
cp -v /mnt/gentoo/usr/share/portage/config/repos.conf \
/mnt/gentoo/etc/portage/repos.conf/gentoo.conf && \
cp -vL /etc/resolv.conf /mnt/gentoo/etc/ &&

## Add 'gein-extras' script
if [ ! -z $Gein_Extras ]; then
mkdir -vp /mnt/gentoo/usr/local/sbin && \
wget $Base_URL/usr/local/sbin/gein-extras \
-O /mnt/gentoo/usr/local/sbin/gein-extras && \
chmod +x /mnt/gentoo/usr/local/sbin/gein-extras
fi &&

## Chroot into '/mnt/gentoo'
cd /mnt/gentoo && \
printf "#\n# chroot'ing into /mnt/gentoo...\n#\n" && \
chroot /mnt/gentoo /bin/bash
}


Minimal() {
## Adjust make.conf to store the specified video card and # of CPU cores
sed -i "s/Video_Cards/${Video_Cards}/g;
s/Make_Opts/-j$(grep -c ^processor /proc/cpuinfo)/g" \
/etc/portage/make.conf &&

## Reload profile and update PS1
source /etc/profile && \
export PS1="(chroot) $PS1" &&

## Sync Portage and select profile
emerge-webrsync && \
$Emerge --sync && \
$Emerge app-portage/layman \
dev-vcs/git && \
layman -a musl && \
eselect profile list && \
$Read "Which profile? [Default is 1]: " Target_Profile && \
[ -z $Target_Profile ] && Target_Profile="1"
eselect profile set $Target_Profile && \
$Emerge --update --deep --newuse @world &&

## Set desired timezone
echo "${Time_Zone}" > /etc/timezone && \
emerge --config sys-libs/timezone-data &&

## Set desired locales
echo "${Locale}" > /etc/locale.gen && \
locale-gen && \
locale -a && \
eselect locale list && \
$Read "Target locale: " Target_Locale && \
eselect locale set ${Target_Locale} &&

## Update environment
env-update && \
source /etc/profile && \
export PS1="(chroot) $PS1" &&

## Emerge/install Linux kernel and modules
$Emerge sys-kernel/gentoo-sources \
sys-kernel/linux-firmware \
sys-apps/pciutils \
sys-kernel/genkernel && \
if grep -Rqi 'intel' /proc/cpuinfo; then
$Emerge intel-microcode
fi && \
cd /usr/src/linux && \
if [ -z $Kernel_Config ]; then
make defconfig && \
make menuconfig
else
wget $Kernel_config -O /usr/src/linux/.config
fi && \
make && \
make modules_install && \
make install && \
genkernel --install initramfs &&

## Configure '/etc/fstab/'
echo "/swapfile none swap sw 0 0" >> /etc/fstab && \
nano /etc/fstab &&

## Install neworking packages &
$Emerge --noreplace net-misc/netifrc && \
$Emerge net-misc/dhcpcd &&