Populate dotfiles repository

This commit is contained in:
coolneng 2019-03-24 15:03:56 +01:00
commit 9aae1daa1c
158 changed files with 19135 additions and 0 deletions

9
.gitignore vendored Normal file
View File

@ -0,0 +1,9 @@
# Ignore logs
tmux/.tmux/resurrect/
tmux/.tmux/plugins/tmux-sessionist
weechat/.weechat/logs
weechat/**/*.log
mpd/.mpd
!mpd/.mpd/playlists
emacs/.emacs.d/.cache/layouts/persp-auto-*
vim/.vim/.netrwhist

5
README.md Normal file
View File

@ -0,0 +1,5 @@
# Dotfiles
Compilation of my essential configs, managed with GNU stow
**oekk** now you can finally enjoy yourself

View File

@ -0,0 +1,19 @@
*background: #312e39
*foreground: #c0a79a
*cursorColor: #554757
*color0: #33303b
*color1: #87404f
*color2: #4c9882
*color3: #71949a
*color4: #615772
*color5: #783e57
*color6: #554757
*color7: #c0a79a
*color8: #4f4b58
*color9: #87404f
*color10: #4c9882
*color11: #71949a
*color12: #615772
*color13: #783e57
*color14: #554757
*color15: #c0a79a

View File

@ -0,0 +1,28 @@
Xft.autohint : 0
Xft.lcdfilter : lcddefault
Xft.hintstyle : hintslight
Xft.hinting : 1
!Xft.antialias : 1
Xft.rgba : rgb
Xcursor.size : 16
!URxvt.font: xft:Iosevka Term Slab Medium:size=11
URxvt*font: -uw-ttyp0-medium-r-normal--13-*-*-*-*-*-iso8859-1
URxvt*boldFont: -uw-ttyp0-bold-r-normal--13-*-*-*-*-*-iso8859-1
URxvt.iso14755: false
URxvt.geometry: 72x18
URxvt*letterSpace: 0
URxvt.lineSpace: 0
URxvt*depth: 32
URxvt*saveline: 2000
URxvt*termName: rxvt-256color
URxvt*iso14755: false
URxvt*scrollBar: false
URxvt*scrollBar_right: false
URxvt.perl-ext-common: default,clipboard,url-select
URxvt.keysym.Shift-Control-V: eval:paste_clipboard
URxvt.keysym.Shift-Control-C: eval:selection_to_clipboard
URxvt.urlLauncher: firefox
URxvt.underlineURLs: true
URxvt.urlButton: 1
URxvt*buffered: false
URxvt*urgentOnBell: true

View File

@ -0,0 +1,74 @@
# Compton config
backend = "glx"; # Enables Opengl backend
paint-on-overlay = true; # These 3 can improve performance, work well in most cases
glx-no-stencil = true;
glx-no-rebind-pixmap = true;
glx-swap-method = true;
vsync = "opengl-mswc"; # Enables one of the vsync methods. Check here for more info: https://github.com/chjj/compton/wiki/vsync-guide
unredir-if-possible = true;
# Shadow
shadow = true; # Enabled client-side shadows on windows.
no-dock-shadow = true; # Avoid drawing shadows on dock/panel windows.
no-dnd-shadow = true; # Don't draw shadows on DND windows.
clear-shadow = true; # Zero the part of the shadow's mask behind the window (experimental).
shadow-radius = 7; # The blur radius for shadows. (default 12)
shadow-offset-x = -7; # The left offset for shadows. (default -15)
shadow-offset-y = -7; # The top offset for shadows. (default -15)
shadow-exclude = [
"! name~=''",
"name *= 'compton'",
"name *= 'chromium-browser'",
"name *= 'Chrome'",
"name *= 'mpv'",
"class_g = 'Conky'",
"_GTK_FRAME_EXTENTS@:c"
];
# Blur
blur-background = true;
blur-method = "kawase";
blur-strength = 9;
# Blur background of opaque windows with transparent frames as well.
blur-background-frame = true;
# Do not let blur radius adjust based on window opacity.
blur-background-fixed = true;
blur-background-exclude = [
"window_type = 'desktop'",
"class_g *?= 'chromium-browser'",
"class_g *?= 'mpv'"
];
# Fading
fading = true; # Fade windows during opacity changes.
fade-delta = 4; # The time between steps in a fade in milliseconds. (default 10).
fade-in-step = 0.03; # Opacity change between steps while fading in. (default 0.028).
fade-out-step = 0.03; # Opacity change between steps while fading out. (default 0.03).
# Opacity
menu-opacity = 1;
inactive-opacity = 1;
active-opacity = 1;
frame-opacity = 1;
inactive-opacity-override = false;
alpha-step = 0.06;
opacity-rule = [
"95:class_g *?='urxvt'",
"95:class_g *?='zathura'",
"95:class_g *?='emacs'"
];
# Window type settings
# Disables shadows on tooltips and enables fading on tooltips
wintypes:
{
tooltip = {
fade = true;
shadow = false;
};
};

90
conky/.conkyrc Normal file
View File

@ -0,0 +1,90 @@
conky.config = {
--======================== Aqua-rings-110.conkyrc ========================================
--
-- Heavily modified version of SunForMiles.conkyrc;
-- Ported to Conky v1.10;
-- Removed unecessary ${font} calls, tweaked positions, colours etc;
-- Added BL forum atomfeed;
-- Designed to complement BunsenLabs Beam desktop themeing
--
-- by damo, July2017 <damo.linux@gmail.com>
--
--======================= Modification of ================================================
-- SunForMiles.conkyrc
-- Date : 05 July 2017
-- Author : Sun For Miles
-- Version : v0.41
-- License : Distributed under the terms of GNU GPL version 2 or later
--
-- This version is a modification of conkyrc_seamod, which is modification of conkyrc_lunatico,
-- which is modification of conkyrc_orange
--
-- conkyrc_orange: http://gnome-look.org/content/show.php?content=137503&forumpage=0
-- conkyrc_lunatico: http://gnome-look.org/content/show.php?content=142884
-- conkyrc_seamod: http://custom-linux.deviantart.com/art/Conky-Seamod-v0-1-283461046
--=============================================================================================
background = true,
update_interval = 1,
cpu_avg_samples = 1,
net_avg_samples = 2,
temperature_unit = 'celsius',
double_buffer = true,
no_buffers = true,
text_buffer_size = 2048,
gap_x = 40,
gap_y = 20,
minimum_width = 150, minimum_height = 600,
maximum_width = 300,
own_window = true,
own_window_transparent = true,
own_window_argb_visual = true,
own_window_type = 'desktop',
own_window_hints = 'undecorated,sticky,skip_taskbar,skip_pager,below',
border_inner_margin = 30,
border_outer_margin = 0,
alignment = 'top_right',
draw_shades = false,
draw_outline = false,
draw_borders = false,
draw_graph_borders = false,
override_utf8_locale = true,
use_xft = true,
--font = 'caviar dreams:size=10',
--font = 'Roboto Condensed:size=14',
font = 'Roboto Condensed:size=9',
xftalpha = 0.5,
uppercase = false,
-- Defining colors
default_color = '#FFFFFF',
-- Shades of Gray
color1 = 'DDDDDD',
color2 = 'AAAAAA',
color3 = '888888',
color4 = '678b8b',
color5 = '284f63',
color6 = '617b78',
color7 = '668989',
color8 = 'dae1e3',
color9 = '6B9083',
};
conky.text = [[
# Showing disk partitions: root, home and Data. Edit paths as required for your system
${voffset 10}
#${voffset -10}${font}${color3}CPU1: ${cpu cpu0}% ${cpubar cpu0}
#${voffset -5}${font}${color3}CPU2: ${cpu cpu1}% ${cpubar cpu1}
#${voffset 0}${font}${color3}RAM: ${memperc}% ${mem}/${memmax} ${membar}
${font Roboto Condensed:size=11:style=bold}${color4}${alignr}EMMC
${voffset 15}${alignr}${diskiograph 20,180 666666 68364B -t -l}
${voffset 0}
${offset 100}${font}${color3}Free: ${fs_free /}${alignr}Used: ${fs_used /}
# End
]];

View File

@ -0,0 +1,2 @@
;; -*- mode: emacs-lisp; eval: (progn (pp-buffer) (indent-buffer)) -*-
((def-persp "AIML" ((def-buffer "streaming.aiml" "/home/coolneng/Documents/Uni/IA/Code/P1/examples/streaming.aiml" web-mode) (def-buffer "Descripcion_Series_Practica.txt" "/home/coolneng/Documents/Uni/IA/Code/P1/programAB/Descripcion_Series_Practica.txt" text-mode) (def-buffer "seriesnetflix.txt" "/home/coolneng/Documents/Uni/IA/Code/P1/programAB/bots/mybot/sets/seriesnetflix.txt" text-mode) (def-buffer "plataforma.txt" "/home/coolneng/Documents/Uni/IA/Code/P1/programAB/bots/mybot/sets/plataforma.txt" text-mode) (def-buffer "agente.aiml" "/home/coolneng/Documents/Uni/IA/Code/P1/programAB/bots/mybot/aiml/agente.aiml" web-mode)) (def-wconf (((min-height . 4) (min-width . 20) (min-height-ignore . 3) (min-width-ignore . 10) (min-height-safe . 1) (min-width-safe . 4) (min-pixel-height . 68) (min-pixel-width . 140) (min-pixel-height-ignore . 51) (min-pixel-width-ignore . 70) (min-pixel-height-safe . 17) (min-pixel-width-safe . 28)) hc (pixel-width . 1366) (pixel-height . 707) (total-width . 195) (total-height . 42) (normal-height . 1.0) (normal-width . 1.0) (combination-limit) (leaf (pixel-width . 683) (pixel-height . 707) (total-width . 97) (total-height . 42) (normal-height . 1.0) (normal-width . 0.5) (buffer "streaming.aiml" (selected) (hscroll . 0) (fringes 8 8 nil) (margins nil) (scroll-bars nil 0 t nil 0 t) (vscroll . 0) (dedicated) (point . 206) (start . 1))) (leaf (last . t) (pixel-width . 683) (pixel-height . 707) (total-width . 98) (total-height . 42) (normal-height . 1.0) (normal-width . 0.5) (buffer "agente.aiml" (selected . t) (hscroll . 0) (fringes 8 8 nil) (margins nil) (scroll-bars nil 0 t nil 0 t) (vscroll . 0) (dedicated) (point . 610) (start . 1))))) (def-params ((persp-file . "/home/coolneng/.emacs.d/.cache/layouts/AIML") (gui-eyebrowse-last-slot . 1) (gui-eyebrowse-current-slot . 1) (gui-eyebrowse-window-configs (1 (((min-height . 4) (min-width . 20) (min-height-ignore . 3) (min-width-ignore . 10) (min-height-safe . 1) (min-width-safe . 4) (min-pixel-height . 68) (min-pixel-width . 140) (min-pixel-height-ignore . 51) (min-pixel-width-ignore . 70) (min-pixel-height-safe . 17) (min-pixel-width-safe . 28)) hc (pixel-width . 1366) (pixel-height . 707) (total-width . 195) (total-height . 42) (normal-height . 1.0) (normal-width . 1.0) (combination-limit) (leaf (pixel-width . 683) (pixel-height . 707) (total-width . 97) (total-height . 42) (normal-height . 1.0) (normal-width . 0.5) (buffer "streaming.aiml" (selected) (hscroll . 0) (fringes 8 8 nil) (margins nil) (scroll-bars nil 0 t nil 0 t) (vscroll . 0) (dedicated) (point . 206) (start . 1))) (leaf (last . t) (pixel-width . 683) (pixel-height . 707) (total-width . 98) (total-height . 42) (normal-height . 1.0) (normal-width . 0.5) (buffer "agente.aiml" (selected . t) (hscroll . 0) (fringes 8 8 nil) (margins nil) (scroll-bars nil 0 t nil 0 t) (vscroll . 0) (dedicated) (point . 610) (start . 1)))) "")))) nil nil nil))

View File

@ -0,0 +1,2 @@
;; -*- mode: emacs-lisp; eval: (progn (pp-buffer) (indent-buffer)) -*-
((def-persp "C++" ((def-buffer "Misc" "~/Documents/Uni/FP-2.0/CPP/Misc/" dired-mode)) (def-wconf (((min-height . 4) (min-width . 20) (min-height-ignore . 3) (min-width-ignore . 10) (min-height-safe . 1) (min-width-safe . 4) (min-pixel-height . 68) (min-pixel-width . 140) (min-pixel-height-ignore . 51) (min-pixel-width-ignore . 70) (min-pixel-height-safe . 17) (min-pixel-width-safe . 28)) hc (pixel-width . 1366) (pixel-height . 707) (total-width . 195) (total-height . 42) (normal-height . 1.0) (normal-width . 1.0) (combination-limit) (leaf (pixel-width . 683) (pixel-height . 707) (total-width . 97) (total-height . 42) (normal-height . 1.0) (normal-width . 0.5) (buffer "Misc" (selected . t) (hscroll . 0) (fringes 8 8 nil) (margins nil) (scroll-bars nil 0 t nil 0 t) (vscroll . 0) (dedicated) (point . 568) (start . 1))) (leaf (last . t) (pixel-width . 683) (pixel-height . 707) (total-width . 98) (total-height . 42) (normal-height . 1.0) (normal-width . 0.5) (buffer "*ansi-term-1*" (selected) (hscroll . 0) (fringes 8 8 nil) (margins nil) (scroll-bars nil 0 t nil 0 t) (vscroll . 0) (dedicated) (point . 3702) (start . 3379))))) (def-params ((gui-eyebrowse-window-configs (1 (((min-height . 4) (min-width . 20) (min-height-ignore . 3) (min-width-ignore . 10) (min-height-safe . 1) (min-width-safe . 4) (min-pixel-height . 68) (min-pixel-width . 140) (min-pixel-height-ignore . 51) (min-pixel-width-ignore . 70) (min-pixel-height-safe . 17) (min-pixel-width-safe . 28)) hc (pixel-width . 1366) (pixel-height . 707) (total-width . 195) (total-height . 42) (normal-height . 1.0) (normal-width . 1.0) (combination-limit) (leaf (pixel-width . 683) (pixel-height . 707) (total-width . 97) (total-height . 42) (normal-height . 1.0) (normal-width . 0.5) (buffer "Misc" (selected . t) (hscroll . 0) (fringes 8 8 nil) (margins nil) (scroll-bars nil 0 t nil 0 t) (vscroll . 0) (dedicated) (point . 568) (start . 1))) (leaf (last . t) (pixel-width . 683) (pixel-height . 707) (total-width . 98) (total-height . 42) (normal-height . 1.0) (normal-width . 0.5) (buffer "*ansi-term-1*" (selected) (hscroll . 0) (fringes 8 8 nil) (margins nil) (scroll-bars nil 0 t nil 0 t) (vscroll . 0) (dedicated) (point . 3702) (start . 3379)))) "")) (gui-eyebrowse-current-slot . 1) (gui-eyebrowse-last-slot . 1) (persp-file . "/home/coolneng/.emacs.d/.cache/layouts/C++"))) nil nil nil))

View File

@ -0,0 +1,123 @@
;; -*- mode: emacs-lisp; eval: (progn (pp-buffer) (indent-buffer)) -*-
((def-persp "Dots"
((def-buffer ".spacemacs<emacs>" "/home/coolneng/.dotfiles/emacs/.spacemacs" emacs-lisp-mode)
(def-buffer ".spacemacs<Spacemacs dani>" "/home/coolneng/Documents/IT/Spacemacs dani/.spacemacs" emacs-lisp-mode))
(def-wconf
(((min-height . 4)
(min-width . 20)
(min-height-ignore . 3)
(min-width-ignore . 10)
(min-height-safe . 1)
(min-width-safe . 4)
(min-pixel-height . 68)
(min-pixel-width . 140)
(min-pixel-height-ignore . 51)
(min-pixel-width-ignore . 70)
(min-pixel-height-safe . 17)
(min-pixel-width-safe . 28))
hc
(pixel-width . 1366)
(pixel-height . 707)
(total-width . 195)
(total-height . 42)
(normal-height . 1.0)
(normal-width . 1.0)
(combination-limit)
(leaf
(pixel-width . 683)
(pixel-height . 707)
(total-width . 97)
(total-height . 42)
(normal-height . 1.0)
(normal-width . 0.5)
(buffer ".spacemacs<Spacemacs dani>"
(selected)
(hscroll . 0)
(fringes 8 8 nil)
(margins nil)
(scroll-bars nil 0 t nil 0 t)
(vscroll . 0)
(dedicated)
(point . 22948)
(start . 22556)))
(leaf
(last . t)
(pixel-width . 683)
(pixel-height . 707)
(total-width . 98)
(total-height . 42)
(normal-height . 1.0)
(normal-width . 0.5)
(buffer ".spacemacs<emacs>"
(selected . t)
(hscroll . 0)
(fringes 8 8 nil)
(margins nil)
(scroll-bars nil 0 t nil 0 t)
(vscroll . 0)
(dedicated)
(point . 2687)
(start . 2395)))))
(def-params
((gui-eyebrowse-window-configs
(1
(((min-height . 4)
(min-width . 20)
(min-height-ignore . 3)
(min-width-ignore . 10)
(min-height-safe . 1)
(min-width-safe . 4)
(min-pixel-height . 68)
(min-pixel-width . 140)
(min-pixel-height-ignore . 51)
(min-pixel-width-ignore . 70)
(min-pixel-height-safe . 17)
(min-pixel-width-safe . 28))
hc
(pixel-width . 1366)
(pixel-height . 707)
(total-width . 195)
(total-height . 42)
(normal-height . 1.0)
(normal-width . 1.0)
(combination-limit)
(leaf
(pixel-width . 683)
(pixel-height . 707)
(total-width . 97)
(total-height . 42)
(normal-height . 1.0)
(normal-width . 0.5)
(buffer ".spacemacs<Spacemacs dani>"
(selected)
(hscroll . 0)
(fringes 8 8 nil)
(margins nil)
(scroll-bars nil 0 t nil 0 t)
(vscroll . 0)
(dedicated)
(point . 22948)
(start . 22556)))
(leaf
(last . t)
(pixel-width . 683)
(pixel-height . 707)
(total-width . 98)
(total-height . 42)
(normal-height . 1.0)
(normal-width . 0.5)
(buffer ".spacemacs<emacs>"
(selected . t)
(hscroll . 0)
(fringes 8 8 nil)
(margins nil)
(scroll-bars nil 0 t nil 0 t)
(vscroll . 0)
(dedicated)
(point . 2687)
(start . 2395))))
""))
(gui-eyebrowse-current-slot . 1)
(gui-eyebrowse-last-slot . 1)
(persp-file . "/home/coolneng/.emacs.d/.cache/layouts/Dots")))
nil nil nil))

543
emacs/.spacemacs Normal file
View File

@ -0,0 +1,543 @@
;; -*- mode: emacs-lisp; lexical-binding: t -*-
;; This file is loaded by Spacemacs at startup.
;; It must be stored in your home directory.
(defun dotspacemacs/layers ()
"Layer configuration:
This function should only modify configuration layer settings."
(setq-default
;; Base distribution to use. This is a layer contained in the directory
;; `+distribution'. For now available distributions are `spacemacs-base'
;; or `spacemacs'. (default 'spacemacs)
dotspacemacs-distribution 'spacemacs-base
;; Lazy installation of layers (i.e. layers are installed only when a file
;; with a supported type is opened). Possible values are `all', `unused'
;; and `nil'. `unused' will lazy install only unused layers (i.e. layers
;; not listed in variable `dotspacemacs-configuration-layers'), `all' will
;; lazy install any layer that support lazy installation even the layers
;; listed in `dotspacemacs-configuration-layers'. `nil' disable the lazy
;; installation feature and you have to explicitly list a layer in the
;; variable `dotspacemacs-configuration-layers' to install it.
;; (default 'unused)
dotspacemacs-enable-lazy-installation 'unused
;; If non-nil then Spacemacs will ask for confirmation before installing
;; a layer lazily. (default t)
dotspacemacs-ask-for-lazy-installation t
;; If non-nil layers with lazy install support are lazy installed.
;; List of additional paths where to look for configuration layers.
;; Paths must have a trailing slash (i.e. `~/.mycontribs/')
dotspacemacs-configuration-layer-path '()
;; List of configuration layers to load.
dotspacemacs-configuration-layers '(
;; ----------------------------------------------------------------
;; Example of useful layers you may want to use right away.
;; Uncomment some layer names and press `SPC f e R' (Vim style) or
;; `M-m f e R' (Emacs style) to install them.
;; ----------------------------------------------------------------
ivy
(auto-completion :variables
auto-completion-return-key-behavior 'complete
auto-completion-tab-key-behavior 'cycle)
;; better-defaults
emacs-lisp
git
markdown
html
;; org
(shell :variables
shell-default-height 30
shell-default-position 'bottom)
;; spell-checking
syntax-checking
;; version-control
(cmake :variables cmake-enable-cmake-ide-support 't)
(c-c++ :variables
c-c++-enable-clang-support 't
c-c++-default-mode-for-headers 'c++-mode)
java
shell-scripts
spacemacs-layouts
debug
;;ibuffer
)
;; List of additional packages that will be installed without being
;; wrapped in a layer. If you need some configuration for these
;; packages, then consider creating a layer. You can also put the
;; configuration in `dotspacemacs/user-config'.
;; To use a local version of a package, use the `:location' property:
;; '(your-package :location "~/path/to/your-package/")
;; Also include the dependencies as they will not be resolved automatically.
dotspacemacs-additional-packages '(
zerodark-theme
plan9-theme
winum
smartparens
company-irony
company-irony-c-headers
flycheck-irony
)
;; A list of packages that cannot be updated.
dotspacemacs-frozen-packages '()
;; A list of packages that will not be installed and loaded.
dotspacemacs-excluded-packages '()
;; Defines the behaviour of Spacemacs when installing packages.
;; Possible values are `used-only', `used-but-keep-unused' and `all'.
;; `used-only' installs only explicitly used packages and deletes any unused
;; packages as well as their unused dependencies. `used-but-keep-unused'
;; installs only the used packages but won't delete unused ones. `all'
;; installs *all* packages supported by Spacemacs and never uninstalls them.
;; (default is `used-only')
dotspacemacs-install-packages 'used-only))
(defun dotspacemacs/init ()
"Initialization:
This function is called at the very beginning of Spacemacs startup,
before layer configuration.
It should only modify the values of Spacemacs settings."
;; This setq-default sexp is an exhaustive list of all the supported
;; spacemacs settings.
(setq-default
;; If non-nil then enable support for the portable dumper. You'll need
;; to compile Emacs 27 from source following the instructions in file
;; EXPERIMENTAL.org at to root of the git repository.
;; (default nil)
dotspacemacs-enable-emacs-pdumper nil
;; File path pointing to emacs 27.1 executable compiled with support
;; for the portable dumper (this is currently the branch pdumper).
;; (default "emacs-27.0.50")
dotspacemacs-emacs-pdumper-executable-file "emacs-27.0.50"
;; Name of the Spacemacs dump file. This is the file will be created by the
;; portable dumper in the cache directory under dumps sub-directory.
;; To load it when starting Emacs add the parameter `--dump-file'
;; when invoking Emacs 27.1 executable on the command line, for instance:
;; ./emacs --dump-file=~/.emacs.d/.cache/dumps/spacemacs.pdmp
;; (default spacemacs.pdmp)
dotspacemacs-emacs-dumper-dump-file "spacemacs.pdmp"
;; If non-nil ELPA repositories are contacted via HTTPS whenever it's
;; possible. Set it to nil if you have no way to use HTTPS in your
;; environment, otherwise it is strongly recommended to let it set to t.
;; This variable has no effect if Emacs is launched with the parameter
;; `--insecure' which forces the value of this variable to nil.
;; (default t)
dotspacemacs-elpa-https t
;; Maximum allowed time in seconds to contact an ELPA repository.
;; (default 5)
dotspacemacs-elpa-timeout 5
;; Set `gc-cons-threshold' and `gc-cons-percentage' when startup finishes.
;; This is an advanced option and should not be changed unless you suspect
;; performance issues due to garbage collection operations.
;; (default '(100000000 0.1))
dotspacemacs-gc-cons '(100000000 0.1)
;; If non-nil then Spacelpa repository is the primary source to install
;; a locked version of packages. If nil then Spacemacs will install the
;; latest version of packages from MELPA. (default nil)
dotspacemacs-use-spacelpa nil
;; If non-nil then verify the signature for downloaded Spacelpa archives.
;; (default nil)
dotspacemacs-verify-spacelpa-archives nil
;; If non-nil then spacemacs will check for updates at startup
;; when the current branch is not `develop'. Note that checking for
;; new versions works via git commands, thus it calls GitHub services
;; whenever you start Emacs. (default nil)
dotspacemacs-check-for-update nil
;; If non-nil, a form that evaluates to a package directory. For example, to
;; use different package directories for different Emacs versions, set this
;; to `emacs-version'. (default 'emacs-version)
dotspacemacs-elpa-subdirectory 'emacs-version
;; One of `vim', `emacs' or `hybrid'.
;; `hybrid' is like `vim' except that `insert state' is replaced by the
;; `hybrid state' with `emacs' key bindings. The value can also be a list
;; with `:variables' keyword (similar to layers). Check the editing styles
;; section of the documentation for details on available variables.
;; (default 'vim)
dotspacemacs-editing-style 'vim
;; If non-nil output loading progress in `*Messages*' buffer. (default nil)
dotspacemacs-verbose-loading nil
;; Specify the startup banner. Default value is `official', it displays
;; the official spacemacs logo. An integer value is the index of text
;; banner, `random' chooses a random text banner in `core/banners'
;; directory. A string value must be a path to an image format supported
;; by your Emacs build.
;; If the value is nil then no banner is displayed. (default 'official)
dotspacemacs-startup-banner 'official
;; List of items to show in startup buffer or an association list of
;; the form `(list-type . list-size)`. If nil then it is disabled.
;; Possible values for list-type are:
;; `recents' `bookmarks' `projects' `agenda' `todos'.
;; List sizes may be nil, in which case
;; `spacemacs-buffer-startup-lists-length' takes effect.
dotspacemacs-startup-lists '((recents . 5)
(projects . 7))
;; True if the home buffer should respond to resize events. (default t)
dotspacemacs-startup-buffer-responsive t
;; Default major mode of the scratch buffer (default `text-mode')
dotspacemacs-scratch-mode 'text-mode
;; Initial message in the scratch buffer, such as "Welcome to Spacemacs!"
;; (default nil)
dotspacemacs-initial-scratch-message nil
;; List of themes, the first of the list is loaded when spacemacs starts.
;; Press `SPC T n' to cycle to the next theme in the list (works great
;; with 2 themes variants, one dark and one light)
dotspacemacs-themes '(zerodark
plan9)
;; Set the theme for the Spaceline. Supported themes are `spacemacs',
;; `all-the-icons', `custom', `doom', `vim-powerline' and `vanilla'. The
;; first three are spaceline themes. `doom' is the doom-emacs mode-line.
;; `vanilla' is default Emacs mode-line. `custom' is a user defined themes,
;; refer to the DOCUMENTATION.org for more info on how to create your own
;; spaceline theme. Value can be a symbol or list with additional properties.
;; (default '(spacemacs :separator wave :separator-scale 1.5))
dotspacemacs-mode-line-theme '(spacemacs :separator wave :separator-scale 1.5)
;; If non-nil the cursor color matches the state color in GUI Emacs.
;; (default t)
dotspacemacs-colorize-cursor-according-to-state t
;; Default font, or prioritized list of fonts. `powerline-scale' allows to
;; quickly tweak the mode-line size to make separators look not too crappy.
dotspacemacs-default-font '("Iosevka Slab"
:size 14
:weight normal
:width normal)
;; The leader key (default "SPC")
dotspacemacs-leader-key "SPC"
;; The key used for Emacs commands `M-x' (after pressing on the leader key).
;; (default "SPC")
dotspacemacs-emacs-command-key "SPC"
;; The key used for Vim Ex commands (default ":")
dotspacemacs-ex-command-key ":"
;; The leader key accessible in `emacs state' and `insert state'
;; (default "M-m")
dotspacemacs-emacs-leader-key "M-m"
;; Major mode leader key is a shortcut key which is the equivalent of
;; pressing `<leader> m`. Set it to `nil` to disable it. (default ",")
dotspacemacs-major-mode-leader-key ","
;; Major mode leader key accessible in `emacs state' and `insert state'.
;; (default "C-M-m")
dotspacemacs-major-mode-emacs-leader-key "C-M-m"
;; These variables control whether separate commands are bound in the GUI to
;; the key pairs `C-i', `TAB' and `C-m', `RET'.
;; Setting it to a non-nil value, allows for separate commands under `C-i'
;; and TAB or `C-m' and `RET'.
;; In the terminal, these pairs are generally indistinguishable, so this only
;; works in the GUI. (default nil)
dotspacemacs-distinguish-gui-tab nil
;; Name of the default layout (default "Default")
dotspacemacs-default-layout-name "Misc"
;; If non-nil the default layout name is displayed in the mode-line.
;; (default nil)
dotspacemacs-display-default-layout nil
;; If non-nil then the last auto saved layouts are resumed automatically upon
;; start. (default nil)
dotspacemacs-auto-resume-layouts nil
;; If non-nil, auto-generate layout name when creating new layouts. Only has
;; effect when using the "jump to layout by number" commands. (default nil)
dotspacemacs-auto-generate-layout-names nil
;; Size (in MB) above which spacemacs will prompt to open the large file
;; literally to avoid performance issues. Opening a file literally means that
;; no major mode or minor modes are active. (default is 1)
dotspacemacs-large-file-size 1
;; Location where to auto-save files. Possible values are `original' to
;; auto-save the file in-place, `cache' to auto-save the file to another
;; file stored in the cache directory and `nil' to disable auto-saving.
;; (default 'cache)
dotspacemacs-auto-save-file-location nil
;; Maximum number of rollback slots to keep in the cache. (default 5)
dotspacemacs-max-rollback-slots 5
;; If non-nil, the paste transient-state is enabled. While enabled, after you
;; paste something, pressing `C-j' and `C-k' several times cycles through the
;; elements in the `kill-ring'. (default nil)
dotspacemacs-enable-paste-transient-state nil
;; Which-key delay in seconds. The which-key buffer is the popup listing
;; the commands bound to the current keystroke sequence. (default 0.4)
dotspacemacs-which-key-delay 0.4
;; Which-key frame position. Possible values are `right', `bottom' and
;; `right-then-bottom'. right-then-bottom tries to display the frame to the
;; right; if there is insufficient space it displays it at the bottom.
;; (default 'bottom)
dotspacemacs-which-key-position 'bottom
;; Control where `switch-to-buffer' displays the buffer. If nil,
;; `switch-to-buffer' displays the buffer in the current window even if
;; another same-purpose window is available. If non-nil, `switch-to-buffer'
;; displays the buffer in a same-purpose window even if the buffer can be
;; displayed in the current window. (default nil)
dotspacemacs-switch-to-buffer-prefers-purpose nil
;; If non-nil a progress bar is displayed when spacemacs is loading. This
;; may increase the boot time on some systems and emacs builds, set it to
;; nil to boost the loading time. (default t)
dotspacemacs-loading-progress-bar t
;; If non-nil the frame is fullscreen when Emacs starts up. (default nil)
;; (Emacs 24.4+ only)
dotspacemacs-fullscreen-at-startup nil
;; If non-nil `spacemacs/toggle-fullscreen' will not use native fullscreen.
;; Use to disable fullscreen animations in OSX. (default nil)
dotspacemacs-fullscreen-use-non-native nil
;; If non-nil the frame is maximized when Emacs starts up.
;; Takes effect only if `dotspacemacs-fullscreen-at-startup' is nil.
;; (default nil) (Emacs 24.4+ only)
dotspacemacs-maximized-at-startup t
;; A value from the range (0..100), in increasing opacity, which describes
;; the transparency level of a frame when it's active or selected.
;; Transparency can be toggled through `toggle-transparency'. (default 90)
dotspacemacs-active-transparency 90
;; A value from the range (0..100), in increasing opacity, which describes
;; the transparency level of a frame when it's inactive or deselected.
;; Transparency can be toggled through `toggle-transparency'. (default 90)
dotspacemacs-inactive-transparency 90
;; If non-nil show the titles of transient states. (default t)
dotspacemacs-show-transient-state-title t
;; If non-nil show the color guide hint for transient state keys. (default t)
dotspacemacs-show-transient-state-color-guide t
;; If non-nil unicode symbols are displayed in the mode line.
;; If you use Emacs as a daemon and wants unicode characters only in GUI set
;; the value to quoted `display-graphic-p'. (default t)
dotspacemacs-mode-line-unicode-symbols t
;; If non-nil smooth scrolling (native-scrolling) is enabled. Smooth
;; scrolling overrides the default behavior of Emacs which recenters point
;; when it reaches the top or bottom of the screen. (default t)
dotspacemacs-smooth-scrolling t
;; Control line numbers activation.
;; If set to `t' or `relative' line numbers are turned on in all `prog-mode' and
;; `text-mode' derivatives. If set to `relative', line numbers are relative.
;; This variable can also be set to a property list for finer control:
;; '(:relative nil
;; :disabled-for-modes dired-mode
;; doc-view-mode
;; markdown-mode
;; org-mode
;; pdf-view-mode
;; text-mode
;; :size-limit-kb 1000)
;; (default nil)
dotspacemacs-line-numbers 't
;; Code folding method. Possible values are `evil' and `origami'.
;; (default 'evil)
dotspacemacs-folding-method 'evil
;; If non-nil `smartparens-strict-mode' will be enabled in programming modes.
;; (default nil)
dotspacemacs-smartparens-strict-mode nil
;; If non-nil pressing the closing parenthesis `)' key in insert mode passes
;; over any automatically added closing parenthesis, bracket, quote, etc…
;; This can be temporary disabled by pressing `C-q' before `)'. (default nil)
dotspacemacs-smart-closing-parenthesis nil
;; Select a scope to highlight delimiters. Possible values are `any',
;; `current', `all' or `nil'. Default is `all' (highlight any scope and
;; emphasis the current one). (default 'all)
dotspacemacs-highlight-delimiters 'all
;; If non-nil, start an Emacs server if one is not already running.
;; (default nil)
dotspacemacs-enable-server nil
;; Set the emacs server socket location.
;; If nil, uses whatever the Emacs default is, otherwise a directory path
;; like \"~/.emacs.d/server\". It has no effect if
;; `dotspacemacs-enable-server' is nil.
;; (default nil)
dotspacemacs-server-socket-dir nil
;; If non-nil, advise quit functions to keep server open when quitting.
;; (default nil)
dotspacemacs-persistent-server nil
;; List of search tool executable names. Spacemacs uses the first installed
;; tool of the list. Supported tools are `rg', `ag', `pt', `ack' and `grep'.
;; (default '("rg" "ag" "pt" "ack" "grep"))
dotspacemacs-search-tools '("rg" "ag" "pt" "ack" "grep")
;; Format specification for setting the frame title.
;; %a - the `abbreviated-file-name', or `buffer-name'
;; %t - `projectile-project-name'
;; %I - `invocation-name'
;; %S - `system-name'
;; %U - contents of $USER
;; %b - buffer name
;; %f - visited file name
;; %F - frame name
;; %s - process status
;; %p - percent of buffer above top of window, or Top, Bot or All
;; %P - percent of buffer above bottom of window, perhaps plus Top, or Bot or All
;; %m - mode name
;; %n - Narrow if appropriate
;; %z - mnemonics of buffer, terminal, and keyboard coding systems
;; %Z - like %z, but including the end-of-line format
;; (default "%I@%S")
dotspacemacs-frame-title-format "%I@%S"
;; Format specification for setting the icon title format
;; (default nil - same as frame-title-format)
dotspacemacs-icon-title-format nil
;; Delete whitespace while saving buffer. Possible values are `all'
;; to aggressively delete empty line and long sequences of whitespace,
;; `trailing' to delete only the whitespace at end of lines, `changed' to
;; delete only whitespace for changed lines or `nil' to disable cleanup.
;; (default nil)
dotspacemacs-whitespace-cleanup nil
;; Either nil or a number of seconds. If non-nil zone out after the specified
;; number of seconds. (default nil)
dotspacemacs-zone-out-when-idle nil
;; Run `spacemacs/prettify-org-buffer' when
;; visiting README.org files of Spacemacs.
;; (default nil)
dotspacemacs-pretty-docs nil))
(defun dotspacemacs/user-env ()
"Environment variables setup.
This function defines the environment variables for your Emacs session. By
default it calls `spacemacs/load-spacemacs-env' which loads the environment
variables declared in `~/.spacemacs.env' or `~/.spacemacs.d/.spacemacs.env'.
See the header of this file for more information."
(spacemacs/load-spacemacs-env))
(defun dotspacemacs/user-init ()
"Initialization for user code:
This function is called immediately after `dotspacemacs/init', before layer
configuration.
It is mostly for variables that should be set before packages are loaded.
If you are unsure, try setting them in `dotspacemacs/user-config' first."
)
(defun dotspacemacs/user-load ()
"Library to load while dumping.
This function is called only while dumping Spacemacs configuration. You can
`require' or `load' the libraries of your choice that will be included in the
dump."
)
(defun dotspacemacs/user-config ()
"Configuration for user code:
This function is called at the very end of Spacemacs startup, after layer
configuration.
Put your configuration code here, except for variables that should be set
before packages are loaded."
(smartparens-global-mode t)
(show-smartparens-global-mode +1)
(add-hook 'after-init-hook 'global-company-mode)
(add-to-list 'auto-mode-alist '("\\.tpp\\'" . c++-mode))
(setq split-height-threshold nil)
(setq split-width-threshold 0)
(global-set-key [f3] 'other-window)
(global-set-key [f4] 'ivy-switch-buffer)
(global-set-key [f5] 'delete-window)
(global-set-key [f6] 'counsel-recentf)
(windmove-default-keybindings)
(load-file "~/.emacs.d/private/recentf-ext.el"); Add dired in recentf
(setq compilation-finish-function ; Close compilation buffer automatically
(lambda (buf str)
(if (null (string-match ".*exited abnormally.*" str))
;;no errors, make the compilation window go away in a few seconds
(progn
(run-at-time
"1 sec" nil 'delete-windows-on
(get-buffer-create "*compilation*"))
(message "No Compilation Errors!")))))
(setq ibuffer-expert t) ; Remove buffer deletion confirmation
(setq ibuffer-show-empty-filter-groups nil) ; Cleaner ibuffer
(add-hook 'realgud-short-key-mode-hook ; Short key mode for realgud
(lambda ()
(local-set-key "\C-c" realgud:shortkey-mode-map)))
(setq magit-repository-directories
'(("~/Documents/Uni" . 3)))
(add-to-list 'auto-mode-alist '("\\.aiml\\'" . web-mode))
(defun display-new-buffer (buffer force-other-window) ; Vertical/horizontal split based on the screen space
(or (get-buffer-window buffer)
(if (one-window-p)
(let ((new-win
(if (> (window-width) 100)
(split-window-horizontally)
(split-window-vertically))))
(set-window-buffer new-win buffer)
new-win)
(let ((new-win (get-lru-window)))
(set-window-buffer new-win buffer)
new-win))))
(setq display-buffer-function 'display-new-buffer)
)
;; Do not write anything past this comment. This is where Emacs will
;; auto-generate custom variable definitions.
(defun dotspacemacs/emacs-custom-settings ()
"Emacs custom settings.
This is an auto-generated function, do not modify its content directly, use
Emacs customize menu instead.
This function is called at the very end of Spacemacs initialization."
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(evil-want-Y-yank-to-eol nil)
'(package-selected-packages
(quote
(web-mode web-beautify tagedit slim-mode scss-mode sass-mode pug-mode prettier-js impatient-mode htmlize simple-httpd haml-mode emmet-mode counsel-css company-web web-completion-data smeargle magit-svn magit-gitflow magit-popup gitignore-templates gitignore-mode gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link evil-magit magit transient lv git-commit with-editor dash hasklig-mode all-the-icons yasnippet-snippets ivy-hydra counsel swiper helm helm-core ivy flycheck company hydra zerodark-theme xterm-color winum which-key wgrep use-package smex smartparens shell-pop realgud plan9-theme persp-mode pcre2el overseer nameless mvn multi-term mmm-mode meghanada maven-test-mode markdown-toc macrostep ivy-yasnippet ivy-xref ivy-rtags insert-shebang ibuffer-projectile helm-make groovy-mode groovy-imports gradle-mode google-c-style gh-md fuzzy flycheck-rtags flycheck-pos-tip flycheck-irony flycheck-bashate flx fish-mode eyebrowse evil eshell-z eshell-prompt-extras esh-help ensime elisp-slime-nav dotenv-mode disaster diminish company-statistics company-shell company-rtags company-irony-c-headers company-irony company-emacs-eclim company-c-headers cmake-mode cmake-ide clang-format bind-map auto-yasnippet auto-compile async ac-ispell))))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
)

View File

@ -0,0 +1,39 @@
# Fish config file
fundle plugin 'decors/fish-colored-man'
fundle plugin 'oh-my-fish/theme-nai'
fundle init
# Man colors
set -g man_standout -o blue
set -g man_bold -o magenta
# Text Editor
export EDITOR="vim"
# Aliases
alias f "fff"
alias tmux "tmux -2"
alias peerflix "peerflix -d"
alias xclip "xclip -selection clipboard"
function fish_title
true
end
# Spacemacs
if test -n "$EMACS"
set -x TERM eterm-color
end
# fff
## Directory color [0-9]
export FFF_COL1=3
export FFF_COL2=8
## Favourites (keys 1-9) (dir or file)
export FFF_FAV1=/home/coolneng/Nextcloud/Documents/Archive-uni/Second\ year/
export FFF_FAV2=/home/coolneng/Nextcloud/Documents/Books/Academic/
export FFF_FAV3=/home/coolneng/Nextcloud/Documents/Papers
export FFF_FAV4=/home/coolneng/Nextcloud/Documents/Knowledge/
export FFF_FAV5=/home/coolneng/Nextcloud/Photos/

View File

@ -0,0 +1,29 @@
# This file contains fish universal variable definitions.
# VERSION: 3.0
SETUVAR fish_color_autosuggestion:555\x1ebrblack
SETUVAR fish_color_cancel:\x2dr
SETUVAR fish_color_command:005fd7
SETUVAR fish_color_comment:990000
SETUVAR fish_color_cwd:green
SETUVAR fish_color_cwd_root:red
SETUVAR fish_color_end:009900
SETUVAR fish_color_error:ff0000
SETUVAR fish_color_escape:00a6b2
SETUVAR fish_color_history_current:\x2d\x2dbold
SETUVAR fish_color_host:normal
SETUVAR fish_color_match:\x2d\x2dbackground\x3dbrblue
SETUVAR fish_color_normal:normal
SETUVAR fish_color_operator:00a6b2
SETUVAR fish_color_param:00afff
SETUVAR fish_color_quote:999900
SETUVAR fish_color_redirection:00afff
SETUVAR fish_color_search_match:bryellow\x1e\x2d\x2dbackground\x3dbrblack
SETUVAR fish_color_selection:white\x1e\x2d\x2dbold\x1e\x2d\x2dbackground\x3dbrblack
SETUVAR fish_color_user:brgreen
SETUVAR fish_color_valid_path:\x2d\x2dunderline
SETUVAR fish_greeting:Welcome\x20to\x20fish\x2c\x20the\x20friendly\x20interactive\x20shell
SETUVAR fish_key_bindings:fish_default_key_bindings
SETUVAR fish_pager_color_completion:\x1d
SETUVAR fish_pager_color_description:B3A06D\x1eyellow
SETUVAR fish_pager_color_prefix:white\x1e\x2d\x2dbold\x1e\x2d\x2dunderline
SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan

View File

@ -0,0 +1,425 @@
set __fundle_current_version '0.7.0'
function __fundle_seq -a upto
seq 1 1 $upto 2>/dev/null
end
function __fundle_next_arg -a index
set -l args $argv[2..-1]
set -l arg_index (math $index + 1)
if test (count $args) -lt $arg_index
echo "missing argument for $args[$index]"
return 1
end
set -l arg $args[$arg_index]
switch $arg
case '--*'
echo "expected argument for $args[$index], got $arg"; and return 1
case '*'
echo $arg; and return 0
end
end
function __fundle_compare_versions -a version1 -a version2
for i in (__fundle_seq 4)
set -l v1 (echo $version1 | cut -d '.' -f $i | sed -Ee 's/[a-z]+//g')
set -l v2 (echo $version2 | cut -d '.' -f $i | sed -Ee 's/[a-z]+//g')
if test \( -n $v1 -a -z $v2 \) -o \( -n $v1 -a -n $v2 -a $v1 -lt $v2 \)
echo -n "lt"; and return 0
else if test \( -z $v1 -a -n $v2 \) -o \( -n $v1 -a -n $v2 -a $v1 -gt $v2 \)
echo -n "gt"; and return 0
end
end
echo -n "eq"; and return 0
end
function __fundle_date -d "returns a date"
set -l d (date +%s%N)
if echo $d | string match -rvq 'N'
echo $d
else
gdate +%s%N
end
return 0
end
function __fundle_self_update -d "updates fundle"
set -l fundle_repo_url "https://github.com/tuvistavie/fundle.git"
# This `sed` stays for now since doing it easily with `string` requires "--filter", which is only in 2.6.0
set -l latest (command git ls-remote --tags $fundle_repo_url | sed -n -e 's|.*refs/tags/v\(.*\)|\1|p' | tail -n 1)
if test (__fundle_compare_versions $latest (__fundle_version)) != "gt"
echo "fundle is already up to date"; and return 0
else
set -l file_url_template 'https://raw.githubusercontent.com/tuvistavie/fundle/VERSION/functions/fundle.fish'
set -l file_url (string replace 'VERSION' -- "v$latest" $file_url_template)
set -l tmp_file (mktemp /tmp/fundle.XXX)
set -l update_message "fundle has been updated to version $latest"
curl -Ls $file_url > $tmp_file; and mv $tmp_file (status -f); and echo $update_message; and return 0
end
end
function __fundle_url_rev -d "prints the revision from the url" -a git_url
set -l rev (echo $git_url | cut -d '#' -f 2 -s)
if test -n "$rev"
echo $rev
else
echo master
end
end
function __fundle_remote_url -d "prints the remote url from the full git url" -a git_url
echo $git_url | cut -d '#' -f 1
end
function __fundle_rev_parse -d "prints the revision if any" -a dir -a commitish
set -l sha (command git --git-dir $dir rev-parse -q --verify $commitish 2>/dev/null)
if test $status -eq 0
echo -n $sha
return 0
end
return 1
end
function __fundle_commit_sha -d "returns sha of the commit-ish" -a dir -a commitish
if test -d "$dir/.git"
set dir "$dir/.git"
end
if __fundle_rev_parse $dir "origin/$commitish"
return 0
end
__fundle_rev_parse $dir $commitish
end
function __fundle_plugins_dir -d "returns fundle directory"
if test -z "$fundle_plugins_dir"
if test -n "$XDG_CONFIG_HOME"
echo $XDG_CONFIG_HOME/fish/fundle
else
echo $HOME/.config/fish/fundle
end
else
echo $fundle_plugins_dir
end
end
function __fundle_no_git -d "check if git is installed"
# `command -q` is >= 2.5.0
if not command -s git > /dev/null 2>&1
echo "git needs to be installed and in the path"
return 0
end
return 1
end
function __fundle_check_date -d "check date"
if date +%s%N | string match -rvq 'N'
return 0
end
if command -s gdate > /dev/null 2>&1
return 0
end
echo "You need to have a GNU date compliant date installed to use profiling. Use 'brew install coreutils' on OSX"
return 1
end
function __fundle_get_url -d "returns the url for the given plugin" -a repo
echo "https://github.com/$repo.git"
end
function __fundle_update_plugin -d "update the given plugin" -a git_dir -a remote_url
command git --git-dir=$git_dir remote set-url origin $remote_url 2>/dev/null; and \
command git --git-dir=$git_dir fetch -q 2>/dev/null
end
function __fundle_install_plugin -d "install/update the given plugin" -a plugin -a git_url
if __fundle_no_git
return 1
end
set -l plugin_dir (__fundle_plugins_dir)/$plugin
set -l git_dir $plugin_dir/.git
set -l remote_url (__fundle_remote_url $git_url)
set -l update ""
if contains __update $argv
set update true
end
if test -d $plugin_dir
if test -n "$update"
echo "Updating $plugin"
__fundle_update_plugin $git_dir $remote_url
else
echo "$argv[1] installed in $plugin_dir"
return 0
end
else
echo "Installing $plugin"
command git clone -q $remote_url $plugin_dir
end
set -l sha (__fundle_commit_sha $git_dir (__fundle_url_rev $git_url))
if test $status -eq 0
command git --git-dir="$git_dir" --work-tree="$plugin_dir" checkout -q -f $sha
else
echo "Could not update $plugin"
return 1
end
end
function __fundle_show_doc_msg -d "show a link to fundle docs"
if test (count $argv) -ge 1
echo $argv
end
echo "See the docs for more info. https://github.com/tuvistavie/fundle"
end
function __fundle_load_plugin -a plugin -a path -a fundle_dir -a profile -d "load a plugin"
if begin; set -q __fundle_loaded_plugins; and contains $plugin $__fundle_loaded_plugins; end
return 0
end
set -l plugin_dir (string replace -r '/.$' '' -- "$fundle_dir/$plugin/$path")
if not test -d $plugin_dir
__fundle_show_doc_msg "$plugin not installed. You may need to run 'fundle install'"
return 0
end
# Take everything but "plugin-" from the last path component
set -l plugin_name (string replace -r '.*/(plugin-)?(.*)$' '$2' -- $plugin)
set -l init_file "$plugin_dir/init.fish"
set -l conf_dir "$plugin_dir/conf.d"
set -l bindings_file "$plugin_dir/key_bindings.fish"
set -l functions_dir "$plugin_dir/functions"
set -l completions_dir "$plugin_dir/completions"
set -l plugin_paths $__fundle_plugin_name_paths
if begin; test -d $functions_dir; and not contains $functions_dir $fish_function_path; end
set fish_function_path $functions_dir $fish_function_path
end
if begin; test -d $completions_dir; and not contains $completions_dir $fish_complete_path; end
set fish_complete_path $completions_dir $fish_complete_path
end
if test -f $init_file
source $init_file
else if test -d $conf_dir
# read all *.fish files in conf.d
for f in $conf_dir/*.fish
source $f
end
else
# read all *.fish files if no init.fish or conf.d found
for f in $plugin_dir/*.fish
source $f
end
end
if test -f $bindings_file
set -g __fundle_binding_paths $bindings_file $__fundle_binding_paths
end
set -g __fundle_loaded_plugins $plugin $__fundle_loaded_plugins
set -l dependencies (printf '%s\n' $plugin_paths $__fundle_plugin_name_paths | sort | uniq -u)
for dependency in $dependencies
set -l name_path (string split : -- $dependency)
if test "$profile" -eq 1
set -l start_time (__fundle_date +%s%N)
__fundle_load_plugin $name_path[1] $name_path[2] $fundle_dir $profile
set -l ellapsed_time (math \((__fundle_date +%s%N) - $start_time\) / 1000)
echo "$name_path[1]": {$ellapsed_time}us
else
__fundle_load_plugin $name_path[1] $name_path[2] $fundle_dir $profile
end
end
emit "init_$plugin_name" $plugin_dir
end
function __fundle_bind -d "set up bindings"
if functions -q fish_user_key_bindings; and not functions -q __fish_user_key_bindings
functions -c fish_user_key_bindings __fish_user_key_bindings
end
function fish_user_key_bindings
for bindings in $__fundle_binding_paths
source $bindings
end
if functions -q __fish_user_key_bindings
__fish_user_key_bindings
end
end
end
function __fundle_init -d "initialize fundle"
set -l fundle_dir (__fundle_plugins_dir)
if test (count $__fundle_plugin_names) -eq 0
__fundle_show_doc_msg "No plugin registered. You need to call 'fundle plugin NAME' before using 'fundle init'. \
Try reloading your shell if you just edited your configuration."
return 1
end
set -l profile 0
if begin; contains -- -p $argv; or contains -- --profile $argv; and __fundle_check_date; end
set profile 1
end
for name_path in $__fundle_plugin_name_paths
set -l name_path (string split : -- $name_path)
if test "$profile" -eq 1
set -l start_time (__fundle_date +%s%N)
__fundle_load_plugin $name_path[1] $name_path[2] $fundle_dir $profile
set -l ellapsed_time (math \((__fundle_date +%s%N) - $start_time\) / 1000)
echo "$name_path[1]": {$ellapsed_time}us
else
__fundle_load_plugin $name_path[1] $name_path[2] $fundle_dir $profile
end
end
__fundle_bind
end
function __fundle_install -d "install plugin"
if test (count $__fundle_plugin_names) -eq 0
__fundle_show_doc_msg "No plugin registered. You need to call 'fundle plugin NAME' before using 'fundle install'"
end
if begin; contains -- -u $argv; or contains -- --upgrade $argv; end
echo "deprecation warning: please use 'fundle update' to update plugins"
set argv $argv __update
end
for i in (__fundle_seq (count $__fundle_plugin_names))
__fundle_install_plugin $__fundle_plugin_names[$i] $__fundle_plugin_urls[$i] $argv
end
set -l original_plugins_count (count (__fundle_list -s))
__fundle_init
# if plugins count increase after init, new plugins have dependencies
# install new plugins dependencies if any
if test (count (__fundle_list -s)) -gt $original_plugins_count
__fundle_install $argv
end
end
function __fundle_clean -d "cleans fundle directory"
set -l fundle_dir (__fundle_plugins_dir)
set -l used_plugins (__fundle_list -s)
set -l installed_plugins $fundle_dir/*/*/
for installed_plugin in $installed_plugins
set -l plugin (string trim --chars="/" \
(string replace -r -- "$fundle_dir" "" $installed_plugin))
if not contains $plugin $used_plugins
echo "Removing $plugin"
rm -rf $fundle_dir/$plugin
end
end
end
function __fundle_plugin -d "add plugin to fundle" -a name
set -l plugin_url ""
set -l plugin_path "."
set -l argv_count (count $argv)
set -l skip_next true
if test $argv_count -eq 0 -o -z "$argv"
echo "usage: fundle plugin NAME [[--url] URL] [--path PATH]"
return 1
else if test $argv_count -gt 1
for i in (__fundle_seq (count $argv))
test $skip_next = true; and set skip_next false; and continue
set -l arg $argv[$i]
switch $arg
case '--url'
set plugin_url (__fundle_next_arg $i $argv)
test $status -eq 1; and echo $plugin_url; and return 1
set skip_next true
case '--path'
set plugin_path (__fundle_next_arg $i $argv)
test $status -eq 1; and echo $plugin_path; and return 1
set skip_next true
case '--*'
echo "unknown flag $arg"; and return 1
case '*'
test $i -ne 2; and echo "invalid argument $arg"; and return 1
set plugin_url $arg
end
end
end
test -z "$plugin_url"; and set plugin_url (__fundle_get_url $name)
if not contains $name $__fundle_plugin_names
set -g __fundle_plugin_names $__fundle_plugin_names $name
set -g __fundle_plugin_urls $__fundle_plugin_urls $plugin_url
set -g __fundle_plugin_name_paths $__fundle_plugin_name_paths $name:$plugin_path
end
end
function __fundle_version -d "prints fundle version"
echo $__fundle_current_version
end
function __fundle_print_help -d "prints fundle help"
echo "usage: fundle (init | plugin | list | install | update | clean | self-update | version | help)"
end
function __fundle_list -d "list registered plugins"
if begin; contains -- -s $argv; or contains -- --short $argv; end
for name in $__fundle_plugin_names
echo $name
end
else
for i in (__fundle_seq (count $__fundle_plugin_names))
echo {$__fundle_plugin_names[$i]}\n\t{$__fundle_plugin_urls[$i]}
end
end
end
function fundle -d "run fundle"
if __fundle_no_git
return 1
end
set -l sub_args ""
switch (count $argv)
case 0
__fundle_print_help
return 1
case 1
case '*'
set sub_args $argv[2..-1]
end
switch $argv[1]
case "init"
__fundle_init $sub_args
case "plugin"
__fundle_plugin $sub_args
case "list"
__fundle_list $sub_args
case "plugins"
echo "'fundle plugins' has been replaced by 'fundle list'"
case "install"
__fundle_install $sub_args
case "update"
__fundle_install __update $sub_args
case "clean"
__fundle_clean
case "self-update"
__fundle_self_update
case "version" -v --version
__fundle_version
case "help" -h --help
__fundle_print_help
return 0
case "*"
__fundle_print_help
return 1
end
end

@ -0,0 +1 @@
Subproject commit c1e9db7765c932587b795d6c8965e9cff2fd849a

@ -0,0 +1 @@
Subproject commit 9616e644e95fe79eb59b8c9d77fe44b9f096db2f

View File

@ -0,0 +1,15 @@
var child_process = require('child_process');
function getStdout(cmd) {
var stdout = child_process.execSync(cmd);
return stdout.toString().trim();
}
exports.host = "imap.gmail.com"
exports.port = 993;
exports.tls = true;
exports.username = "akasroua@gmail.com";
exports.password = getStdout("pass mail/gmail");
exports.onNewMail = "/usr/local/bin/mbsync gmail"
exports.onNewMailPost = "/usr/local/bin/notmuch new"
exports.boxes = [ "INBOX"];

View File

@ -0,0 +1,15 @@
var child_process = require('child_process');
function getStdout(cmd) {
var stdout = child_process.execSync(cmd);
return stdout.toString().trim();
}
exports.host = "correo.ugr.es"
exports.port = 993;
exports.tls = true;
exports.username = "akasroua@correo.ugr.es";
exports.password = getStdout("pass mail/uni");
exports.onNewMail = "/usr/local/bin/mbsync uni"
exports.onNewMailPost = "/usr/local/bin/notmuch new"
exports.boxes = [ "INBOX"];

27
khal/.config/khal/config Normal file
View File

@ -0,0 +1,27 @@
[calendars]
[[bob_calendar_local]]
path = ~/.calendars/*
type = discover
[[bob_contacts_local]]
path = ~/.contacts/*
type = discover
[locale]
timeformat = %H:%M
dateformat = %d/%m/
longdateformat = %d/%m/%Y
datetimeformat = %d/%m/%Y %H:%M
longdatetimeformat = %d/%m/%Y %H:%M
local_timezone= Europe/Brussels
default_timezone= Europe/Brussels
[default]
default_calendar = Misc
timedelta = 60d
highlight_event_days = true
print_new = event
[highlight_days]
method = fg

View File

@ -0,0 +1,49 @@
# example configuration file for khard version >= 0.13.0
# place it under $HOME/.config/khard/khard.conf
[addressbooks]
[[contacts]]
path = ~/.contacts/Contacts/
[general]
debug = no
default_action = list
editor = vim
merge_editor = vimdiff
[contact table]
# display names by first or last name: first_name / last_name
display = first_name
# group by address book: yes / no
group_by_addressbook = no
# reverse table ordering: yes / no
reverse = no
# append nicknames to name column: yes / no
show_nicknames = no
# show uid table column: yes / no
show_uids = yes
# sort by first or last name: first_name / last_name
sort = last_name
# localize dates: yes / no
localize_dates = yes
# set a comma separated list of preferred phone number types in descending priority
# or nothing for non-filtered alphabetical order
preferred_phone_number_type = pref, cell, home
# set a comma separated list of preferred email address types in descending priority
# or nothing for non-filtered alphabetical order
preferred_email_address_type = pref, work, home
[vcard]
# extend contacts with your own private objects
# these objects are stored with a leading "X-" before the object name in the vcard files
# every object label may only contain letters, digits and the - character
# example:
# private_objects = Jabber, Skype, Twitter
private_objects = Jabber, Skype, Twitter
# preferred vcard version: 3.0 / 4.0
preferred_version = 3.0
# Look into source vcf files to speed up search queries: yes / no
search_in_source_files = no
# skip unparsable vcard files: yes / no
skip_unparsable = no

View File

@ -0,0 +1,51 @@
# example configuration file for khard version >= 0.13.0
# place it under $HOME/.config/khard/khard.conf
[addressbooks]
[[family]]
path = ~/.contacts/family/
[[friends]]
path = ~/.contacts/friends/
[general]
debug = no
default_action = list
editor = vim
merge_editor = vimdiff
[contact table]
# display names by first or last name: first_name / last_name
display = first_name
# group by address book: yes / no
group_by_addressbook = no
# reverse table ordering: yes / no
reverse = no
# append nicknames to name column: yes / no
show_nicknames = no
# show uid table column: yes / no
show_uids = yes
# sort by first or last name: first_name / last_name
sort = last_name
# localize dates: yes / no
localize_dates = yes
# set a comma separated list of preferred phone number types in descending priority
# or nothing for non-filtered alphabetical order
preferred_phone_number_type = pref, cell, home
# set a comma separated list of preferred email address types in descending priority
# or nothing for non-filtered alphabetical order
preferred_email_address_type = pref, work, home
[vcard]
# extend contacts with your own private objects
# these objects are stored with a leading "X-" before the object name in the vcard files
# every object label may only contain letters, digits and the - character
# example:
# private_objects = Jabber, Skype, Twitter
private_objects = Jabber, Skype, Twitter
# preferred vcard version: 3.0 / 4.0
preferred_version = 3.0
# Look into source vcf files to speed up search queries: yes / no
search_in_source_files = no
# skip unparsable vcard files: yes / no
skip_unparsable = no

87
mbsync/.mbsyncrc Normal file
View File

@ -0,0 +1,87 @@
IMAPAccount gmail
Host imap.gmail.com
User akasroua@gmail.com
#PassCmd "/usr/local/bin/pass mail/gmail"
Pass WQSxbcvEkWBLQgkt399GcpMBAvCqwf6fkF2tArX3NLQfjt3M98mQ9C3DDjRfWwBgi84Gzs25BSVUfvwZrA9oatE2sg4j2iLNgihG
SSLType IMAPS
SSLVersions TLSv1.2
CertificateFile /usr/local/share/certs/ca-root-nss.crt
IMAPStore gmail-remote
Account gmail
MaildirStore gmail-local
Subfolders Verbatim
# The trailing "/" is important
Path ~/.mail/gmail/
Inbox ~/.mail/gmail/Inbox/
Channel sync-gmail-default
Master :gmail-remote:
Slave :gmail-local:
Channel sync-gmail-sent
Master :gmail-remote:"[Gmail]/Sent Mail"
Slave :gmail-local:sent
Channel sync-gmail-trash
Master :gmail-remote:"[Gmail]/Bin"
Slave :gmail-local:trash
Channel sync-gmail-junk
Master :gmail-remote:"[Gmail]/Spam"
Slave :gmail-local:junk
# Get all the channels together into a group.
Group gmail
Channel sync-gmail-default
Channel sync-gmail-sent
Channel sync-gmail-trash
Channel sync-gmail-junk
Create Both
Expunge Both
SyncState *
IMAPAccount uni
Host correo.ugr.es
User akasroua@correo.ugr.es
PassCmd "/usr/local/bin/pass mail/uni"
SSLType IMAPS
CertificateFile /usr/local/share/certs/ca-root-nss.crt
IMAPStore uni-remote
Account uni
MaildirStore uni-local
Subfolders Verbatim
# The trailing "/" is important
Path ~/.mail/uni/
Inbox ~/.mail/uni/INBOX/
Channel uni-default
Master :uni-remote:
Slave :uni-local:
Channel uni-sent
Master :uni-remote:"Sent"
Slave :uni-local:sent
Channel uni-trash
Master :uni-remote:"Trash"
Slave :uni-local:trash
Channel uni-archive
Master :uni-remote:"BUZONdeEntradaUGR"
Slave :uni-local:archive
# Get all the channels together into a group.
Group uni
Channel uni-default
Channel uni-sent
Channel uni-trash
Channel uni-archive
Create Both
Expunge Both
SyncState *

65
mpd/.ncmpcpp/config Normal file
View File

@ -0,0 +1,65 @@
# mpd
mpd_host = /home/coolneng/.mpd/socket
mpd_music_dir = "~/Music
## Selected tracks ##
selected_item_prefix = "* "
discard_colors_if_item_is_selected = "no"
# Colors
color1 = "magenta"
color2 = "cyan"
main_window_color = "cyan"
state_line_color = "black"
statusbar_color = "black"
progressbar_color = "magenta"
progressbar_elapsed_color = "cyan"
current_item_prefix = "$(red)$r"
current_item_suffix = "$/r$(end)"
alternative_ui_separator_color = "black"
# Settings
autocenter_mode = "yes"
header_visibility = "no"
statusbar_visibility = "no"
cyclic_scrolling = "yes"
titles_visibility = "no"
display_bitrate = "yes"
playlist_separate_albums = "no"
ask_before_clearing_playlists = "no"
visualizer_type = "ellipse"
visualizer_fifo_path = "/tmp/mpd.fifo"
# Playlist
user_interface = "alternative"
playlist_display_mode = "classic"
browser_display_mode = "classic"
song_list_format = "$7 {%a}|{%D}$8 * $5%t $R $6%l"
song_status_format = "$6%t $1>> $8%a $1>> $2%b$1"
song_columns_list_format = "(5)[]{} (20)[red]{a} (26)[white]{t|f} (44)[blue]{b} (20)[red]{l}"
alternative_header_second_line_format = "$6{%a} $b$8-$9 $4{%b}$9"
now_playing_prefix = "$b$4>$5> "
now_playing_suffix = "$2$/b$2"
# Progressbars to use.
# This section works as
# a clipboard so no need
# to hunt these down from
# the web.
#progressbar_look = "░█ "
#progressbar_look = "=>"
#progressbar_look = "─- "
#progressbar_look = "▒▒░"
#progressbar_look = "┅┅┄"
#progressbar_look = "─⊙┄"
#progressbar_look = "─➞─"
progressbar_look = "─┅─"
#progressbar_look = "▪▪▪"
#progressbar_look = "▪▪▫"
#progressbar_look = "───"
#progressbar_look = "▁▁▁"
#progressbar_look = ""
#progressbar_look = "■◣ "
#progressbar_look = "◈◆◇"
#progressbar_look = "→→"

108
mpd/.ncmpcpp/config.bak Normal file
View File

@ -0,0 +1,108 @@
#ncmpcpp_directory = ~/.ncmpcpp
#lyrics_directory = ~/.lyrics
mpd_host = /home/coolneng/.mpd/socket
mpd_crossfade_time = 2
visualizer_fifo_path = /tmp/mpd.fifo
visualizer_output_name = "Visualizer feed"
visualizer_in_stereo = no
#visualizer_sample_multiplier = 1
visualizer_sync_interval = 30
visualizer_type = spectrum
visualizer_look = ●┃
visualizer_color = cyan, green, yellow, magenta, red
#visualizer_color = 41, 83, 119, 155, 185, 215, 209, 203, 197, 161
#system_encoding = ""
#playlist_disable_highlight_delay = 5
#message_delay_time = 5
song_list_format = "{{%a - %t}|{%f}}{$R%l}"
#song_status_format = {%a - %t}|{%f}
#song_status_format = "{{%a{ "%b"{ (%y)}} - }{%t$/b}}|{$b%f$/b}"
song_status_format = "{{%a{ $2//$9 %b{, %y}} $2//$9 }{%t$/b}}|{$b%f$/b}"
#song_library_format = {{{%t} - %a{ "%b"{ (%y)}}}}|{%f}
song_library_format = {{%a - %t} (%b)}|{%f}
#alternative_header_first_line_format = $b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b
#alternative_header_second_line_format = {{$4$b%a$/b$9}{ - $7%b$9}{ ($4%y$9)}}|{%D}
now_playing_prefix = "$b$5"
now_playing_suffix = "$/b$9"
#browser_playlist_prefix = "$2playlist$9 "
#selected_item_prefix = $6
#selected_item_suffix = $9
#modified_item_prefix = $3> $9
#song_window_title_format = {%a - }{%t}|{%f}
#browser_sort_mode = name
#browser_sort_format = {%a - }{%t}|{%f} {(%l)}
#song_columns_list_format = (20)[]{a} (6f)[green]{NE} (50)[white]{t|f:Title} (20)[red]{b} (7f)[magenta]{l}
#playlist_show_mpd_host = no
#playlist_show_remaining_time = no
#playlist_shorten_total_times = no
#playlist_separate_albums = no
playlist_display_mode = classic
#browser_display_mode = classic
#search_engine_display_mode = classic
#playlist_editor_display_mode = classic
#discard_colors_if_item_is_selected = yes
#incremental_seeking = yes
#seek_time = 1
#volume_change_step = 2
autocenter_mode = yes
#centered_cursor = no
progressbar_look = "─╼ "
#progressbar_boldness = yes
#default_place_to_search_in = database
#user_interface = classic
#data_fetching_delay = yes
#media_library_primary_tag = artist
#default_find_mode = wrapped
#default_tag_editor_pattern = %n - %t
header_visibility = no
statusbar_visibility = yes
titles_visibility = no
#header_text_scrolling = yes
#cyclic_scrolling = no
#lines_scrolled = 2
follow_now_playing_lyrics = no
#fetch_lyrics_for_current_song_in_background = no
#store_lyrics_in_song_dir = no
#generate_win32_compatible_filenames = yes
#allow_for_physical_item_deletion = no
#lastfm_preferred_language = en
#show_hidden_files_in_local_browser = no
#screen_switcher_mode = playlist, browser
#startup_screen = playlist
#startup_slave_screen = ""
#startup_slave_screen_focus = no
#locked_screen_width_part = 50
#ask_for_locked_screen_width_part = yes
#jump_to_now_playing_song_at_start = yes
#ask_before_clearing_playlists = yes
#clock_display_seconds = no
#display_volume_level = yes
#display_bitrate = no
#display_remaining_time = no
#regular_expressions = perl
#block_search_constraints_change_if_items_found = yes
#mouse_support = yes
#mouse_list_scroll_whole_page = yes
#empty_tag_marker = <empty>
#tags_separator = " | "
#tag_editor_extended_numeration = no
#media_library_sort_by_mtime = no
enable_window_title = no
external_editor = vim
colors_enabled = yes
empty_tag_color = red
header_window_color = yellow
volume_color = yellow
state_line_color = red
state_flags_color = yellow
main_window_color = default
color1 = red
color2 = red
main_window_highlight_color = white
progressbar_color = black
progressbar_elapsed_color = yellow
statusbar_color = default
alternative_ui_separator_color = magenta
active_column_color = red
window_border_color = yellow
active_window_border = magenta

0
mpd/.ncmpcpp/error.log Normal file
View File

12
mpv/.config/mpv/mpv.conf Normal file
View File

@ -0,0 +1,12 @@
## Subtitle settings
sub-font-size=38
embeddedfonts=no
sub-font='Roboto Condensed'
## HW Decoding
hwdec=vaapi
vo=vaapi
## Volume settings
volume-max=200
af=acompressor
## Youtube-dl settings
ytdl-format=bestvideo[height<=?720]+bestaudio/best

20
msmtp/.msmtprc Normal file
View File

@ -0,0 +1,20 @@
# Default values
defaults
auth on
tls on
tls_trust_file /usr/local/share/certs/ca-root-nss.crt
logfile ~/.msmtp.log
# Accounts
account gmail
host smtp.gmail.com
port 587
from akasroua@gmail.com
user akasroua@gmail.com
passwordeval "pass mail/gmail"
account uni
host correo.ugr.es
port 587
from akasroua@correo.ugr.es
user akasroua@correo.ugr.es
passwordeval "pass mail/uni"

View File

@ -0,0 +1,728 @@
# See this wiki page for more info:
# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info
print_info() {
# info title
info underline
info "OS" distro
# info "Host" model
info "Kernel" kernel
info "Uptime" uptime
# info "Packages" packages
info "Shell" shell
# info "Resolution" resolution
# info "DE" de
info "WM" wm
# info "WM Theme" wm_theme
# info "Theme" theme
# info "Icons" icons
info "Terminal" term
info "Terminal Font" term_font
# info "CPU" cpu
# info "GPU" gpu
# info "Memory" memory
# info "GPU Driver" gpu_driver # Linux/macOS only
# info "CPU Usage" cpu_usage
# info "Disk" disk
# info "Battery" battery
# info "Font" font
# info "Song" song
# info "Local IP" local_ip
# info "Public IP" public_ip
# info "Users" users
# info "Locale" locale # This only works on glibc systems.
info line_break
# info cols
info line_break
}
# Kernel
# Shorten the output of the kernel function.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --kernel_shorthand
# Supports: Everything except *BSDs (except PacBSD and PC-BSD)
#
# Example:
# on: '4.8.9-1-ARCH'
# off: 'Linux 4.8.9-1-ARCH'
kernel_shorthand="on"
# Distro
# Shorten the output of the distro function
#
# Default: 'off'
# Values: 'on', 'off', 'tiny'
# Flag: --distro_shorthand
# Supports: Everything except Windows and Haiku
distro_shorthand="off"
# Show/Hide OS Architecture.
# Show 'x86_64', 'x86' and etc in 'Distro:' output.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --os_arch
#
# Example:
# on: 'Arch Linux x86_64'
# off: 'Arch Linux'
os_arch="off"
# Uptime
# Shorten the output of the uptime function
#
# Default: 'on'
# Values: 'on', 'off', 'tiny'
# Flag: --uptime_shorthand
#
# Example:
# on: '2 days, 10 hours, 3 mins'
# off: '2 days, 10 hours, 3 minutes'
# tiny: '2d 10h 3m'
uptime_shorthand="on"
# Packages
# Show/Hide Package Manager names.
#
# Default: 'tiny'
# Values: 'on', 'tiny' 'off'
# Flag: --package_managers
#
# Example:
# on: '998 (pacman), 8 (flatpak), 4 (snap)'
# tiny: '908 (pacman, flatpak, snap)'
# off: '908'
package_managers="on"
# Shell
# Show the path to $SHELL
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --shell_path
#
# Example:
# on: '/bin/bash'
# off: 'bash'
shell_path="off"
# Show $SHELL version
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --shell_version
#
# Example:
# on: 'bash 4.4.5'
# off: 'bash'
shell_version="off"
# CPU
# CPU speed type
#
# Default: 'bios_limit'
# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'.
# Flag: --speed_type
# Supports: Linux with 'cpufreq'
# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value.
speed_type="bios_limit"
# CPU speed shorthand
#
# Default: 'off'
# Values: 'on', 'off'.
# Flag: --speed_shorthand.
# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz
#
# Example:
# on: 'i7-6500U (4) @ 3.1GHz'
# off: 'i7-6500U (4) @ 3.100GHz'
speed_shorthand="off"
# Enable/Disable CPU brand in output.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --cpu_brand
#
# Example:
# on: 'Intel i7-6500U'
# off: 'i7-6500U (4)'
cpu_brand="on"
# CPU Speed
# Hide/Show CPU speed.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --cpu_speed
#
# Example:
# on: 'Intel i7-6500U (4) @ 3.1GHz'
# off: 'Intel i7-6500U (4)'
cpu_speed="on"
# CPU Cores
# Display CPU cores in output
#
# Default: 'logical'
# Values: 'logical', 'physical', 'off'
# Flag: --cpu_cores
# Support: 'physical' doesn't work on BSD.
#
# Example:
# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores)
# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores)
# off: 'Intel i7-6500U @ 3.1GHz'
cpu_cores="logical"
# CPU Temperature
# Hide/Show CPU temperature.
# Note the temperature is added to the regular CPU function.
#
# Default: 'off'
# Values: 'C', 'F', 'off'
# Flag: --cpu_temp
# Supports: Linux, BSD
# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable
# coretemp kernel module. This only supports newer Intel processors.
#
# Example:
# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]'
# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]'
# off: 'Intel i7-6500U (4) @ 3.1GHz'
cpu_temp="off"
# GPU
# Enable/Disable GPU Brand
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gpu_brand
#
# Example:
# on: 'AMD HD 7950'
# off: 'HD 7950'
gpu_brand="on"
# Which GPU to display
#
# Default: 'all'
# Values: 'all', 'dedicated', 'integrated'
# Flag: --gpu_type
# Supports: Linux
#
# Example:
# all:
# GPU1: AMD HD 7950
# GPU2: Intel Integrated Graphics
#
# dedicated:
# GPU1: AMD HD 7950
#
# integrated:
# GPU1: Intel Integrated Graphics
gpu_type="all"
# Resolution
# Display refresh rate next to each monitor
# Default: 'off'
# Values: 'on', 'off'
# Flag: --refresh_rate
# Supports: Doesn't work on Windows.
#
# Example:
# on: '1920x1080 @ 60Hz'
# off: '1920x1080'
refresh_rate="off"
# Gtk Theme / Icons / Font
# Shorten output of GTK Theme / Icons / Font
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --gtk_shorthand
#
# Example:
# on: 'Numix, Adwaita'
# off: 'Numix [GTK2], Adwaita [GTK3]'
gtk_shorthand="off"
# Enable/Disable gtk2 Theme / Icons / Font
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gtk2
#
# Example:
# on: 'Numix [GTK2], Adwaita [GTK3]'
# off: 'Adwaita [GTK3]'
gtk2="on"
# Enable/Disable gtk3 Theme / Icons / Font
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gtk3
#
# Example:
# on: 'Numix [GTK2], Adwaita [GTK3]'
# off: 'Numix [GTK2]'
gtk3="on"
# IP Address
# Website to ping for the public IP
#
# Default: 'http://ident.me'
# Values: 'url'
# Flag: --ip_host
public_ip_host="http://ident.me"
# Disk
# Which disks to display.
# The values can be any /dev/sdXX, mount point or directory.
# NOTE: By default we only show the disk info for '/'.
#
# Default: '/'
# Values: '/', '/dev/sdXX', '/path/to/drive'.
# Flag: --disk_show
#
# Example:
# disk_show=('/' '/dev/sdb1'):
# 'Disk (/): 74G / 118G (66%)'
# 'Disk (/mnt/Videos): 823G / 893G (93%)'
#
# disk_show=('/'):
# 'Disk (/): 74G / 118G (66%)'
#
disk_show=('/')
# Disk subtitle.
# What to append to the Disk subtitle.
#
# Default: 'mount'
# Values: 'mount', 'name', 'dir'
# Flag: --disk_subtitle
#
# Example:
# name: 'Disk (/dev/sda1): 74G / 118G (66%)'
# 'Disk (/dev/sdb2): 74G / 118G (66%)'
#
# mount: 'Disk (/): 74G / 118G (66%)'
# 'Disk (/mnt/Local Disk): 74G / 118G (66%)'
# 'Disk (/mnt/Videos): 74G / 118G (66%)'
#
# dir: 'Disk (/): 74G / 118G (66%)'
# 'Disk (Local Disk): 74G / 118G (66%)'
# 'Disk (Videos): 74G / 118G (66%)'
disk_subtitle="mount"
# Song
# Manually specify a music player.
#
# Default: 'auto'
# Values: 'auto', 'player-name'
# Flag: --music_player
#
# Available values for 'player-name':
#
# amarok
# audacious
# banshee
# bluemindo
# clementine
# cmus
# deadbeef
# deepin-music
# dragon
# elisa
# exaile
# gnome-music
# gmusicbrowser
# Google Play
# guayadeque
# iTunes
# juk
# lollypop
# mocp
# mopidy
# mpd
# pogo
# pragha
# qmmp
# quodlibet
# rhythmbox
# sayonara
# smplayer
# spotify
# Spotify
# tomahawk
# vlc
# xmms2d
# yarock
music_player="auto"
# Format to display song information.
#
# Default: '%artist% - %album% - %title%'
# Values: '%artist%', '%album%', '%title%'
# Flag: --song_format
#
# Example:
# default: 'Song: Jet - Get Born - Sgt Major'
song_format="%artist% - %album% - %title%"
# Print the Artist, Album and Title on separate lines
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --song_shorthand
#
# Example:
# on: 'Artist: The Fratellis'
# 'Album: Costello Music'
# 'Song: Chelsea Dagger'
#
# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger'
song_shorthand="off"
# 'mpc' arguments (specify a host, password etc).
#
# Default: ''
# Example: mpc_args=(-h HOST -P PASSWORD)
mpc_args=()
# Text Colors
# Text Colors
#
# Default: 'distro'
# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
# Flag: --colors
#
# Each number represents a different part of the text in
# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info'
#
# Example:
# colors=(distro) - Text is colored based on Distro colors.
# colors=(4 6 1 8 8 6) - Text is colored in the order above.
colors=(distro)
# Text Options
# Toggle bold text
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --bold
bold="on"
# Enable/Disable Underline
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --underline
underline_enabled="on"
# Underline character
#
# Default: '-'
# Values: 'string'
# Flag: --underline_char
underline_char="-"
# Color Blocks
# Color block range
# The range of colors to print.
#
# Default: '0', '7'
# Values: 'num'
# Flag: --block_range
#
# Example:
#
# Display colors 0-7 in the blocks. (8 colors)
# neofetch --block_range 0 7
#
# Display colors 0-15 in the blocks. (16 colors)
# neofetch --block_range 0 15
block_range=(0 7)
# Toggle color blocks
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --color_blocks
color_blocks="on"
# Color block width in spaces
#
# Default: '3'
# Values: 'num'
# Flag: --block_width
block_width=3
# Color block height in lines
#
# Default: '1'
# Values: 'num'
# Flag: --block_height
block_height=1
# Progress Bars
# Bar characters
#
# Default: '-', '='
# Values: 'string', 'string'
# Flag: --bar_char
#
# Example:
# neofetch --bar_char 'elapsed' 'total'
# neofetch --bar_char '-' '='
bar_char_elapsed="-"
bar_char_total="="
# Toggle Bar border
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --bar_border
bar_border="on"
# Progress bar length in spaces
# Number of chars long to make the progress bars.
#
# Default: '15'
# Values: 'num'
# Flag: --bar_length
bar_length=15
# Progress bar colors
# When set to distro, uses your distro's logo colors.
#
# Default: 'distro', 'distro'
# Values: 'distro', 'num'
# Flag: --bar_colors
#
# Example:
# neofetch --bar_colors 3 4
# neofetch --bar_colors distro 5
bar_color_elapsed="distro"
bar_color_total="distro"
# Info display
# Display a bar with the info.
#
# Default: 'off'
# Values: 'bar', 'infobar', 'barinfo', 'off'
# Flags: --cpu_display
# --memory_display
# --battery_display
# --disk_display
#
# Example:
# bar: '[---=======]'
# infobar: 'info [---=======]'
# barinfo: '[---=======] info'
# off: 'info'
cpu_display="off"
memory_display="off"
battery_display="off"
disk_display="off"
# Backend Settings
# Image backend.
#
# Default: 'ascii'
# Values: 'ascii', 'caca', 'jp2a', 'iterm2', 'off', 'termpix', 'pixterm', 'tycat', 'w3m'
# Flag: --backend
image_backend="ascii"
# Image Source
#
# Which image or ascii file to display.
#
# Default: 'auto'
# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/'
# Flag: --source
#
# NOTE: 'auto' will pick the best image source for whatever image backend is used.
# In ascii mode, distro ascii art will be used and in an image mode, your
# wallpaper will be used.
image_source="auto"
# Ascii Options
# Ascii distro
# Which distro's ascii art to display.
#
# Default: 'auto'
# Values: 'auto', 'distro_name'
# Flag: --ascii_distro
#
# NOTE: Arch and Ubuntu have 'old' logo variants.
# Change this to 'arch_old' or 'ubuntu_old' to use the old logos.
# NOTE: Ubuntu has flavor variants.
# Change this to 'Lubuntu', 'Xubuntu', 'Ubuntu-GNOME' or 'Ubuntu-Budgie' to use the flavors.
# NOTE: Arch, Crux and Gentoo have a smaller logo variant.
# Change this to 'arch_small', 'crux_small' or 'gentoo_small' to use the small logos.
ascii_distro="auto"
# Ascii Colors
#
# Default: 'distro'
# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
# Flag: --ascii_colors
#
# Example:
# ascii_colors=(distro) - Ascii is colored based on Distro colors.
# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors.
ascii_colors=(distro)
# Bold ascii logo
# Whether or not to bold the ascii logo.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --ascii_bold
ascii_bold="on"
# Image Options
# Image loop
# Setting this to on will make neofetch redraw the image constantly until
# Ctrl+C is pressed. This fixes display issues in some terminal emulators.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --loop
image_loop="off"
# Thumbnail directory
#
# Default: '~/.cache/thumbnails/neofetch'
# Values: 'dir'
thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch"
# Crop mode
#
# Default: 'normal'
# Values: 'normal', 'fit', 'fill'
# Flag: --crop_mode
#
# See this wiki page to learn about the fit and fill options.
# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F
crop_mode="normal"
# Crop offset
# Note: Only affects 'normal' crop mode.
#
# Default: 'center'
# Values: 'northwest', 'north', 'northeast', 'west', 'center'
# 'east', 'southwest', 'south', 'southeast'
# Flag: --crop_offset
crop_offset="center"
# Image size
# The image is half the terminal width by default.
#
# Default: 'auto'
# Values: 'auto', '00px', '00%', 'none'
# Flags: --image_size
# --size
image_size="auto"
# Gap between image and text
#
# Default: '3'
# Values: 'num', '-num'
# Flag: --gap
gap=3
# Image offsets
# Only works with the w3m backend.
#
# Default: '0'
# Values: 'px'
# Flags: --xoffset
# --yoffset
yoffset=0
xoffset=0
# Image background color
# Only works with the w3m backend.
#
# Default: ''
# Values: 'color', 'blue'
# Flag: --bg_color
background_color=
# Misc Options
# Stdout mode
# Turn off all colors and disables image backend (ASCII/Image).
# Useful for piping into another command.
# Default: 'off'
# Values: 'on', 'off'
stdout="off"

View File

@ -0,0 +1,29 @@
# vim: filetype=neomuttrc
# muttrc file for account gmail
set realname = "Amin Kasrou Aouam"
set from = "akasroua@gmail.com"
set sendmail = "./.config/neomutt/etc/sendmail gmail"
set folder = "~/.mail/gmail"
#set header_cache = ~/.config/mutt/accounts/gmail/cache/headers
#set message_cachedir = ~/.config/mutt/accounts/gmail/cache/bodies
#set certificate_file = ~/.config/mutt/accounts/gmail/certificates
#source "~/.config/mutt/credentials/getmuttpass gmail |"
set mbox_type = Maildir
set ssl_starttls = yes
set ssl_force_tls = yes
set record = "+sent"
bind index,pager gg noop
bind index,pager g noop
bind index gg first-entry
unmailboxes *
mailboxes =gmail =------------------- =junk =Inbox =trash =sent
macro index,pager gi "<change-folder>=Inbox<enter>" "Go to inbox."
macro index,pager gs "<change-folder>=sent<enter>" "Go to sent."
macro index,pager gt "<change-folder>=trash<enter>" "Go to trash."
macro index,pager gj "<change-folder>=junk<enter>" "Go to spam."
set spoolfile = "+Inbox"
set record = "+sent"
set postponed = ""
set trash = "+trash"

View File

@ -0,0 +1,28 @@
# vim: filetype=neomuttrc
# muttrc file for account coolneng
set realname = "Amin Kasrou Aouam"
set from = "akasroua@correo.ugr.es"
set sendmail = "./.config/neomutt/etc/sendmail uni"
set folder = "~/.mail/uni"
#set header_cache = ~/.config/mutt/accounts/coolneng/cache/headers
#set message_cachedir = ~/.config/mutt/accounts/coolneng/cache/bodies
#set certificate_file = ~/.config/mutt/accounts/coolneng/certificates
#source "~/.config/mutt/credentials/getmuttpass coolneng |"
set mbox_type = Maildir
set ssl_starttls = yes
set ssl_force_tls = yes
bind index,pager gg noop
bind index,pager g noop
bind index gg first-entry
unmailboxes *
mailboxes =uni =------------------- =INBOX =trash =sent =archive
macro index,pager gi "<change-folder>=INBOX<enter>" "Go to inbox."
macro index,pager gs "<change-folder>=sent<enter>" "Go to sent."
macro index,pager gt "<change-folder>=trash<enter>" "Go to trash."
macro index,pager ga "<change-folder>=archive<enter>" "Go to archive."
set spoolfile = "+INBOX"
set record = "+sent"
set postponed = ""
set trash = "+trash"

View File

@ -0,0 +1,22 @@
## A file for aliases
# Uni staff
alias dani dmolina@decsai.ugr.es
alias cano carloscano@ugr.es
alias paco carranzafr@ugr.es
alias mesa cdemesa@decsai.ugr.es
# Uni students
alias elenche elenche@correo.ugr.es
alias bezout jesusmartinz@correo.ugr.es
alias lesca lesca98@correo.ugr.es
alias oumnia oumnia487@correo.ugr.es
alias juanca jclm@correo.ugr.es
# Personal
alias barbas arodasaparicio@gmail.com
alias rafika rafibel63@gmail.com
alias oekk luismata06@gmail.com
alias walid mkasrou@gmail.com
alias walida naouam61@gmail.com
alias tarek tarek@tarcript.me

View File

@ -0,0 +1,131 @@
# -*-muttrc-*-
#
# Command formats for gpg.
#
# Version notes:
#
# GPG 2.1 introduces the option "--pinentry-mode", which requires
# the "loopback" argument in instances where "--passphrase-fd" is
# used.
#
# Some of the older commented-out versions of the commands use gpg-2comp from:
# http://70t.de/download/gpg-2comp.tar.gz
#
# %p The empty string when no passphrase is needed,
# the string "PGPPASSFD=0" if one is needed.
#
# This is mostly used in conditional % sequences.
#
# %f Most PGP commands operate on a single file or a file
# containing a message. %f expands to this file's name.
#
# %s When verifying signatures, there is another temporary file
# containing the detached signature. %s expands to this
# file's name.
#
# %a In "signing" contexts, this expands to the value of the
# configuration variable $pgp_sign_as, if set, otherwise
# $pgp_default_key. You probably need to
# use this within a conditional % sequence.
#
# %r In many contexts, neomutt passes key IDs to pgp. %r expands to
# a list of key IDs.
# Section A: Key Management
# The default key for encryption (used by $pgp_self_encrypt and
# $postpone_encrypt).
#
# It will also be used for signing unless $pgp_sign_as is set to a
# key.
#
# Unless your key does not have encryption capability, uncomment this
# line and replace the keyid with your own.
#
# set pgp_default_key="0x12345678"
# If you have a separate signing key, or your key _only_ has signing
# capability, uncomment this line and replace the keyid with your
# signing keyid.
#
# set pgp_sign_as="0x87654321"
# Section B: Commands
# Note that we explicitly set the comment armor header since GnuPG, when used
# in some localiaztion environments, generates 8bit data in that header, thereby
# breaking PGP/MIME.
# decode application/pgp
#
set pgp_decode_command="gpg --status-fd=2 %?p?--pinentry-mode loopback --passphrase-fd 0? --no-verbose --quiet --batch --output - %f"
# Verify a signature
#
set pgp_verify_command="gpg --status-fd=2 --no-verbose --quiet --batch --output - --verify %s %f"
# Decrypt an attachment
#
set pgp_decrypt_command="gpg --status-fd=2 %?p?--pinentry-mode loopback --passphrase-fd 0? --no-verbose --quiet --batch --output - --decrypt %f"
# Create a PGP/MIME signed attachment
#
# set pgp_sign_command="gpg-2comp --comment '' --no-verbose --batch --output - %?p?--passphrase-fd 0? --armor --detach-sign --textmode %?a?-u %a? %f"
#
set pgp_sign_command="gpg %?p?--pinentry-mode loopback --passphrase-fd 0? --no-verbose --batch --quiet --output - --armor --textmode %?a?--local-user %a? --detach-sign %f"
# Create a application/pgp inline signed message. This style is obsolete but still needed for Hushmail recipients and some MUAs.
#
# set pgp_clearsign_command="gpg-2comp --comment '' --no-verbose --batch --output - %?p?--passphrase-fd 0? --armor --textmode --clearsign %?a?-u %a? %f"
#
set pgp_clearsign_command="gpg %?p?--pinentry-mode loopback --passphrase-fd 0? --no-verbose --batch --quiet --output - --armor --textmode %?a?--local-user %a? --clearsign %f"
# Create an encrypted attachment (note that some users include the --always-trust option here)
#
# set pgp_encrypt_only_command="/usr/libexec/neomutt/pgpewrap gpg-2comp -v --batch --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f"
#
set pgp_encrypt_only_command="/usr/libexec/neomutt/pgpewrap gpg --batch --quiet --no-verbose --output - --textmode --armor --encrypt -- --recipient %r -- %f"
# Create an encrypted and signed attachment (note that some users include the --always-trust option here)
#
# set pgp_encrypt_sign_command="/usr/libexec/neomutt/pgpewrap gpg-2comp %?p?--passphrase-fd 0? -v --batch --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f"
#
set pgp_encrypt_sign_command="/usr/libexec/neomutt/pgpewrap gpg %?p?--pinentry-mode loopback --passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - %?a?--local-user %a? --armor --sign --encrypt -- --recipient %r -- %f"
# Import a key into the public key ring
#
set pgp_import_command="gpg --no-verbose --import %f"
# Export a key from the public key ring
#
set pgp_export_command="gpg --no-verbose --armor --export %r"
# Verify a key
#
set pgp_verify_key_command="gpg --verbose --batch --fingerprint --check-sigs %r"
# Read in the public key ring
#
set pgp_list_pubring_command="gpg --no-verbose --batch --quiet --with-colons --with-fingerprint --with-fingerprint --list-keys %r"
# Read in the secret key ring
#
set pgp_list_secring_command="gpg --no-verbose --batch --quiet --with-colons --with-fingerprint --with-fingerprint --list-secret-keys %r"
# Fetch keys
# set pgp_getkeys_command="pkspxycwrap %r"
# pattern for good signature - may need to be adapted to locale!
# OK, here's a version which uses gnupg's message catalog:
# set pgp_good_sign="^gpgv?: Good signature from"
# set pgp_good_sign="`gettext -d gnupg -s 'Good signature from "' | tr -d '"'`"
#
# Output pattern to indicate a valid signature using --status-fd messages
set pgp_good_sign="^\\[GNUPG:\\] GOODSIG"
# Output pattern to verify a decryption occurred
# This is now deprecated by pgp_check_gpg_decrypt_status_fd:
# set pgp_decryption_okay="^\\[GNUPG:\\] DECRYPTION_OKAY"
set pgp_check_gpg_decrypt_status_fd

View File

@ -0,0 +1,6 @@
text/html; w3m -I %{charset} -T text/html %s; copiousoutput;
text/* ; vim %s ; edit=vim %s ; compose=vim %s ; needsterminal
image/*; sxiv %s ; copiousoutput
application/pdf; zathura %s ;
application/docx; libreoffice %s ;
application/pgp-encrypted; gpg -d '%s'; copiousoutput;

View File

@ -0,0 +1,71 @@
# vim: filetype=neomuttrc
# Default index colors:
color index yellow default '.*'
color index_author red default '.*'
color index_number blue default
color index_subject cyan default '.*'
# For new mail:
color index brightyellow black "~N"
color index_author brightred black "~N"
color index_subject brightcyan black "~N"
# Header colors:
color header blue default ".*"
color header brightmagenta default "^(From)"
color header brightcyan default "^(Subject)"
color header brightwhite default "^(CC|BCC)"
mono bold bold
mono underline underline
mono indicator reverse
mono error bold
color normal default default
color indicator brightblack white
color sidebar_highlight red default
color sidebar_divider brightblack black
color sidebar_flagged red black
color sidebar_new green black
color normal brightyellow default
color error red default
color tilde black default
color message cyan default
color markers red white
color attachment white default
color search brightmagenta default
color status brightyellow black
color hdrdefault brightgreen default
color quoted green default
color quoted1 blue default
color quoted2 cyan default
color quoted3 yellow default
color quoted4 red default
color quoted5 brightred default
color signature brightgreen default
color bold black default
color underline black default
color normal default default
color body brightred default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # Email addresses
color body brightblue default "(https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+" # URL
color body green default "\`[^\`]*\`" # Green text between ` and `
color body brightblue default "^# \.*" # Headings as bold blue
color body brightcyan default "^## \.*" # Subheadings as bold cyan
color body brightgreen default "^### \.*" # Subsubheadings as bold green
color body yellow default "^(\t| )*(-|\\*) \.*" # List items as yellow
color body brightcyan default "[;:][-o][)/(|]" # emoticons
color body brightcyan default "[;:][)(|]" # emoticons
color body brightcyan default "[*]?((N)?ACK|CU|LOL|SCNR|BRB|BTW|CWYL|\
|FWIW|vbg|GD&R|HTH|HTHBE|IMHO|IMNSHO|\
|IRL|RTFM|ROTFL|ROFL|YMMV)[*]?"
color body brightcyan default "[ ][*][^*]*[*][ ]?" # more emoticon?
color body brightcyan default "[ ]?[*][^*]*[*][ ]" # more emoticon?
color body red default "(BAD signature)"
color body cyan default "(Good signature)"
color body brightblack default "^gpg: Good signature .*"
color body brightyellow default "^gpg: "
color body brightyellow red "^gpg: BAD signature from.*"
mono body bold "^gpg: Good signature"
mono body bold "^gpg: BAD signature from.*"
color body red default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]""']))']))']))']))']))']))']))']))']))']))']))']))'])']))))))])]"

View File

@ -0,0 +1,3 @@
#!/bin/sh
./.local/bin/MIMEmbellish | msmtp -a $1 -t

View File

@ -0,0 +1 @@
Œ $<24>ì`ÐÒ™ç<>õ¸[Þa´´§s×´d_Y6ëø1d<31>!ö&n´ÔÿÁ¥÷Ð<C3B7>ºÓDó×­ZæÙÃHøù?7™äQyi¢“ÝÑâ{ PôÎÒ;ìgª€~²þÔ>BÃ¥JGr¹*@GH³âûËK¨ÚRî)öÂR]<5D>uµÖÙÇù a¦éî‰TºÇ;²úM©\¢’ï E

View File

@ -0,0 +1 @@
<EFBFBD> ­Dg₪;a־׀ׂH.׀.כdGRצ†ב×<D791>R<EFBFBD>yט<11>־<EFBFBD>'ֿ‘ר'@ֿOדi2,~ת"XBzף<7A>©³B'[£<>¸uµ÷םֳץc¥ֲ<C2A5>€צ¼ד¼הו

View File

@ -0,0 +1,89 @@
#vim: filetype=neomuttrc
# This is the general mutt config which has the settings that all accounts use.
bind index,pager i noop
bind index,pager g noop
bind index \Cf noop
source etc/muttcol
source etc/aliases
source personal.muttrc
set sleep_time = 0
set sort = 'reverse-date'
set editor = $EDITOR
set copy = no
set timeout = "15"
set mail_check = "30"
set imap_idle = yes
set beep_new = yes
set mailcap_path = ~/.config/neomutt/etc/mailcap
set date_format="%d/%m/%y %H:%M"
set index_format="%2C %zs %?X?A& ? %D %-15.15F %s (%-4.4c)"
set markers = no
set mark_old = no
set mime_forward = yes
set smtp_authenticators = 'gssapi:login'
set wait_key = no
auto_view text/html
auto_view application/pgp-encrypted
alternative_order text/plain text/enriched text/html
set rfc2047_parameters = yes
set send_charset = 'us-ascii:utf-8'
set ssl_use_tlsv1_2=yes
# General remappings
bind editor <space> noop
bind index G last-entry
bind index gg first-entry
bind pager j next-line
bind pager k previous-line
bind pager gg top
bind pager G bottom
bind index d half-down
bind index u half-up
bind index D delete-message
bind index U undelete-message
bind index F search
bind index,pager R group-reply
bind index,pager \031 previous-undeleted # Mouse wheel
bind index,pager \005 next-undeleted # Mouse wheel
macro index,pager S <sync-mailbox>
macro index,pager \Cu |urlscan\n
macro index,pager ,, |urlscan\n
# View attachments properly.
bind attach <return> view-mailcap
set fast_reply # skip to compose when replying
set fcc_attach # save attachments with the body
unset mime_forward # forward attachments as part of body
set forward_format = "Fwd: %s" # format of subject when forwarding
set forward_decode # decode when forwarding
set forward_quote # include message in forwards
set reverse_name # reply as whomever it was to
set include # include message in replies
#Ctrl-R to mark all as read
macro index \Cr "T~U<enter><tag-prefix><clear-flag>N<untag-pattern>.<enter>" "mark all messages as read"
#
# #sync email
macro index o "<shell-escape>mbsync -a 2>/dev/null 1>&2 &<enter>" "run mbsync to sync all mail"
# #copy/move dialogs
macro index C "<copy-message>?<toggle-mailboxes>" "copy a message to a mailbox"
macro index M "<save-message>?<toggle-mailboxes>" "move a message to a mailbox"
# Notmuch searching
macro index \Cf "<enter-command>unset wait_key<enter><shell-escape>read -p 'notmuch query: ' x; echo \$x >~/.cache/mutt_terms<enter><limit>~i \"\`notmuch search --output=messages \$(cat ~/.cache/mutt_terms) | head -n 600 | perl -le '@a=<>;chomp@a;s/\^id:// for@a;$,=\"|\";print@a'\`\"<enter>" "show only messages matching a notmuch pattern"
macro index A "<limit>all\n" "show all messages (undo limit)"
# # Sidebar mappings
set sidebar_visible = yes
set sidebar_width = 20
set sidebar_short_path = yes
set sidebar_next_new_wrap = yes
set mail_check_stats
set sidebar_format = '%B%?F? [%F]?%* %?N?%N/? %?S?%S?'
bind index,pager \Ck sidebar-prev
bind index,pager \Cj sidebar-next
bind index,pager \Co sidebar-open
bind index,pager \Cp sidebar-prev-new
bind index,pager \Cn sidebar-next-new
bind index,pager B sidebar-toggle-visible

View File

@ -0,0 +1,4 @@
macro index,pager i1 '<sync-mailbox><enter-command>source "/home/coolneng/.config/neomutt"/accounts/gmail.muttrc<enter><change-folder>!<enter>'
source /home/coolneng/.config/neomutt/accounts/gmail.muttrc
macro index,pager i2 '<sync-mailbox><enter-command>source "/home/coolneng/.config/neomutt"/accounts/uni.muttrc<enter><change-folder>!<enter>'
source /home/coolneng/.config/neomutt/accounts/uni.muttrc

View File

@ -0,0 +1,238 @@
#!/usr/local/bin/python3.6
import re
import sys
import email
import shlex
import mimetypes
import subprocess
from copy import copy
from hashlib import md5
from email import charset
from email import encoders
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.nonmultipart import MIMENonMultipart
from os.path import basename, splitext, expanduser
charset.add_charset('utf-8', charset.SHORTEST, '8bit')
def pandoc(from_format, to_format='markdown', plain='markdown', title=None):
markdown = ('markdown'
'-blank_before_blockquote')
if from_format == 'plain':
from_format = plain
if from_format == 'markdown':
from_format = markdown
if to_format == 'markdown':
to_format = markdown
command = 'pandoc -f {} -t {} --standalone --highlight-style=tango'
if to_format in ('html', 'html5'):
if title is not None:
command += ' --variable=pagetitle:{}'.format(shlex.quote(title))
command += ' --webtex --template={}'.format(
expanduser('~/.pandoc/templates/email.html'))
return command.format(from_format, to_format)
def gmailfy(payload):
return payload.replace('<blockquote>',
'<blockquote class="gmail_quote" style="'
'padding: 0 7px 0 7px;'
'border-left: 2px solid #cccccc;'
'font-style: italic;'
'margin: 0 0 7px 3px;'
'">')
def make_alternative(message, part):
alternative = convert(part, 'html',
pandoc(part.get_content_subtype(),
to_format='html',
title=message.get('Subject')))
alternative.set_payload(gmailfy(alternative.get_payload()))
return alternative
def make_replacement(message, part):
return convert(part, 'plain', pandoc(part.get_content_subtype()))
def convert(part, to_subtype, command):
payload = part.get_payload()
if isinstance(payload, str):
payload = payload.encode('utf-8')
else:
payload = part.get_payload(None, True)
if not isinstance(payload, bytes):
payload = payload.encode('utf-8')
process = subprocess.run(
shlex.split(command),
input=payload, stdout=subprocess.PIPE, check=True)
return MIMEText(process.stdout, to_subtype, 'utf-8')
def with_alternative(parent, part, from_signed,
make_alternative=make_alternative,
make_replacement=None):
try:
alternative = make_alternative(parent or part, from_signed or part)
replacement = (make_replacement(parent or part, part)
if from_signed is None and make_replacement is not None
else part)
except:
return parent or part
envelope = MIMEMultipart('alternative')
if parent is None:
for k, v in part.items():
if (k.lower() != 'mime-version'
and not k.lower().startswith('content-')):
envelope.add_header(k, v)
del part[k]
envelope.attach(replacement)
envelope.attach(alternative)
if parent is None:
return envelope
payload = parent.get_payload()
payload[payload.index(part)] = envelope
return parent
def tag_attachments(message):
if message.get_content_type() == 'multipart/mixed':
for part in message.get_payload():
if (part.get_content_maintype() in ['image']
and 'Content-ID' not in part):
filename = part.get_param('filename',
header='Content-Disposition')
if isinstance(filename, tuple):
filename = str(filename[2], filename[0] or 'us-ascii')
if filename:
filename = splitext(basename(filename))[0]
if filename:
part.add_header('Content-ID', '<{}>'.format(filename))
return message
def attachment_from_file_path(attachment_path):
try:
mime, encoding = mimetypes.guess_type(attachment_path, strict=False)
maintype, subtype = mime.split('/')
with open(attachment_path, 'rb') as payload:
attachment = MIMENonMultipart(maintype, subtype)
attachment.set_payload(payload.read())
encoders.encode_base64(attachment)
if encoding:
attachment.add_header('Content-Encoding', encoding)
return attachment
except:
return None
attachment_path_pattern = re.compile(r'\]\s*\(\s*file://(/[^)]*\S)\s*\)|'
r'\]\s*:\s*file://(/.*\S)\s*$',
re.MULTILINE)
def link_attachments(payload):
attached = []
attachments = []
def on_match(match):
if match.group(1):
attachment_path = match.group(1)
cid_fmt = '](cid:{})'
else:
attachment_path = match.group(2)
cid_fmt = ']: cid:{}'
attachment_id = md5(attachment_path.encode()).hexdigest()
if attachment_id in attached:
return cid_fmt.format(attachment_id)
attachment = attachment_from_file_path(attachment_path)
if attachment:
attachment.add_header('Content-ID', '<{}>'.format(attachment_id))
attachments.append(attachment)
attached.append(attachment_id)
return cid_fmt.format(attachment_id)
return match.group()
return attachments, attachment_path_pattern.sub(on_match, payload)
def with_local_attachments(parent, part, from_signed,
link_attachments=link_attachments):
if from_signed is None:
attachments, payload = link_attachments(part.get_payload())
part.set_payload(payload)
else:
attachments, payload = link_attachments(from_signed.get_payload())
from_signed = copy(from_signed)
from_signed.set_payload(payload)
if not attachments:
return parent, part, from_signed
if parent is None:
parent = MIMEMultipart('mixed')
for k, v in part.items():
if (k.lower() != 'mime-version'
and not k.lower().startswith('content-')):
parent.add_header(k, v)
del part[k]
parent.attach(part)
for attachment in attachments:
parent.attach(attachment)
return parent, part, from_signed
def is_target(part, target_subtypes):
return (part.get('Content-Disposition', 'inline') == 'inline'
and part.get_content_maintype() == 'text'
and part.get_content_subtype() in target_subtypes)
def pick_from_signed(part, target_subtypes):
for from_signed in part.get_payload():
if is_target(from_signed, target_subtypes):
return from_signed
def seek_target(message, target_subtypes=['plain', 'markdown']):
if message.is_multipart():
if message.get_content_type() == 'multipart/signed':
part = pick_from_signed(message, target_subtypes)
if part is not None:
return None, message, part
elif message.get_content_type() == 'multipart/mixed':
for part in message.get_payload():
if part.is_multipart():
if part.get_content_type() == 'multipart/signed':
from_signed = pick_from_signed(part, target_subtypes)
if from_signed is not None:
return message, part, from_signed
elif is_target(part, target_subtypes):
return message, part, None
else:
if is_target(message, target_subtypes):
return None, message, None
return None, None, None
def main():
try:
message = email.message_from_file(sys.stdin)
parent, part, from_signed = seek_target(message)
if (parent, part, from_signed) == (None, None, None):
print(message)
return
tag_attachments(message)
print(with_alternative(
*with_local_attachments(parent, part, from_signed)))
except (BrokenPipeError, KeyboardInterrupt):
pass
if __name__ == '__main__':
main()

View File

@ -0,0 +1,49 @@
## Set keyboard layout
setxkbmap -layout es &
## Start compositor
compton -cCb --config ~/.config/compton.conf &
#
## Set background image
nitrogen --restore &
## Turn off/on System Beep
set b off &
## Xorg settings
xrdb ~/.Xresources &
## Clipboard manager
(sleep 2; anamnesis --start) &
## Start desktop visualizer (eyecandy)
(sleep 3; conky) &
## Bluelight filter
(sleep 4; redshift) &
## Bar with invisible tray
(sleep 2; stalonetray --dockapp-mode simple --kludges force_icons_size -i 15) &
(sleep 3; polybar main) &
## Urxvt daemon
urxvtd -q -f -o &
## Create musicpd temporary log
touch /tmp/mpd-log &
## KeepassXC
(sleep 2; bash -c "secret-tool lookup 'keepass' 'login' | keepassxc --pw-stdin ~/Nextcloud/Documents/IT/MDP.kbdx") &
## GPG
(sleep 3; bash -c "secret-tool lookup 'gpg' 'login' | gpg --no-tty --pinentry-mode loopback --passphrase-fd 0 -d ~/.password-store/mail/uni.gpg") &
## Nextcloud
(sleep 5; nextcloud) &
## Spacemacs daemon
(sleep 7; emacs --daemon=instance1) &
## Imap IDLE
(sleep 10; imapnotify -c ~/.config/imapnotify/gmail.js) &
(sleep 10; imapnotify -c ~/.config/imapnotify/uni.js) &

View File

@ -0,0 +1,2 @@
## GNOME Keyring
eval $(/usr/local/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh)

103
openbox/.config/openbox/menu.xml Executable file
View File

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="utf-8"?>
<openbox_menu>
<menu id="Office" label="Office">
<separator label="OFFICE"/>
<item label="LibreOffice Base">
<action name="Execute">
<command>libreoffice --base</command>
</action>
</item>
<item label="LibreOffice Calc">
<action name="Execute">
<command>libreoffice --calc</command>
</action>
</item>
<item label="LibreOffice Draw">
<action name="Execute">
<command>libreoffice --draw</command>
</action>
</item>
<item label="LibreOffice Impress">
<action name="Execute">
<command>libreoffice --impress</command>
</action>
</item>
<item label="LibreOffice Math">
<action name="Execute">
<command>libreoffice --math</command>
</action>
</item>
<item label="LibreOffice Writer">
<action name="Execute">
<command>libreoffice --writer</command>
</action>
</item>
<item label="LibreOffice">
<action name="Execute">
<command>libreoffice</command>
</action>
</item>
</menu>
<menu id="root-menu" label="Openbox 3">
<separator label="MAIN MENU"/>
<item label="Run Program">
<action name="Execute">
<command>rofi -show drun -config /home/coolneng/.config/rofi/config</command>
</action>
</item>
<separator/>
<item label="Terminal">
<action name="Execute">
<command>exo-open --launch TerminalEmulator</command>
</action>
</item>
<item label="Web Browser">
<action name="Execute">
<command>firefox</command>
</action>
</item>
<item label="File Manager">
<action name="Execute">
<command>exo-open --launch FileManager</command>
</action>
</item>
<separator/>
<menu id="Multimedia"/>
<menu id="Network"/>
<menu id="Office"/>
<separator/>
<menu id="Preferences"/>
<separator/>
<separator/>
<item label="Change Wallpaper">
<action name="Execute">
<execute>nitrogen</execute>
</action>
</item>
<item label="Restart Openbox">
<action name="Execute">
<execute>openbox --restart</execute>
</action>
</item>
<item label="Reboot">
<action name="Execute">
<execute>shutdown -r now</execute>
</action>
</item>
<item label="Lock">
<action name="Execute">
<command>i3lock -i ~/Pictures/Wallpapers/wallhaven-638719.png</command>
</action>
</item>
<item label="Logout">
<action name="Exit">
<execute>kill -9 -1</execute>
</action>
</item>
<item label="Shutdown">
<action name="Execute">
<execute>shutdown -p now</execute>
</action>
</item>
</menu>
</openbox_menu>

830
openbox/.config/openbox/rc.xml Executable file
View File

@ -0,0 +1,830 @@
<?xml version="1.0"?>
<openbox_config xmlns="http://openbox.org/3.4/rc" xmlns:xi="http://www.w3.org/2001/XInclude">
<resistance>
<strength>10</strength>
<screen_edge_strength>20</screen_edge_strength>
</resistance>
<focus>
<focusNew>yes</focusNew>
<!-- always try to focus new windows when they appear. other rules do
apply -->
<followMouse>no</followMouse>
<!-- move focus to a window when you move the mouse into it -->
<focusLast>yes</focusLast>
<!-- focus the last used window when changing desktops, instead of the one
under the mouse pointer. when followMouse is enabled -->
<underMouse>no</underMouse>
<!-- move focus under the mouse, even when the mouse is not moving -->
<focusDelay>200</focusDelay>
<!-- when followMouse is enabled, the mouse must be inside the window for
this many milliseconds (1000 = 1 sec) before moving focus to it -->
<raiseOnFocus>no</raiseOnFocus>
<!-- when followMouse is enabled, and a window is given focus by moving the
mouse into it, also raise the window -->
</focus>
<placement>
<policy>UnderMouse</policy>
<!-- 'Smart' or 'UnderMouse' -->
<center>yes</center>
<!-- whether to place windows in the center of the free area found or
the top left corner -->
<monitor>Mouse</monitor>
<!-- with Smart placement on a multi-monitor system, try to place new windows
on: 'Any' - any monitor, 'Mouse' - where the mouse is, 'Active' - where
the active window is, 'Primary' - only on the primary monitor -->
<primaryMonitor>Mouse</primaryMonitor>
<!-- The monitor where Openbox should place popup dialogs such as the
focus cycling popup, or the desktop switch popup. It can be an index
from 1, specifying a particular monitor. Or it can be one of the
following: 'Mouse' - where the mouse is, or
'Active' - where the active window is -->
</placement>
<theme>
<name>Aesthetic</name>
<titleLayout>IMC</titleLayout>
<!--
available characters are NDSLIMC, each can occur at most once.
N: window icon
L: window label (AKA title).
I: iconify
M: maximize
C: close
S: shade (roll up/down)
D: omnipresent (on all desktops).
-->
<!--
<cornerRadius>4</cornerRadius>
-->
<keepBorder>yes</keepBorder>
<animateIconify>yes</animateIconify>
<font place="ActiveWindow">
<name>Roboto Condensed, Condensed</name>
<size>9</size>
<!-- font size in points -->
<weight>Normal</weight>
<!-- 'bold' or 'normal' -->
<slant>Normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="InactiveWindow">
<name>Roboto Condensed, Condensed</name>
<size>9</size>
<!-- font size in points -->
<weight>Normal</weight>
<!-- 'bold' or 'normal' -->
<slant>Normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="MenuHeader">
<name>Roboto Condensed, Condensed</name>
<size>9</size>
<!-- font size in points -->
<weight>Normal</weight>
<!-- 'bold' or 'normal' -->
<slant>Normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="MenuItem">
<name>Roboto Condensed, Condensed</name>
<size>9</size>
<!-- font size in points -->
<weight>Normal</weight>
<!-- 'bold' or 'normal' -->
<slant>Normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="ActiveOnScreenDisplay">
<name>Roboto Condensed, Condensed</name>
<size>9</size>
<!-- font size in points -->
<weight>Normal</weight>
<!-- 'bold' or 'normal' -->
<slant>Normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="InactiveOnScreenDisplay">
<name>Roboto Condensed, Condensed</name>
<size>9</size>
<!-- font size in points -->
<weight>Normal</weight>
<!-- 'bold' or 'normal' -->
<slant>Normal</slant>
<!-- 'italic' or 'normal' -->
</font>
</theme>
<desktops>
<!-- this stuff is only used at startup, pagers allow you to change them
during a session
these are default values to use when other ones are not already set
by other applications, or saved in your session
use obconf if you want to change these without having to log out
and back in -->
<number>4</number>
<firstdesk>1</firstdesk>
<names>
<name>1</name>
<name>2</name>
<name>3</name>
<name>4</name>
<name>5</name>
<name>6</name>
<name>7</name>
<name>8</name>
</names>
<popupTime>0</popupTime>
<!-- The number of milliseconds to show the popup for when switching
desktops. Set this to 0 to disable the popup. -->
</desktops>
<resize>
<drawContents>yes</drawContents>
<popupShow>Nonpixel</popupShow>
<!-- 'Always', 'Never', or 'Nonpixel' (xterms and such) -->
<popupPosition>Center</popupPosition>
<!-- 'Center' or 'Top' -->
<popupFixedPosition>
<!-- these are used if popupPosition is set to 'Fixed' -->
<x>10</x>
<!-- positive number for distance from left edge, negative number for
distance from right edge, or 'Center' -->
<y>10</y>
<!-- positive number for distance from top edge, negative number for
distance from bottom edge, or 'Center' -->
</popupFixedPosition>
</resize>
<!-- You can reserve a portion of your screen where windows will not cover when
they are maximized, or when they are initially placed.
Many programs reserve space automatically, but you can use this in other
cases. -->
<margins>
<top>0</top>
<bottom>0</bottom>
<left>0</left>
<right>0</right>
</margins>
<dock>
<position>Floating</position>
<!-- (Top|Bottom)(Left|Right|)|Top|Bottom|Left|Right|Floating -->
<floatingX>0</floatingX>
<floatingY>0</floatingY>
<noStrut>no</noStrut>
<stacking>Above</stacking>
<!-- 'Above', 'Normal', or 'Below' -->
<direction>Vertical</direction>
<!-- 'Vertical' or 'Horizontal' -->
<autoHide>no</autoHide>
<hideDelay>300</hideDelay>
<!-- in milliseconds (1000 = 1 second) -->
<showDelay>300</showDelay>
<!-- in milliseconds (1000 = 1 second) -->
<moveButton>Middle</moveButton>
<!-- 'Left', 'Middle', 'Right' -->
</dock>
<keyboard>
<chainQuitKey>C-g</chainQuitKey>
<keybind key="C-A-Right">
<action name="DesktopRight"/>
</keybind>
<keybind key="W-t">
<action name="UnmaximizeFull"/>
<action name="MaximizeVert"/>
<action name="MoveResizeTo">
<width>29%</width>
</action>
<action name="MoveToEdgeWest"/>
</keybind>
<keybind key="W-y">
<action name="UnmaximizeFull"/>
<action name="MaximizeVert"/>
<action name="MoveResizeTo">
<width>71%</width>
</action>
<action name="MoveToEdgeEast"/>
</keybind>
<keybind key="W-c">
<action name="Execute">
<command>anamnesis -b</command>
</action>
</keybind>
<keybind key="C-S-Right">
<action name="SendToDesktopRight"/>
</keybind>
<keybind key="C-S-Left">
<action name="SendToDesktopPrevious"/>
</keybind>
<keybind key="XF86AudioPlay">
<action name="Execute">
<command>mpc toggle</command>
</action>
</keybind>
<keybind key="XF86AudioStop">
<action name="Execute">
<command>mpc stop</command>
</action>
</keybind>
<keybind key="S-W-d">
<action name="Execute">
<command>xdg-open "$(locate home media | rofi -threads 0 -width 100 -color-window "#000000, #000000, #000000" -color-normal "#000000, #b3e774, #000000, #b3e774, #000000" -color-active "#000000, #b3e774, #000000, #b3e774, #000000" -color-urgent "#000000, #b3e774, #000000, #b3e774, #000000" -dmenu -i -p "locate:")"</command>
</action>
</keybind>
<keybind key="W-f">
<action name="Execute">
<command>firefox</command>
</action>
</keybind>
<keybind key="W-e">
<action name="Execute">
<command>emacsclient -nc -s instance1</command>
</action>
</keybind>
<keybind key="XF86AudioRaiseVolume">
<action name="Execute">
<command>mixer vol +5</command>
</action>
</keybind>
<keybind key="XF86AudioLowerVolume">
<action name="Execute">
<command>mixer vol -5</command>
</action>
</keybind>
<keybind key="XF86AudioMute">
<action name="Execute">
<command>mixer vol mute</command>
</action>
</keybind>
<keybind key="Menu">
<action name="ShowMenu"/>
</keybind>
<keybind key="A-Tab">
<action name="NextWindow"/>
</keybind>
<keybind key="C-A-Left">
<action name="DesktopLeft"/>
</keybind>
<keybind key="XF86AudioStop">
<action name="Execute">
<command>mpc --host=/home/coolneng/.mpd/socket stop</command>
</action>
</keybind>
<keybind key="XF86AudioPlay">
<action name="Execute">
<command>mpc --host=/home/coolneng/.mpd/socket toggle</command>
</action>
</keybind>
<keybind key="XF86AudioPrev">
<action name="Execute">
<command>mpc --host=/home/coolneng/.mpd/socket prev</command>
</action>
</keybind>
<keybind key="XF86AudioNext">
<action name="Execute">
<command>mpc --host=/home/coolneng/.mpd/socket next</command>
</action>
</keybind>
<keybind key="Print">
<action name="Execute">
<command>scrot -e 'mv $f ~/Nextcloud/Photos/Screenshots'</command>
</action>
</keybind>
<keybind key="W-d">
<action name="Execute">
<command>rofi -show drun</command>
</action>
</keybind>
<keybind key="W-space">
<action name="Iconify"/>
</keybind>
<keybind key="W-Up">
<action name="MaximizeFull"/>
</keybind>
<keybind key="W-Down">
<action name="UnmaximizeFull"/>
<action name="MoveResizeTo">
<width>50%</width>
<height>50%</height>
</action>
<action name="MoveToCenter"/>
</keybind>
<keybind key="W-Left">
<action name="UnmaximizeFull"/>
<action name="MaximizeVert"/>
<action name="MoveResizeTo">
<width>50%</width>
</action>
<action name="MoveToEdgeWest"/>
</keybind>
<keybind key="W-Right">
<action name="UnmaximizeFull"/>
<action name="MaximizeVert"/>
<action name="MoveResizeTo">
<width>50%</width>
</action>
<action name="MoveToEdgeEast"/>
</keybind>
<keybind key="W-Return">
<action name="Execute">
<command>urxvtc</command>
</action>
</keybind>
<keybind key="W-w">
<action name="Close"/>
</keybind>
</keyboard>
<mouse>
<dragThreshold>8</dragThreshold>
<!-- number of pixels the mouse must move before a drag begins -->
<doubleClickTime>400</doubleClickTime>
<!-- in milliseconds (1000 = 1 second) -->
<screenEdgeWarpTime>400</screenEdgeWarpTime>
<!-- Time before changing desktops when the pointer touches the edge of the
screen while moving a window, in milliseconds (1000 = 1 second).
Set this to 0 to disable warping -->
<screenEdgeWarpMouse>false</screenEdgeWarpMouse>
<!-- Set this to TRUE to move the mouse pointer across the desktop when
switching due to hitting the edge of the screen -->
<context name="Frame">
<mousebind action="Press" button="A-Left">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind action="Click" button="A-Left">
<action name="Unshade"/>
</mousebind>
<mousebind action="Drag" button="A-Left">
<action name="Move"/>
</mousebind>
<mousebind action="Press" button="A-Right">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind action="Drag" button="A-Right">
<action name="Resize"/>
</mousebind>
<mousebind action="Press" button="A-Middle">
<action name="Lower"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
</mousebind>
<mousebind action="Click" button="A-Up">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind action="Click" button="A-Down">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
<mousebind action="Click" button="C-A-Up">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind action="Click" button="C-A-Down">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
<mousebind action="Click" button="A-S-Up">
<action name="SendToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind action="Click" button="A-S-Down">
<action name="SendToDesktop">
<to>next</to>
</action>
</mousebind>
</context>
<context name="Titlebar">
<mousebind action="Press" button="Left">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind action="Drag" button="Left">
<action name="Move"/>
</mousebind>
<mousebind action="DoubleClick" button="Left">
<action name="ToggleMaximizeFull"/>
</mousebind>
<mousebind action="Press" button="Middle">
<action name="Lower"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
</mousebind>
<mousebind action="Click" button="Up">
<action name="if">
<shaded>no</shaded>
<then>
<action name="Shade"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
<action name="Lower"/>
</then>
</action>
</mousebind>
<mousebind action="Click" button="Down">
<action name="if">
<shaded>yes</shaded>
<then>
<action name="Unshade"/>
<action name="Raise"/>
</then>
</action>
</mousebind>
<mousebind action="Press" button="Right">
<action name="Focus"/>
<action name="Raise"/>
<action name="ShowMenu">
<menu>client-menu</menu>
</action>
</mousebind>
</context>
<context name="Titlebar Top Right Bottom Left TLCorner TRCorner BRCorner BLCorner">
<mousebind action="Press" button="Left">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind action="Press" button="Middle">
<action name="Lower"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
</mousebind>
<mousebind action="Press" button="Right">
<action name="Focus"/>
<action name="Raise"/>
<action name="ShowMenu">
<menu>client-menu</menu>
</action>
</mousebind>
</context>
<context name="Top">
<mousebind action="Press" button="Left">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind action="Drag" button="Left">
<action name="Resize">
<edge>top</edge>
</action>
</mousebind>
</context>
<context name="Left">
<mousebind action="Press" button="Left">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind action="Drag" button="Left">
<action name="Resize">
<edge>left</edge>
</action>
</mousebind>
</context>
<context name="Right">
<mousebind action="Press" button="Left">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind action="Drag" button="Left">
<action name="Resize">
<edge>right</edge>
</action>
</mousebind>
</context>
<context name="Bottom">
<mousebind action="Press" button="Left">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind action="Drag" button="Left">
<action name="Resize">
<edge>bottom</edge>
</action>
</mousebind>
<mousebind action="Press" button="Middle">
<action name="Lower"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
</mousebind>
<mousebind action="Press" button="Right">
<action name="Focus"/>
<action name="Raise"/>
<action name="ShowMenu">
<menu>client-menu</menu>
</action>
</mousebind>
</context>
<context name="TRCorner BRCorner TLCorner BLCorner">
<mousebind action="Press" button="Left">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind action="Drag" button="Left">
<action name="Resize"/>
</mousebind>
</context>
<context name="Client">
<mousebind action="Press" button="Left">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind action="Press" button="Middle">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind action="Press" button="Right">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
</context>
<context name="Icon">
<mousebind action="Press" button="Left">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
<action name="ShowMenu">
<menu>client-menu</menu>
</action>
</mousebind>
<mousebind action="Press" button="Right">
<action name="Focus"/>
<action name="Raise"/>
<action name="ShowMenu">
<menu>client-menu</menu>
</action>
</mousebind>
</context>
<context name="AllDesktops">
<mousebind action="Press" button="Left">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind action="Click" button="Left">
<action name="ToggleOmnipresent"/>
</mousebind>
</context>
<context name="Shade">
<mousebind action="Press" button="Left">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind action="Click" button="Left">
<action name="ToggleShade"/>
</mousebind>
</context>
<context name="Iconify">
<mousebind action="Press" button="Left">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind action="Click" button="Left">
<action name="Iconify"/>
</mousebind>
</context>
<context name="Maximize">
<mousebind action="Press" button="Left">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind action="Press" button="Middle">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind action="Press" button="Right">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind action="Click" button="Left">
<action name="ToggleMaximize"/>
</mousebind>
<mousebind action="Click" button="Middle">
<action name="ToggleMaximize">
<direction>vertical</direction>
</action>
</mousebind>
<mousebind action="Click" button="Right">
<action name="ToggleMaximize">
<direction>horizontal</direction>
</action>
</mousebind>
</context>
<context name="Close">
<mousebind action="Press" button="Left">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind action="Click" button="Left">
<action name="Close"/>
</mousebind>
</context>
<context name="Desktop">
<mousebind action="Click" button="A-Up">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind action="Click" button="A-Down">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
<mousebind action="Click" button="C-A-Up">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind action="Click" button="C-A-Down">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
<mousebind action="Press" button="Left">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
</context>
<context name="Root">
<!-- Menus -->
<mousebind action="Press" button="Middle">
<action name="ShowMenu">
<menu>client-list-combined-menu</menu>
</action>
</mousebind>
<mousebind action="Press" button="Right">
<action name="ShowMenu">
<menu>root-menu</menu>
</action>
</mousebind>
</context>
<context name="MoveResize">
<mousebind action="Click" button="Up">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind action="Click" button="Down">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
<mousebind action="Click" button="A-Up">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind action="Click" button="A-Down">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
</context>
</mouse>
<menu>
<!-- You can specify more than one menu file in here and they are all loaded,
just don't make menu ids clash or, well, it'll be kind of pointless -->
<!-- default menu file (or custom one in $HOME/.config/openbox/) -->
<!-- system menu files on Debian systems
<file>/var/lib/openbox/debian-menu.xml</file>
<file>debian-menu.xml</file> -->
<file>menu.xml</file>
<hideDelay>200</hideDelay>
<!-- if a press-release lasts longer than this setting (in milliseconds), the
menu is hidden again -->
<middle>yes</middle>
<!-- center submenus vertically about the parent entry -->
<submenuShowDelay>100</submenuShowDelay>
<!-- time to delay before showing a submenu after hovering over the parent
entry.
if this is a negative value, then the delay is infinite and the
submenu will not be shown until it is clicked on -->
<submenuHideDelay>400</submenuHideDelay>
<!-- time to delay before hiding a submenu when selecting another
entry in parent menu
if this is a negative value, then the delay is infinite and the
submenu will not be hidden until a different submenu is opened -->
<applicationIcons>yes</applicationIcons>
<!-- controls if icons appear in the client-list-(combined-)menu -->
<manageDesktops>yes</manageDesktops>
<!-- show the manage desktops section in the client-list-(combined-)menu -->
</menu>
<applications>
<!--
# this is an example with comments through out. use these to make your
# own rules, but without the comments of course.
# you may use one or more of the name/class/role/title/type rules to specify
# windows to match
<application name="the window's _OB_APP_NAME property (see obxprop)"
class="the window's _OB_APP_CLASS property (see obxprop)"
role="the window's _OB_APP_ROLE property (see obxprop)"
title="the window's _OB_APP_TITLE property (see obxprop)"
type="the window's _OB_APP_TYPE property (see obxprob)..
(if unspecified, then it is 'dialog' for child windows)">
# you may set only one of name/class/role/title/type, or you may use more
# than one together to restrict your matches.
# the name, class, role, and title use simple wildcard matching such as those
# used by a shell. you can use * to match any characters and ? to match
# any single character.
# the type is one of: normal, dialog, splash, utility, menu, toolbar, dock,
# or desktop
# when multiple rules match a window, they will all be applied, in the
# order that they appear in this list
# each rule element can be left out or set to 'default' to specify to not
# change that attribute of the window
<decor>yes</decor>
# enable or disable window decorations
<shade>no</shade>
# make the window shaded when it appears, or not
<position force="no">
# the position is only used if both an x and y coordinate are provided
# (and not set to 'default')
# when force is "yes", then the window will be placed here even if it
# says you want it placed elsewhere. this is to override buggy
# applications who refuse to behave
<x>center</x>
# a number like 50, or 'center' to center on screen. use a negative number
# to start from the right (or bottom for <y>), ie -50 is 50 pixels from the
# right edge (or bottom).
<y>200</y>
<monitor>1</monitor>
# specifies the monitor in a xinerama setup.
# 1 is the first head, or 'mouse' for wherever the mouse is
</position>
<focus>yes</focus>
# if the window should try be given focus when it appears. if this is set
# to yes it doesn't guarantee the window will be given focus. some
# restrictions may apply, but Openbox will try to
<desktop>1</desktop>
# 1 is the first desktop, 'all' for all desktops
<layer>normal</layer>
# 'above', 'normal', or 'below'
<iconic>no</iconic>
# make the window iconified when it appears, or not
<skip_pager>no</skip_pager>
# asks to not be shown in pagers
<skip_taskbar>no</skip_taskbar>
# asks to not be shown in taskbars. window cycling actions will also
# skip past such windows
<fullscreen>yes</fullscreen>
# make the window in fullscreen mode when it appears
<maximized>true</maximized>
# 'Horizontal', 'Vertical' or boolean (yes/no)
</application>
# end of the example
-->
<!--
<application class="Gimp" name="gimp" role="gimp-toolbox" type="utility">
<maximized>vertical</maximized>
</application>
<application class="Gimp" name="gimp" role="gimp-dock" type="utility">
<maximized>vertical</maximized>
</application>
<application class="Gimp" name="gimp" role="gimp-image-window" type="normal">
<position force="no">
<x>center</x>
<y>center</y>
</position>
</application>
<application class="Gimp" name="gimp-2.8" role="gimp-toolbox" type="utility">
<maximized>vertical</maximized>
</application>
<application class="Gimp" name="gimp-2.8" role="gimp-dock" type="utility">
<maximized>vertical</maximized>
</application>
<application class="Gimp" name="gimp-2.8" role="gimp-image-window" type="normal">
<position force="no">
<x>center</x>
<y>center</y>
</position>
</application>
-->
</applications>
</openbox_config>

View File

@ -0,0 +1,4 @@
#define bullet_width 6
#define bullet_height 6
static unsigned char bullet_bits[] = {
0x06, 0x0c, 0x18, 0x18, 0x0c, 0x06 };

View File

@ -0,0 +1,4 @@
#define close_width 6
#define close_height 6
static unsigned char close_bits[] = {
0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f };

View File

@ -0,0 +1,4 @@
#define desk_toggled_width 8
#define desk_toggled_height 8
static unsigned char desk_toggled_bits[] = {
0xe7, 0xe7, 0xe7, 0x00, 0x00, 0xe7, 0xe7, 0xe7 };

View File

@ -0,0 +1,4 @@
#define desk_width 8
#define desk_height 8
static unsigned char desk_bits[] = {
0x04, 0x0e, 0x3f, 0x1e, 0x1c, 0x24, 0x40, 0x80 };

View File

@ -0,0 +1,4 @@
#define iconify_width 6
#define iconify_height 6
static unsigned char iconify_bits[] = {
0x00, 0x00, 0x00, 0x1e, 0x00, 0x00 };

View File

@ -0,0 +1,4 @@
#define max_width 6
#define max_height 6
static unsigned char max_bits[] = {
0x3f, 0x21, 0x21, 0x21, 0x21, 0x3f };

View File

@ -0,0 +1,4 @@
#define max_toggled_width 6
#define max_toggled_height 6
static unsigned char max_toggled_bits[] = {
0x28, 0x18, 0x38, 0x07, 0x06, 0x05 };

View File

@ -0,0 +1,4 @@
#define shade_width 8
#define shade_height 8
static unsigned char shade_bits[] = {
0x18, 0x3c, 0x7e, 0xff, 0xdb, 0x18, 0x18, 0x18 };

View File

@ -0,0 +1,4 @@
#define shade_toggled_width 8
#define shade_toggled_height 8
static unsigned char shade_toggled_bits[] = {
0x18, 0x18, 0x18, 0xdb, 0xff, 0x7e, 0x3c, 0x18 };

View File

@ -0,0 +1,127 @@
# Menu
menu.border.width: 16
menu.overlap.x: -20
menu.overlap.y: 8
menu.border.color: #181A28
menu.title.bg: flat solid
menu.title.bg.color: #181A28
menu.title.text.color: #af4c6d
menu.separator.color: #181A28
menu.items.bg: flat solid
menu.items.bg.color: #181A28
menu.items.text.color: #ffffff
menu.items.disabled.text.color: #181A28
menu.items.active.bg: flat solid
menu.items.active.bg.color: #181A28
menu.items.active.text.color: #af4c6d
# Active window
window.active.border.color: #181A28
window.active.title.bg: flat solid
window.active.title.bg.color: #181A28
window.active.title.separator.color: #181A28
window.active.text.justify: left
window.active.label.bg: parentrelative
window.active.label.text.color: #ffffff
window.active.handle.bg: flat solid
window.active.handle.bg.color: #181A28
window.active.grip.bg: flat solid
window.active.grip.bg.color: #181A28
window.active.button.unpressed.bg: flat solid
window.active.button.unpressed.bg.color: #181A28
window.active.button.unpressed.image.color: #ffffff
window.active.button.pressed.bg: flat solid
window.active.button.pressed.bg.color: #181A28
window.active.button.pressed.image.color: #ffffff
window.active.button.disabled.bg: flat solid
window.active.button.disabled.bg.color: #181A28
window.active.button.disabled.image.color: #dcdcdc
# Inactive window
window.inactive.border.color: #181A28
window.inactive.title.bg: flat solid
window.inactive.title.bg.color: #181A28
window.inactive.title.separator.color: #181A28
window.inactive.text.justify: center
window.inactive.label.bg: parentrelative
window.inactive.label.text.color: #ffffff
window.inactive.handle.bg: flat solid
window.inactive.handle.bg.color: #181A28
window.inactive.grip.bg: flat solid
window.inactive.grip.bg.color: #181A28
window.inactive.button.unpressed.bg: flat solid
window.inactive.button.unpressed.bg.color: #181A28
window.inactive.button.unpressed.image.color: #ffffff
window.inactive.button.pressed.bg: flat solid
window.inactive.button.pressed.bg.color: #181A28
window.inactive.button.pressed.image.color: #ffffff
window.inactive.button.disabled.bg: flat solid
window.inactive.button.disabled.bg.color: #181A28
window.inactive.button.disabled.image.color: #181A28
# OSD
osd.border.width: 1
osd.border.color: #181A28
osd.bg: flat solid
osd.bg.color: #fff
osd.label.bg: flat solid
osd.label.bg.color: #dedede
osd.label.text.color: #555555
osd.hilight.bg: flat solid
osd.hilight.bg.color: #af4c6d
osd.unhilight.bg: flat solid
osd.unhilight.bg.color: #888888
osd.button.unpressed.bg: flat border
osd.button.unpressed.bg.color: #f0f0f0
osd.button.unpressed.*.border.color: #b2b2b2
osd.button.pressed.bg: flat border
osd.button.pressed.bg.color: #d3d3d3
osd.button.pressed.*.border.color: #b2b2b2
osd.button.focused.bg: flat solid border
osd.button.focused.bg.color: #f0f0f0
osd.button.focused.*.border.color: #9c9c9c
osd.button.focused.box.color: #af4c6d
# Fonts
window.active.label.text.font:shadow=n
window.inactive.label.text.font:shadow=n
menu.items.font:shadow=n
menu.title.text.font:shadow=n
# Everything else
border.width: 0
#padding.width: 10
#padding.height: 5
window.handle.width: 0
window.client.padding.width: 0
window.label.text.justify: center

21
openbox/.themes/build.xml Normal file
View File

@ -0,0 +1,21 @@
<!--
This file is part of GtkSourceView
Copyright (C) 2014 Joe Collins <joe@draw.academy>
GtkSourceView is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
GtkSourceView is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
--><style-scheme id="build" _name="Build" version="1.0"><author>Joe Collins</author><author>Vale Collins</author><_description>Emphasis on readability.</_description><!-- Build Palette --><color name="cardinal" value="#be2e19"/><color name="grass" value="#5C944A"/><color name="nautica" value="#3B637A"/><color name="fuschia" value="#B858A0"/><color name="base" value="#444"/><color name="sand" value="#F7E2C6"/><color name="muslin" value="#f8f4ed"/><color name="cobalt" value="#373ab0"/><color name="latte" value="#DEC5A6"/><color name="brick" value="#AD5F53"/><color name="reef" value="#4C9EA8"/><color name="charcoal" value="#38312f"/><color name="mesa" value="#b5684e"/><color name="heather" value="#D1829C"/><color name="concrete" value="#AB9E8E"/><color name="plum" value="#8A536A"/><!-- Global Settings --><style name="text" foreground="base" background="muslin"/><style name="selection" foreground="base" background="latte"/><style name="cursor" foreground="charcoal"/><style name="current-line" background="sand"/><style name="line-numbers" foreground="mesa" background="charcoal"/><style name="draw-spaces" foreground="base"/><!-- Bracket Matching --><style name="bracket-match" foreground="base" background="sand" bold="true"/><style name="bracket-mismatch" foreground="cardinal" bold="true"/><!-- Right Margin --><style name="right-margin" foreground="base" background="sand"/><!-- Search Matching --><style name="search-match" foreground="plum" background="latte"/><!-- Comments --><style name="def:comment" foreground="concrete"/><style name="def:shebang" foreground="reef" bold="true"/><style name="def:doc-comment-element" italic="true"/><!-- Constants --><style name="def:constant" foreground="plum"/><style name="def:string" foreground="grass"/><style name="def:special-char" foreground="heather"/><style name="def:special-constant" foreground="heather"/><style name="def:floating-point" foreground="heather"/><!-- Identifiers --><style name="def:identifier" foreground="brick"/><!-- Statements --><style name="def:statement" foreground="nautica"/><!-- Types --><style name="def:type" foreground="reef"/><!-- Others --><style name="def:preprocessor" foreground="fuschia"/><style name="def:error" foreground="cardinal" bold="true"/><style name="def:warning" foreground="brick"/><style name="def:note" background="heather" bold="true"/><style name="def:underlined" italic="true" underline="true"/><!-- Language specific --><style name="diff:added-line" foreground="grass"/><style name="diff:removed-line" foreground="brick"/><style name="diff:changed-line" foreground="plum"/><style name="diff:diff-file" foreground="nautica"/><style name="diff:location" foreground="fuschia"/><style name="diff:special-case" foreground="reef"/><style name="latex:display-math" foreground="fuschia"/><style name="latex:command" foreground="nautica" bold="true"/><style name="latex:include" use-style="def:preprocessor"/></style-scheme>

View File

@ -0,0 +1,813 @@
%%
% Copyright (c) 2018, Pascal Wagler;
% Copyright (c) 2014--2018, John MacFarlane
%
% All rights reserved.
%
% Redistribution and use in source and binary forms, with or without
% modification, are permitted provided that the following conditions
% are met:
%
% - 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
% notice, this list of conditions and the following disclaimer in the
% documentation and/or other materials provided with the distribution.
%
% - Neither the name of John MacFarlane nor the names of other
% contributors may be used to endorse or promote products derived
% from this software without specific prior written permission.
%
% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
% "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
% LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
% FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
% COPYRIGHT OWNER 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 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
% ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
% POSSIBILITY OF SUCH DAMAGE.
%%
%%
% For usage information and examples visit the GitHub page of this template:
% https://github.com/Wandmalfarbe/pandoc-latex-template
%%
\PassOptionsToPackage{unicode=true}{hyperref} % options for packages loaded elsewhere
\PassOptionsToPackage{hyphens}{url}
\PassOptionsToPackage{dvipsnames,svgnames*,table}{xcolor}
$if(dir)$$if(latex-dir-rtl)$
\PassOptionsToPackage{RTLdocument}{bidi}
$endif$$endif$%
\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$babel-lang$,$endif$$if(papersize)$$papersize$paper,$else$a4paper,$endif$$if(beamer)$ignorenonframetext,$if(handout)$handout,$endif$$if(aspectratio)$aspectratio=$aspectratio$,$endif$$endif$$for(classoption)$$classoption$$sep$,$endfor$,tablecaptionabove]{$if(book)$scrbook$else$scrartcl$endif$}
$if(beamer)$
$if(background-image)$
\usebackgroundtemplate{%
\includegraphics[width=\paperwidth]{$background-image$}%
}
$endif$
\usepackage{pgfpages}
\setbeamertemplate{caption}[numbered]
\setbeamertemplate{caption label separator}{: }
\setbeamercolor{caption name}{fg=normal text.fg}
\beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$
$for(beameroption)$
\setbeameroption{$beameroption$}
$endfor$
% Prevent slide breaks in the middle of a paragraph:
\widowpenalties 1 10000
\raggedbottom
$if(section-titles)$
\setbeamertemplate{part page}{
\centering
\begin{beamercolorbox}[sep=16pt,center]{part title}
\usebeamerfont{part title}\insertpart\par
\end{beamercolorbox}
}
\setbeamertemplate{section page}{
\centering
\begin{beamercolorbox}[sep=12pt,center]{part title}
\usebeamerfont{section title}\insertsection\par
\end{beamercolorbox}
}
\setbeamertemplate{subsection page}{
\centering
\begin{beamercolorbox}[sep=8pt,center]{part title}
\usebeamerfont{subsection title}\insertsubsection\par
\end{beamercolorbox}
}
\AtBeginPart{
\frame{\partpage}
}
\AtBeginSection{
\ifbibliography
\else
\frame{\sectionpage}
\fi
}
\AtBeginSubsection{
\frame{\subsectionpage}
}
$endif$
$endif$
$if(beamerarticle)$
\usepackage{beamerarticle} % needs to be loaded first
$endif$
$if(fontfamily)$
\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$}
$else$
\usepackage{lmodern}
$endif$
$if(linestretch)$
\usepackage{setspace}
\setstretch{$linestretch$}
$else$
\usepackage{setspace}
\setstretch{1.2}
$endif$
\usepackage{amssymb,amsmath}
\usepackage{ifxetex,ifluatex}
\usepackage{fixltx2e} % provides \textsubscript
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
\usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{textcomp} % provides euro and other symbols
\else % if luatex or xelatex
$if(mathspec)$
\ifxetex
\usepackage{mathspec}
\else
\usepackage{unicode-math}
\fi
$else$
\usepackage{unicode-math}
$endif$
\defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase}
$for(fontfamilies)$
\newfontfamily{$fontfamilies.name$}[$fontfamilies.options$]{$fontfamilies.font$}
$endfor$
$if(mainfont)$
\setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$}
$endif$
$if(romanfont)$
\setromanfont[$for(romanfontoptions)$$romanfontoptions$$sep$,$endfor$]{$romanfont$}
$endif$
$if(sansfont)$
\setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$}
$endif$
$if(monofont)$
\setmonofont[Mapping=tex-ansi$if(monofontoptions)$,$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$endif$]{$monofont$}
$endif$
$if(mathfont)$
$if(mathspec)$
\ifxetex
\setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$}
\else
\setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$}
\fi
$else$
\setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$}
$endif$
$endif$
$if(CJKmainfont)$
\ifxetex
\usepackage{xeCJK}
\setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$}
\fi
$endif$
$if(luatexjapresetoptions)$
\ifluatex
\usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset}
\fi
$endif$
$if(CJKmainfont)$
\ifluatex
\usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec}
\setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$}
\fi
$endif$
\fi
$if(beamer)$
$if(theme)$
\usetheme[$for(themeoptions)$$themeoptions$$sep$,$endfor$]{$theme$}
$endif$
$if(colortheme)$
\usecolortheme{$colortheme$}
$endif$
$if(fonttheme)$
\usefonttheme{$fonttheme$}
$endif$
$if(mainfont)$
\usefonttheme{serif} % use mainfont rather than sansfont for slide text
$endif$
$if(innertheme)$
\useinnertheme{$innertheme$}
$endif$
$if(outertheme)$
\useoutertheme{$outertheme$}
$endif$
$endif$
% use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
% use microtype if available
\IfFileExists{microtype.sty}{%
\usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype}
\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
$if(indent)$
$else$
\IfFileExists{parskip.sty}{%
\usepackage{parskip}
}{% else
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}
}
$endif$
$if(verbatim-in-note)$
\usepackage{fancyvrb}
$endif$
$if(colorlinks)$
\usepackage{xcolor}
\definecolor{default-linkcolor}{HTML}{A50000}
\definecolor{default-filecolor}{HTML}{A50000}
\definecolor{default-citecolor}{HTML}{4077C0}
\definecolor{default-urlcolor}{HTML}{4077C0}
$endif$
\usepackage{hyperref}
\hypersetup{
$if(title-meta)$
pdftitle={$title-meta$},
$endif$
$if(author-meta)$
pdfauthor={$author-meta$},
$endif$
$if(subject)$
pdfsubject={$subject$},
$endif$
$if(keywords)$
pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$},
$endif$
$if(colorlinks)$
colorlinks=true,
linkcolor=$if(linkcolor)$$linkcolor$$else$default-linkcolor$endif$,
filecolor=$if(filecolor)$$filecolor$$else$default-filecolor$endif$,
citecolor=$if(citecolor)$$citecolor$$else$default-citecolor$endif$,
urlcolor=$if(urlcolor)$$urlcolor$$else$default-urlcolor$endif$,
$else$
pdfborder={0 0 0},
$endif$
breaklinks=true}
\urlstyle{same} % don't use monospace font for urls
$if(verbatim-in-note)$
\VerbatimFootnotes % allows verbatim text in footnotes
$endif$
$if(geometry)$
\usepackage[margin=2.5cm,includehead=true,includefoot=true,centering,$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
$else$
\usepackage[margin=2.5cm,includehead=true,includefoot=true,centering]{geometry}
$endif$
$if(logo)$
\usepackage[export]{adjustbox}
\usepackage{graphicx}
$endif$
$if(beamer)$
\newif\ifbibliography
$endif$
$if(listings)$
\usepackage{listings}
\newcommand{\passthrough}[1]{#1}
$endif$
$if(listings-no-page-break)$
\usepackage{etoolbox}
\BeforeBeginEnvironment{lstlisting}{\par\noindent\begin{minipage}{\linewidth}}
\AfterEndEnvironment{lstlisting}{\end{minipage}\par\addvspace{\topskip}}
$endif$
$if(lhs)$
\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{}
$endif$
$if(highlighting-macros)$
$highlighting-macros$
$endif$
$if(tables)$
\usepackage{longtable,booktabs}
$if(beamer)$
\usepackage{caption}
% These lines are needed to make table captions work with longtable:
\makeatletter
\def\fnum@table{\tablename~\thetable}
\makeatother
$else$
% Fix footnotes in tables (requires footnote package)
\IfFileExists{footnote.sty}{\usepackage{footnote}\makesavenoteenv{longtable}}{}
$endif$
$endif$
$if(graphics)$
\usepackage{graphicx,grffile}
\makeatletter
\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
\makeatother
% Scale images if necessary, so that they will not overflow the page
% margins by default, and it is still possible to overwrite the defaults
% using explicit options in \includegraphics[width, height, ...]{}
\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
$endif$
$if(links-as-notes)$
% Make links footnotes instead of hotlinks:
\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}}
$endif$
$if(strikeout)$
\usepackage[normalem]{ulem}
% avoid problems with \sout in headers with hyperref:
\pdfstringdefDisableCommands{\renewcommand{\sout}{}}
$endif$
\setlength{\emergencystretch}{3em} % prevent overfull lines
\providecommand{\tightlist}{%
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
$if(numbersections)$
\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$}
$else$
\setcounter{secnumdepth}{0}
$endif$
$if(beamer)$
$else$
$if(subparagraph)$
$else$
% Redefines (sub)paragraphs to behave more like sections
\ifx\paragraph\undefined\else
\let\oldparagraph\paragraph
\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}}
\fi
\ifx\subparagraph\undefined\else
\let\oldsubparagraph\subparagraph
\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}}
\fi
$endif$
$endif$
$if(pagestyle)$
\pagestyle{$pagestyle$}
$endif$
% Make use of float-package and set default placement for figures to H
\usepackage{float}
\floatplacement{figure}{H}
$for(header-includes)$
$header-includes$
$endfor$
$if(lang)$
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
\usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel}
$if(babel-newcommands)$
$babel-newcommands$
$endif$
\else
$if(mainfont)$
$else$
% See issue https://github.com/reutenauer/polyglossia/issues/127
\renewcommand*\familydefault{\sfdefault}
$endif$
% load polyglossia as late as possible as it *could* call bidi if RTL lang (e.g. Hebrew or Arabic)
\usepackage{polyglossia}
\setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$}
$for(polyglossia-otherlangs)$
\setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$}
$endfor$
\fi
$endif$
$if(dir)$
\ifxetex
% load bidi as late as possible as it modifies e.g. graphicx
\usepackage{bidi}
\fi
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
\TeXXeTstate=1
\newcommand{\RL}[1]{\beginR #1\endR}
\newcommand{\LR}[1]{\beginL #1\endL}
\newenvironment{RTL}{\beginR}{\endR}
\newenvironment{LTR}{\beginL}{\endL}
\fi
$endif$
$if(natbib)$
\usepackage[$natbiboptions$]{natbib}
\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$}
$endif$
$if(biblatex)$
\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex}
$for(bibliography)$
\addbibresource{$bibliography$}
$endfor$
$endif$
$if(title)$
\title{$title$$if(thanks)$\thanks{$thanks$}$endif$}
$endif$
$if(subtitle)$
\providecommand{\subtitle}[1]{}
\subtitle{$subtitle$}
$endif$
$if(author)$
\author{$for(author)$$author$$sep$ \and $endfor$}
$endif$
$if(institute)$
\providecommand{\institute}[1]{}
\institute{$for(institute)$$institute$$sep$ \and $endfor$}
$endif$
\date{$date$}
$if(beamer)$
$if(titlegraphic)$
\titlegraphic{\includegraphics{$titlegraphic$}}
$endif$
$if(logo)$
\logo{\includegraphics{$logo$}}
$endif$
$endif$
%%
%% added
%%
%
% No language specified? take American English.
%
$if(lang)$$else$
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
\usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=english]{babel}
$if(babel-newcommands)$
$babel-newcommands$
$endif$
\else
$if(mainfont)$
$else$
% See issue https://github.com/reutenauer/polyglossia/issues/127
\renewcommand*\familydefault{\sfdefault}
$endif$
% load polyglossia as late as possible as it *could* call bidi if RTL lang (e.g. Hebrew or Arabic)
\usepackage{polyglossia}
\setmainlanguage[]{english}
$for(polyglossia-otherlangs)$
\setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$}
$endfor$
\fi
$endif$
%
% colors
%
\usepackage[]{xcolor}
%
% listing colors
%
\definecolor{listing-background}{HTML}{F7F7F7}
\definecolor{listing-rule}{HTML}{B3B2B3}
\definecolor{listing-numbers}{HTML}{B3B2B3}
\definecolor{listing-text-color}{HTML}{000000}
\definecolor{listing-keyword}{HTML}{435489}
\definecolor{listing-identifier}{HTML}{435489}
\definecolor{listing-string}{HTML}{00999A}
\definecolor{listing-comment}{HTML}{8E8E8E}
\definecolor{listing-javadoc-comment}{HTML}{006CA9}
%\definecolor{listing-background}{rgb}{0.97,0.97,0.97}
%\definecolor{listing-rule}{HTML}{B3B2B3}
%\definecolor{listing-numbers}{HTML}{B3B2B3}
%\definecolor{listing-text-color}{HTML}{000000}
%\definecolor{listing-keyword}{HTML}{D8006B}
%\definecolor{listing-identifier}{HTML}{000000}
%\definecolor{listing-string}{HTML}{006CA9}
%\definecolor{listing-comment}{rgb}{0.25,0.5,0.35}
%\definecolor{listing-javadoc-comment}{HTML}{006CA9}
%
% for the background color of the title page
%
$if(titlepage)$
\usepackage{pagecolor}
\usepackage{afterpage}
$endif$
%
% TOC depth and
% section numbering depth
%
\setcounter{tocdepth}{3}
$if(numbersections)$
\setcounter{secnumdepth}{3}
$endif$
%
% break urls
%
\PassOptionsToPackage{hyphens}{url}
%
% When using babel or polyglossia with biblatex, loading csquotes is recommended
% to ensure that quoted texts are typeset according to the rules of your main language.
%
\usepackage{csquotes}
%
% captions
%
\definecolor{caption-color}{HTML}{777777}
\usepackage[font={stretch=1.2}, textfont={color=caption-color}, position=top, skip=4mm, labelfont=bf, singlelinecheck=false, justification=$if(caption-justification)$$caption-justification$$else$raggedright$endif$]{caption}
\setcapindent{0em}
\captionsetup[longtable]{position=above}
%
% blockquote
%
\definecolor{blockquote-border}{RGB}{221,221,221}
\definecolor{blockquote-text}{RGB}{119,119,119}
\usepackage{mdframed}
\newmdenv[rightline=false,bottomline=false,topline=false,linewidth=3pt,linecolor=blockquote-border,skipabove=\parskip]{customblockquote}
\renewenvironment{quote}{\begin{customblockquote}\list{}{\rightmargin=0em\leftmargin=0em}%
\item\relax\color{blockquote-text}\ignorespaces}{\unskip\unskip\endlist\end{customblockquote}}
%
% Source Sans Pro as the de­fault font fam­ily
% Source Code Pro for monospace text
%
% 'default' option sets the default
% font family to Source Sans Pro, not \sfdefault.
%
$if(mainfont)$
$else$
\usepackage[default]{sourcesanspro}
\usepackage{sourcecodepro}
$endif$
%
% heading color
%
\definecolor{heading-color}{RGB}{40,40,40}
\addtokomafont{section}{\color{heading-color}}
% When using the classes report, scrreprt, book,
% scrbook or memoir, uncomment the following line.
%\addtokomafont{chapter}{\color{heading-color}}
%
% variables for title and author
%
\usepackage{titling}
\title{$title$}
\author{$for(author)$$author$$sep$, $endfor$}
%
% tables
%
$if(tables)$
\definecolor{table-row-color}{HTML}{F5F5F5}
\definecolor{table-rule-color}{HTML}{999999}
%\arrayrulecolor{black!40}
\arrayrulecolor{table-rule-color} % color of \toprule, \midrule, \bottomrule
\setlength\heavyrulewidth{0.3ex} % thickness of \toprule, \bottomrule
\renewcommand{\arraystretch}{1.3} % spacing (padding)
% Reset rownum counter so that each table
% starts with the same row colors.
% https://tex.stackexchange.com/questions/170637/restarting-rowcolors
\let\oldlongtable\longtable
\let\endoldlongtable\endlongtable
\renewenvironment{longtable}{
\rowcolors{3}{}{table-row-color!100} % row color
\oldlongtable} {
\endoldlongtable
\global\rownum=0\relax}
% Unfortunately the colored cells extend beyond the edge of the
% table because pandoc uses @-expressions (@{}) like so:
%
% \begin{longtable}[]{@{}ll@{}}
% \end{longtable}
%
% https://en.wikibooks.org/wiki/LaTeX/Tables#.40-expressions
$endif$
%
% remove paragraph indention
%
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}
\setlength{\emergencystretch}{3em} % prevent overfull lines
%
%
% Listings
%
%
$if(listings)$
\lstdefinestyle{eisvogel_listing_style}{
language = java,
$if(listings-disable-line-numbers)$
xleftmargin = 0.6em,
framexleftmargin = 0.4em,
$else$
numbers = left,
xleftmargin = 2.7em,
framexleftmargin = 2.5em,
$endif$
backgroundcolor = \color{listing-background},
basicstyle = \color{listing-text-color}\small\ttfamily{}\linespread{1.15}, % print whole listing small
breaklines = true,
frame = single,
framesep = 0.6mm,
rulecolor = \color{listing-rule},
frameround = ffff,
tabsize = 4,
numberstyle = \color{listing-numbers},
aboveskip = 1.0em,
belowcaptionskip = 1.0em,
keywordstyle = \color{listing-keyword}\bfseries,
classoffset = 0,
sensitive = true,
identifierstyle = \color{listing-identifier},
commentstyle = \color{listing-comment},
morecomment = [s][\color{listing-javadoc-comment}]{/**}{*/},
stringstyle = \color{listing-string},
showstringspaces = false,
escapeinside = {/*@}{@*/}, % Allow LaTeX inside these special comments
literate =
{á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1
{Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1
{à}{{\`a}}1 {è}{{\'e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
{À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1
{ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1
{Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
{â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1
{Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
{œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
{ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1
{€}{{\EUR}}1 {£}{{\pounds}}1 {«}{{\guillemotleft}}1
{»}{{\guillemotright}}1 {ñ}{{\~n}}1 {Ñ}{{\~N}}1 {¿}{{?`}}1
{…}{{\ldots}}1 {≥}{{>=}}1 {≤}{{<=}}1 {„}{{\glqq}}1 {“}{{\grqq}}1
{”}{{''}}1
}
\lstset{style=eisvogel_listing_style}
\lstdefinelanguage{XML}{
morestring = [b]",
moredelim = [s][\bfseries\color{listing-keyword}]{<}{\ },
moredelim = [s][\bfseries\color{listing-keyword}]{</}{>},
moredelim = [l][\bfseries\color{listing-keyword}]{/>},
moredelim = [l][\bfseries\color{listing-keyword}]{>},
morecomment = [s]{<?}{?>},
morecomment = [s]{<!--}{-->},
commentstyle = \color{listing-comment},
stringstyle = \color{listing-string},
identifierstyle = \color{listing-identifier}
}
$endif$
%
% header and footer
%
$if(disable-header-and-footer)$
$else$
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhead{}
\fancyfoot{}
\lhead[$if(header-right)$$header-right$$else$$date$$endif$]{$if(header-left)$$header-left$$else$$title$$endif$}
\chead[$if(header-center)$$header-center$$else$$endif$]{$if(header-center)$$header-center$$else$$endif$}
\rhead[$if(header-left)$$header-left$$else$$title$$endif$]{$if(header-right)$$header-right$$else$$date$$endif$}
\lfoot[$if(footer-right)$$footer-right$$else$\thepage$endif$]{$if(footer-left)$$footer-left$$else$$for(author)$$author$$sep$, $endfor$$endif$}
\cfoot[$if(footer-center)$$footer-center$$else$$endif$]{$if(footer-center)$$footer-center$$else$$endif$}
\rfoot[$if(footer-left)$$footer-left$$else$$for(author)$$author$$sep$, $endfor$$endif$]{$if(footer-right)$$footer-right$$else$\thepage$endif$}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0.4pt}
$endif$
%%
%% end added
%%
\begin{document}
%%
%% begin titlepage
%%
$if(titlepage)$
\begin{titlepage}
\newgeometry{left=6cm}
$if(titlepage-color)$
\definecolor{titlepage-color}{HTML}{$titlepage-color$}
\newpagecolor{titlepage-color}\afterpage{\restorepagecolor}
$endif$
\newcommand{\colorRule}[3][black]{\textcolor[HTML]{#1}{\rule{#2}{#3}}}
\begin{flushleft}
\noindent
\\[-1em]
\color[HTML]{$if(titlepage-text-color)$$titlepage-text-color$$else$5F5F5F$endif$}
\makebox[0pt][l]{\colorRule[$if(titlepage-rule-color)$$titlepage-rule-color$$else$435488$endif$]{1.3\textwidth}{$if(titlepage-rule-height)$$titlepage-rule-height$$else$4$endif$pt}}
\par
\noindent
{ \setstretch{1.4}
\vfill
\noindent {\huge \textbf{\textsf{$title$}}}
$if(subtitle)$
\vskip 1em
{\Large \textsf{$subtitle$}}
$endif$
\vskip 2em
\noindent
{\Large \textsf{$for(author)$$author$$sep$, $endfor$}
\vfill
}
$if(logo)$
\noindent
\includegraphics[width=$if(logo-width)$$logo-width$$else$100$endif$pt, left]{$logo$}
$endif$
\textsf{$date$}}
\end{flushleft}
\end{titlepage}
\restoregeometry
$endif$
%%
%% end titlepage
%%
$if(title)$
$if(beamer)$
\frame{\titlepage}
$endif$
$if(abstract)$
\begin{abstract}
$abstract$
\end{abstract}
$endif$
$endif$
$for(include-before)$
$include-before$
$endfor$
$if(toc)$
$if(toc-title)$
\renewcommand*\contentsname{$toc-title$}
$endif$
$if(beamer)$
\begin{frame}
$if(toc-title)$
\frametitle{$toc-title$}
$endif$
\tableofcontents[hideallsubsections]
\end{frame}
$if(toc-own-page)$
\newpage
$endif$
$else$
{
$if(colorlinks)$
\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$$endif$}
$endif$
\setcounter{tocdepth}{$toc-depth$}
\tableofcontents
$if(toc-own-page)$
\newpage
$endif$
}
$endif$
$endif$
$if(lot)$
\listoftables
$endif$
$if(lof)$
\listoffigures
$endif$
$body$
$if(natbib)$
$if(bibliography)$
$if(biblio-title)$
$if(book-class)$
\renewcommand\bibname{$biblio-title$}
$else$
\renewcommand\refname{$biblio-title$}
$endif$
$endif$
$if(beamer)$
\begin{frame}[allowframebreaks]{$biblio-title$}
\bibliographytrue
$endif$
\bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$}
$if(beamer)$
\end{frame}
$endif$
$endif$
$endif$
$if(biblatex)$
$if(beamer)$
\begin{frame}[allowframebreaks]{$biblio-title$}
\bibliographytrue
\printbibliography[heading=none]
\end{frame}
$else$
\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$
$endif$
$endif$
$for(include-after)$
$include-after$
$endfor$
\end{document}

View File

@ -0,0 +1,598 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="ProgId" content="Word.Document">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
$for(author-meta)$
<meta name="author" content="$author-meta$" />
$endfor$
$if(date-meta)$
<meta name="date" content="$date-meta$" />
$endif$
$if(keywords)$
<meta name="keywords" content="$for(keywords)$$keywords$$sep$, $endfor$" />
$endif$
<title>$if(title-prefix)$$title-prefix$ $endif$$pagetitle$</title>
<style type="text/css">
body, table, td, a {
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
table, td {
mso-table-lspace: 0pt;
mso-table-rspace: 0pt;
}
img {
-ms-interpolation-mode: bicubic;
}
img {
border: 0;
height: auto;
line-height: 100%;
outline: none;
text-decoration: none;
}
body {
height: 100% !important;
margin: 0 !important;
padding: 0 !important;
width: 100% !important;
}
figure {
margin: 0;
padding: 0;
}
article, aside, details, figcaption, figure,footer, header, hgroup, menu, nav, section {
display: block;
}
a[x-apple-data-detectors] {
color: inherit !important;
text-decoration: none !important;
font-size: inherit !important;
font-family: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
}
div[style*="margin: 16px 0;"] {
margin: 0 !important;
}
table,td,div,a {
box-sizing: border-box;
}
img {
-ms-interpolation-mode: bicubic;
max-width: 100%;
display: inline-block;
padding-top: 7px;
}
body, .body {
font-family: Georgia, "Times New Roman", Times, serif;
font-size: 14px;
line-height: 1.2;
height: 100% !important;
width: 100% !important;
margin: 0;
padding: 0;
-webkit-font-smoothing: antialiased;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
table {
border-collapse: separate !important;
mso-table-lspace: 0pt;
mso-table-rspace: 0pt;
width: 100%;
}
table td {
font-family: Georgia, "Times New Roman", Times, serif;
font-size: 14px;
vertical-align: top;
}
.ExternalClass {
width: 100%;
}
.ExternalClass,.ExternalClass p,.ExternalClass span,.ExternalClass font,.ExternalClass td,.ExternalClass div {
line-height: 100%;
}
strong, b {
font-weight: bold;
}
.ajT {
height: none;
padding-top: none;
}
body {
background-color: #ffffff;
}
.body {
background-color: #ffffff;
width: 100%;
}
.container {
display: block;
Margin: 0 auto !important;
max-width: 800px;
padding: 10px;
width: 100% !important;
}
.content {
display: block;
margin: 0 auto;
max-width: 800px;
padding: 10px;
}
.main {
background: #ffffff;
border: none;
border-radius: 4px;
width: 100%;
}
.wrapper {
padding: 10px;
}
.content-block {
padding: 0 0 10px;
}
.header {
margin-bottom: 10px;
margin-top: 0px;
width: 100%;
}
.footer {
clear: both;
width: 100%;
}
.footer * {
color: #7F7F7F;
font-size: 12px;
}
.footer td {
padding: 20px 0;
}
h1,h2,h3,h4,h5,h6 {
color: #222222 !important;
font-family: "Roboto", "Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;
font-weight: bold;
line-height: 1.2;
margin: 0;
margin-bottom: 7px;
margin-top: 10.5px;
}
h1, h2 {
margin-bottom: 10.5px;
margin-top: 14px;
}
h1 {
font-size: 22.4px;
text-transform: capitalize;
}
h2 {
font-size: 19.6px;
}
h3 {
font-size: 16.8px;
}
h4 {
font-size: 15.4px;
}
h5 {
font-size: 14px;
}
h6 {
font-size: 12.6px;
}
p,ul,ol {
font-family: Georgia, "Times New Roman", Times, serif;
font-size: 14px;
font-weight: normal;
margin: 0;
padding-top: 7px;
color: #111111;
}
ul, ol {
margin: 0;
margin-bottom: 7.5px;
padding-left: 25px;
}
ul li, ol li {
list-style-position: outside;
margin-left: 5px;
margin-bottom: 1px;
}
li > ul, li > ol {
margin-top: 7.5px;
}
a {
color: #348eda;
text-decoration: none;
font-weight: bold;
}
pre > a, code > a {
color: none;
font-weight: normal;
}
code,pre,.word-wrap {
word-break: break-word;
word-wrap: break-word;
-webkit-hyphens: auto;
-moz-hyphens: auto;
hyphens: auto;
}
pre, code {
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
font-size: 11.9px;
}
pre {
display: block;
width: 96%;
margin: 1em 0;
margin-bottom: 9px;
background: #f8f8f8;
padding: 1%;
white-space: pre-wrap;
border-radius: 4px;
}
p > code {
color: #111111;
background: none;
}
blockquote {
padding: 0 7px 0 7px;
border-left: 2px solid #cccccc;
border-top: 4.2px solid transparent;
font-style: italic;
margin: 0 0 7px 3px;
}
blockquote p {
padding: 0;
}
mark {
background: #ff0;
}
dl dt {
font-weight: bold;
}
dl dd {
margin-left: 28px;
}
.et-btn {
width: 100%;
font-family: "Roboto", "Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;
margin-bottom: 10px;
}
.et-btn table {
width: auto;
}
.et-btn table td {
background-color: #ffffff;
border-radius: 4px;
text-align: center;
}
.et-btn a {
background-color: #ffffff;
border: solid 1px #348eda;
border-radius: 4px;
color: #348eda;
cursor: pointer;
display: inline-block;
font-size: 14px;
font-weight: bold;
margin: 0;
padding: 8px 18px;
text-decoration: none;
text-transform: capitalize;
font-family: "Roboto", "Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;
}
.et-btn-primary table td {
background-color: #348eda;
}
.et-btn-primary a {
background-color: #348eda;
border-color: #348eda;
color: #ffffff;
}
.et-btn-secondary table td {
background-color: transparent;
}
.et-btn-secondary a {
background-color: transparent;
border-color: #348eda;
color: #348eda;
}
.et-notice {
border-collapse: separate;
}
.et-notice-spacer {
padding: 10px 0;
}
.et-notice td {
line-height: 1.2;
font-size: 14px;
font-weight: normal;
font-family: "Roboto", "Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;
}
.et-notice td p {
margin: 0;
padding: 0;
}
.et-notice-info td {
background: #f0f6fb;
border: 1px solid #b7d3ed;
border-radius: 4px;
color: #2c6eac;
padding: 6px 10px;
}
.et-notice-success td {
background: #e1f2bd;
border: 1px solid #c6e682;
border-radius: 4px;
color: #61821a;
padding: 6px 10px;
}
.et-notice-warning td {
background: #f7eed0;
border: 1px solid #edd993;
border-radius: 4px;
color: #9a7d1a;
padding: 6px 10px;
}
.et-notice-danger td {
background: #f5d5d5;
border: 1px solid #e89b9b;
border-radius: 4px;
color: #952222;
padding: 6px 10px;
}
.et-notice-lg td {
font-size: 16.8px;
line-height: 1.2;
}
.divider {
border-collapse: separate;
}
.divider-spacer {
padding: 14px 0;
}
.divider td {
border-top: 1px solid #ccc;
line-height: 0;
font-size: 0;
height: 1px;
margin: 0;
padding: 0;
}
hr {
margin: 28px 0;
border: none;
border-top: 1px solid #cccccc;
color: #ffffff;
}
.last {
margin-bottom: 0;
}
.first {
margin-top: 0;
}
.align-center {
text-align: center;
}
.align-right {
text-align: right;
}
.align-left {
text-align: left;
}
.clear {
clear: both;
}
.mt0 {
margin-top: 0;
}
.mb0 {
margin-bottom: 0;
}
.preheader {
color: transparent;
display: none;
height: 0;
max-height: 0;
max-width: 0;
opacity: 0;
overflow: hidden;
mso-hide: all;
visibility: hidden;
width: 0;
}
@media only screen and (max-width: 840px) {
table[class=body] {
font-size: 12px !important;
}
table[class=body] p,table[class=body] ul,table[class=body] ol {
font-size: 12px !important;
}
table[class=body] .et-btn {
margin-bottom: 15px;
}
table[class=body] h1 {
font-size: 18.2px !important;
}
table[class=body] h2 {
font-size: 16.8px !important;
}
table[class=body] h3 {
font-size: 15.4px !important;
}
table[class=body] h4 {
font-size: 14.7px !important;
}
table[class=body] h5 {
font-size: 12.6px !important;
}
table[class=body] h6 {
font-size: 11.9px !important;
}
table[class=body] h1, table[class=body] h2 {
margin-bottom: 14px !important;
margin-top: 14px !important;
}
table[class=body] .container, table[class=body] .content {
width: 100% !important;
max-width: 100% !important;
}
table[class=body] .content,table[class=body] .wrapper {
padding: 10px !important;
}
table[class=body] .container {
padding: 0 !important;
width: 100% !important;
}
table[class=body] .btn table,table[class=body] .btn a {
width: 100% !important;
}
}
</style>
$if(quotes)$
<style type="text/css">q { quotes: "“" "”" "" ""; }</style>
$endif$
$if(highlighting-css)$
<style type="text/css">
$highlighting-css$
</style>
$endif$
$for(css)$
<link rel="stylesheet" href="$css$" type="text/css" />
$endfor$
$if(math)$
$math$
$endif$
$for(header-includes)$
$header-includes$
$endfor$
</head>
<body>
$for(include-before)$
$include-before$
$endfor$
$if(title)$
<div id="$idprefix$header">
<h1 class="title">$title$</h1>
$if(subtitle)$
<h1 class="subtitle">$subtitle$</h1>
$endif$
$for(author)$
<h2 class="author">$author$</h2>
$endfor$
$if(date)$
<h3 class="date">$date$</h3>
$endif$
</div>
$endif$
$if(toc)$
<div id="$idprefix$TOC">
$toc$
</div>
$endif$
$body$
$for(include-after)$
$include-after$
$endfor$
</body>
</html>

View File

@ -0,0 +1,26 @@
#!/usr/bin/env bash
color8="#88C0D0"
icon(){
printf "%s\\n" "%{F${color8}}${1}%{F}"
}
icon2() {
printf "%s\\n" "%{F${color11:-#F0F0F0}}${1}%{F}"
}
status=$(acpiconf -i 0 | grep State | cut -c 10-)
capacity=$(acpiconf -i 0 | grep % | cut -f2 | cut -c -4 | sed s/%//)
if [ "$status" == "charging" ]; then
printf "%s\\n" "$(icon "") ${capacity}%"
elif [ "$status" == "high" ]; then
printf "%s\\n" "$(icon "") ${capacity}%"
elif (("$capacity" <= "20")); then
printf "%s\\n" "$(icon2 "") ${capacity}%"
elif (("$capacity" <= "60")); then
printf "%s\\n" "$(icon "") ${capacity}%"
elif (("$capacity" <= "100")); then
printf "%s\\n" "$(icon "") ${capacity}%"
fi

View File

@ -0,0 +1,121 @@
[colors]
foreground-alt = #D8DEE9
icon = #88C0D0
[bar/main]
monitor = eDP-1
height = 20
width = 100%
background = #211B29
foreground = ${colors.foreground-alt}
underline-color = #00f
underline-size = 1
overline-color = #f00
spacing = 2
padding-right = 2
module-margin-right = 2
module-margin-left = 2
;override-redirect = true
font-0 = lime:size=7;0
font-1 = Siji:size=10;0
modules-left = workspaces
modules-center = date
modules-right = mpd wifi vol bat
[module/title]
type = internal/xwindow
label = %title%
label-maxlen = 50
[module/mail]
type = custom/script
format-prefix =" "
exec = python3 ~/.scripts/mail
interval = 100
format-foreground = ${colors.foreground-alt}
[module/mpd]
type = internal/mpd
host = /home/coolneng/.mpd/socket
format-online = <icon-play> <icon-pause> <label-song>
format-offline = <label-offline>
label-song = %title%
label-offline = 
icon-play = 
icon-pause = 
icon-play-foreground = ${colors.icon}
icon-pause-foreground = ${colors.icon}
interval = 2
[module/date]
type = internal/date
; Seconds to sleep between updates
interval = 1.0
; See "man date" for details on how to format the date string
; NOTE: if you want to use syntax tags here you need to use %%{...}
date = %a %d %b
; Optional time format
time = %H:%M
; if `date-alt` or `time-alt` is defined, clicking
; the module will toggle between formats
;date-alt = %A, %d %B %Y
;time-alt = %H:%M:%S
; Available tags:
; <label> (default)
format = <label>
; Available tokens:
; %date%
; %time%
; Default: %date%
label = %date% %time%
format-foreground = ${colors.foreground-alt}
[module/workspaces]
type = internal/xworkspaces
pin-workspaces = false
enable-click = false
enable-scroll = false
format-padding = 0
;icon-0 = 1
;icon-1 = 2
;icon-2 = 3
;icon-3 = 4
;icon-default =
format = <label-state>
; active
label-active = %name%
label-active-padding = 1
label-active-foreground = ${colors.icon}
label-active-underline = ${colors.icon}
; empty
label-empty = %name%
label-empty-padding = 1
label-empty-foreground = ${colors.foreground-alt}
[module/vol]
type = custom/script
exec = ~/.config/polybar/volume.sh
interval = 2
[module/bat]
type = custom/script
exec = ~/.config/polybar/battery.sh
interval = 2
[module/wifi]
type = custom/script
exec = ~/.config/polybar/wifi.sh
interval = 2

View File

@ -0,0 +1,18 @@
#!/usr/bin/env bash
color8="#88C0D0"
icon(){
printf "%s\\n" "%{F${color8}}${1}%{F}"
}
volume="$(mixer vol | cut -c 36- | cut -c -3)"
case "$volume" in
0|[0-9]) vol_icon=" " ;;
1?|2?|3?) vol_icon="" ;;
4?|5?|6?) vol_icon="" ;;
*) vol_icon="" ;;
esac
printf "%s\\n" "$(icon "$vol_icon") ${volume}%"

11
polybar/.config/polybar/wifi.sh Executable file
View File

@ -0,0 +1,11 @@
#!/usr/bin/env bash
color8="#88C0D0"
icon(){
printf "%s\\n" "%{F${color8}}${1}%{F}"
}
wifi="$(echo -e $(wpa_cli status | grep ssid | awk 'NR==2{print $1}' | cut -c 6-))"
wifi_icon=""
printf "%s\\n" "$(icon "$wifi_icon") ${wifi}"

105
tmux/.tmux.conf Normal file
View File

@ -0,0 +1,105 @@
# Set prefix key to C-x
unbind C-b
set -g prefix C-x
bind C-x send-prefix
## set the default TERM
set -g default-terminal "screen-256color"
set-option -ga terminal-overrides ",screen-256color:Tc"
## set terminal bell
set -g bell-action any
### update the TERM variable of terminal emulator when creating a new session or attaching a existing session
set -g update-environment 'DISPLAY SSH_ASKPASS SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY TERM'
# i3 split bindings
bind g split-window -h
bind v split-window -v
unbind '"'
unbind %
unbind m
# vim split navigation
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# equalize splits with x
unbind space
bind x select-layout even-horizontal
# window switching
unbind n
unbind c
bind c new-window
unbind ,
unbind .
bind , previous-window
bind . next-window
bind-key n command-prompt "rename-window '%%'"
# change kill window bind
unbind &
bind k killp
# force a reload of the config file
unbind r
bind r source-file ~/.tmux.conf
#set -g default-shell /usr/local/bin/fish
#set -g default-command '/usr/local/bin/fish'
set -g status on
set -g pane-base-index 1
set -g base-index 1
set -g set-titles on
set -g aggressive-resize on
set-option -g set-titles-string '#{pane_current_command}'
set-option -g history-limit 30000
set-option -g visual-activity on
set-option -g status-position bottom
set-option -g renumber-windows on
set-window-option -g monitor-activity off
set-option -g allow-rename off
# copy mode
unbind [
bind Escape copy-mode
bind-key -T copy-mode-vi 'v' send -X begin-selection # Begin selection in copy mode.
bind-key -T copy-mode-vi 'C-v' send -X rectangle-toggle # Begin selection in copy mode.
bind-key -T copy-mode-vi 'y' send -X copy-selection # Yank selection in copy mode.
set -g mouse on
bind -T root WheelUpPane if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; copy-mode -e; send-keys -M"
bind -T root WheelDownPane if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; send-keys -M"
# Split
set-option -g pane-active-border-fg colour234
set-option -g pane-active-border-bg default
set-option -g pane-border-fg colour234
set-option -g pane-border-bg default
set -g status-left '#[fg=white,bg=magenta] #S #[fg=default,bg=default]'
set -g status-right '#{prefix_highlight} #[fg=white,bg=magenta] %b %d %Y #[fg=white,bg=blue] %R '
set -g status-right-length 100
set -g status-bg default
setw -g window-status-format '#[fg=cyan,bg=black] #I #[fg=cyan,bg=black] #W '
setw -g window-status-current-format '#[fg=white,bg=blue] #I #[fg=white,bg=magenta] #W '
# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'tmux-plugins/tmux-sessionist'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
# Plugin configuration
set -g @resurrect-processes ':all:'
set -g @resurrect-capture-pane-contents 'on'
set -g @continuum-restore 'on'
set -g @continuum-save-interval '15'
run '~/.tmux/plugins/tpm/tpm'

@ -0,0 +1 @@
Subproject commit 90f4a00c41de094864dd4e29231253bcd80d4409

@ -0,0 +1 @@
Subproject commit 9dc3f8c639cb8b1d868002a037b7edbf39f3dd12

@ -0,0 +1 @@
Subproject commit e91b178ff832b7bcbbf4d99d9f467f63fd1b76b5

@ -0,0 +1 @@
Subproject commit c6a73eba6bfcde51edf57e1cc5fa12c4c7bd98d9

@ -0,0 +1 @@
Subproject commit 95f78336c3972f3e6648b7b3db754f2224320a5e

View File

@ -0,0 +1,72 @@
# An example configuration for vdirsyncer.
#
# Move it to ~/.vdirsyncer/config or ~/.config/vdirsyncer/config and edit it.
# Run `vdirsyncer --help` for CLI usage.
#
# Optional parameters are commented out.
# This file doesn't document all available parameters, see
# http://vdirsyncer.pimutils.org/ for the rest of them.
[general]
# A folder where vdirsyncer can store some metadata about each pair.
status_path = "~/.vdirsyncer/status/"
# CARDDAV
[pair bob_contacts]
# A `[pair <name>]` block defines two storages `a` and `b` that should be
# synchronized. The definition of these storages follows in `[storage <name>]`
# blocks. This is similar to accounts in OfflineIMAP.
a = "bob_contacts_local"
b = "bob_contacts_remote"
# Synchronize all collections that can be found.
# You need to run `vdirsyncer discover` if new calendars/addressbooks are added
# on the server.
collections = ["from a", "from b"]
# Synchronize the "display name" property into a local file (~/.contacts/displayname).
metadata = ["displayname"]
# To resolve a conflict the following values are possible:
# `null` - abort when collisions occur (default)
# `"a wins"` - assume a's items to be more up-to-date
# `"b wins"` - assume b's items to be more up-to-date
#conflict_resolution = null
[storage bob_contacts_local]
# A storage references actual data on a remote server or on the local disk.
# Similar to repositories in OfflineIMAP.
type = "filesystem"
path = "~/.contacts/"
fileext = ".vcf"
[storage bob_contacts_remote]
type = "carddav"
url = "https://coolneng.dedyn.io/remote.php/dav/"
username = "coolneng"
# The password can also be fetched from the system password storage, netrc or a
# custom command. See http://vdirsyncer.pimutils.org/en/stable/keyring.html
password = "8codk-a3Yts-jpwTM-CNaYj-cTQpc"
verify_fingerprint = "DF:6C:D1:78:71:41:5A:17:4A:CE:2B:4B:6B:20:D5:F2:A2:AE:8D:EC:FD:AF:11:42:71:29:1C:46:C9:DB:20:C7"
# CALDAV
[pair bob_calendar]
a = "bob_calendar_local"
b = "bob_calendar_remote"
collections = ["from a", "from b"]
# Calendars also have a color property
metadata = ["displayname", "color"]
[storage bob_calendar_local]
type = "filesystem"
path = "~/.calendars/"
fileext = ".ics"
[storage bob_calendar_remote]
type = "caldav"
url = "https://coolneng.dedyn.io/remote.php/dav/"
username = "coolneng"
password = "8codk-a3Yts-jpwTM-CNaYj-cTQpc"
verify_fingerprint = "DF:6C:D1:78:71:41:5A:17:4A:CE:2B:4B:6B:20:D5:F2:A2:AE:8D:EC:FD:AF:11:42:71:29:1C:46:C9:DB:20:C7"

1
vim/.vim/.vim Symbolic link
View File

@ -0,0 +1 @@
/home/coolneng/.vim

View File

@ -0,0 +1,264 @@
" pathogen.vim - path option manipulation
" Maintainer: Tim Pope <http://tpo.pe/>
" Version: 2.4
" Install in ~/.vim/autoload (or ~\vimfiles\autoload).
"
" For management of individually installed plugins in ~/.vim/bundle (or
" ~\vimfiles\bundle), adding `execute pathogen#infect()` to the top of your
" .vimrc is the only other setup necessary.
"
" The API is documented inline below.
if exists("g:loaded_pathogen") || &cp
finish
endif
let g:loaded_pathogen = 1
" Point of entry for basic default usage. Give a relative path to invoke
" pathogen#interpose() or an absolute path to invoke pathogen#surround().
" Curly braces are expanded with pathogen#expand(): "bundle/{}" finds all
" subdirectories inside "bundle" inside all directories in the runtime path.
" If no arguments are given, defaults "bundle/{}", and also "pack/{}/start/{}"
" on versions of Vim without native package support.
function! pathogen#infect(...) abort
if a:0
let paths = filter(reverse(copy(a:000)), 'type(v:val) == type("")')
else
let paths = ['bundle/{}', 'pack/{}/start/{}']
endif
if has('packages')
call filter(paths, 'v:val !~# "^pack/[^/]*/start/[^/]*$"')
endif
let static = '^\%([$~\\/]\|\w:[\\/]\)[^{}*]*$'
for path in filter(copy(paths), 'v:val =~# static')
call pathogen#surround(path)
endfor
for path in filter(copy(paths), 'v:val !~# static')
if path =~# '^\%([$~\\/]\|\w:[\\/]\)'
call pathogen#surround(path)
else
call pathogen#interpose(path)
endif
endfor
call pathogen#cycle_filetype()
if pathogen#is_disabled($MYVIMRC)
return 'finish'
endif
return ''
endfunction
" Split a path into a list.
function! pathogen#split(path) abort
if type(a:path) == type([]) | return a:path | endif
if empty(a:path) | return [] | endif
let split = split(a:path,'\\\@<!\%(\\\\\)*\zs,')
return map(split,'substitute(v:val,''\\\([\\,]\)'',''\1'',"g")')
endfunction
" Convert a list to a path.
function! pathogen#join(...) abort
if type(a:1) == type(1) && a:1
let i = 1
let space = ' '
else
let i = 0
let space = ''
endif
let path = ""
while i < a:0
if type(a:000[i]) == type([])
let list = a:000[i]
let j = 0
while j < len(list)
let escaped = substitute(list[j],'[,'.space.']\|\\[\,'.space.']\@=','\\&','g')
let path .= ',' . escaped
let j += 1
endwhile
else
let path .= "," . a:000[i]
endif
let i += 1
endwhile
return substitute(path,'^,','','')
endfunction
" Convert a list to a path with escaped spaces for 'path', 'tag', etc.
function! pathogen#legacyjoin(...) abort
return call('pathogen#join',[1] + a:000)
endfunction
" Turn filetype detection off and back on again if it was already enabled.
function! pathogen#cycle_filetype() abort
if exists('g:did_load_filetypes')
filetype off
filetype on
endif
endfunction
" Check if a bundle is disabled. A bundle is considered disabled if its
" basename or full name is included in the list g:pathogen_blacklist or the
" comma delimited environment variable $VIMBLACKLIST.
function! pathogen#is_disabled(path) abort
if a:path =~# '\~$'
return 1
endif
let sep = pathogen#slash()
let blacklist = get(g:, 'pathogen_blacklist', get(g:, 'pathogen_disabled', [])) + pathogen#split($VIMBLACKLIST)
if !empty(blacklist)
call map(blacklist, 'substitute(v:val, "[\\/]$", "", "")')
endif
return index(blacklist, fnamemodify(a:path, ':t')) != -1 || index(blacklist, a:path) != -1
endfunction
" Prepend the given directory to the runtime path and append its corresponding
" after directory. Curly braces are expanded with pathogen#expand().
function! pathogen#surround(path) abort
let sep = pathogen#slash()
let rtp = pathogen#split(&rtp)
let path = fnamemodify(a:path, ':s?[\\/]\=$??')
let before = filter(pathogen#expand(path), '!pathogen#is_disabled(v:val)')
let after = filter(reverse(pathogen#expand(path, sep.'after')), '!pathogen#is_disabled(v:val[0:-7])')
call filter(rtp, 'index(before + after, v:val) == -1')
let &rtp = pathogen#join(before, rtp, after)
return &rtp
endfunction
" For each directory in the runtime path, add a second entry with the given
" argument appended. Curly braces are expanded with pathogen#expand().
function! pathogen#interpose(name) abort
let sep = pathogen#slash()
let name = a:name
if has_key(s:done_bundles, name)
return ""
endif
let s:done_bundles[name] = 1
let list = []
for dir in pathogen#split(&rtp)
if dir =~# '\<after$'
let list += reverse(filter(pathogen#expand(dir[0:-6].name, sep.'after'), '!pathogen#is_disabled(v:val[0:-7])')) + [dir]
else
let list += [dir] + filter(pathogen#expand(dir.sep.name), '!pathogen#is_disabled(v:val)')
endif
endfor
let &rtp = pathogen#join(pathogen#uniq(list))
return 1
endfunction
let s:done_bundles = {}
" Invoke :helptags on all non-$VIM doc directories in runtimepath.
function! pathogen#helptags() abort
let sep = pathogen#slash()
for glob in pathogen#split(&rtp)
for dir in map(split(glob(glob), "\n"), 'v:val.sep."/doc/".sep')
if (dir)[0 : strlen($VIMRUNTIME)] !=# $VIMRUNTIME.sep && filewritable(dir) == 2 && !empty(split(glob(dir.'*.txt'))) && (!filereadable(dir.'tags') || filewritable(dir.'tags'))
silent! execute 'helptags' pathogen#fnameescape(dir)
endif
endfor
endfor
endfunction
command! -bar Helptags :call pathogen#helptags()
" Execute the given command. This is basically a backdoor for --remote-expr.
function! pathogen#execute(...) abort
for command in a:000
execute command
endfor
return ''
endfunction
" Section: Unofficial
function! pathogen#is_absolute(path) abort
return a:path =~# (has('win32') ? '^\%([\\/]\|\w:\)[\\/]\|^[~$]' : '^[/~$]')
endfunction
" Given a string, returns all possible permutations of comma delimited braced
" alternatives of that string. pathogen#expand('/{a,b}/{c,d}') yields
" ['/a/c', '/a/d', '/b/c', '/b/d']. Empty braces are treated as a wildcard
" and globbed. Actual globs are preserved.
function! pathogen#expand(pattern, ...) abort
let after = a:0 ? a:1 : ''
let pattern = substitute(a:pattern, '^[~$][^\/]*', '\=expand(submatch(0))', '')
if pattern =~# '{[^{}]\+}'
let [pre, pat, post] = split(substitute(pattern, '\(.\{-\}\){\([^{}]\+\)}\(.*\)', "\\1\001\\2\001\\3", ''), "\001", 1)
let found = map(split(pat, ',', 1), 'pre.v:val.post')
let results = []
for pattern in found
call extend(results, pathogen#expand(pattern))
endfor
elseif pattern =~# '{}'
let pat = matchstr(pattern, '^.*{}[^*]*\%($\|[\\/]\)')
let post = pattern[strlen(pat) : -1]
let results = map(split(glob(substitute(pat, '{}', '*', 'g')), "\n"), 'v:val.post')
else
let results = [pattern]
endif
let vf = pathogen#slash() . 'vimfiles'
call map(results, 'v:val =~# "\\*" ? v:val.after : isdirectory(v:val.vf.after) ? v:val.vf.after : isdirectory(v:val.after) ? v:val.after : ""')
return filter(results, '!empty(v:val)')
endfunction
" \ on Windows unless shellslash is set, / everywhere else.
function! pathogen#slash() abort
return !exists("+shellslash") || &shellslash ? '/' : '\'
endfunction
function! pathogen#separator() abort
return pathogen#slash()
endfunction
" Convenience wrapper around glob() which returns a list.
function! pathogen#glob(pattern) abort
let files = split(glob(a:pattern),"\n")
return map(files,'substitute(v:val,"[".pathogen#slash()."/]$","","")')
endfunction
" Like pathogen#glob(), only limit the results to directories.
function! pathogen#glob_directories(pattern) abort
return filter(pathogen#glob(a:pattern),'isdirectory(v:val)')
endfunction
" Remove duplicates from a list.
function! pathogen#uniq(list) abort
let i = 0
let seen = {}
while i < len(a:list)
if (a:list[i] ==# '' && exists('empty')) || has_key(seen,a:list[i])
call remove(a:list,i)
elseif a:list[i] ==# ''
let i += 1
let empty = 1
else
let seen[a:list[i]] = 1
let i += 1
endif
endwhile
return a:list
endfunction
" Backport of fnameescape().
function! pathogen#fnameescape(string) abort
if exists('*fnameescape')
return fnameescape(a:string)
elseif a:string ==# '-'
return '\-'
else
return substitute(escape(a:string," \t\n*?[{`$\\%#'\"|!<"),'^[+>]','\\&','')
endif
endfunction
" Like findfile(), but hardcoded to use the runtimepath.
function! pathogen#runtime_findfile(file,count) abort
let rtp = pathogen#join(1,pathogen#split(&rtp))
let file = findfile(a:file,rtp,a:count)
if file ==# ''
return ''
else
return fnamemodify(file,':p')
endif
endfunction
" vim:set et sw=2 foldmethod=expr foldexpr=getline(v\:lnum)=~'^\"\ Section\:'?'>1'\:getline(v\:lnum)=~#'^fu'?'a1'\:getline(v\:lnum)=~#'^endf'?'s1'\:'=':

1
vim/.vim/bundle/goyo Submodule

@ -0,0 +1 @@
Subproject commit 057fe68e442e7d4ffa45a3c992389e19e64abc7c

@ -0,0 +1 @@
Subproject commit 691d961a643064ee1feddba8371ff12e44678f5a

@ -0,0 +1 @@
Subproject commit a1cba9c85b830eaef6e806d267f1f08dcb64cf87

@ -0,0 +1 @@
Subproject commit 597068870b8f093a8b2d11536c62ff31222ee8d0

View File

@ -0,0 +1,362 @@
" synthwave.vim -- Vim color scheme.
" Author: Dean Thomson
" Webpage: https://fsociety.info
" Description: A colorscheme
hi clear
set background=dark
if exists("syntax_on")
syntax reset
endif
let colors_name = "synthwave"
" highlight groups {{{
if &t_Co >= 256 || has("gui_running")
hi Normal ctermbg=0 ctermfg=7 cterm=NONE guibg=#312e39 guifg=#c0a79a gui=NONE
set background=dark
hi NonText ctermbg=NONE ctermfg=0 cterm=NONE guibg=NONE guifg=#33303b gui=NONE
hi Comment ctermbg=NONE ctermfg=8 cterm=NONE guibg=NONE guifg=#4f4b58 gui=NONE
hi Constant ctermbg=NONE ctermfg=3 cterm=NONE guibg=NONE guifg=#71949a gui=NONE
hi Error ctermbg=1 ctermfg=7 cterm=NONE guibg=#87404f guifg=#c0a79a gui=NONE
hi Identifier ctermbg=NONE ctermfg=1 cterm=NONE guibg=NONE guifg=#87404f gui=NONE
hi Ignore ctermbg=8 ctermfg=0 cterm=NONE guibg=#4f4b58 guifg=#33303b gui=NONE
hi PreProc ctermbg=NONE ctermfg=3 cterm=NONE guibg=NONE guifg=#71949a gui=NONE
hi Special ctermbg=NONE ctermfg=6 cterm=NONE guibg=NONE guifg=#554757 gui=NONE
hi Statement ctermbg=NONE ctermfg=1 cterm=NONE guibg=NONE guifg=#87404f gui=NONE
hi String ctermbg=NONE ctermfg=2 cterm=NONE guibg=NONE guifg=#4c9882 gui=NONE
hi Number ctermbg=NONE ctermfg=3 cterm=NONE guibg=NONE guifg=#71949a gui=NONE
hi Todo ctermbg=8 ctermfg=3 cterm=NONE guibg=#4f4b58 guifg=#71949a gui=NONE
hi Type ctermbg=NONE ctermfg=3 cterm=NONE guibg=NONE guifg=#71949a gui=NONE
hi Underlined ctermbg=NONE ctermfg=1 cterm=underline guibg=NONE guifg=#87404f gui=underline
hi StatusLine ctermbg=7 ctermfg=0 cterm=NONE guibg=#c0a79a guifg=#33303b gui=NONE
hi StatusLineNC ctermbg=NONE ctermfg=NONE cterm=NONE guibg=NONE guifg=NONE gui=NONE
hi TabLine ctermbg=NONE ctermfg=8 cterm=NONE guibg=NONE guifg=#4f4b58 gui=NONE
hi TabLineFill ctermbg=NONE ctermfg=8 cterm=NONE guibg=NONE guifg=#4f4b58 gui=NONE
hi TabLineSel ctermbg=4 ctermfg=0 cterm=NONE guibg=#615772 guifg=#33303b gui=NONE
hi TermCursorNC ctermbg=3 ctermfg=0 cterm=NONE guibg=#71949a guifg=#33303b gui=NONE
hi VertSplit ctermbg=NONE ctermfg=NONE cterm=NONE guibg=NONE guifg=NONE gui=NONE
hi Title ctermbg=NONE ctermfg=4 cterm=NONE guibg=NONE guifg=#615772 gui=NONE
hi CursorLine ctermbg=NONE ctermfg=8 cterm=NONE guibg=NONE guifg=#4f4b58 gui=NONE
hi LineNr ctermbg=NONE ctermfg=8 cterm=NONE guibg=NONE guifg=#4f4b58 gui=NONE
hi CursorLineNr ctermbg=NONE ctermfg=8 cterm=NONE guibg=NONE guifg=#4f4b58 gui=NONE
hi helpLeadBlank ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi helpNormal ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi Visual ctermbg=8 ctermfg=0 cterm=NONE guibg=#4f4b58 guifg=#33303b gui=NONE
hi VisualNOS ctermbg=NONE ctermfg=1 cterm=NONE guibg=NONE guifg=#87404f gui=NONE
hi Pmenu ctermbg=8 ctermfg=7 cterm=NONE guibg=#4f4b58 guifg=#c0a79a gui=NONE
hi PmenuSbar ctermbg=6 ctermfg=7 cterm=NONE guibg=#554757 guifg=#c0a79a gui=NONE
hi PmenuSel ctermbg=4 ctermfg=0 cterm=NONE guibg=#615772 guifg=#33303b gui=NONE
hi PmenuThumb ctermbg=8 ctermfg=8 cterm=NONE guibg=#4f4b58 guifg=#70838c gui=NONE
hi FoldColumn ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi Folded ctermbg=NONE ctermfg=8 cterm=NONE guibg=NONE guifg=#4f4b58 gui=NONE
hi WildMenu ctermbg=2 ctermfg=0 cterm=NONE guibg=#4c9882 guifg=#33303b gui=NONE
hi SpecialKey ctermbg=NONE ctermfg=8 cterm=NONE guibg=NONE guifg=#4f4b58 gui=NONE
hi DiffAdd ctermbg=NONE ctermfg=2 cterm=NONE guibg=NONE guifg=#4c9882 gui=NONE
hi DiffChange ctermbg=NONE ctermfg=8 cterm=NONE guibg=NONE guifg=#4f4b58 gui=NONE
hi DiffDelete ctermbg=NONE ctermfg=1 cterm=NONE guibg=NONE guifg=#87404f gui=NONE
hi DiffText ctermbg=NONE ctermfg=4 cterm=NONE guibg=NONE guifg=#615772 gui=NONE
hi IncSearch ctermbg=3 ctermfg=0 cterm=NONE guibg=#71949a guifg=#33303b gui=NONE
hi Search ctermbg=3 ctermfg=0 cterm=NONE guibg=#71949a guifg=#33303b gui=NONE
hi Directory ctermbg=NONE ctermfg=4 cterm=NONE guibg=NONE guifg=#615772 gui=NONE
hi MatchParen ctermbg=8 ctermfg=0 cterm=NONE guibg=#4f4b58 guifg=#33303b gui=NONE
hi ColorColumn ctermbg=4 ctermfg=4 cterm=NONE guibg=#615772 guifg=#7c9fa6 gui=NONE
hi signColumn ctermbg=NONE ctermfg=4 cterm=NONE guibg=NONE guifg=#615772 gui=NONE
hi ErrorMsg ctermbg=NONE ctermfg=8 cterm=NONE guibg=NONE guifg=#4f4b58 gui=NONE
hi ModeMsg ctermbg=NONE ctermfg=2 cterm=NONE guibg=NONE guifg=#4c9882 gui=NONE
hi MoreMsg ctermbg=NONE ctermfg=2 cterm=NONE guibg=NONE guifg=#4c9882 gui=NONE
hi Question ctermbg=NONE ctermfg=4 cterm=NONE guibg=NONE guifg=#615772 gui=NONE
hi WarningMsg ctermbg=1 ctermfg=0 cterm=NONE guibg=#87404f guifg=#33303b gui=NONE
hi Cursor ctermbg=NONE ctermfg=8 cterm=NONE guibg=NONE guifg=#4f4b58 gui=NONE
hi Structure ctermbg=NONE ctermfg=5 cterm=NONE guibg=NONE guifg=#783e57 gui=NONE
hi CursorColumn ctermbg=8 ctermfg=7 cterm=NONE guibg=#4f4b58 guifg=#c0a79a gui=NONE
hi ModeMsg ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi SpellBad ctermbg=NONE ctermfg=1 cterm=underline guibg=NONE guifg=#87404f gui=underline guisp=#99736e
hi SpellCap ctermbg=NONE ctermfg=4 cterm=underline guibg=NONE guifg=#615772 gui=underline guisp=#7c9fa6
hi SpellLocal ctermbg=NONE ctermfg=5 cterm=underline guibg=NONE guifg=#783e57 gui=underline guisp=#BF9C86
hi SpellRare ctermbg=NONE ctermfg=6 cterm=underline guibg=NONE guifg=#554757 gui=underline guisp=#99BFBA
hi Boolean ctermbg=NONE ctermfg=5 cterm=NONE guibg=NONE guifg=#783e57 gui=NONE
hi Character ctermbg=NONE ctermfg=1 cterm=NONE guibg=NONE guifg=#87404f gui=NONE
hi Conditional ctermbg=NONE ctermfg=5 cterm=NONE guibg=NONE guifg=#783e57 gui=NONE
hi Define ctermbg=NONE ctermfg=5 cterm=NONE guibg=NONE guifg=#783e57 gui=NONE
hi Delimiter ctermbg=NONE ctermfg=5 cterm=NONE guibg=NONE guifg=#783e57 gui=NONE
hi Float ctermbg=NONE ctermfg=5 cterm=NONE guibg=NONE guifg=#783e57 gui=NONE
hi Include ctermbg=NONE ctermfg=4 cterm=NONE guibg=NONE guifg=#615772 gui=NONE
hi Keyword ctermbg=NONE ctermfg=5 cterm=NONE guibg=NONE guifg=#783e57 gui=NONE
hi Label ctermbg=NONE ctermfg=3 cterm=NONE guibg=NONE guifg=#71949a gui=NONE
hi Operator ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi Repeat ctermbg=NONE ctermfg=3 cterm=NONE guibg=NONE guifg=#71949a gui=NONE
hi SpecialChar ctermbg=NONE ctermfg=5 cterm=NONE guibg=NONE guifg=#783e57 gui=NONE
hi Tag ctermbg=NONE ctermfg=3 cterm=NONE guibg=NONE guifg=#71949a gui=NONE
hi Typedef ctermbg=NONE ctermfg=3 cterm=NONE guibg=NONE guifg=#71949a gui=NONE
hi vimUserCommand ctermbg=NONE ctermfg=1 cterm=BOLD guibg=NONE guifg=#87404f gui=BOLD
hi link vimMap vimUserCommand
hi link vimLet vimUserCommand
hi link vimCommand vimUserCommand
hi link vimFTCmd vimUserCommand
hi link vimAutoCmd vimUserCommand
hi link vimNotFunc vimUserCommand
hi vimNotation ctermbg=NONE ctermfg=4 cterm=NONE guibg=NONE guifg=#615772 gui=NONE
hi vimMapModKey ctermbg=NONE ctermfg=4 cterm=NONE guibg=NONE guifg=#615772 gui=NONE
hi vimBracket ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi vimCommentString ctermbg=NONE ctermfg=8 cterm=NONE guibg=NONE guifg=#4f4b58 gui=NONE
hi htmlLink ctermbg=NONE ctermfg=1 cterm=underline guibg=NONE guifg=#87404f gui=underline
hi htmlBold ctermbg=NONE ctermfg=3 cterm=NONE guibg=NONE guifg=#71949a gui=NONE
hi htmlItalic ctermbg=NONE ctermfg=5 cterm=NONE guibg=NONE guifg=#783e57 gui=NONE
hi htmlEndTag ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi htmlTag ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi htmlTagName ctermbg=NONE ctermfg=1 cterm=BOLD guibg=NONE guifg=#87404f gui=BOLD
hi htmlH1 ctermbg=NONE ctermfg=7 cterm=BOLD guibg=NONE guifg=#c0a79a gui=BOLD
hi link htmlH2 htmlH1
hi link htmlH3 htmlH1
hi link htmlH4 htmlH1
hi link htmlH5 htmlH1
hi link htmlH6 htmlH1
hi cssMultiColumnAttr ctermbg=NONE ctermfg=2 cterm=NONE guibg=NONE guifg=#4c9882 gui=NONE
hi link cssFontAttr cssMultiColumnAttr
hi link cssFlexibleBoxAttr cssMultiColumnAttr
hi cssBraces ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi link cssAttrComma cssBraces
hi cssValueLength ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi cssUnitDecorators ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi cssValueNumber ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi link cssValueLength cssValueNumber
hi cssNoise ctermbg=NONE ctermfg=8 cterm=NONE guibg=NONE guifg=#4f4b58 gui=NONE
hi cssTagName ctermbg=NONE ctermfg=1 cterm=NONE guibg=NONE guifg=#87404f gui=NONE
hi cssFunctionName ctermbg=NONE ctermfg=4 cterm=NONE guibg=NONE guifg=#615772 gui=NONE
hi scssSelectorChar ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi scssAttribute ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi link scssDefinition cssNoise
hi sassidChar ctermbg=NONE ctermfg=1 cterm=NONE guibg=NONE guifg=#87404f gui=NONE
hi sassClassChar ctermbg=NONE ctermfg=5 cterm=NONE guibg=NONE guifg=#783e57 gui=NONE
hi sassInclude ctermbg=NONE ctermfg=5 cterm=NONE guibg=NONE guifg=#783e57 gui=NONE
hi sassMixing ctermbg=NONE ctermfg=5 cterm=NONE guibg=NONE guifg=#783e57 gui=NONE
hi sassMixinName ctermbg=NONE ctermfg=4 cterm=NONE guibg=NONE guifg=#615772 gui=NONE
hi javaScript ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi javaScriptBraces ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi javaScriptNumber ctermbg=NONE ctermfg=5 cterm=NONE guibg=NONE guifg=#783e57 gui=NONE
hi markdownAutomaticLink ctermbg=NONE ctermfg=1 cterm=underline guibg=NONE guifg=#87404f gui=underline
hi link markdownUrl markdownAutomaticLink
hi markdownError ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi markdownCode ctermbg=NONE ctermfg=3 cterm=NONE guibg=NONE guifg=#71949a gui=NONE
hi markdownCodeBlock ctermbg=NONE ctermfg=3 cterm=NONE guibg=NONE guifg=#71949a gui=NONE
hi markdownCodeDelimiter ctermbg=NONE ctermfg=5 cterm=NONE guibg=NONE guifg=#783e57 gui=NONE
hi xdefaultsValue ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi rubyInclude ctermbg=NONE ctermfg=4 cterm=NONE guibg=NONE guifg=#615772 gui=NONE
hi rubyDefine ctermbg=NONE ctermfg=5 cterm=NONE guibg=NONE guifg=#783e57 gui=NONE
hi rubyFunction ctermbg=NONE ctermfg=4 cterm=NONE guibg=NONE guifg=#615772 gui=NONE
hi rubyStringDelimiter ctermbg=NONE ctermfg=2 cterm=NONE guibg=NONE guifg=#4c9882 gui=NONE
hi rubyInteger ctermbg=NONE ctermfg=3 cterm=NONE guibg=NONE guifg=#71949a gui=NONE
hi rubyAttribute ctermbg=NONE ctermfg=4 cterm=NONE guibg=NONE guifg=#615772 gui=NONE
hi rubyConstant ctermbg=NONE ctermfg=3 cterm=NONE guibg=NONE guifg=#71949a gui=NONE
hi rubyInterpolation ctermbg=NONE ctermfg=2 cterm=NONE guibg=NONE guifg=#4c9882 gui=NONE
hi rubyInterpolationDelimiter ctermbg=NONE ctermfg=3 cterm=NONE guibg=NONE guifg=#71949a gui=NONE
hi rubyRegexp ctermbg=NONE ctermfg=6 cterm=NONE guibg=NONE guifg=#554757 gui=NONE
hi rubySymbol ctermbg=NONE ctermfg=2 cterm=NONE guibg=NONE guifg=#4c9882 gui=NONE
hi rubyTodo ctermbg=NONE ctermfg=8 cterm=NONE guibg=NONE guifg=#4f4b58 gui=NONE
hi rubyRegexpAnchor ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi link rubyRegexpQuantifier rubyRegexpAnchor
hi pythonOperator ctermbg=NONE ctermfg=5 cterm=NONE guibg=NONE guifg=#783e57 gui=NONE
hi pythonFunction ctermbg=NONE ctermfg=4 cterm=NONE guibg=NONE guifg=#615772 gui=NONE
hi pythonRepeat ctermbg=NONE ctermfg=5 cterm=NONE guibg=NONE guifg=#783e57 gui=NONE
hi pythonStatement ctermbg=NONE ctermfg=1 cterm=Bold guibg=NONE guifg=#87404f gui=Bold
hi pythonBuiltIn ctermbg=NONE ctermfg=4 cterm=NONE guibg=NONE guifg=#615772 gui=NONE
hi phpMemberSelector ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi phpComparison ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi phpParent ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
hi cOperator ctermbg=NONE ctermfg=6 cterm=NONE guibg=NONE guifg=#554757 gui=NONE
hi cPreCondit ctermbg=NONE ctermfg=5 cterm=NONE guibg=NONE guifg=#783e57 gui=NONE
hi SignifySignAdd ctermbg=NONE ctermfg=2 cterm=NONE guibg=NONE guifg=#4c9882 gui=NONE
hi SignifySignChange ctermbg=NONE ctermfg=4 cterm=NONE guibg=NONE guifg=#615772 gui=NONE
hi SignifySignDelete ctermbg=NONE ctermfg=1 cterm=NONE guibg=NONE guifg=#87404f gui=NONE
hi NERDTreeDirSlash ctermbg=NONE ctermfg=4 cterm=NONE guibg=NONE guifg=#615772 gui=NONE
hi NERDTreeExecFile ctermbg=NONE ctermfg=7 cterm=NONE guibg=NONE guifg=#c0a79a gui=NONE
elseif &t_Co == 8 || $TERM !~# '^linux' || &t_Co == 16
set t_Co=16
hi Normal ctermbg=black ctermfg=white cterm=NONE
set background=dark
hi NonText ctermbg=NONE ctermfg=black cterm=NONE
hi Comment ctermbg=NONE ctermfg=gray cterm=NONE
hi Constant ctermbg=NONE ctermfg=yellow cterm=NONE
hi Error ctermbg=red ctermfg=white cterm=NONE
hi Identifier ctermbg=NONE ctermfg=red cterm=NONE
hi Ignore ctermbg=gray ctermfg=black cterm=NONE
hi PreProc ctermbg=NONE ctermfg=yellow cterm=NONE
hi Special ctermbg=NONE ctermfg=cyan cterm=NONE
hi Statement ctermbg=NONE ctermfg=red cterm=NONE
hi String ctermbg=NONE ctermfg=green cterm=NONE
hi Number ctermbg=NONE ctermfg=yellow cterm=NONE
hi Todo ctermbg=gray ctermfg=yellow cterm=NONE
hi Type ctermbg=NONE ctermfg=yellow cterm=NONE
hi Underlined ctermbg=NONE ctermfg=red cterm=underline
hi StatusLine ctermbg=white ctermfg=black cterm=NONE
hi StatusLineNC ctermbg=NONE ctermfg=NONE cterm=NONE
hi TabLine ctermbg=NONE ctermfg=gray cterm=NONE
hi TabLineFill ctermbg=NONE ctermfg=gray cterm=NONE
hi TabLineSel ctermbg=blue ctermfg=black cterm=NONE
hi TermCursorNC ctermbg=yellow ctermfg=black cterm=NONE
hi VertSplit ctermbg=NONE ctermfg=NONE cterm=NONE
hi Title ctermbg=NONE ctermfg=blue cterm=NONE
hi CursorLine ctermbg=NONE ctermfg=gray cterm=NONE
hi LineNr ctermbg=NONE ctermfg=gray cterm=NONE
hi CursorLineNr ctermbg=NONE ctermfg=gray cterm=NONE
hi helpLeadBlank ctermbg=NONE ctermfg=white cterm=NONE
hi helpNormal ctermbg=NONE ctermfg=white cterm=NONE
hi Visual ctermbg=gray ctermfg=black cterm=NONE
hi VisualNOS ctermbg=NONE ctermfg=red cterm=NONE
hi Pmenu ctermbg=gray ctermfg=white cterm=NONE
hi PmenuSbar ctermbg=cyan ctermfg=white cterm=NONE
hi PmenuSel ctermbg=blue ctermfg=black cterm=NONE
hi PmenuThumb ctermbg=gray ctermfg=gray cterm=NONE
hi FoldColumn ctermbg=NONE ctermfg=white cterm=NONE
hi Folded ctermbg=NONE ctermfg=gray cterm=NONE
hi WildMenu ctermbg=green ctermfg=black cterm=NONE
hi SpecialKey ctermbg=NONE ctermfg=gray cterm=NONE
hi DiffAdd ctermbg=NONE ctermfg=green cterm=NONE
hi DiffChange ctermbg=NONE ctermfg=gray cterm=NONE
hi DiffDelete ctermbg=NONE ctermfg=red cterm=NONE
hi DiffText ctermbg=NONE ctermfg=blue cterm=NONE
hi IncSearch ctermbg=yellow ctermfg=black cterm=NONE
hi Search ctermbg=yellow ctermfg=black cterm=NONE
hi Directory ctermbg=NONE ctermfg=blue cterm=NONE
hi MatchParen ctermbg=gray ctermfg=black cterm=NONE
hi ColorColumn ctermbg=blue ctermfg=blue cterm=NONE
hi signColumn ctermbg=NONE ctermfg=blue cterm=NONE
hi ErrorMsg ctermbg=NONE ctermfg=gray cterm=NONE
hi ModeMsg ctermbg=NONE ctermfg=green cterm=NONE
hi MoreMsg ctermbg=NONE ctermfg=green cterm=NONE
hi Question ctermbg=NONE ctermfg=blue cterm=NONE
hi WarningMsg ctermbg=red ctermfg=black cterm=NONE
hi Cursor ctermbg=NONE ctermfg=gray cterm=NONE
hi Structure ctermbg=NONE ctermfg=orange cterm=NONE
hi CursorColumn ctermbg=gray ctermfg=white cterm=NONE
hi ModeMsg ctermbg=NONE ctermfg=white cterm=NONE
hi SpellBad ctermbg=NONE ctermfg=red cterm=underline
hi SpellCap ctermbg=NONE ctermfg=blue cterm=underline
hi SpellLocal ctermbg=NONE ctermfg=orange cterm=underline
hi SpellRare ctermbg=NONE ctermfg=cyan cterm=underline
hi Boolean ctermbg=NONE ctermfg=orange cterm=NONE
hi Character ctermbg=NONE ctermfg=red cterm=NONE
hi Conditional ctermbg=NONE ctermfg=orange cterm=NONE
hi Define ctermbg=NONE ctermfg=orange cterm=NONE
hi Delimiter ctermbg=NONE ctermfg=orange cterm=NONE
hi Float ctermbg=NONE ctermfg=orange cterm=NONE
hi Include ctermbg=NONE ctermfg=blue cterm=NONE
hi Keyword ctermbg=NONE ctermfg=orange cterm=NONE
hi Label ctermbg=NONE ctermfg=yellow cterm=NONE
hi Operator ctermbg=NONE ctermfg=white cterm=NONE
hi Repeat ctermbg=NONE ctermfg=yellow cterm=NONE
hi SpecialChar ctermbg=NONE ctermfg=orange cterm=NONE
hi Tag ctermbg=NONE ctermfg=yellow cterm=NONE
hi Typedef ctermbg=NONE ctermfg=yellow cterm=NONE
hi vimUserCommand ctermbg=NONE ctermfg=red cterm=BOLD
hi link vimMap vimUserCommand
hi link vimLet vimUserCommand
hi link vimCommand vimUserCommand
hi link vimFTCmd vimUserCommand
hi link vimAutoCmd vimUserCommand
hi link vimNotFunc vimUserCommand
hi vimNotation ctermbg=NONE ctermfg=blue cterm=NONE
hi vimMapModKey ctermbg=NONE ctermfg=blue cterm=NONE
hi vimBracket ctermbg=NONE ctermfg=white cterm=NONE
hi vimCommentString ctermbg=NONE ctermfg=gray cterm=NONE
hi htmlLink ctermbg=NONE ctermfg=red cterm=underline
hi htmlBold ctermbg=NONE ctermfg=yellow cterm=NONE
hi htmlItalic ctermbg=NONE ctermfg=orange cterm=NONE
hi htmlEndTag ctermbg=NONE ctermfg=white cterm=NONE
hi htmlTag ctermbg=NONE ctermfg=white cterm=NONE
hi htmlTagName ctermbg=NONE ctermfg=red cterm=BOLD
hi htmlH1 ctermbg=NONE ctermfg=white cterm=BOLD
hi link htmlH2 htmlH1
hi link htmlH3 htmlH1
hi link htmlH4 htmlH1
hi link htmlH5 htmlH1
hi link htmlH6 htmlH1
hi cssMultiColumnAttr ctermbg=NONE ctermfg=green cterm=NONE
hi link cssFontAttr cssMultiColumnAttr
hi link cssFlexibleBoxAttr cssMultiColumnAttr
hi cssBraces ctermbg=NONE ctermfg=white cterm=NONE
hi link cssAttrComma cssBraces
hi cssValueLength ctermbg=NONE ctermfg=white cterm=NONE
hi cssUnitDecorators ctermbg=NONE ctermfg=white cterm=NONE
hi cssValueNumber ctermbg=NONE ctermfg=white cterm=NONE
hi link cssValueLength cssValueNumber
hi cssNoise ctermbg=NONE ctermfg=gray cterm=NONE
hi cssTagName ctermbg=NONE ctermfg=red cterm=NONE
hi cssFunctionName ctermbg=NONE ctermfg=blue cterm=NONE
hi scssSelectorChar ctermbg=NONE ctermfg=white cterm=NONE
hi scssAttribute ctermbg=NONE ctermfg=white cterm=NONE
hi link scssDefinition cssNoise
hi sassidChar ctermbg=NONE ctermfg=red cterm=NONE
hi sassClassChar ctermbg=NONE ctermfg=orange cterm=NONE
hi sassInclude ctermbg=NONE ctermfg=orange cterm=NONE
hi sassMixing ctermbg=NONE ctermfg=orange cterm=NONE
hi sassMixinName ctermbg=NONE ctermfg=blue cterm=NONE
hi javaScript ctermbg=NONE ctermfg=white cterm=NONE
hi javaScriptBraces ctermbg=NONE ctermfg=white cterm=NONE
hi javaScriptNumber ctermbg=NONE ctermfg=orange cterm=NONE
hi markdownAutomaticLink ctermbg=NONE ctermfg=red cterm=underline
hi link markdownUrl markdownAutomaticLink
hi markdownError ctermbg=NONE ctermfg=white cterm=NONE
hi markdownCode ctermbg=NONE ctermfg=yellow cterm=NONE
hi markdownCodeBlock ctermbg=NONE ctermfg=yellow cterm=NONE
hi markdownCodeDelimiter ctermbg=NONE ctermfg=orange cterm=NONE
hi xdefaultsValue ctermbg=NONE ctermfg=white cterm=NONE
hi rubyInclude ctermbg=NONE ctermfg=blue cterm=NONE
hi rubyDefine ctermbg=NONE ctermfg=orange cterm=NONE
hi rubyFunction ctermbg=NONE ctermfg=blue cterm=NONE
hi rubyStringDelimiter ctermbg=NONE ctermfg=green cterm=NONE
hi rubyInteger ctermbg=NONE ctermfg=yellow cterm=NONE
hi rubyAttribute ctermbg=NONE ctermfg=blue cterm=NONE
hi rubyConstant ctermbg=NONE ctermfg=yellow cterm=NONE
hi rubyInterpolation ctermbg=NONE ctermfg=green cterm=NONE
hi rubyInterpolationDelimiter ctermbg=NONE ctermfg=yellow cterm=NONE
hi rubyRegexp ctermbg=NONE ctermfg=cyan cterm=NONE
hi rubySymbol ctermbg=NONE ctermfg=green cterm=NONE
hi rubyTodo ctermbg=NONE ctermfg=gray cterm=NONE
hi rubyRegexpAnchor ctermbg=NONE ctermfg=white cterm=NONE
hi link rubyRegexpQuantifier rubyRegexpAnchor
hi pythonOperator ctermbg=NONE ctermfg=orange cterm=NONE
hi pythonFunction ctermbg=NONE ctermfg=blue cterm=NONE
hi pythonRepeat ctermbg=NONE ctermfg=orange cterm=NONE
hi pythonStatement ctermbg=NONE ctermfg=red cterm=Bold
hi pythonBuiltIn ctermbg=NONE ctermfg=blue cterm=NONE
hi phpMemberSelector ctermbg=NONE ctermfg=white cterm=NONE
hi phpComparison ctermbg=NONE ctermfg=white cterm=NONE
hi phpParent ctermbg=NONE ctermfg=white cterm=NONE
hi cOperator ctermbg=NONE ctermfg=cyan cterm=NONE
hi cPreCondit ctermbg=NONE ctermfg=orange cterm=NONE
hi SignifySignAdd ctermbg=NONE ctermfg=green cterm=NONE
hi SignifySignChange ctermbg=NONE ctermfg=blue cterm=NONE
hi SignifySignDelete ctermbg=NONE ctermfg=red cterm=NONE
hi NERDTreeDirSlash ctermbg=NONE ctermfg=blue cterm=NONE
hi NERDTreeExecFile ctermbg=NONE ctermfg=white cterm=NONE
endif
" }}}v
" Neovim Terminal Mode Colors.
let g:terminal_color_0 = "\#312e39"
let g:terminal_color_1 = "\#87404f"
let g:terminal_color_2 = "\#4c9882"
let g:terminal_color_3 = "\#71949a"
let g:terminal_color_4 = "\#615772"
let g:terminal_color_5 = "\#783e57"
let g:terminal_color_6 = "\#554757"
let g:terminal_color_7 = "\#554757"
let g:terminal_color_8 = "\#33303b"
let g:terminal_color_9 = "\#87404f"
let g:terminal_color_10 = "\#87404f"
let g:terminal_color_11 = "\#71949a"
let g:terminal_color_12 = "\#71949a"
let g:terminal_color_13 = "\#783e57"
let g:terminal_color_14 = "\#554757"
let g:terminal_color_15 = "\#c0a79a"
" }}}

56
vim/.vimrc Normal file
View File

@ -0,0 +1,56 @@
""Basic stuff
execute pathogen#infect()
syntax on
filetype plugin indent on
set number
""Colors
colorscheme synthwave
set t_Co=256
""Misc
set clipboard=unnamedplus
set nofoldenable
""MuComplete
set completeopt+=menuone
set completeopt+=noinsert
set shortmess+=c
set hlsearch
set incsearch
set ignorecase
set smartcase
let g:mucomplete#enable_auto_at_startup = 1
let g:mucomplete#completion_delay = 1
""Keybindings
set pastetoggle=<F2>
map <Space> :noh<CR>
"" Mail
au FileType mail
\ if expand('%p') =~ '^/tmp/neomutt-' |
\ set ft=markdown |
\ endif
"" Markdown
au FileType markdown Goyo 80
let g:markdown_fenced_languages = ['cpp', 'python', 'java']
let g:vim_markdown_math=1
"" Pandoc
autocmd FileType markdown nnoremap <silent> <F3> :<c-u>!pandoc %:p:S -o %:p:r:S.pdf --from markdown --template eisvogel --listings &<cr>
autocmd FileType markdown nnoremap <silent> <F4> :<c-u>!pandoc %:p:S -o %:p:r:S.pdf -t beamer -V theme:metropolis --listings &<cr>
autocmd FileType markdown nnoremap <silent> <F5> :<c-u>!zathura %:p:r:S.pdf &<cr>
""Quitting whether Goyo is active or not
function! g:Goyo_before()
let b:quitting = 0
let b:quitting_bang = 0
autocmd QuitPre <buffer> let b:quitting = 1
cabbrev <buffer> q! let b:quitting_bang = 1 <bar> q!
endfunction
function! g:Goyo_after()
if b:quitting && len(filter(range(1, bufnr('$')), 'buflisted(v:val)')) == 1
if b:quitting_bang
qa!
else
qa
endif
endif
endfunction
let g:goyo_callbacks = [function('g:Goyo_before'), function('g:Goyo_after')]

View File

@ -0,0 +1,48 @@
#
# weechat -- alias.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[cmd]
AAWAY = "allserv /away"
AME = "allchan /me"
AMSG = "allchan /msg *"
ANICK = "allserv /nick"
BEEP = "print -beep"
BYE = "quit"
C = "buffer clear"
CHAT = "dcc chat"
CL = "buffer clear"
CLOSE = "buffer close"
EXIT = "quit"
IG = "ignore"
J = "join"
K = "kick"
KB = "kickban"
LEAVE = "part"
M = "msg"
MSGBUF = "command -buffer $1 * /input send $2-"
MUB = "unban *"
N = "names"
Q = "query"
REDRAW = "window refresh"
SAY = "msg *"
SIGNOFF = "quit"
T = "topic"
UB = "unban"
UMODE = "mode $nick"
V = "command core version"
W = "who"
WC = "window merge"
WI = "whois"
WII = "whois $1 $1"
WW = "whowas"
[completion]
MSGBUF = "%(buffers_plugins_names)"

View File

@ -0,0 +1,33 @@
#
# weechat -- aspell.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[color]
misspelled = lightred
suggestion = default
suggestion_delimiter_dict = cyan
suggestion_delimiter_word = cyan
[check]
commands = "ame,amsg,away,command,cycle,kick,kickban,me,msg,notice,part,query,quit,topic"
default_dict = ""
during_search = off
enabled = off
real_time = off
suggestions = -1
word_min_length = 2
[dict]
[look]
suggestion_delimiter_dict = " / "
suggestion_delimiter_word = ","
[option]

View File

@ -0,0 +1,22 @@
#
# weechat -- autosort.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[sorting]
case_sensitive = off
replacements = ""
rules = ""
signal_delay = 5
signals = "buffer_opened buffer_merged buffer_unmerged buffer_renamed"
sort_on_config_change = on
[v3]
helpers = "{"core_first": "${if:${buffer.full_name}!=core.weechat}", "irc_raw_last": "${if:${buffer.full_name}==irc.irc_raw}", "irc_last": "${if:${buffer.plugin.name}==irc}", "hashless_name": "${info:autosort_replace,#,,${buffer.name}}", "irc_first": "${if:${buffer.plugin.name}!=irc}", "irc_raw_first": "${if:${buffer.full_name}!=irc.irc_raw}"}"
rules = "["${core_first}", "${irc_last}", "${buffer.plugin.name}", "${irc_raw_first}", "${if:${plugin}==irc?${server}}", "${if:${plugin}==irc?${info:autosort_order,${type},server,*,channel,private}}", "${if:${plugin}==irc?${hashless_name}}", "${buffer.full_name}", "irc.server.*.&* = 0", "irc.server.*.#* = 1", "irc.server.*.\\*status = 2"]"

View File

@ -0,0 +1,39 @@
#
# weechat -- buflist.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[look]
add_newline = on
auto_scroll = 50
display_conditions = "${buffer.hidden}==0"
enabled = on
mouse_jump_visited_buffer = off
mouse_move_buffer = on
mouse_wheel = on
nick_prefix = off
nick_prefix_empty = on
signals_refresh = ""
sort = "number,-active"
[format]
buffer = "${format_number}${indent}${format_nick_prefix}${color_hotlist}${format_name}"
buffer_current = "${color:,0}${format_buffer}"
hotlist = " ${color:green}(${hotlist}${color:green})"
hotlist_highlight = "${color:magenta}"
hotlist_low = "${color:white}"
hotlist_message = "${color:7}"
hotlist_none = "${color:default}"
hotlist_private = "${color:green}"
hotlist_separator = "${color:default},"
indent = " "
lag = " ${color:green}[${color:brown}${lag}${color:green}]"
name = "${name}"
nick_prefix = "${color_nick_prefix}${nick_prefix}"
number = "${color:green}${number}${if:${number_displayed}?.: }"

View File

@ -0,0 +1,18 @@
#
# weechat -- charset.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[default]
decode = "iso-8859-1"
encode = ""
[decode]
[encode]

View File

@ -0,0 +1,20 @@
#
# weechat -- colorize_nicks.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[look]
blacklist_channels = ""
blacklist_nicks = "so,root"
colorize_input = off
greedy_matching = on
ignore_nicks_in_urls = off
ignore_tags = ""
match_limit = 20
min_nick_length = 2

View File

@ -0,0 +1,19 @@
#
# weechat -- exec.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[command]
default_options = ""
purge_delay = 0
shell = "sh"
[color]
flag_finished = lightred
flag_running = lightgreen

View File

@ -0,0 +1,14 @@
#
# weechat -- fifo.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[file]
enabled = on
path = "%h/weechat_fifo"

View File

@ -0,0 +1,95 @@
#
# weechat -- fset.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[look]
auto_unmark = off
condition_catch_set = "${count} >= 1"
export_help_default = on
format_number = 1
marked_string = "*"
scroll_horizontal = 10
show_plugins_desc = off
sort = "~name"
unmarked_string = " "
use_color_value = off
use_keys = on
use_mute = off
[format]
export_help = "# ${description2}"
export_option = "/set ${name} ${quoted_value}"
export_option_null = "/unset ${name}"
option1 = ""
option2 = "${marked} ${name} ${type} ${value2}${newline} ${empty_name} ${_default_value}${color:darkgray} -- ${min}..${max}${newline} ${empty_name} ${description}"
[color]
default_value = default
default_value_selected = white
description = default
description_selected = white
file = default
file_changed = brown
file_changed_selected = yellow
file_selected = white
help_default_value = white
help_description = default
help_name = white
help_quotes = darkgray
help_values = default
index = cyan
index_selected = lightcyan
line_marked_bg1 = default
line_marked_bg2 = default
line_selected_bg1 = blue
line_selected_bg2 = red
marked = brown
marked_selected = yellow
max = default
max_selected = white
min = default
min_selected = white
name = default
name_changed = brown
name_changed_selected = yellow
name_selected = white
option = default
option_changed = brown
option_changed_selected = yellow
option_selected = white
parent_name = default
parent_name_selected = white
parent_value = cyan
parent_value_selected = lightcyan
quotes = darkgray
quotes_changed = default
quotes_changed_selected = white
quotes_selected = default
section = default
section_changed = brown
section_changed_selected = yellow
section_selected = white
string_values = default
string_values_selected = white
title_count_options = cyan
title_current_option = lightcyan
title_filter = yellow
title_marked_options = lightgreen
title_sort = white
type = green
type_selected = lightgreen
unmarked = default
unmarked_selected = white
value = cyan
value_changed = brown
value_changed_selected = yellow
value_selected = lightcyan
value_undef = magenta
value_undef_selected = lightmagenta

236
weechat/.weechat/irc.conf Normal file
View File

@ -0,0 +1,236 @@
#
# weechat -- irc.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[look]
buffer_open_before_autojoin = on
buffer_open_before_join = off
buffer_switch_autojoin = on
buffer_switch_join = on
color_nicks_in_names = off
color_nicks_in_nicklist = off
color_nicks_in_server_messages = on
color_pv_nick_like_channel = on
ctcp_time_format = "%a, %d %b %Y %T %z"
display_away = local
display_ctcp_blocked = on
display_ctcp_reply = on
display_ctcp_unknown = on
display_host_join = on
display_host_join_local = on
display_host_quit = on
display_join_message = "329,332,333,366"
display_old_topic = on
display_pv_away_once = on
display_pv_back = on
highlight_channel = "$nick"
highlight_pv = "$nick"
highlight_server = "$nick"
highlight_tags_restrict = "irc_privmsg,irc_notice"
item_channel_modes_hide_args = "k"
item_display_server = buffer_plugin
item_nick_modes = on
item_nick_prefix = on
join_auto_add_chantype = off
msgbuffer_fallback = current
new_channel_position = none
new_pv_position = none
nick_completion_smart = speakers
nick_mode = prefix
nick_mode_empty = off
nicks_hide_password = "nickserv"
notice_as_pv = auto
notice_welcome_redirect = on
notice_welcome_tags = ""
notify_tags_ison = "notify_message"
notify_tags_whois = "notify_message"
part_closes_buffer = off
pv_buffer = independent
pv_tags = "notify_private"
raw_messages = 256
server_buffer = independent
smart_filter = on
smart_filter_chghost = on
smart_filter_delay = 5
smart_filter_join = on
smart_filter_join_unmask = 30
smart_filter_mode = "+"
smart_filter_nick = on
smart_filter_quit = on
temporary_servers = off
topic_strip_colors = off
[color]
input_nick = lightcyan
item_channel_modes = default
item_lag_counting = default
item_lag_finished = yellow
item_nick_modes = default
message_chghost = brown
message_join = green
message_quit = red
mirc_remap = "1,-1:darkgray"
nick_prefixes = "y:lightred;q:lightred;a:lightcyan;o:lightgreen;h:lightmagenta;v:yellow;*:lightblue"
notice = green
reason_quit = default
topic_current = default
topic_new = white
topic_old = default
[network]
autoreconnect_delay_growing = 2
autoreconnect_delay_max = 600
ban_mask_default = "*!$ident@$host"
channel_encode = off
colors_receive = on
colors_send = on
lag_check = 60
lag_max = 1800
lag_min_show = 500
lag_reconnect = 300
lag_refresh_interval = 1
notify_check_ison = 1
notify_check_whois = 5
sasl_fail_unavailable = on
send_unknown_commands = off
whois_double_nick = off
[msgbuffer]
[ctcp]
[ignore]
[server_default]
addresses = ""
anti_flood_prio_high = 2
anti_flood_prio_low = 2
autoconnect = on
autojoin = ""
autoreconnect = on
autoreconnect_delay = 10
autorejoin = off
autorejoin_delay = 30
away_check = 0
away_check_max_nicks = 25
capabilities = ""
command = ""
command_delay = 0
connection_timeout = 60
ipv6 = on
local_hostname = ""
msg_kick = ""
msg_part = "WeeChat ${info:version}"
msg_quit = "WeeChat ${info:version}"
nicks = "coolneng,coolneng1,coolneng2,coolneng3,coolneng4"
nicks_alternate = on
notify = ""
password = ""
proxy = ""
realname = ""
sasl_fail = continue
sasl_key = ""
sasl_mechanism = plain
sasl_password = ""
sasl_timeout = 15
sasl_username = ""
split_msg_max_length = 512
ssl = off
ssl_cert = ""
ssl_dhkey_size = 2048
ssl_fingerprint = ""
ssl_priorities = "NORMAL:-VERS-SSL3.0"
ssl_verify = on
usermode = ""
username = "coolneng"
[server]
bitlbee.addresses = "localhost/6667"
bitlbee.proxy
bitlbee.ipv6
bitlbee.ssl
bitlbee.ssl_cert
bitlbee.ssl_priorities
bitlbee.ssl_dhkey_size
bitlbee.ssl_fingerprint
bitlbee.ssl_verify
bitlbee.password
bitlbee.capabilities
bitlbee.sasl_mechanism
bitlbee.sasl_username
bitlbee.sasl_password
bitlbee.sasl_key
bitlbee.sasl_timeout
bitlbee.sasl_fail
bitlbee.autoconnect = on
bitlbee.autoreconnect
bitlbee.autoreconnect_delay
bitlbee.nicks
bitlbee.nicks_alternate
bitlbee.username
bitlbee.realname
bitlbee.local_hostname
bitlbee.usermode
bitlbee.command
bitlbee.command_delay
bitlbee.autojoin
bitlbee.autorejoin
bitlbee.autorejoin_delay
bitlbee.connection_timeout
bitlbee.anti_flood_prio_high
bitlbee.anti_flood_prio_low
bitlbee.away_check
bitlbee.away_check_max_nicks
bitlbee.msg_kick
bitlbee.msg_part
bitlbee.msg_quit
bitlbee.notify
bitlbee.split_msg_max_length
efnet.addresses = "efnet.port80.se"
efnet.proxy
efnet.ipv6
efnet.ssl = off
efnet.ssl_cert
efnet.ssl_priorities
efnet.ssl_dhkey_size
efnet.ssl_fingerprint
efnet.ssl_verify
efnet.password
efnet.capabilities
efnet.sasl_mechanism
efnet.sasl_username
efnet.sasl_password
efnet.sasl_key
efnet.sasl_timeout
efnet.sasl_fail
efnet.autoconnect = off
efnet.autoreconnect
efnet.autoreconnect_delay
efnet.nicks = "coolneng"
efnet.nicks_alternate
efnet.username
efnet.realname
efnet.local_hostname
efnet.usermode
efnet.command
efnet.command_delay
efnet.autojoin = "#freebsdhelp"
efnet.autorejoin
efnet.autorejoin_delay
efnet.connection_timeout
efnet.anti_flood_prio_high
efnet.anti_flood_prio_low
efnet.away_check
efnet.away_check_max_nicks
efnet.msg_kick
efnet.msg_part
efnet.msg_quit
efnet.notify
efnet.split_msg_max_length

View File

@ -0,0 +1,38 @@
#
# weechat -- iset.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[color]
bg_selected = red
help_default_value = green
help_option_name = white
help_text = default
option = default
option_selected = white
type = brown
type_selected = yellow
value = cyan
value_diff = magenta
value_diff_selected = lightmagenta
value_selected = lightcyan
value_undef = green
value_undef_selected = lightgreen
[help]
show_help_bar = on
show_help_extra_info = on
show_plugin_description = off
[look]
scroll_horiz = 10
show_current_line = on
use_color = off
use_mute = off
value_search_char = "="

View File

@ -0,0 +1,35 @@
#
# weechat -- logger.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[look]
backlog = 20
backlog_conditions = ""
[color]
backlog_end = default
backlog_line = default
[file]
auto_log = on
flush_delay = 120
fsync = off
info_lines = off
mask = "$plugin.$name.weechatlog"
name_lower_case = on
nick_prefix = ""
nick_suffix = ""
path = "%h/logs/"
replacement_char = "_"
time_format = "%Y-%m-%d %H:%M:%S"
[level]
[mask]

14
weechat/.weechat/lua.conf Normal file
View File

@ -0,0 +1,14 @@
#
# weechat -- lua.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[look]
check_license = off
eval_keep_context = on

View File

@ -0,0 +1,14 @@
#
# weechat -- perl.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[look]
check_license = off
eval_keep_context = on

View File

@ -0,0 +1 @@
../iset.pl

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,40 @@
#
# weechat -- plugins.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[var]
python.go.auto_jump = "off"
python.go.buffer_number = "on"
python.go.color_name = "black,cyan"
python.go.color_name_highlight = "red,cyan"
python.go.color_name_highlight_selected = "red,brown"
python.go.color_name_selected = "black,brown"
python.go.color_number = "yellow,magenta"
python.go.color_number_selected = "yellow,red"
python.go.fuzzy_search = "off"
python.go.message = "Go to: "
python.go.short_name = "off"
python.go.sort = "number,beginning"
python.go.use_core_instead_weechat = "off"
[desc]
python.go.auto_jump = "automatically jump to buffer when it is uniquely selected (default: "off")"
python.go.buffer_number = "display buffer number (default: "on")"
python.go.color_name = "color for buffer name (not selected) (default: "black,cyan")"
python.go.color_name_highlight = "color for highlight in buffer name (not selected) (default: "red,cyan")"
python.go.color_name_highlight_selected = "color for highlight in a selected buffer name (default: "red,brown")"
python.go.color_name_selected = "color for a selected buffer name (default: "black,brown")"
python.go.color_number = "color for buffer number (not selected) (default: "yellow,magenta")"
python.go.color_number_selected = "color for selected buffer number (default: "yellow,red")"
python.go.fuzzy_search = "search buffer matches using approximation (default: "off")"
python.go.message = "message to display before list of buffers (default: "Go to: ")"
python.go.short_name = "display and search in short names instead of buffer name (default: "off")"
python.go.sort = "comma-separated list of keys to sort buffers (the order is important, sorts are performed in the given order): name = sort by name (or short name), (default: "number,beginning")"
python.go.use_core_instead_weechat = "use name "core" instead of "weechat" for core buffer (default: "off")"

View File

@ -0,0 +1,14 @@
#
# weechat -- python.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[look]
check_license = off
eval_keep_context = on

View File

@ -0,0 +1 @@
../autosort.py

View File

@ -0,0 +1 @@
../colorize_nicks.py

View File

@ -0,0 +1 @@
../go.py

View File

@ -0,0 +1 @@
../urlgrab.py

View File

@ -0,0 +1 @@
../zerotab.py

View File

@ -0,0 +1,923 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2013-2017 Maarten de Vries <maarten@de-vri.es>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#
# Autosort automatically keeps your buffers sorted and grouped by server.
# You can define your own sorting rules. See /help autosort for more details.
#
# https://github.com/de-vri-es/weechat-autosort
#
#
# Changelog:
# 3.3:
# * Fix the /autosort debug command for unicode.
# * Update the default rules to work better with Slack.
# 3.2:
# * Fix python3 compatiblity.
# 3.1:
# * Use colors to format the help text.
# 3.0:
# * Switch to evaluated expressions for sorting.
# * Add `/autosort debug` command.
# * Add ${info:autosort_replace,from,to,text} to replace substrings in sort rules.
# * Add ${info:autosort_order,value,first,second,third} to ease writing sort rules.
# * Make tab completion context aware.
# 2.8:
# * Fix compatibility with python 3 regarding unicode handling.
# 2.7:
# * Fix sorting of buffers with spaces in their name.
# 2.6:
# * Ignore case in rules when doing case insensitive sorting.
# 2.5:
# * Fix handling unicode buffer names.
# * Add hint to set irc.look.server_buffer to independent and buffers.look.indenting to on.
# 2.4:
# * Make script python3 compatible.
# 2.3:
# * Fix sorting items without score last (regressed in 2.2).
# 2.2:
# * Add configuration option for signals that trigger a sort.
# * Add command to manually trigger a sort (/autosort sort).
# * Add replacement patterns to apply before sorting.
# 2.1:
# * Fix some minor style issues.
# 2.0:
# * Allow for custom sort rules.
#
import json
import math
import re
import sys
import time
import weechat
SCRIPT_NAME = 'autosort'
SCRIPT_AUTHOR = 'Maarten de Vries <maarten@de-vri.es>'
SCRIPT_VERSION = '3.3'
SCRIPT_LICENSE = 'GPL3'
SCRIPT_DESC = 'Flexible automatic (or manual) buffer sorting based on eval expressions.'
config = None
hooks = []
timer = None
# Make sure that unicode, bytes and str are always available in python2 and 3.
# For python 2, str == bytes
# For python 3, str == unicode
if sys.version_info[0] >= 3:
unicode = str
def ensure_str(input):
'''
Make sure the given type if the correct string type for the current python version.
That means bytes for python2 and unicode for python3.
'''
if not isinstance(input, str):
if isinstance(input, bytes):
return input.encode('utf-8')
if isinstance(input, unicode):
return input.decode('utf-8')
return input
if hasattr(time, 'perf_counter'):
perf_counter = time.perf_counter
else:
perf_counter = time.clock
def casefold(string):
if hasattr(string, 'casefold'): return string.casefold()
# Fall back to lowercasing for python2.
return string.lower()
def list_swap(values, a, b):
values[a], values[b] = values[b], values[a]
def list_move(values, old_index, new_index):
values.insert(new_index, values.pop(old_index))
def list_find(collection, value):
for i, elem in enumerate(collection):
if elem == value: return i
return None
class HumanReadableError(Exception):
pass
def parse_int(arg, arg_name = 'argument'):
''' Parse an integer and provide a more human readable error. '''
arg = arg.strip()
try:
return int(arg)
except ValueError:
raise HumanReadableError('Invalid {0}: expected integer, got "{1}".'.format(arg_name, arg))
def decode_rules(blob):
parsed = json.loads(blob)
if not isinstance(parsed, list):
log('Malformed rules, expected a JSON encoded list of strings, but got a {0}. No rules have been loaded. Please fix the setting manually.'.format(type(parsed)))
return []
for i, entry in enumerate(parsed):
if not isinstance(entry, (str, unicode)):
log('Rule #{0} is not a string but a {1}. No rules have been loaded. Please fix the setting manually.'.format(i, type(entry)))
return []
return parsed
def decode_helpers(blob):
parsed = json.loads(blob)
if not isinstance(parsed, dict):
log('Malformed helpers, expected a JSON encoded dictonary but got a {0}. No helpers have been loaded. Please fix the setting manually.'.format(type(parsed)))
return {}
for key, value in parsed.items():
if not isinstance(value, (str, unicode)):
log('Helper "{0}" is not a string but a {1}. No helpers have been loaded. Please fix seting manually.'.format(key, type(value)))
return {}
return parsed
class Config:
''' The autosort configuration. '''
default_rules = json.dumps([
'${core_first}',
'${irc_last}',
'${buffer.plugin.name}',
'${irc_raw_first}',
'${if:${plugin}==irc?${server}}',
'${if:${plugin}==irc?${info:autosort_order,${type},server,*,channel,private}}',
'${if:${plugin}==irc?${hashless_name}}',
'${buffer.full_name}',
])
default_helpers = json.dumps({
'core_first': '${if:${buffer.full_name}!=core.weechat}',
'irc_first': '${if:${buffer.plugin.name}!=irc}',
'irc_last': '${if:${buffer.plugin.name}==irc}',
'irc_raw_first': '${if:${buffer.full_name}!=irc.irc_raw}',
'irc_raw_last': '${if:${buffer.full_name}==irc.irc_raw}',
'hashless_name': '${info:autosort_replace,#,,${buffer.name}}',
})
default_signal_delay = 5
default_signals = 'buffer_opened buffer_merged buffer_unmerged buffer_renamed'
def __init__(self, filename):
''' Initialize the configuration. '''
self.filename = filename
self.config_file = weechat.config_new(self.filename, '', '')
self.sorting_section = None
self.v3_section = None
self.case_sensitive = False
self.rules = []
self.helpers = {}
self.signals = []
self.signal_delay = Config.default_signal_delay,
self.sort_on_config = True
self.__case_sensitive = None
self.__rules = None
self.__helpers = None
self.__signals = None
self.__signal_delay = None
self.__sort_on_config = None
if not self.config_file:
log('Failed to initialize configuration file "{0}".'.format(self.filename))
return
self.sorting_section = weechat.config_new_section(self.config_file, 'sorting', False, False, '', '', '', '', '', '', '', '', '', '')
self.v3_section = weechat.config_new_section(self.config_file, 'v3', False, False, '', '', '', '', '', '', '', '', '', '')
if not self.sorting_section:
log('Failed to initialize section "sorting" of configuration file.')
weechat.config_free(self.config_file)
return
self.__case_sensitive = weechat.config_new_option(
self.config_file, self.sorting_section,
'case_sensitive', 'boolean',
'If this option is on, sorting is case sensitive.',
'', 0, 0, 'off', 'off', 0,
'', '', '', '', '', ''
)
weechat.config_new_option(
self.config_file, self.sorting_section,
'rules', 'string',
'Sort rules used by autosort v2.x and below. Not used by autosort anymore.',
'', 0, 0, '', '', 0,
'', '', '', '', '', ''
)
weechat.config_new_option(
self.config_file, self.sorting_section,
'replacements', 'string',
'Replacement patterns used by autosort v2.x and below. Not used by autosort anymore.',
'', 0, 0, '', '', 0,
'', '', '', '', '', ''
)
self.__rules = weechat.config_new_option(
self.config_file, self.v3_section,
'rules', 'string',
'An ordered list of sorting rules encoded as JSON. See /help autosort for commands to manipulate these rules.',
'', 0, 0, Config.default_rules, Config.default_rules, 0,
'', '', '', '', '', ''
)
self.__helpers = weechat.config_new_option(
self.config_file, self.v3_section,
'helpers', 'string',
'A dictionary helper variables to use in the sorting rules, encoded as JSON. See /help autosort for commands to manipulate these helpers.',
'', 0, 0, Config.default_helpers, Config.default_helpers, 0,
'', '', '', '', '', ''
)
self.__signals = weechat.config_new_option(
self.config_file, self.sorting_section,
'signals', 'string',
'A space separated list of signals that will cause autosort to resort your buffer list.',
'', 0, 0, Config.default_signals, Config.default_signals, 0,
'', '', '', '', '', ''
)
self.__signal_delay = weechat.config_new_option(
self.config_file, self.sorting_section,
'signal_delay', 'integer',
'Delay in milliseconds to wait after a signal before sorting the buffer list. This prevents triggering many times if multiple signals arrive in a short time. It can also be needed to wait for buffer localvars to be available.',
'', 0, 1000, str(Config.default_signal_delay), str(Config.default_signal_delay), 0,
'', '', '', '', '', ''
)
self.__sort_on_config = weechat.config_new_option(
self.config_file, self.sorting_section,
'sort_on_config_change', 'boolean',
'Decides if the buffer list should be sorted when autosort configuration changes.',
'', 0, 0, 'on', 'on', 0,
'', '', '', '', '', ''
)
if weechat.config_read(self.config_file) != weechat.WEECHAT_RC_OK:
log('Failed to load configuration file.')
if weechat.config_write(self.config_file) != weechat.WEECHAT_RC_OK:
log('Failed to write configuration file.')
self.reload()
def reload(self):
''' Load configuration variables. '''
self.case_sensitive = weechat.config_boolean(self.__case_sensitive)
rules_blob = weechat.config_string(self.__rules)
helpers_blob = weechat.config_string(self.__helpers)
signals_blob = weechat.config_string(self.__signals)
self.rules = decode_rules(rules_blob)
self.helpers = decode_helpers(helpers_blob)
self.signals = signals_blob.split()
self.signal_delay = weechat.config_integer(self.__signal_delay)
self.sort_on_config = weechat.config_boolean(self.__sort_on_config)
def save_rules(self, run_callback = True):
''' Save the current rules to the configuration. '''
weechat.config_option_set(self.__rules, json.dumps(self.rules), run_callback)
def save_helpers(self, run_callback = True):
''' Save the current helpers to the configuration. '''
weechat.config_option_set(self.__helpers, json.dumps(self.helpers), run_callback)
def pad(sequence, length, padding = None):
''' Pad a list until is has a certain length. '''
return sequence + [padding] * max(0, (length - len(sequence)))
def log(message, buffer = 'NULL'):
weechat.prnt(buffer, 'autosort: {0}'.format(message))
def get_buffers():
''' Get a list of all the buffers in weechat. '''
hdata = weechat.hdata_get('buffer')
buffer = weechat.hdata_get_list(hdata, "gui_buffers");
result = []
while buffer:
number = weechat.hdata_integer(hdata, buffer, 'number')
result.append((number, buffer))
buffer = weechat.hdata_pointer(hdata, buffer, 'next_buffer')
return hdata, result
class MergedBuffers(list):
""" A list of merged buffers, possibly of size 1. """
def __init__(self, number):
super(MergedBuffers, self).__init__()
self.number = number
def merge_buffer_list(buffers):
'''
Group merged buffers together.
The output is a list of MergedBuffers.
'''
if not buffers: return []
result = {}
for number, buffer in buffers:
if number not in result: result[number] = MergedBuffers(number)
result[number].append(buffer)
return result.values()
def sort_buffers(hdata, buffers, rules, helpers, case_sensitive):
for merged in buffers:
for buffer in merged:
name = weechat.hdata_string(hdata, buffer, 'name')
return sorted(buffers, key=merged_sort_key(rules, helpers, case_sensitive))
def buffer_sort_key(rules, helpers, case_sensitive):
''' Create a sort key function for a list of lists of merged buffers. '''
def key(buffer):
extra_vars = {}
for helper_name, helper in sorted(helpers.items()):
expanded = weechat.string_eval_expression(helper, {"buffer": buffer}, {}, {})
extra_vars[helper_name] = expanded if case_sensitive else casefold(expanded)
result = []
for rule in rules:
expanded = weechat.string_eval_expression(rule, {"buffer": buffer}, extra_vars, {})
result.append(expanded if case_sensitive else casefold(expanded))
return result
return key
def merged_sort_key(rules, helpers, case_sensitive):
buffer_key = buffer_sort_key(rules, helpers, case_sensitive)
def key(merged):
best = None
for buffer in merged:
this = buffer_key(buffer)
if best is None or this < best: best = this
return best
return key
def apply_buffer_order(buffers):
''' Sort the buffers in weechat according to the given order. '''
for i, buffer in enumerate(buffers):
weechat.buffer_set(buffer[0], "number", str(i + 1))
def split_args(args, expected, optional = 0):
''' Split an argument string in the desired number of arguments. '''
split = args.split(' ', expected - 1)
if (len(split) < expected):
raise HumanReadableError('Expected at least {0} arguments, got {1}.'.format(expected, len(split)))
return split[:-1] + pad(split[-1].split(' ', optional), optional + 1, '')
def do_sort():
hdata, buffers = get_buffers()
buffers = merge_buffer_list(buffers)
buffers = sort_buffers(hdata, buffers, config.rules, config.helpers, config.case_sensitive)
apply_buffer_order(buffers)
def command_sort(buffer, command, args):
''' Sort the buffers and print a confirmation. '''
start = perf_counter()
do_sort()
elapsed = perf_counter() - start
log("Finished sorting buffers in {0:.4f} seconds.".format(elapsed))
return weechat.WEECHAT_RC_OK
def command_debug(buffer, command, args):
hdata, buffers = get_buffers()
buffers = merge_buffer_list(buffers)
# Show evaluation results.
log('Individual evaluation results:')
start = perf_counter()
key = buffer_sort_key(config.rules, config.helpers, config.case_sensitive)
results = []
for merged in buffers:
for buffer in merged:
fullname = weechat.hdata_string(hdata, buffer, 'full_name')
results.append((fullname, key(buffer)))
elapsed = perf_counter() - start
for fullname, result in results:
fullname = ensure_str(fullname)
result = [ensure_str(x) for x in result]
log('{0}: {1}'.format(fullname, result))
log('Computing evalutaion results took {0:.4f} seconds.'.format(elapsed))
return weechat.WEECHAT_RC_OK
def command_rule_list(buffer, command, args):
''' Show the list of sorting rules. '''
output = 'Sorting rules:\n'
for i, rule in enumerate(config.rules):
output += ' {0}: {1}\n'.format(i, rule)
if not len(config.rules):
output += ' No sorting rules configured.\n'
log(output )
return weechat.WEECHAT_RC_OK
def command_rule_add(buffer, command, args):
''' Add a rule to the rule list. '''
config.rules.append(args)
config.save_rules()
command_rule_list(buffer, command, '')
return weechat.WEECHAT_RC_OK
def command_rule_insert(buffer, command, args):
''' Insert a rule at the desired position in the rule list. '''
index, rule = split_args(args, 2)
index = parse_int(index, 'index')
config.rules.insert(index, rule)
config.save_rules()
command_rule_list(buffer, command, '')
return weechat.WEECHAT_RC_OK
def command_rule_update(buffer, command, args):
''' Update a rule in the rule list. '''
index, rule = split_args(args, 2)
index = parse_int(index, 'index')
config.rules[index] = rule
config.save_rules()
command_rule_list(buffer, command, '')
return weechat.WEECHAT_RC_OK
def command_rule_delete(buffer, command, args):
''' Delete a rule from the rule list. '''
index = args.strip()
index = parse_int(index, 'index')
config.rules.pop(index)
config.save_rules()
command_rule_list(buffer, command, '')
return weechat.WEECHAT_RC_OK
def command_rule_move(buffer, command, args):
''' Move a rule to a new position. '''
index_a, index_b = split_args(args, 2)
index_a = parse_int(index_a, 'index')
index_b = parse_int(index_b, 'index')
list_move(config.rules, index_a, index_b)
config.save_rules()
command_rule_list(buffer, command, '')
return weechat.WEECHAT_RC_OK
def command_rule_swap(buffer, command, args):
''' Swap two rules. '''
index_a, index_b = split_args(args, 2)
index_a = parse_int(index_a, 'index')
index_b = parse_int(index_b, 'index')
list_swap(config.rules, index_a, index_b)
config.save_rules()
command_rule_list(buffer, command, '')
return weechat.WEECHAT_RC_OK
def command_helper_list(buffer, command, args):
''' Show the list of helpers. '''
output = 'Helper variables:\n'
width = max(map(lambda x: len(x) if len(x) <= 30 else 0, config.helpers.keys()))
for name, expression in sorted(config.helpers.items()):
output += ' {0:>{width}}: {1}\n'.format(name, expression, width=width)
if not len(config.helpers):
output += ' No helper variables configured.'
log(output)
return weechat.WEECHAT_RC_OK
def command_helper_set(buffer, command, args):
''' Add/update a helper to the helper list. '''
name, expression = split_args(args, 2)
config.helpers[name] = expression
config.save_helpers()
command_helper_list(buffer, command, '')
return weechat.WEECHAT_RC_OK
def command_helper_delete(buffer, command, args):
''' Delete a helper from the helper list. '''
name = args.strip()
del config.helpers[name]
config.save_helpers()
command_helper_list(buffer, command, '')
return weechat.WEECHAT_RC_OK
def command_helper_rename(buffer, command, args):
''' Rename a helper to a new position. '''
old_name, new_name = split_args(args, 2)
try:
config.helpers[new_name] = config.helpers[old_name]
del config.helpers[old_name]
except KeyError:
raise HumanReadableError('No such helper: {0}'.format(old_name))
config.save_helpers()
command_helper_list(buffer, command, '')
return weechat.WEECHAT_RC_OK
def command_helper_swap(buffer, command, args):
''' Swap two helpers. '''
a, b = split_args(args, 2)
try:
config.helpers[b], config.helpers[a] = config.helpers[a], config.helpers[b]
except KeyError as e:
raise HumanReadableError('No such helper: {0}'.format(e.args[0]))
config.helpers.swap(index_a, index_b)
config.save_helpers()
command_helper_list(buffer, command, '')
return weechat.WEECHAT_RC_OK
def call_command(buffer, command, args, subcommands):
''' Call a subccommand from a dictionary. '''
subcommand, tail = pad(args.split(' ', 1), 2, '')
subcommand = subcommand.strip()
if (subcommand == ''):
child = subcommands.get(' ')
else:
command = command + [subcommand]
child = subcommands.get(subcommand)
if isinstance(child, dict):
return call_command(buffer, command, tail, child)
elif callable(child):
return child(buffer, command, tail)
log('{0}: command not found'.format(' '.join(command)))
return weechat.WEECHAT_RC_ERROR
def on_signal(*args, **kwargs):
global timer
''' Called whenever the buffer list changes. '''
if timer is not None:
weechat.unhook(timer)
timer = None
weechat.hook_timer(config.signal_delay, 0, 1, "on_timeout", "")
return weechat.WEECHAT_RC_OK
def on_timeout(pointer, remaining_calls):
global timer
timer = None
do_sort()
return weechat.WEECHAT_RC_OK
def apply_config():
# Unhook all signals and hook the new ones.
for hook in hooks:
weechat.unhook(hook)
for signal in config.signals:
hooks.append(weechat.hook_signal(signal, 'on_signal', ''))
if config.sort_on_config:
do_sort()
def on_config_changed(*args, **kwargs):
''' Called whenever the configuration changes. '''
config.reload()
apply_config()
return weechat.WEECHAT_RC_OK
def parse_arg(args):
if not args: return None, None
result = ''
escaped = False
for i, c in enumerate(args):
if not escaped:
if c == '\\':
escaped = True
continue
elif c == ',':
return result, args[i+1:]
result += c
escaped = False
return result, None
def parse_args(args, max = None):
result = []
i = 0
while max is None or i < max:
arg, args = parse_arg(args)
if arg is None: break
result.append(arg)
i += 1
return result, args
def on_info_replace(pointer, name, arguments):
arguments, rest = parse_args(arguments, 3)
if rest or len(arguments) < 3:
log('usage: ${{info:{0},old,new,text}}'.format(name))
return ''
old, new, text = arguments
return text.replace(old, new)
def on_info_order(pointer, name, arguments):
arguments, rest = parse_args(arguments)
if len(arguments) < 1:
log('usage: ${{info:{0},value,first,second,third,...}}'.format(name))
return ''
value = arguments[0]
keys = arguments[1:]
if not keys: return '0'
# Find the value in the keys (or '*' if we can't find it)
result = list_find(keys, value)
if result is None: result = list_find(keys, '*')
if result is None: result = len(keys)
# Pad result with leading zero to make sure string sorting works.
width = int(math.log10(len(keys))) + 1
return '{0:0{1}}'.format(result, width)
def on_autosort_command(data, buffer, args):
''' Called when the autosort command is invoked. '''
try:
return call_command(buffer, ['/autosort'], args, {
' ': command_sort,
'sort': command_sort,
'debug': command_debug,
'rules': {
' ': command_rule_list,
'list': command_rule_list,
'add': command_rule_add,
'insert': command_rule_insert,
'update': command_rule_update,
'delete': command_rule_delete,
'move': command_rule_move,
'swap': command_rule_swap,
},
'helpers': {
' ': command_helper_list,
'list': command_helper_list,
'set': command_helper_set,
'delete': command_helper_delete,
'rename': command_helper_rename,
'swap': command_helper_swap,
},
})
except HumanReadableError as e:
log(e)
return weechat.WEECHAT_RC_ERROR
def add_completions(completion, words):
for word in words:
weechat.hook_completion_list_add(completion, word, 0, weechat.WEECHAT_LIST_POS_END)
def autosort_complete_rules(words, completion):
if len(words) == 0:
add_completions(completion, ['add', 'delete', 'insert', 'list', 'move', 'swap', 'update'])
if len(words) == 1 and words[0] in ('delete', 'insert', 'move', 'swap', 'update'):
add_completions(completion, map(str, range(len(config.rules))))
if len(words) == 2 and words[0] in ('move', 'swap'):
add_completions(completion, map(str, range(len(config.rules))))
if len(words) == 2 and words[0] in ('update'):
try:
add_completions(completion, [config.rules[int(words[1])]])
except KeyError: pass
except ValueError: pass
else:
add_completions(completion, [''])
return weechat.WEECHAT_RC_OK
def autosort_complete_helpers(words, completion):
if len(words) == 0:
add_completions(completion, ['delete', 'list', 'rename', 'set', 'swap'])
elif len(words) == 1 and words[0] in ('delete', 'rename', 'set', 'swap'):
add_completions(completion, sorted(config.helpers.keys()))
elif len(words) == 2 and words[0] == 'swap':
add_completions(completion, sorted(config.helpers.keys()))
elif len(words) == 2 and words[0] == 'rename':
add_completions(completion, sorted(config.helpers.keys()))
elif len(words) == 2 and words[0] == 'set':
try:
add_completions(completion, [config.helpers[words[1]]])
except KeyError: pass
return weechat.WEECHAT_RC_OK
def on_autosort_complete(data, name, buffer, completion):
cmdline = weechat.buffer_get_string(buffer, "input")
cursor = weechat.buffer_get_integer(buffer, "input_pos")
prefix = cmdline[:cursor]
words = prefix.split()[1:]
# If the current word isn't finished yet,
# ignore it for coming up with completion suggestions.
if prefix[-1] != ' ': words = words[:-1]
if len(words) == 0:
add_completions(completion, ['debug', 'helpers', 'rules', 'sort'])
elif words[0] == 'rules':
return autosort_complete_rules(words[1:], completion)
elif words[0] == 'helpers':
return autosort_complete_helpers(words[1:], completion)
return weechat.WEECHAT_RC_OK
command_description = r'''{*white}# General commands{reset}
{*white}/autosort {brown}sort{reset}
Manually trigger the buffer sorting.
{*white}/autosort {brown}debug{reset}
Show the evaluation results of the sort rules for each buffer.
{*white}# Sorting rule commands{reset}
{*white}/autosort{brown} rules list{reset}
Print the list of sort rules.
{*white}/autosort {brown}rules add {cyan}<expression>{reset}
Add a new rule at the end of the list.
{*white}/autosort {brown}rules insert {cyan}<index> <expression>{reset}
Insert a new rule at the given index in the list.
{*white}/autosort {brown}rules update {cyan}<index> <expression>{reset}
Update a rule in the list with a new expression.
{*white}/autosort {brown}rules delete {cyan}<index>
Delete a rule from the list.
{*white}/autosort {brown}rules move {cyan}<index_from> <index_to>{reset}
Move a rule from one position in the list to another.
{*white}/autosort {brown}rules swap {cyan}<index_a> <index_b>{reset}
Swap two rules in the list
{*white}# Helper variable commands{reset}
{*white}/autosort {brown}helpers list
Print the list of helper variables.
{*white}/autosort {brown}helpers set {cyan}<name> <expression>
Add or update a helper variable with the given name.
{*white}/autosort {brown}helpers delete {cyan}<name>
Delete a helper variable.
{*white}/autosort {brown}helpers rename {cyan}<old_name> <new_name>
Rename a helper variable.
{*white}/autosort {brown}helpers swap {cyan}<name_a> <name_b>
Swap the expressions of two helper variables in the list.
{*white}# Description
Autosort is a weechat script to automatically keep your buffers sorted. The sort
order can be customized by defining your own sort rules, but the default should
be sane enough for most people. It can also group IRC channel/private buffers
under their server buffer if you like.
{*white}# Sort rules{reset}
Autosort evaluates a list of eval expressions (see {*default}/help eval{reset}) and sorts the
buffers based on evaluated result. Earlier rules will be considered first. Only
if earlier rules produced identical results is the result of the next rule
considered for sorting purposes.
You can debug your sort rules with the `{*default}/autosort debug{reset}` command, which will
print the evaluation results of each rule for each buffer.
{*brown}NOTE:{reset} The sort rules for version 3 are not compatible with version 2 or vice
versa. You will have to manually port your old rules to version 3 if you have any.
{*white}# Helper variables{reset}
You may define helper variables for the main sort rules to keep your rules
readable. They can be used in the main sort rules as variables. For example,
a helper variable named `{cyan}foo{reset}` can be accessed in a main rule with the
string `{cyan}${{foo}}{reset}`.
{*white}# Replacing substrings{reset}
There is no default method for replacing text inside eval expressions. However,
autosort adds a `replace` info hook that can be used inside eval expressions:
{cyan}${{info:autosort_replace,from,to,text}}{reset}
For example, to strip all hashes from a buffer name, you could write:
{cyan}${{info:autosort_replace,#,,${{buffer.name}}}}{reset}
You can escape commas and backslashes inside the arguments by prefixing them with
a backslash.
{*white}# Automatic or manual sorting{reset}
By default, autosort will automatically sort your buffer list whenever a buffer
is opened, merged, unmerged or renamed. This should keep your buffers sorted in
almost all situations. However, you may wish to change the list of signals that
cause your buffer list to be sorted. Simply edit the `{cyan}autosort.sorting.signals{reset}`
option to add or remove any signal you like.
If you remove all signals you can still sort your buffers manually with the
`{*default}/autosort sort{reset}` command. To prevent all automatic sorting, the option
`{cyan}autosort.sorting.sort_on_config_change{reset}` should also be disabled.
{*white}# Recommended settings
For the best visual effect, consider setting the following options:
{*white}/set {cyan}irc.look.server_buffer{reset} {brown}independent{reset}
{*white}/set {cyan}buffers.look.indenting{reset} {brown}on{reset}
The first setting allows server buffers to be sorted independently, which is
needed to create a hierarchical tree view of the server and channel buffers.
The second one indents channel and private buffers in the buffer list of the
`{*default}buffers.pl{reset}` script.
If you are using the {*default}buflist{reset} plugin you can (ab)use Unicode to draw a tree
structure with the following setting (modify to suit your need):
{*white}/set {cyan}buflist.format.indent {brown}"${{color:237}}${{if:${{buffer.next_buffer.local_variables.type}}=~^(channel|private)$?├─:└─}}"{reset}
'''
command_completion = '%(plugin_autosort) %(plugin_autosort) %(plugin_autosort) %(plugin_autosort) %(plugin_autosort)'
info_replace_description = 'Replace all occurences of `from` with `to` in the string `text`.'
info_replace_arguments = 'from,to,text'
info_order_description = (
'Get a zero padded index of a value in a list of possible values.'
'If the value is not found, the index for `*` is returned.'
'If there is no `*` in the list, the highest index + 1 is returned.'
)
info_order_arguments = 'value,first,second,third,...'
if weechat.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION, SCRIPT_LICENSE, SCRIPT_DESC, "", ""):
config = Config('autosort')
colors = {
'default': weechat.color('default'),
'reset': weechat.color('reset'),
'black': weechat.color('black'),
'red': weechat.color('red'),
'green': weechat.color('green'),
'brown': weechat.color('brown'),
'yellow': weechat.color('yellow'),
'blue': weechat.color('blue'),
'magenta': weechat.color('magenta'),
'cyan': weechat.color('cyan'),
'white': weechat.color('white'),
'*default': weechat.color('*default'),
'*black': weechat.color('*black'),
'*red': weechat.color('*red'),
'*green': weechat.color('*green'),
'*brown': weechat.color('*brown'),
'*yellow': weechat.color('*yellow'),
'*blue': weechat.color('*blue'),
'*magenta': weechat.color('*magenta'),
'*cyan': weechat.color('*cyan'),
'*white': weechat.color('*white'),
}
weechat.hook_config('autosort.*', 'on_config_changed', '')
weechat.hook_completion('plugin_autosort', '', 'on_autosort_complete', '')
weechat.hook_command('autosort', command_description.format(**colors), '', '', command_completion, 'on_autosort_command', '')
weechat.hook_info('autosort_replace', info_replace_description, info_replace_arguments, 'on_info_replace', '')
weechat.hook_info('autosort_order', info_order_description, info_order_arguments, 'on_info_order', '')
apply_config()

View File

@ -0,0 +1,400 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2010 by xt <xt@bash.no>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# This script colors nicks in IRC channels in the actual message
# not just in the prefix section.
#
#
# History:
# 2018-04-06: Joey Pabalinas <joeypabalinas@gmail.com>
# version 26: fix freezes with too many nicks in one line
# 2018-03-18: nils_2
# version 25: fix unable to run function colorize_config_reload_cb()
# 2017-06-20: lbeziaud <louis.beziaud@ens-rennes.fr>
# version 24: colorize utf8 nicks
# 2017-03-01, arza <arza@arza.us>
# version 23: don't colorize nicklist group names
# 2016-05-01, Simmo Saan <simmo.saan@gmail.com>
# version 22: invalidate cached colors on hash algorithm change
# 2015-07-28, xt
# version 21: fix problems with nicks with commas in them
# 2015-04-19, xt
# version 20: fix ignore of nicks in URLs
# 2015-04-18, xt
# version 19: new option ignore nicks in URLs
# 2015-03-03, xt
# version 18: iterate buffers looking for nicklists instead of servers
# 2015-02-23, holomorph
# version 17: fix coloring in non-channel buffers (#58)
# 2014-09-17, holomorph
# version 16: use weechat config facilities
# clean unused, minor linting, some simplification
# 2014-05-05, holomorph
# version 15: fix python2-specific re.search check
# 2013-01-29, nils_2
# version 14: make script compatible with Python 3.x
# 2012-10-19, ldvx
# version 13: Iterate over every word to prevent incorrect colorization of
# nicks. Added option greedy_matching.
# 2012-04-28, ldvx
# version 12: added ignore_tags to avoid colorizing nicks if tags are present
# 2012-01-14, nesthib
# version 11: input_text_display hook and modifier to colorize nicks in input bar
# 2010-12-22, xt
# version 10: hook config option for updating blacklist
# 2010-12-20, xt
# version 0.9: hook new config option for weechat 0.3.4
# 2010-11-01, nils_2
# version 0.8: hook_modifier() added to communicate with rainbow_text
# 2010-10-01, xt
# version 0.7: changes to support non-irc-plugins
# 2010-07-29, xt
# version 0.6: compile regexp as per patch from Chris quigybo@hotmail.com
# 2010-07-19, xt
# version 0.5: fix bug with incorrect coloring of own nick
# 2010-06-02, xt
# version 0.4: update to reflect API changes
# 2010-03-26, xt
# version 0.3: fix error with exception
# 2010-03-24, xt
# version 0.2: use ignore_channels when populating to increase performance.
# 2010-02-03, xt
# version 0.1: initial (based on ruby script by dominikh)
#
# Known issues: nicks will not get colorized if they begin with a character
# such as ~ (which some irc networks do happen to accept)
import weechat
import re
w = weechat
SCRIPT_NAME = "colorize_nicks"
SCRIPT_AUTHOR = "xt <xt@bash.no>"
SCRIPT_VERSION = "26"
SCRIPT_LICENSE = "GPL"
SCRIPT_DESC = "Use the weechat nick colors in the chat area"
# Based on the recommendations in RFC 7613. A valid nick is composed
# of anything but " ,*?.!@".
VALID_NICK = r'([@~&!%+-])?([^\s,\*?\.!@]+)'
valid_nick_re = re.compile(VALID_NICK)
ignore_channels = []
ignore_nicks = []
# Dict with every nick on every channel with its color as lookup value
colored_nicks = {}
CONFIG_FILE_NAME = "colorize_nicks"
# config file and options
colorize_config_file = ""
colorize_config_option = {}
def colorize_config_init():
'''
Initialization of configuration file.
Sections: look.
'''
global colorize_config_file, colorize_config_option
colorize_config_file = weechat.config_new(CONFIG_FILE_NAME,
"", "")
if colorize_config_file == "":
return
# section "look"
section_look = weechat.config_new_section(
colorize_config_file, "look", 0, 0, "", "", "", "", "", "", "", "", "", "")
if section_look == "":
weechat.config_free(colorize_config_file)
return
colorize_config_option["blacklist_channels"] = weechat.config_new_option(
colorize_config_file, section_look, "blacklist_channels",
"string", "Comma separated list of channels", "", 0, 0,
"", "", 0, "", "", "", "", "", "")
colorize_config_option["blacklist_nicks"] = weechat.config_new_option(
colorize_config_file, section_look, "blacklist_nicks",
"string", "Comma separated list of nicks", "", 0, 0,
"so,root", "so,root", 0, "", "", "", "", "", "")
colorize_config_option["min_nick_length"] = weechat.config_new_option(
colorize_config_file, section_look, "min_nick_length",
"integer", "Minimum length nick to colorize", "",
2, 20, "", "", 0, "", "", "", "", "", "")
colorize_config_option["colorize_input"] = weechat.config_new_option(
colorize_config_file, section_look, "colorize_input",
"boolean", "Whether to colorize input", "", 0,
0, "off", "off", 0, "", "", "", "", "", "")
colorize_config_option["ignore_tags"] = weechat.config_new_option(
colorize_config_file, section_look, "ignore_tags",
"string", "Comma separated list of tags to ignore; i.e. irc_join,irc_part,irc_quit", "", 0, 0,
"", "", 0, "", "", "", "", "", "")
colorize_config_option["greedy_matching"] = weechat.config_new_option(
colorize_config_file, section_look, "greedy_matching",
"boolean", "If off, then use lazy matching instead", "", 0,
0, "on", "on", 0, "", "", "", "", "", "")
colorize_config_option["match_limit"] = weechat.config_new_option(
colorize_config_file, section_look, "match_limit",
"integer", "Fall back to lazy matching if greedy matches exceeds this number", "",
20, 1000, "", "", 0, "", "", "", "", "", "")
colorize_config_option["ignore_nicks_in_urls"] = weechat.config_new_option(
colorize_config_file, section_look, "ignore_nicks_in_urls",
"boolean", "If on, don't colorize nicks inside URLs", "", 0,
0, "off", "off", 0, "", "", "", "", "", "")
def colorize_config_read():
''' Read configuration file. '''
global colorize_config_file
return weechat.config_read(colorize_config_file)
def colorize_nick_color(nick, my_nick):
''' Retrieve nick color from weechat. '''
if nick == my_nick:
return w.color(w.config_string(w.config_get('weechat.color.chat_nick_self')))
else:
return w.info_get('irc_nick_color', nick)
def colorize_cb(data, modifier, modifier_data, line):
''' Callback that does the colorizing, and returns new line if changed '''
global ignore_nicks, ignore_channels, colored_nicks
full_name = modifier_data.split(';')[1]
channel = '.'.join(full_name.split('.')[1:])
buffer = w.buffer_search('', full_name)
# Check if buffer has colorized nicks
if buffer not in colored_nicks:
return line
if channel and channel in ignore_channels:
return line
min_length = w.config_integer(colorize_config_option['min_nick_length'])
reset = w.color('reset')
# Don't colorize if the ignored tag is present in message
tags_line = modifier_data.rsplit(';')
if len(tags_line) >= 3:
tags_line = tags_line[2].split(',')
for i in w.config_string(colorize_config_option['ignore_tags']).split(','):
if i in tags_line:
return line
for words in valid_nick_re.findall(line):
nick = words[1]
# Check that nick is not ignored and longer than minimum length
if len(nick) < min_length or nick in ignore_nicks:
continue
# If the matched word is not a known nick, we try to match the
# word without its first or last character (if not a letter).
# This is necessary as "foo:" is a valid nick, which could be
# adressed as "foo::".
if nick not in colored_nicks[buffer]:
if not nick[-1].isalpha() and not nick[0].isalpha():
if nick[1:-1] in colored_nicks[buffer]:
nick = nick[1:-1]
elif not nick[0].isalpha():
if nick[1:] in colored_nicks[buffer]:
nick = nick[1:]
elif not nick[-1].isalpha():
if nick[:-1] in colored_nicks[buffer]:
nick = nick[:-1]
# Check that nick is in the dictionary colored_nicks
if nick in colored_nicks[buffer]:
nick_color = colored_nicks[buffer][nick]
try:
# Let's use greedy matching. Will check against every word in a line.
if w.config_boolean(colorize_config_option['greedy_matching']):
cnt = 0
limit = w.config_integer(colorize_config_option['match_limit'])
for word in line.split():
cnt += 1
assert cnt < limit
# if cnt > limit:
# raise RuntimeError('Exceeded colorize_nicks.look.match_limit.');
if w.config_boolean(colorize_config_option['ignore_nicks_in_urls']) and \
word.startswith(('http://', 'https://')):
continue
if nick in word:
# Is there a nick that contains nick and has a greater lenght?
# If so let's save that nick into var biggest_nick
biggest_nick = ""
for i in colored_nicks[buffer]:
cnt += 1
assert cnt < limit
if nick in i and nick != i and len(i) > len(nick):
if i in word:
# If a nick with greater len is found, and that word
# also happens to be in word, then let's save this nick
biggest_nick = i
# If there's a nick with greater len, then let's skip this
# As we will have the chance to colorize when biggest_nick
# iterates being nick.
if len(biggest_nick) > 0 and biggest_nick in word:
pass
elif len(word) < len(biggest_nick) or len(biggest_nick) == 0:
new_word = word.replace(nick, '%s%s%s' % (nick_color, nick, reset))
line = line.replace(word, new_word)
# Switch to lazy matching
else:
raise AssertionError
except AssertionError:
# Let's use lazy matching for nick
nick_color = colored_nicks[buffer][nick]
# The two .? are in case somebody writes "nick:", "nick,", etc
# to address somebody
regex = r"(\A|\s).?(%s).?(\Z|\s)" % re.escape(nick)
match = re.search(regex, line)
if match is not None:
new_line = line[:match.start(2)] + nick_color+nick+reset + line[match.end(2):]
line = new_line
return line
def colorize_input_cb(data, modifier, modifier_data, line):
''' Callback that does the colorizing in input '''
global ignore_nicks, ignore_channels, colored_nicks
min_length = w.config_integer(colorize_config_option['min_nick_length'])
if not w.config_boolean(colorize_config_option['colorize_input']):
return line
buffer = w.current_buffer()
# Check if buffer has colorized nicks
if buffer not in colored_nicks:
return line
channel = w.buffer_get_string(buffer, 'name')
if channel and channel in ignore_channels:
return line
reset = w.color('reset')
for words in valid_nick_re.findall(line):
nick = words[1]
# Check that nick is not ignored and longer than minimum length
if len(nick) < min_length or nick in ignore_nicks:
continue
if nick in colored_nicks[buffer]:
nick_color = colored_nicks[buffer][nick]
line = line.replace(nick, '%s%s%s' % (nick_color, nick, reset))
return line
def populate_nicks(*args):
''' Fills entire dict with all nicks weechat can see and what color it has
assigned to it. '''
global colored_nicks
colored_nicks = {}
buffers = w.infolist_get('buffer', '', '')
while w.infolist_next(buffers):
buffer_ptr = w.infolist_pointer(buffers, 'pointer')
my_nick = w.buffer_get_string(buffer_ptr, 'localvar_nick')
nicklist = w.infolist_get('nicklist', buffer_ptr, '')
while w.infolist_next(nicklist):
if buffer_ptr not in colored_nicks:
colored_nicks[buffer_ptr] = {}
if w.infolist_string(nicklist, 'type') != 'nick':
continue
nick = w.infolist_string(nicklist, 'name')
nick_color = colorize_nick_color(nick, my_nick)
colored_nicks[buffer_ptr][nick] = nick_color
w.infolist_free(nicklist)
w.infolist_free(buffers)
return w.WEECHAT_RC_OK
def add_nick(data, signal, type_data):
''' Add nick to dict of colored nicks '''
global colored_nicks
# Nicks can have , in them in some protocols
splitted = type_data.split(',')
pointer = splitted[0]
nick = ",".join(splitted[1:])
if pointer not in colored_nicks:
colored_nicks[pointer] = {}
my_nick = w.buffer_get_string(pointer, 'localvar_nick')
nick_color = colorize_nick_color(nick, my_nick)
colored_nicks[pointer][nick] = nick_color
return w.WEECHAT_RC_OK
def remove_nick(data, signal, type_data):
''' Remove nick from dict with colored nicks '''
global colored_nicks
# Nicks can have , in them in some protocols
splitted = type_data.split(',')
pointer = splitted[0]
nick = ",".join(splitted[1:])
if pointer in colored_nicks and nick in colored_nicks[pointer]:
del colored_nicks[pointer][nick]
return w.WEECHAT_RC_OK
def update_blacklist(*args):
''' Set the blacklist for channels and nicks. '''
global ignore_channels, ignore_nicks
ignore_channels = w.config_string(colorize_config_option['blacklist_channels']).split(',')
ignore_nicks = w.config_string(colorize_config_option['blacklist_nicks']).split(',')
return w.WEECHAT_RC_OK
if __name__ == "__main__":
if w.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION, SCRIPT_LICENSE,
SCRIPT_DESC, "", ""):
colorize_config_init()
colorize_config_read()
# Run once to get data ready
update_blacklist()
populate_nicks()
w.hook_signal('nicklist_nick_added', 'add_nick', '')
w.hook_signal('nicklist_nick_removed', 'remove_nick', '')
w.hook_modifier('weechat_print', 'colorize_cb', '')
# Hook config for changing colors
w.hook_config('weechat.color.chat_nick_colors', 'populate_nicks', '')
w.hook_config('weechat.look.nick_color_hash', 'populate_nicks', '')
# Hook for working togheter with other scripts (like colorize_lines)
w.hook_modifier('colorize_nicks', 'colorize_cb', '')
# Hook for modifying input
w.hook_modifier('250|input_text_display', 'colorize_input_cb', '')
# Hook for updating blacklist (this could be improved to use fnmatch)
weechat.hook_config('%s.look.blacklist*' % SCRIPT_NAME, 'update_blacklist', '')

Some files were not shown because too many files have changed in this diff Show More