From 0960956064517d5ea8e505048743d12cebddd300 Mon Sep 17 00:00:00 2001 From: Solomon Laing Date: Thu, 11 Feb 2021 09:03:17 +1030 Subject: [PATCH] updating main to remove massive history --- .bashrc | 121 ++++ .config/Code/User/settings.json | 21 + .config/alacritty/alacritty.yml | 590 +++++++++++++++++ .config/code_extensions | 29 + .config/fish/config.fish | 148 +++++ .config/fish/fish_variables | 33 + .config/rofi/config.rasi | 122 ++++ .config/xmobar/trayer-padding-icon.sh | 48 ++ .config/xmobar/xmobarrc.hs | 126 ++++ .config/xmobar/xmobarrc.save | 110 ++++ .config/xmobar/xmobarrc.save.1 | 124 ++++ .config/xmobar/xmobarrc.template | 38 ++ .config/xmobar/xmobarrc0 | 119 ++++ .config/xmobar/xmobarrc1 | 119 ++++ .config/xmobar/xmobarrc2 | 119 ++++ .gitignore | 1 + .newsboat/urls | 368 +++++++++++ .screenlayout/normal.sh | 2 + .scripts/prompt | 15 + .xmonad/xmonad.hs | 478 ++++++++++++++ .xmonad/xpm/calendar-clock-icon_20.xpm | 25 + .xmonad/xpm/cpu_20.xpm | 25 + .xmonad/xpm/harddisk-icon_20.xpm | 25 + .xmonad/xpm/haskell_20.xpm | 25 + .xmonad/xpm/memory-icon_20.xpm | 25 + .xmonad/xpm/net_down_20.xpm | 25 + .xmonad/xpm/net_up_20.xpm | 25 + README.md | 3 + ansible/hosts | 14 + ansible/kube-cluster/1_initial.yml | 16 + ansible/kube-cluster/2_kube_dependencies.yml | 38 ++ .../kube-cluster/2_kube_dependencies.yml.bak | 44 ++ ansible/kube-cluster/3_master.yml | 42 ++ ansible/kube-cluster/4_workers.yml | 21 + ansible/kube-cluster/ansible-playbook | 1 + .../kube-cluster/cluster-update-reboot.yml | 10 + ansible/kube-cluster/kube-flannel.yml | 603 ++++++++++++++++++ ansible/kube-cluster/notes.txt | 7 + ansible/kube-cluster/odroid-hosts | 12 + ansible/kube-cluster/vm-hosts | 8 + code_extensions | 29 + iommu.sh | 8 + misc/youtube_subscription_parser.py | 22 + qemu.sh | 115 ++++ 44 files changed, 3899 insertions(+) create mode 100644 .bashrc create mode 100644 .config/Code/User/settings.json create mode 100644 .config/alacritty/alacritty.yml create mode 100644 .config/code_extensions create mode 100644 .config/fish/config.fish create mode 100644 .config/fish/fish_variables create mode 100644 .config/rofi/config.rasi create mode 100755 .config/xmobar/trayer-padding-icon.sh create mode 100644 .config/xmobar/xmobarrc.hs create mode 100644 .config/xmobar/xmobarrc.save create mode 100644 .config/xmobar/xmobarrc.save.1 create mode 100644 .config/xmobar/xmobarrc.template create mode 100755 .config/xmobar/xmobarrc0 create mode 100755 .config/xmobar/xmobarrc1 create mode 100755 .config/xmobar/xmobarrc2 create mode 100644 .gitignore create mode 100644 .newsboat/urls create mode 100755 .screenlayout/normal.sh create mode 100755 .scripts/prompt create mode 100644 .xmonad/xmonad.hs create mode 100644 .xmonad/xpm/calendar-clock-icon_20.xpm create mode 100644 .xmonad/xpm/cpu_20.xpm create mode 100644 .xmonad/xpm/harddisk-icon_20.xpm create mode 100644 .xmonad/xpm/haskell_20.xpm create mode 100644 .xmonad/xpm/memory-icon_20.xpm create mode 100644 .xmonad/xpm/net_down_20.xpm create mode 100644 .xmonad/xpm/net_up_20.xpm create mode 100644 README.md create mode 100644 ansible/hosts create mode 100644 ansible/kube-cluster/1_initial.yml create mode 100644 ansible/kube-cluster/2_kube_dependencies.yml create mode 100644 ansible/kube-cluster/2_kube_dependencies.yml.bak create mode 100644 ansible/kube-cluster/3_master.yml create mode 100644 ansible/kube-cluster/4_workers.yml create mode 100644 ansible/kube-cluster/ansible-playbook create mode 100644 ansible/kube-cluster/cluster-update-reboot.yml create mode 100644 ansible/kube-cluster/kube-flannel.yml create mode 100644 ansible/kube-cluster/notes.txt create mode 100644 ansible/kube-cluster/odroid-hosts create mode 100644 ansible/kube-cluster/vm-hosts create mode 100644 code_extensions create mode 100755 iommu.sh create mode 100755 misc/youtube_subscription_parser.py create mode 100644 qemu.sh diff --git a/.bashrc b/.bashrc new file mode 100644 index 0000000..9e00f4f --- /dev/null +++ b/.bashrc @@ -0,0 +1,121 @@ +# ~/.bashrc: executed by bash(1) for non-login shells. +# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) +# for examples + +# If not running interactively, don't do anything +case $- in + *i*) ;; + *) return;; +esac + +# don't put duplicate lines or lines starting with space in the history. +# See bash(1) for more options +HISTCONTROL=ignoreboth + +# append to the history file, don't overwrite it +shopt -s histappend + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=1000 +HISTFILESIZE=2000 + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +# If set, the pattern "**" used in a pathname expansion context will +# match all files and zero or more directories and subdirectories. +#shopt -s globstar + +# make less more friendly for non-text input files, see lesspipe(1) +[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" + +# set variable identifying the chroot you work in (used in the prompt below) +if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then + debian_chroot=$(cat /etc/debian_chroot) +fi + +# set a fancy prompt (non-color, unless we know we "want" color) +case "$TERM" in + xterm-color|*-256color) color_prompt=yes;; +esac + +# uncomment for a colored prompt, if the terminal has the capability; turned +# off by default to not distract the user: the focus in a terminal window +# should be on the output of commands, not on the prompt +#force_color_prompt=yes + +if [ -n "$force_color_prompt" ]; then + if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then + # We have color support; assume it's compliant with Ecma-48 + # (ISO/IEC-6429). (Lack of such support is extremely rare, and such + # a case would tend to support setf rather than setaf.) + color_prompt=yes + else + color_prompt= + fi +fi + +if [ "$color_prompt" = yes ]; then + PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' +else + PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' +fi +unset color_prompt force_color_prompt + +# If this is an xterm set the title to user@host:dir +case "$TERM" in +xterm*|rxvt*) + PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" + ;; +*) + ;; +esac + +# enable color support of ls and also add handy aliases +if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" + alias ls='ls --color=auto' + #alias dir='dir --color=auto' + #alias vdir='vdir --color=auto' + + alias grep='grep --color=auto' + alias fgrep='fgrep --color=auto' + alias egrep='egrep --color=auto' +fi + +# colored GCC warnings and errors +#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' + +# some more ls aliases +alias lsa='ls -lah' +alias ll='ls -alF' +alias la='ls -A' +alias l='ls -CF' + +# Add an "alert" alias for long running commands. Use like so: +# sleep 10; alert +alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' + +# Alias definitions. +# You may want to put all your additions into a separate file like +# ~/.bash_aliases, instead of adding them here directly. +# See /usr/share/doc/bash-doc/examples in the bash-doc package. + +if [ -f ~/.bash_aliases ]; then + . ~/.bash_aliases +fi + +# enable programmable completion features (you don't need to enable +# this, if it's already enabled in /etc/bash.bashrc and /etc/profile +# sources /etc/bash.bashrc). +if ! shopt -oq posix; then + if [ -f /usr/share/bash-completion/bash_completion ]; then + . /usr/share/bash-completion/bash_completion + elif [ -f /etc/bash_completion ]; then + . /etc/bash_completion + fi +fi + +alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME' +alias logout='/bin/kill -9 -1' diff --git a/.config/Code/User/settings.json b/.config/Code/User/settings.json new file mode 100644 index 0000000..26ce35a --- /dev/null +++ b/.config/Code/User/settings.json @@ -0,0 +1,21 @@ +{ + "explorer.confirmDelete": false, + "window.zoomLevel": 0, + "workbench.colorTheme": "Night Owl", + "bracket-pair-colorizer-2.forceUniqueOpeningColor": true, + "editor.fontLigatures": true, + "editor.fontFamily": "'Fira Code'", + "editor.fontWeight": "400", + "[html]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[json]": { + "editor.defaultFormatter": "HookyQR.beautify" + }, + "git.enableSmartCommit": true, + "git.confirmSync": false, + "git.autofetch": true, + "python.pythonPath": "/usr/bin/python3", + "python.linting.pylintEnabled": true, + "python.linting.enabled": true +} \ No newline at end of file diff --git a/.config/alacritty/alacritty.yml b/.config/alacritty/alacritty.yml new file mode 100644 index 0000000..790e676 --- /dev/null +++ b/.config/alacritty/alacritty.yml @@ -0,0 +1,590 @@ +# Configuration for Alacritty, the GPU enhanced terminal emulator. + +# Any items in the `env` entry below will be added as +# environment variables. Some entries may override variables +# set by alacritty itself. +env: + # TERM variable + # + # This value is used to set the `$TERM` environment variable for + # each instance of Alacritty. If it is not present, alacritty will + # check the local terminfo database and use `alacritty` if it is + # available, otherwise `xterm-256color` is used. + TERM: xterm-256color + +window: + # Window dimensions (changes require restart) + # + # Specified in number of columns/lines, not pixels. + # If both are `0`, this setting is ignored. + #dimensions: + # columns: 0 + # lines: 0 + + # Window position (changes require restart) + # + # Specified in number of pixels. + # If the position is not set, the window manager will handle the placement. + #position: + # x: 0 + # y: 0 + + # Window padding (changes require restart) + # + # Blank space added around the window in pixels. This padding is scaled + # by DPI and the specified value is always added at both opposing sides. + padding: + x: 6 + y: 6 + + # Spread additional padding evenly around the terminal content. + #dynamic_padding: false + + # Window decorations + # + # Values for `decorations`: + # - full: Borders and title bar + # - none: Neither borders nor title bar + # + # Values for `decorations` (macOS only): + # - transparent: Title bar, transparent background and title bar buttons + # - buttonless: Title bar, transparent background, but no title bar buttons + #decorations: full + + # Startup Mode (changes require restart) + # + # Values for `startup_mode`: + # - Windowed + # - Maximized + # - Fullscreen + # + # Values for `startup_mode` (macOS only): + # - SimpleFullscreen + #startup_mode: Windowed + + # Window title + title: Alacritty + + # Window class (Linux/BSD only): + class: + # Application instance name + instance: Alacritty + # General application class + general: Alacritty + + # GTK theme variant (Linux/BSD only) + # + # Override the variant of the GTK theme. Commonly supported values are `dark` and `light`. + # Set this to `None` to use the default theme variant. + #gtk_theme_variant: None + +scrolling: + # Maximum number of lines in the scrollback buffer. + # Specifying '0' will disable scrolling. + history: 5000 + + # Number of lines the viewport will move for every line scrolled when + # scrollback is enabled (history > 0). + #multiplier: 3 + + # Scroll to the bottom when new text is written to the terminal. + #auto_scroll: false + +# Spaces per Tab (changes require restart) +# +# This setting defines the width of a tab in cells. +# +# Some applications, like Emacs, rely on knowing about the width of a tab. +# To prevent unexpected behavior in these applications, it's also required to +# change the `it` value in terminfo when altering this setting. +#tabspaces: 8 + +# Font configuration +font: + # Normal (roman) font face + normal: + # Font family + # + # Default: + # - (macOS) Menlo + # - (Linux/BSD) monospace + # - (Windows) Consolas + # family: SauceCodePro Nerd Font + # family: CodeNewRoman Nerd Font + # family: RobotoMono Nerd Font + # family: Hack + # family: JetBrains Mono + # family: UbuntuMono Nerd Font + # family: Monofur Nerd Font + # family: TerminessTTF Nerd Font + # family: SauceCodePro Nerd Font + family: Fira Code + + # The `style` can be specified to pick a specific face. + style: Regular + + # Bold font face + bold: + # Font family + # + # If the bold family is not specified, it will fall back to the + # value specified for the normal font. + # family: SauceCodePro Nerd Font + # family: CodeNewRoman Nerd Font + # family: RobotoMono Nerd Font + # family: Hack + # family: JetBrains Mono + # family: UbuntuMono Nerd Font + # family: Monofur Nerd Font + # family: TerminessTTF Nerd Font + # family: SauceCodePro Nerd Font + family: Fira Code + + # The `style` can be specified to pick a specific face. + style: Bold + + # Italic font face + italic: + # Font family + # + # If the italic family is not specified, it will fall back to the + # value specified for the normal font. + # family: SauceCodePro Nerd Font Mono + # family: CodeNewRoman Nerd Font + # family: RobotoMono Nerd Font + # family: Hack + # family: JetBrains Mono + # family: UbuntuMono Nerd Font + # family: Monofuritalic Nerd Font Mono + # family: TerminessTTF Nerd Font + # family: SauceCodePro Nerd Font + family: Fira Code + + # The `style` can be specified to pick a specific face. + style: Italic + + # Bold italic font face + bold_italic: + # Font family + # + # If the bold italic family is not specified, it will fall back to the + # value specified for the normal font. + # family: SauceCodePro Nerd Font Mono + # family: CodeNewRoman Nerd Font + # family: RobotoMono Nerd Font + # family: Hack + # family: JetBrains Mono + # family: UbuntuMono Nerd Font + # family: Monofuritalic Nerd Font Mono + # family: TerminessTTF Nerd Font + # family: SauceCodePro Nerd Font + family: Fira Code + + # The `style` can be specified to pick a specific face. + style: Bold Italic + + # Point size + size: 11.0 + + # Offset is the extra space around each character. `offset.y` can be thought of + # as modifying the line spacing, and `offset.x` as modifying the letter spacing. + offset: + x: 0 + y: 0 + + # Glyph offset determines the locations of the glyphs within their cells with + # the default being at the bottom. Increasing `x` moves the glyph to the right, + # increasing `y` moves the glyph upwards. + #glyph_offset: + # x: 0 + # y: 0 + + # Thin stroke font rendering (macOS only) + # + # Thin strokes are suitable for retina displays, but for non-retina screens + # it is recommended to set `use_thin_strokes` to `false` + # + # macOS >= 10.14.x: + # + # If the font quality on non-retina display looks bad then set + # `use_thin_strokes` to `true` and enable font smoothing by running the + # following command: + # `defaults write -g CGFontRenderingFontSmoothingDisabled -bool NO` + # + # This is a global setting and will require a log out or restart to take + # effect. + #use_thin_strokes: true + +# If `true`, bold text is drawn using the bright color variants. +draw_bold_text_with_bright_colors: true + +# Colors (Tomorrow Night Bright) +colors: + # Default colors + primary: + background: '0x282c34' + foreground: '0xbbc2cf' + + # Bright and dim foreground colors + # + # The dimmed foreground color is calculated automatically if it is not present. + # If the bright foreground color is not set, or `draw_bold_text_with_bright_colors` + # is `false`, the normal foreground color will be used. + #dim_foreground: '0x9a9a9a' + #bright_foreground: '0xffffff' + + # Cursor colors + # + # Colors which should be used to draw the terminal cursor. If these are unset, + # the cursor color will be the inverse of the cell color. + #cursor: + # text: '0x000000' + # cursor: '0xffffff' + + # Selection colors + # + # Colors which should be used to draw the selection area. If selection + # background is unset, selection color will be the inverse of the cell colors. + # If only text is unset the cell text color will remain the same. + selection: + text: '0xbbc2cf' + background: '0x282c34' + + # Normal colors + normal: + black: '0x1c1f24' + red: '0xff6c6b' + green: '0x98be65' + yellow: '0xda8548' + blue: '0x51afef' + magenta: '0xc678dd' + cyan: '0x5699af' + white: '0x202328' + + # Bright colors + bright: + black: '0x5b6268' + red: '0xda8548' + green: '0x4db5bd' + yellow: '0xecbe7b' + blue: '0x3071db' # This is 2257a0 in Doom Emacs but I lightened it. + magenta: '0xa9a1e1' + cyan: '0x46d9ff' + white: '0xdfdfdf' + + # Dim colors + # + # If the dim colors are not set, they will be calculated automatically based + # on the `normal` colors. + #dim: + # black: '0x000000' + # red: '0x8c3336' + # green: '0x7a8530' + # yellow: '0x97822e' + # blue: '0x506d8f' + # magenta: '0x80638e' + # cyan: '0x497e7a' + # white: '0x9a9a9a' + + # Indexed Colors + # + # The indexed colors include all colors from 16 to 256. + # When these are not set, they're filled with sensible defaults. + # + # Example: + # `- { index: 16, color: '0xff00ff' }` + # + #indexed_colors: [] + +# Visual Bell +# +# Any time the BEL code is received, Alacritty "rings" the visual bell. Once +# rung, the terminal background will be set to white and transition back to the +# default background color. You can control the rate of this transition by +# setting the `duration` property (represented in milliseconds). You can also +# configure the transition function by setting the `animation` property. +# +# Values for `animation`: +# - Ease +# - EaseOut +# - EaseOutSine +# - EaseOutQuad +# - EaseOutCubic +# - EaseOutQuart +# - EaseOutQuint +# - EaseOutExpo +# - EaseOutCirc +# - Linear +# +# Specifying a `duration` of `0` will disable the visual bell. +#visual_bell: +# animation: EaseOutExpo +# duration: 0 +# color: '0xffffff' + +# Background opacity +# +# Window opacity as a floating point number from `0.0` to `1.0`. +# The value `0.0` is completely transparent and `1.0` is opaque. +background_opacity: 0.75 +# background_opacity: 0.95 + +#selection: + #semantic_escape_chars: ",│`|:\"' ()[]{}<>\t" + + # When set to `true`, selected text will be copied to the primary clipboard. + #save_to_clipboard: false + +# Allow terminal applications to change Alacritty's window title. +#dynamic_title: true + +#cursor: + # Cursor style + # + # Values for `style`: + # - ▇ Block + # - _ Underline + # - | Beam + #style: Block + + # If this is `true`, the cursor will be rendered as a hollow box when the + # window is not focused. + #unfocused_hollow: true + +# Live config reload (changes require restart) +#live_config_reload: true + +# Shell +# +# You can set `shell.program` to the path of your favorite shell, e.g. `/bin/fish`. +# Entries in `shell.args` are passed unmodified as arguments to the shell. +# +# Default: +# - (macOS) /bin/bash --login +# - (Linux/BSD) user login shell +# - (Windows) powershell +#shell: +# program: /bin/bash +# args: +# - --login +shell: + program: /usr/bin/fish + args: + - --login + +# Startup directory +# +# Directory the shell is started in. If this is unset, or `None`, the working +# directory of the parent process will be used. +#working_directory: None + +# WinPTY backend (Windows only) +# +# Alacritty defaults to using the newer ConPTY backend if it is available, +# since it resolves a lot of bugs and is quite a bit faster. If it is not +# available, the the WinPTY backend will be used instead. +# +# Setting this option to `true` makes Alacritty use the legacy WinPTY backend, +# even if the ConPTY backend is available. +#winpty_backend: false + +# Send ESC (\x1b) before characters when alt is pressed. +#alt_send_esc: true + +#debug: + # Display the time it takes to redraw each frame. + #render_timer: false + + # Keep the log file after quitting Alacritty. + #persistent_logging: false + + # Log level + # + # Values for `log_level`: + # - None + # - Error + # - Warn + # - Info + # - Debug + # - Trace + #log_level: Warn + + # Print all received window events. + #print_events: false + + # Record all characters and escape sequences as test data. + #ref_test: false + +#mouse: + # Click settings + # + # The `double_click` and `triple_click` settings control the time + # alacritty should wait for accepting multiple clicks as one double + # or triple click. + #double_click: { threshold: 300 } + #triple_click: { threshold: 300 } + + # If this is `true`, the cursor is temporarily hidden when typing. + #hide_when_typing: false + + #url: + # URL launcher + # + # This program is executed when clicking on a text which is recognized as a URL. + # The URL is always added to the command as the last parameter. + # + # When set to `None`, URL launching will be disabled completely. + # + # Default: + # - (macOS) open + # - (Linux/BSD) xdg-open + # - (Windows) explorer + #launcher: + # program: xdg-open + # args: [] + + # URL modifiers + # + # These are the modifiers that need to be held down for opening URLs when clicking + # on them. The available modifiers are documented in the key binding section. + #modifiers: None + +# Mouse bindings +# +# Mouse bindings are specified as a list of objects, much like the key +# bindings further below. +# +# Each mouse binding will specify a: +# +# - `mouse`: +# +# - Middle +# - Left +# - Right +# - Numeric identifier such as `5` +# +# - `action` (see key bindings) +# +# And optionally: +# +# - `mods` (see key bindings) +#mouse_bindings: +# - { mouse: Middle, action: PasteSelection } + +# Key bindings +# +# Key bindings are specified as a list of objects. For example, this is the +# default paste binding: +# +# `- { key: V, mods: Control|Shift, action: Paste }` +# +# Each key binding will specify a: +# +# - `key`: Identifier of the key pressed +# +# - A-Z +# - F1-F24 +# - Key0-Key9 +# +# A full list with available key codes can be found here: +# https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants +# +# Instead of using the name of the keys, the `key` field also supports using +# the scancode of the desired key. Scancodes have to be specified as a +# decimal number. This command will allow you to display the hex scancodes +# for certain keys: +# +# `showkey --scancodes`. +# +# Then exactly one of: +# +# - `chars`: Send a byte sequence to the running application +# +# The `chars` field writes the specified string to the terminal. This makes +# it possible to pass escape sequences. To find escape codes for bindings +# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside +# of tmux. Note that applications use terminfo to map escape sequences back +# to keys. It is therefore required to update the terminfo when changing an +# escape sequence. +# +# - `action`: Execute a predefined action +# +# - Copy +# - Paste +# - PasteSelection +# - IncreaseFontSize +# - DecreaseFontSize +# - ResetFontSize +# - ScrollPageUp +# - ScrollPageDown +# - ScrollLineUp +# - ScrollLineDown +# - ScrollToTop +# - ScrollToBottom +# - ClearHistory +# - Hide +# - Minimize +# - Quit +# - ToggleFullscreen +# - SpawnNewInstance +# - ClearLogNotice +# - ReceiveChar +# - None +# +# (macOS only): +# - ToggleSimpleFullscreen: Enters fullscreen without occupying another space +# +# - `command`: Fork and execute a specified command plus arguments +# +# The `command` field must be a map containing a `program` string and an +# `args` array of command line parameter strings. For example: +# `{ program: "alacritty", args: ["-e", "vttest"] }` +# +# And optionally: +# +# - `mods`: Key modifiers to filter binding actions +# +# - Command +# - Control +# - Option +# - Super +# - Shift +# - Alt +# +# Multiple `mods` can be combined using `|` like this: +# `mods: Control|Shift`. +# Whitespace and capitalization are relevant and must match the example. +# +# - `mode`: Indicate a binding for only specific terminal reported modes +# +# This is mainly used to send applications the correct escape sequences +# when in different modes. +# +# - AppCursor +# - AppKeypad +# - Alt +# +# A `~` operator can be used before a mode to apply the binding whenever +# the mode is *not* active, e.g. `~Alt`. +# +# Bindings are always filled by default, but will be replaced when a new +# binding with the same triggers is defined. To unset a default binding, it can +# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for +# a no-op if you do not wish to receive input characters for that binding. +key_bindings: + # (Windows, Linux, and BSD only) + - { key: V, mods: Control|Shift, action: Paste } + - { key: C, mods: Control|Shift, action: Copy } + - { key: Insert, mods: Shift, action: PasteSelection } + - { key: Numpad0, mods: Control, action: ResetFontSize } + - { key: NumpadEquals, mods: Control, action: IncreaseFontSize } + - { key: NumpadSubtract, mods: Control, action: DecreaseFontSize } + + - { key: Paste, action: Paste } + - { key: Copy, action: Copy } + - { key: L, mods: Control, action: ClearLogNotice } + - { key: L, mods: Control, chars: "\x0c" } + - { key: PageUp, mods: Shift, action: ScrollPageUp, mode: ~Alt } + - { key: PageDown, mods: Shift, action: ScrollPageDown, mode: ~Alt } + - { key: Home, mods: Shift, action: ScrollToTop, mode: ~Alt } + - { key: End, mods: Shift, action: ScrollToBottom, mode: ~Alt } diff --git a/.config/code_extensions b/.config/code_extensions new file mode 100644 index 0000000..477e675 --- /dev/null +++ b/.config/code_extensions @@ -0,0 +1,29 @@ +code --install-extension ahmadawais.shades-of-purple +code --install-extension austin.code-gnu-global +code --install-extension christian-kohler.path-intellisense +code --install-extension CoenraadS.bracket-pair-colorizer-2 +code --install-extension DotJoshJohnson.xml +code --install-extension dracula-theme.theme-dracula +code --install-extension formulahendry.auto-close-tag +code --install-extension formulahendry.auto-rename-tag +code --install-extension formulahendry.code-runner +code --install-extension Fudge.auto-using +code --install-extension HookyQR.beautify +code --install-extension humao.rest-client +code --install-extension justusadam.language-haskell +code --install-extension marcochavezf.darcula-operator-mono-vscode +code --install-extension mitaki28.vscode-clang +code --install-extension ms-azuretools.vscode-azureappservice +code --install-extension ms-dotnettools.csharp +code --install-extension ms-python.python +code --install-extension ms-vscode-remote.remote-wsl +code --install-extension ms-vscode.azure-account +code --install-extension ms-vscode.cmake-tools +code --install-extension ms-vscode.cpptools +code --install-extension quicktype.quicktype +code --install-extension sdras.night-owl +code --install-extension teabyii.ayu +code --install-extension tomoki1207.pdf +code --install-extension twxs.cmake +code --install-extension wayou.vscode-todo-highlight +code --install-extension wesbos.theme-cobalt2 diff --git a/.config/fish/config.fish b/.config/fish/config.fish new file mode 100644 index 0000000..4171fbf --- /dev/null +++ b/.config/fish/config.fish @@ -0,0 +1,148 @@ + +# Solomon Laings config.fish +set fish_greeting +set TERM "xterm-256color" +set EDITOR "nano" +set VISUAL "code" + +# my bashrc stuff +alias ..='cd ..' +alias lsa='ls -lah --color=auto' +alias ll='ls -alF --color=auto' +alias la='ls -A --color=auto' +alias l='ls -CF --color=auto' +alias ls='ls --color=auto' +alias dir='dir --color=auto' +alias vdir='vdir --color=auto' +alias grep='grep --color=auto' +alias fgrep='fgrep --color=auto' +alias egrep='egrep --color=auto' +alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME' +alias logout='/usr/bin/kill -9 -1' +alias ss='cd /home/solomon/.scripts/' +alias sound-settings='pavucontrol' + +## fish misc functions start ## + +function ip-addr + curl api.ipify.org +end + +function move-last-download + mv ~/Downloads/(ls -t -A ~/Downloads/ | head -1) . +end + +function search + open https://duckduckgo.com/"$argv" +end + +function batt + acpi | egrep 'Bat(.)+remaining' +end + +function sms + kdeconnect-sms &disown +end +## fish misc functions end ## + +# fish does not support !! and !$ so functions are needed +## !! and !$ operators start ## +function __history_previous_command + switch (commandline -t) + case "!" + commandline -t $history[1]; commandline -f repaint + case "*" + commandline -i ! + end +end + +function __history_previous_command_arguments + switch (commandline -t) + case "!" + commandline -t "" + commandline -f history-token-search-backward + case "*" + commandline -i '$' + end +end + +bind ! __history_previous_command +bind '$' __history_previous_command_arguments +## !! and !$ operators end ## + +## fish prompt start ## +# name: sashimi +function fish_prompt + set -l last_status $status + set -l cyan (set_color -o cyan) + set -l yellow (set_color -o yellow) + set -g red (set_color -o red) + set -g blue (set_color -o blue) + set -l green (set_color -o green) + set -g normal (set_color normal) + + set -l ahead (_git_ahead) + set -g whitespace ' ' + + if test $last_status = 0 + set initial_indicator "$green◆" + set status_indicator "$normal❯$cyan❯$green❯" + else + set initial_indicator "$red✖ $last_status" + set status_indicator "$red❯$red❯$red❯" + end + set -l cwd $cyan(pwd) + + if [ (_git_branch_name) ] + + if test (_git_branch_name) = 'master' + set -l git_branch (_git_branch_name) + set git_info "$normal git:($red$git_branch$normal)" + else + set -l git_branch (_git_branch_name) + set git_info "$normal git:($blue$git_branch$normal)" + end + + if [ (_is_git_dirty) ] + set -l dirty "$yellow ✗" + set git_info "$git_info$dirty" + end + end + + # Notify if a command took more than 5 minutes + if [ "$CMD_DURATION" -gt 300000 ] + echo The last command took (math "$CMD_DURATION/1000") seconds. + end + + echo -n -s $initial_indicator $whitespace $cwd $git_info $whitespace $ahead $status_indicator $whitespace +end + +function _git_ahead + set -l commits (command git rev-list --left-right '@{upstream}...HEAD' ^/dev/null) + if [ $status != 0 ] + return + end + set -l behind (count (for arg in $commits; echo $arg; end | grep '^<')) + set -l ahead (count (for arg in $commits; echo $arg; end | grep -v '^<')) + switch "$ahead $behind" + case '' # no upstream + case '0 0' # equal to upstream + return + case '* 0' # ahead of upstream + echo "$blue↑$normal_c$ahead$whitespace" + case '0 *' # behind upstream + echo "$red↓$normal_c$behind$whitespace" + case '*' # diverged from upstream + echo "$blue↑$normal$ahead $red↓$normal_c$behind$whitespace" + end +end + +function _git_branch_name + echo (command git symbolic-ref HEAD ^/dev/null | sed -e 's|^refs/heads/||') +end + +function _is_git_dirty + echo (command git status -s --ignore-submodules=dirty ^/dev/null) +end +## fish prompt end ## + diff --git a/.config/fish/fish_variables b/.config/fish/fish_variables new file mode 100644 index 0000000..dd015fa --- /dev/null +++ b/.config/fish/fish_variables @@ -0,0 +1,33 @@ +# This file contains fish universal variable definitions. +# VERSION: 3.0 +SETUVAR __fish_initialized:3100 +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_host_remote:yellow +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_status:red +SETUVAR fish_color_user:brgreen +SETUVAR fish_color_valid_path:\x2d\x2dunderline +SETUVAR fish_greeting:\x1d +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 +SETUVAR fish_user_paths:/home/solomon/\x2escripts/ diff --git a/.config/rofi/config.rasi b/.config/rofi/config.rasi new file mode 100644 index 0000000..e2eb674 --- /dev/null +++ b/.config/rofi/config.rasi @@ -0,0 +1,122 @@ +/*Dracula theme based on the Purple official rofi theme*/ + +* { + font: "Jetbrains Mono 12"; + foreground: #f8f8f2; + background-color: #282a36; + active-background: #6272a4; + urgent-background: #ff5555; + selected-background: @active-background; + selected-urgent-background: @urgent-background; + selected-active-background: @active-background; + separatorcolor: @active-background; + bordercolor: @active-background; +} + +#window { + background-color: @background; + border: 1; + border-radius: 6; + border-color: @bordercolor; + padding: 5; +} +#mainbox { + border: 0; + padding: 0; +} +#message { + border: 1px dash 0px 0px ; + border-color: @separatorcolor; + padding: 1px ; +} +#textbox { + text-color: @foreground; +} +#listview { + fixed-height: 0; + border: 2px dash 0px 0px ; + border-color: @bordercolor; + spacing: 2px ; + scrollbar: false; + padding: 2px 0px 0px ; +} +#element { + border: 0; + padding: 1px ; +} +#element.normal.normal { + background-color: @background; + text-color: @foreground; +} +#element.normal.urgent { + background-color: @urgent-background; + text-color: @urgent-foreground; +} +#element.normal.active { + background-color: @active-background; + text-color: @foreground; +} +#element.selected.normal { + background-color: @selected-background; + text-color: @foreground; +} +#element.selected.urgent { + background-color: @selected-urgent-background; + text-color: @foreground; +} +#element.selected.active { + background-color: @selected-active-background; + text-color: @foreground; +} +#element.alternate.normal { + background-color: @background; + text-color: @foreground; +} +#element.alternate.urgent { + background-color: @urgent-background; + text-color: @foreground; +} +#element.alternate.active { + background-color: @active-background; + text-color: @foreground; +} +#scrollbar { + width: 2px ; + border: 0; + handle-width: 8px ; + padding: 0; +} +#sidebar { + border: 2px dash 0px 0px ; + border-color: @separatorcolor; +} +#button.selected { + background-color: @selected-background; + text-color: @foreground; +} +#inputbar { + spacing: 0; + text-color: @foreground; + padding: 1px ; +} +#case-indicator { + spacing: 0; + text-color: @foreground; +} +#entry { + spacing: 0; + text-color: @foreground; +} +#prompt { + spacing: 0; + text-color: @foreground; +} +#inputbar { + children: [ prompt,textbox-prompt-colon,entry,case-indicator ]; +} +#textbox-prompt-colon { + expand: false; + str: ":"; + margin: 0px 0.3em 0em 0em ; + text-color: @foreground; +} diff --git a/.config/xmobar/trayer-padding-icon.sh b/.config/xmobar/trayer-padding-icon.sh new file mode 100755 index 0000000..adee04a --- /dev/null +++ b/.config/xmobar/trayer-padding-icon.sh @@ -0,0 +1,48 @@ +#!/bin/sh +# Copied from https://github.com/jaor/xmobar/issues/239#issuecomment-233206552 +# Detects the width of running trayer-srg window (xprop name 'panel') +# and creates an XPM icon of that width, 1px height, and transparent. +# Outputs an -tag for use in xmobar to display the generated +# XPM icon. +# +# Run script from xmobar: +# `Run Com "/where/ever/trayer-padding-icon.sh" [] "trayerpad" 10` +# and use `%trayerpad%` in your template. + + +# Function to create a transparent Wx1 px XPM icon +create_xpm_icon () { + timestamp=$(date) + pixels=$(for i in `seq $1`; do echo -n "."; done) + + cat << EOF > "$2" +/* XPM * +static char * trayer_pad_xpm[] = { +/* This XPM icon is used for padding in xmobar to */ +/* leave room for trayer-srg. It is dynamically */ +/* updated by by trayer-padding-icon.sh which is run */ +/* by xmobar. */ +/* Created: ${timestamp} */ +/* */ +"$1 1 1 1", +/* Colors (none: transparent) */ +". c none", +/* Pixels */ +"$pixels" +}; +EOF +} + +# Width of the trayer window +width=$(xprop -name panel | grep 'program specified minimum size' | cut -d ' ' -f 5) + +# Icon file name +iconfile="/tmp/trayer-padding-${width}px.xpm" + +# If the desired icon does not exist create it +if [ ! -f $iconfile ]; then + create_xpm_icon $width $iconfile +fi + +# Output the icon tag for xmobar +echo "" diff --git a/.config/xmobar/xmobarrc.hs b/.config/xmobar/xmobarrc.hs new file mode 100644 index 0000000..1f7450c --- /dev/null +++ b/.config/xmobar/xmobarrc.hs @@ -0,0 +1,126 @@ +Config { + + -- appearance + font = "xft:Fira Code:size=11:bold:antialias=true:hinting=true" + , bgColor = "#14071F" + , fgColor = "#646464" + , position = Top + , border = BottomB + , borderColor = "#14071F" + , iconRoot = "/home/solomon/.xmonad/xpm/" -- default: "." + + -- layout + , sepChar = "%" -- delineator between plugin names and straight text + , alignSep = "}{" -- separator between left-right alignment + , template = " %UnsafeStdinReader% | %cpu% | %memory% | %dynnetwork% } \ + \{ %date% | %YPAD% | %battery% %trayerpad%" + } + + -- general behavior + , lowerOnStart = True -- send to bottom of window stack on start + , hideOnStart = False -- start with window unmapped (hidden) + , allDesktops = True -- show on all desktops + , overrideRedirect = True -- set the Override Redirect flag (Xlib) + , pickBroadest = False -- choose widest display (multi-monitor) + , persistent = True -- enable/disable hiding (True = disabled) + + -- plugins + -- Numbers can be automaticallJy colored according to their value. xmobar + -- decides color based on a three-tier/two-cutoff system, controlled by + -- command options: + -- --Low sets the low cutoff + -- --High sets the high cutoff + -- + -- --low sets the color below --Low cutoff + -- --normal sets the color between --Low and --High cutoffs + -- --High sets the color above --High cutoff + -- + -- The --template option controls how the plugin is displayed. Text + -- color can be set by enclosing in tags. For more details + -- see http://projects.haskell.org/xmobar/#system-monitor-plugins. + , commands = + -- weather monitor + [ Run Weather "YPAD" ["--template" , ": °C" + , "--Low" , "10" + , "--High" , "25" + , "--normal" , "#95C05D" + , "--high" , "red" + , "--low" , "lightblue" + ] 36000 + + -- network activity monitor + -- , Run Network "enp33s0" [ "--template" , "eth: kB/s kB/s" + -- , "--Low" , "100000" -- units: B/s + -- , "--High" , "500000" -- units: B/s + -- , "--low" , "#95C05D" + -- , "--normal" , "#ee9a00" + -- , "--high" , "#882410" + -- ] 10 + -- , Run Network "wlp36s0" [ "--template" , "wlan: kB/s kB/s" + -- , "--Low" , "100000" -- units: B/s + -- , "--High" , "500000" -- units: B/s + -- , "--low" , "#95C05D" + -- , "--normal" , "#ee9a00" + -- , "--high" , "#882410" + -- ] 10 + + -- network activity monitor (dynamic interface resolution) + , Run DynNetwork [ "--template" , ": kB/s kB/s" + , "--Low" , "100000" -- units: B/s + , "--High" , "500000" -- units: B/s + , "--low" , "#95C05D" + , "--normal" , "#ee9a00" + , "--high" , "#882410" + ] 10 + + -- cpu activity monitor + , Run Cpu [ "--template" , "cpu: %" + , "--Low" , "30" -- units: % + , "--High" , "60" -- units: % + , "--low" , "#95C05D" + , "--normal" , "#ee9a00" + , "--high" , "#882410" + ] 10 + + -- memory usage monitor + -- , Run Memory [ "--template" ,"mem: % (Mb)" + , Run Memory [ "--template" ,"mem: %" + , "--Low" , "20" -- units: % + , "--High" , "90" -- units: % + , "--low" , "#95C05D" + , "--normal" , "#ee9a00" + , "--high" , "#882410" + ] 10 + + -- time and date indicator + -- (%F = y-m-d date, %a = day of week, %T = h:m:s time) + , Run Date "%a %d %b %H:%M" "date" 10 + + -- keyboard layout indicator + -- , Run Kbd [ ("us(dvorak)" , "DV") + -- , ("us" , "US") + -- ] + + -- Battery information. This is likely to require some customization + -- based upon your specific hardware. Or, for a desktop you may want + -- to just remove this section entirely. + , Run BatteryP ["BAT0"] + [ "--template", ": %, " + , "-L", "10", "-H", "80" + , "-l", "red", "-h", "green" + , "--", "-O", "Charging", "-o", "Battery" + ] 10 + + -- Runs a standard shell command 'uname -r' to get kernel version + -- , Run Com "uname" ["-r"] "" 3600 + + -- Script that dynamically adjusts xmobar padding depending on number of trayer icons. + , Run Com "/home/solomon/.config/xmobar/trayer-padding-icon.sh" [] "trayerpad" 20 + + -- Prints out the left side items such as workspaces, layout, etc. + , Run UnsafeStdinReader + + ] + } + + diff --git a/.config/xmobar/xmobarrc.save b/.config/xmobar/xmobarrc.save new file mode 100644 index 0000000..b72ecdc --- /dev/null +++ b/.config/xmobar/xmobarrc.save @@ -0,0 +1,110 @@ +loConfig { + + -- appearance + font = "xft:Fira Code:size=14:bold:antialias=true:hinting=true" + , bgColor = "#14071F" + , fgColor = "#646464" + , position = Top + , border = BottomB + , borderColor = "#646464" + , iconRoot = "/home/solomon/.xmonad/xpm/" -- default: "." + + -- layout + , sepChar = "%" -- delineator between plugin names and straight text + , alignSep = "}{" -- separator between left-right alignment + , template = " %cpu% | %memory% | %dynnetwork% }\ + \{ %date% | %YPAD% | %kbd% | %uname% %trayerpad%" + } + + -- general behavior + , lowerOnStart = True -- send to bottom of window stack on start + , hideOnStart = False -- start with window unmapped (hidden) + , allDesktops = True -- show on all desktops + , overrideRedirect = True -- set the Override Redirect flag (Xlib) + , pickBroadest = False -- choose widest display (multi-monitor) + , persistent = True -- enable/disable hiding (True = disabled) + + -- plugins + -- Numbers can be automatically colored according to their value. xmobar + -- decides color based on a three-tier/two-cutoff system, controlled by + -- command options: + -- --Low sets the low cutoff + -- --High sets the high cutoff + -- + -- --low sets the color below --Low cutoff + -- --normal sets the color between --Low and --High cutoffs + -- --High sets the color above --High cutoff + -- + -- The --template option controls how the plugin is displayed. Text + -- color can be set by enclosing in tags. For more details + -- see http://projects.haskell.org/xmobar/#system-monitor-plugins. + , commands = + -- weather monitor + [ Run Weather "YPAD" ["--template" , ": °C" + , "--Low" , "10" + , "--High" , "25" + , "--normal" , "#95C05D" + , "--high" , "red" + , "--low" , "lightblue" + ] 36000 + + -- -- network activity monitor + -- , Run Network "enp33s0" [ "--template" , "eth: kB/s kB/s" + -- , "--Low" , "100000" -- units: B/s + -- , "--High" , "500000" -- units: B/s + -- , "--low" , "#95C05D" + -- , "--normal" , "#ee9a00" + -- , "--high" , "#882410" + -- ] 10 + -- , Run Network "wlp36s0" [ "--template" , "wlan: kB/s kB/s" + -- , "--Low" , "100000" -- units: B/s + -- , "--High" , "500000" -- units: B/s + -- , "--low" , "#95C05D" + -- , "--normal" , "#ee9a00" + -- , "--high" , "#882410" + -- ] 10 + + -- network activity monitor (dynamic interface resolution) + , Run DynNetwork [ "--template" , ": kB/s kB/s" + , "--Low" , "100000" -- units: B/s + , "--High" , "500000" -- units: B/s + , "--low" , "#95C05D" + , "--normal" , "#ee9a00" + , "--high" , "#882410" + ] 10 + + -- cpu activity monitor + , Run Cpu [ "--template" , "cpu: %" + , "--Low" , "30" -- units: % + , "--High" , "60" -- units: % + , "--low" , "#95C05D" + , "--normal" , "#ee9a00" + , "--high" , "#882410" + ] 10 + + -- memory usage monitor + , Run Memory [ "--template" ,"mem: % (Mb)" + , "--Low" , "20" -- units: % + , "--High" , "90" -- units: % + , "--low" , "#95C05D" + , "--normal" , "#ee9a00" + , "--high" , "#882410" + ] 10 + + -- time and date indicator + -- (%F = y-m-d date, %a = day of week, %T = h:m:s time) + , Run Date "%a %d %b %Y %H:%M:%S" "date" 10 + + -- keyboard layout indicator + , Run Kbd [ ("us(dvorak)" , "DV") + , ("us" , "US") + ] + + -- Runs a standard shell command 'uname -r' to get kernel version + , Run Com "uname" ["-r"] "" 3600 + + -- Script that dynamically adjusts xmobar padding depending on number of trayer icons. + , Run Com "/home/solomon/.config/xmobar/trayer-padding-icon.sh" [] "trayerpad" 20 + + ] + } diff --git a/.config/xmobar/xmobarrc.save.1 b/.config/xmobar/xmobarrc.save.1 new file mode 100644 index 0000000..2c2d330 --- /dev/null +++ b/.config/xmobar/xmobarrc.save.1 @@ -0,0 +1,124 @@ +Config { + + -- appearance + font = "xft:Fira Code:size=14:bold:antialias=true:hinting=true" + , bgColor = "#14071F" + , fgColor = "#646464" + , position = Top + , border = BottomB + , borderColor = "#646464" + , iconRoot = "/home/solomon/.xmonad/xpm/" -- default: "." + + -- layout + , sepChar = "%" -- delineator between plugin names and straight text + , alignSep = "}{" -- separator between left-right alignment + , template = " %cpu% | %memory% | %dynnetwork% | %UnsafeStdinReader% }\ + \{ %date% | %YPAD% | %kbd% | %uname% %trayerpad%" + } + + -- general behavior + , lowerOnStart = True -- send to bottom of window stack on start + , hideOnStart = False -- start with window unmapped (hidden) + , allDesktops = True -- show on all desktops + , overrideRedirect = True -- set the Override Redirect flag (Xlib) + , pickBroadest = False -- choose widest display (multi-monitor) + , persistent = True -- enable/disable hiding (True = disabled) + + -- plugins + -- Numbers can be automatically colored according to their value. xmobar + -- decides color based on a three-tier/two-cutoff system, controlled by + -- command options: + -- --Low sets the low cutoff + -- --High sets the high cutoff + -- + -- --low sets the color below --Low cutoff + -- --normal sets the color between --Low and --High cutoffs + -- --High sets the color above --High cutoff + -- + -- The --template option controls how the plugin is displayed. Text + -- color can be set by enclosing in tags. For more details + -- see http://projects.haskell.org/xmobar/#system-monitor-plugins. + , commands = + -- weather monitor + [ Run Weather "YPAD" ["--template" , ": °C" + , "--Low" , "10" + , "--High" , "25" + , "--normal" , "#95C05D" + , "--high" , "red" + , "--low" , "lightblue" + ] 36000 + + -- -- network activity monitor + -- , Run Network "enp33s0" [ "--template" , "eth: kB/s kB/s" + -- , "--Low" , "100000" -- units: B/s + -- , "--High" , "500000" -- units: B/s + -- , "--low" , "#95C05D" + -- , "--normal" , "#ee9a00" + -- , "--high" , "#882410" + -- ] 10 + -- , Run Network "wlp36s0" [ "--template" , "wlan: kB/s kB/s" + -- , "--Low" , "100000" -- units: B/s + -- , "--High" , "500000" -- units: B/s + -- , "--low" , "#95C05D" + -- , "--normal" , "#ee9a00" + -- , "--high" , "#882410" + -- ] 10 + +Run BatteryP ["BAT0"] + ["-t", " (%)", + "-L", "10", "-H", "80", "-p", "3", + "--", "-O", "On - ", "-i", "", + "-L", "-15", "-H", "-5", + "-l", "red", "-m", "blue", "-h", "green" + "-a", "notify-send -u critical 'Battery running out!!'", + "-A", "3"] + 600 + + -- network activity monitor (dynamic interface resolution) + , Run DynNetwork [ "--template" , ": kB/s kB/s" + , "--Low" , "100000" -- units: B/s + , "--High" , "500000" -- units: B/s + , "--low" , "#95C05D" + , "--normal" , "#ee9a00" + , "--high" , "#882410" + ] 10 + + -- cpu activity monitor + , Run Cpu [ "--template" , "cpu: %" + , "--Low" , "30" -- units: % + , "--High" , "60" -- units: % + , "--low" , "#95C05D" + , "--normal" , "#ee9a00" + , "--high" , "#882410" + ] 10 + + -- memory usage monitor + , Run Memory [ "--template" ,"mem: % (Mb)" + , "--Low" , "20" -- units: % + , "--High" , "90" -- units: % + , "--low" , "#95C05D" + , "--normal" , "#ee9a00" + , "--high" , "#882410" + ] 10 + + -- time and date indicator + -- (%F = y-m-d date, %a = day of week, %T = h:m:s time) + , Run Date "%a %d %b %Y %H:%M:%S" "date" 10 + + -- keyboard layout indicator + , Run Kbd [ ("us(dvorak)" , "DV") + , ("us" , "US") + ] + + -- Runs a standard shell command 'uname -r' to get kernel version + , Run Com "uname" ["-r"] "" 3600 + + -- Script that dynamically adjusts xmobar padding depending on number of trayer icons. + , Run Com "/home/solomon/.config/xmobar/trayer-padding-icon.sh" [] "trayerpad" 20 + + -- Prints out the left side items such as workspaces, layout, etc. + -- The workspaces are 'clickable' in my configs. + --, Run UnsafeStdinReader + + ] + } diff --git a/.config/xmobar/xmobarrc.template b/.config/xmobar/xmobarrc.template new file mode 100644 index 0000000..c0d4cdc --- /dev/null +++ b/.config/xmobar/xmobarrc.template @@ -0,0 +1,38 @@ +Config { font = "-misc-fixed-*-*-*-*-10-*-*-*-*-*-*-*" + , additionalFonts = [] + , borderColor = "black" + , border = TopB + , bgColor = "black" + , fgColor = "grey" + , alpha = 255 + , position = Top + , textOffset = -1 + , iconOffset = -1 + , lowerOnStart = True + , pickBroadest = False + , persistent = False + , hideOnStart = False + , iconRoot = "." + , allDesktops = True + , overrideRedirect = True + , commands = [ Run Weather "EGPF" ["-t",": C", + "-L","18","-H","25", + "--normal","green", + "--high","red", + "--low","lightblue"] 36000 + , Run Network "eth0" ["-L","0","-H","32", + "--normal","green","--high","red"] 10 + , Run Network "eth1" ["-L","0","-H","32", + "--normal","green","--high","red"] 10 + , Run Cpu ["-L","3","-H","50", + "--normal","green","--high","red"] 10 + , Run Memory ["-t","Mem: %"] 10 + , Run Swap [] 10 + , Run Com "uname" ["-s","-r"] "" 36000 + , Run Date "%a %b %_d %Y %H:%M:%S" "date" 10 + ] + , sepChar = "%" + , alignSep = "}{" + , template = "%cpu% | %memory% * %swap% | %eth0% - %eth1% }\ + \{ %date%| %EGPF% | %uname%" + } diff --git a/.config/xmobar/xmobarrc0 b/.config/xmobar/xmobarrc0 new file mode 100755 index 0000000..e14f03a --- /dev/null +++ b/.config/xmobar/xmobarrc0 @@ -0,0 +1,119 @@ +Config { + + -- appearance + font = "xft:Fira Code:size=14:bold:antialias=true:hinting=true" + , bgColor = "#14071F" + , fgColor = "#646464" + , position = Top + , border = BottomB + , borderColor = "#646464" + , iconRoot = "/home/solomon/.xmonad/xpm/" -- default: "." + + -- layout + , sepChar = "%" -- delineator between plugin names and straight text + , alignSep = "}{" -- separator between left-right alignment + , template = " %cpu% | %memory% | %dynnetwork% }\ + \{ %date% | %YPAD% | %kbd% | %uname% %trayerpad%" + } + -- , template = " %cpu% | %memory% | %dynnetwork% | %UnsafeStdinReader% }\ + -- \{ %date% | %YPAD% | %kbd% | %uname% %trayerpad%" + -- } + + -- general behavior + , lowerOnStart = True -- send to bottom of window stack on start + , hideOnStart = False -- start with window unmapped (hidden) + , allDesktops = True -- show on all desktops + , overrideRedirect = True -- set the Override Redirect flag (Xlib) + , pickBroadest = False -- choose widest display (multi-monitor) + , persistent = True -- enable/disable hiding (True = disabled) + + -- plugins + -- Numbers can be automatically colored according to their value. xmobar + -- decides color based on a three-tier/two-cutoff system, controlled by + -- command options: + -- --Low sets the low cutoff + -- --High sets the high cutoff + -- + -- --low sets the color below --Low cutoff + -- --normal sets the color between --Low and --High cutoffs + -- --High sets the color above --High cutoff + -- + -- The --template option controls how the plugin is displayed. Text + -- color can be set by enclosing in tags. For more details + -- see http://projects.haskell.org/xmobar/#system-monitor-plugins. + , commands = + -- weather monitor + [ Run Weather "YPAD" ["--template" , ": °C" + , "--Low" , "10" + , "--High" , "25" + , "--normal" , "#95C05D" + , "--high" , "red" + , "--low" , "lightblue" + ] 36000 + + -- -- network activity monitor + -- , Run Network "enp33s0" [ "--template" , "eth: kB/s kB/s" + -- , "--Low" , "100000" -- units: B/s + -- , "--High" , "500000" -- units: B/s + -- , "--low" , "#95C05D" + -- , "--normal" , "#ee9a00" + -- , "--high" , "#882410" + -- ] 10 + -- , Run Network "wlp36s0" [ "--template" , "wlan: kB/s kB/s" + -- , "--Low" , "100000" -- units: B/s + -- , "--High" , "500000" -- units: B/s + -- , "--low" , "#95C05D" + -- , "--normal" , "#ee9a00" + -- , "--high" , "#882410" + -- ] 10 + + -- network activity monitor (dynamic interface resolution) + , Run DynNetwork [ "--template" , ": kB/s kB/s" + , "--Low" , "100000" -- units: B/s + , "--High" , "500000" -- units: B/s + , "--low" , "#95C05D" + , "--normal" , "#ee9a00" + , "--high" , "#882410" + ] 10 + + -- cpu activity monitor + , Run Cpu [ "--template" , "cpu: %" + , "--Low" , "30" -- units: % + , "--High" , "60" -- units: % + , "--low" , "#95C05D" + , "--normal" , "#ee9a00" + , "--high" , "#882410" + ] 10 + + -- memory usage monitor + , Run Memory [ "--template" ,"mem: % (Mb)" + , "--Low" , "20" -- units: % + , "--High" , "90" -- units: % + , "--low" , "#95C05D" + , "--normal" , "#ee9a00" + , "--high" , "#882410" + ] 10 + + -- time and date indicator + -- (%F = y-m-d date, %a = day of week, %T = h:m:s time) + , Run Date "%a %d %b %Y %H:%M:%S" "date" 10 + + -- keyboard layout indicator + , Run Kbd [ ("us(dvorak)" , "DV") + , ("us" , "US") + ] + + -- Runs a standard shell command 'uname -r' to get kernel version + , Run Com "uname" ["-r"] "" 3600 + + -- Script that dynamically adjusts xmobar padding depending on number of trayer icons. + , Run Com "/home/solomon/.config/xmobar/trayer-padding-icon.sh" [] "trayerpad" 20 + + -- Prints out the left side items such as workspaces, layout, etc. + -- The workspaces are 'clickable' in my configs. + --, Run UnsafeStdinReader + + ] + } + + diff --git a/.config/xmobar/xmobarrc1 b/.config/xmobar/xmobarrc1 new file mode 100755 index 0000000..e14f03a --- /dev/null +++ b/.config/xmobar/xmobarrc1 @@ -0,0 +1,119 @@ +Config { + + -- appearance + font = "xft:Fira Code:size=14:bold:antialias=true:hinting=true" + , bgColor = "#14071F" + , fgColor = "#646464" + , position = Top + , border = BottomB + , borderColor = "#646464" + , iconRoot = "/home/solomon/.xmonad/xpm/" -- default: "." + + -- layout + , sepChar = "%" -- delineator between plugin names and straight text + , alignSep = "}{" -- separator between left-right alignment + , template = " %cpu% | %memory% | %dynnetwork% }\ + \{ %date% | %YPAD% | %kbd% | %uname% %trayerpad%" + } + -- , template = " %cpu% | %memory% | %dynnetwork% | %UnsafeStdinReader% }\ + -- \{ %date% | %YPAD% | %kbd% | %uname% %trayerpad%" + -- } + + -- general behavior + , lowerOnStart = True -- send to bottom of window stack on start + , hideOnStart = False -- start with window unmapped (hidden) + , allDesktops = True -- show on all desktops + , overrideRedirect = True -- set the Override Redirect flag (Xlib) + , pickBroadest = False -- choose widest display (multi-monitor) + , persistent = True -- enable/disable hiding (True = disabled) + + -- plugins + -- Numbers can be automatically colored according to their value. xmobar + -- decides color based on a three-tier/two-cutoff system, controlled by + -- command options: + -- --Low sets the low cutoff + -- --High sets the high cutoff + -- + -- --low sets the color below --Low cutoff + -- --normal sets the color between --Low and --High cutoffs + -- --High sets the color above --High cutoff + -- + -- The --template option controls how the plugin is displayed. Text + -- color can be set by enclosing in tags. For more details + -- see http://projects.haskell.org/xmobar/#system-monitor-plugins. + , commands = + -- weather monitor + [ Run Weather "YPAD" ["--template" , ": °C" + , "--Low" , "10" + , "--High" , "25" + , "--normal" , "#95C05D" + , "--high" , "red" + , "--low" , "lightblue" + ] 36000 + + -- -- network activity monitor + -- , Run Network "enp33s0" [ "--template" , "eth: kB/s kB/s" + -- , "--Low" , "100000" -- units: B/s + -- , "--High" , "500000" -- units: B/s + -- , "--low" , "#95C05D" + -- , "--normal" , "#ee9a00" + -- , "--high" , "#882410" + -- ] 10 + -- , Run Network "wlp36s0" [ "--template" , "wlan: kB/s kB/s" + -- , "--Low" , "100000" -- units: B/s + -- , "--High" , "500000" -- units: B/s + -- , "--low" , "#95C05D" + -- , "--normal" , "#ee9a00" + -- , "--high" , "#882410" + -- ] 10 + + -- network activity monitor (dynamic interface resolution) + , Run DynNetwork [ "--template" , ": kB/s kB/s" + , "--Low" , "100000" -- units: B/s + , "--High" , "500000" -- units: B/s + , "--low" , "#95C05D" + , "--normal" , "#ee9a00" + , "--high" , "#882410" + ] 10 + + -- cpu activity monitor + , Run Cpu [ "--template" , "cpu: %" + , "--Low" , "30" -- units: % + , "--High" , "60" -- units: % + , "--low" , "#95C05D" + , "--normal" , "#ee9a00" + , "--high" , "#882410" + ] 10 + + -- memory usage monitor + , Run Memory [ "--template" ,"mem: % (Mb)" + , "--Low" , "20" -- units: % + , "--High" , "90" -- units: % + , "--low" , "#95C05D" + , "--normal" , "#ee9a00" + , "--high" , "#882410" + ] 10 + + -- time and date indicator + -- (%F = y-m-d date, %a = day of week, %T = h:m:s time) + , Run Date "%a %d %b %Y %H:%M:%S" "date" 10 + + -- keyboard layout indicator + , Run Kbd [ ("us(dvorak)" , "DV") + , ("us" , "US") + ] + + -- Runs a standard shell command 'uname -r' to get kernel version + , Run Com "uname" ["-r"] "" 3600 + + -- Script that dynamically adjusts xmobar padding depending on number of trayer icons. + , Run Com "/home/solomon/.config/xmobar/trayer-padding-icon.sh" [] "trayerpad" 20 + + -- Prints out the left side items such as workspaces, layout, etc. + -- The workspaces are 'clickable' in my configs. + --, Run UnsafeStdinReader + + ] + } + + diff --git a/.config/xmobar/xmobarrc2 b/.config/xmobar/xmobarrc2 new file mode 100755 index 0000000..e14f03a --- /dev/null +++ b/.config/xmobar/xmobarrc2 @@ -0,0 +1,119 @@ +Config { + + -- appearance + font = "xft:Fira Code:size=14:bold:antialias=true:hinting=true" + , bgColor = "#14071F" + , fgColor = "#646464" + , position = Top + , border = BottomB + , borderColor = "#646464" + , iconRoot = "/home/solomon/.xmonad/xpm/" -- default: "." + + -- layout + , sepChar = "%" -- delineator between plugin names and straight text + , alignSep = "}{" -- separator between left-right alignment + , template = " %cpu% | %memory% | %dynnetwork% }\ + \{ %date% | %YPAD% | %kbd% | %uname% %trayerpad%" + } + -- , template = " %cpu% | %memory% | %dynnetwork% | %UnsafeStdinReader% }\ + -- \{ %date% | %YPAD% | %kbd% | %uname% %trayerpad%" + -- } + + -- general behavior + , lowerOnStart = True -- send to bottom of window stack on start + , hideOnStart = False -- start with window unmapped (hidden) + , allDesktops = True -- show on all desktops + , overrideRedirect = True -- set the Override Redirect flag (Xlib) + , pickBroadest = False -- choose widest display (multi-monitor) + , persistent = True -- enable/disable hiding (True = disabled) + + -- plugins + -- Numbers can be automatically colored according to their value. xmobar + -- decides color based on a three-tier/two-cutoff system, controlled by + -- command options: + -- --Low sets the low cutoff + -- --High sets the high cutoff + -- + -- --low sets the color below --Low cutoff + -- --normal sets the color between --Low and --High cutoffs + -- --High sets the color above --High cutoff + -- + -- The --template option controls how the plugin is displayed. Text + -- color can be set by enclosing in tags. For more details + -- see http://projects.haskell.org/xmobar/#system-monitor-plugins. + , commands = + -- weather monitor + [ Run Weather "YPAD" ["--template" , ": °C" + , "--Low" , "10" + , "--High" , "25" + , "--normal" , "#95C05D" + , "--high" , "red" + , "--low" , "lightblue" + ] 36000 + + -- -- network activity monitor + -- , Run Network "enp33s0" [ "--template" , "eth: kB/s kB/s" + -- , "--Low" , "100000" -- units: B/s + -- , "--High" , "500000" -- units: B/s + -- , "--low" , "#95C05D" + -- , "--normal" , "#ee9a00" + -- , "--high" , "#882410" + -- ] 10 + -- , Run Network "wlp36s0" [ "--template" , "wlan: kB/s kB/s" + -- , "--Low" , "100000" -- units: B/s + -- , "--High" , "500000" -- units: B/s + -- , "--low" , "#95C05D" + -- , "--normal" , "#ee9a00" + -- , "--high" , "#882410" + -- ] 10 + + -- network activity monitor (dynamic interface resolution) + , Run DynNetwork [ "--template" , ": kB/s kB/s" + , "--Low" , "100000" -- units: B/s + , "--High" , "500000" -- units: B/s + , "--low" , "#95C05D" + , "--normal" , "#ee9a00" + , "--high" , "#882410" + ] 10 + + -- cpu activity monitor + , Run Cpu [ "--template" , "cpu: %" + , "--Low" , "30" -- units: % + , "--High" , "60" -- units: % + , "--low" , "#95C05D" + , "--normal" , "#ee9a00" + , "--high" , "#882410" + ] 10 + + -- memory usage monitor + , Run Memory [ "--template" ,"mem: % (Mb)" + , "--Low" , "20" -- units: % + , "--High" , "90" -- units: % + , "--low" , "#95C05D" + , "--normal" , "#ee9a00" + , "--high" , "#882410" + ] 10 + + -- time and date indicator + -- (%F = y-m-d date, %a = day of week, %T = h:m:s time) + , Run Date "%a %d %b %Y %H:%M:%S" "date" 10 + + -- keyboard layout indicator + , Run Kbd [ ("us(dvorak)" , "DV") + , ("us" , "US") + ] + + -- Runs a standard shell command 'uname -r' to get kernel version + , Run Com "uname" ["-r"] "" 3600 + + -- Script that dynamically adjusts xmobar padding depending on number of trayer icons. + , Run Com "/home/solomon/.config/xmobar/trayer-padding-icon.sh" [] "trayerpad" 20 + + -- Prints out the left side items such as workspaces, layout, etc. + -- The workspaces are 'clickable' in my configs. + --, Run UnsafeStdinReader + + ] + } + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e71a4f0 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.cfg diff --git a/.newsboat/urls b/.newsboat/urls new file mode 100644 index 0000000..d4ea4a7 --- /dev/null +++ b/.newsboat/urls @@ -0,0 +1,368 @@ +https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg +https://www.youtube.com/feeds/videos.xml?channel_id=UCYVU6rModlGxvJbszCclGGw +https://www.youtube.com/feeds/videos.xml?channel_id=UClFSU9_bUb4Rc6OYfTt5SPw +https://www.youtube.com/feeds/videos.xml?channel_id=UCL_f53ZEJxp8TtlOkHwMV9Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCioZY1p0bZ4Xt-yodw8_cBQ +https://www.youtube.com/feeds/videos.xml?channel_id=UC2-i3KuYoODXsM99Z3-Gm0A +https://www.youtube.com/feeds/videos.xml?channel_id=UCs7nPQIEba0T3tGOWWsZpJQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCcXhhVwCT6_WqjkEniejRJQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw +https://www.youtube.com/feeds/videos.xml?channel_id=UCjr2bPAyPV7t35MvcgT3W8Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCUNoAjAgVHEHc6jrUr4XuWQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCNvsIonJdJ5E4EXMa65VYpA +https://www.youtube.com/feeds/videos.xml?channel_id=UCCvcd0FYi58LwyTQP9LITpA +https://www.youtube.com/feeds/videos.xml?channel_id=UC2W-gFz7UfNVdx0N1bgTB4A +https://www.youtube.com/feeds/videos.xml?channel_id=UC-lHJZR3Gqxm24_Vd_AJ5Yw +https://www.youtube.com/feeds/videos.xml?channel_id=UCymoZh5mmZIKSqTtadRf3ow +https://www.youtube.com/feeds/videos.xml?channel_id=UCNUu9E0ZZbf53NVkPjTk7sw +https://www.youtube.com/feeds/videos.xml?channel_id=UCkFMkIX1Tb2s8CIgfzmUfLA +https://www.youtube.com/feeds/videos.xml?channel_id=UCgclKg8oaVlkuCurCxo2hOw +https://www.youtube.com/feeds/videos.xml?channel_id=UCjDQKxiTVpXutZc2Ra9wCAg +https://www.youtube.com/feeds/videos.xml?channel_id=UCD6VugMZKRhSyzWEWA9W2fg +https://www.youtube.com/feeds/videos.xml?channel_id=UCSCoziKHqjqbox3Fv3Pb4BA +https://www.youtube.com/feeds/videos.xml?channel_id=UCMTk_R_Y49jvq-HQXDmKI0Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCBFIHC0C2roQllCR9bnFX4g +https://www.youtube.com/feeds/videos.xml?channel_id=UCtZO3K2p8mqFwiKWb9k7fXA +https://www.youtube.com/feeds/videos.xml?channel_id=UCfMJ2MchTSW2kWaT0kK94Yw +https://www.youtube.com/feeds/videos.xml?channel_id=UCg4XK-l40KZD7fLi12pJ1YA +https://www.youtube.com/feeds/videos.xml?channel_id=UCdcemy56JtVTrsFIOoqvV8g +https://www.youtube.com/feeds/videos.xml?channel_id=UCJy232tY_LUd1NuBgsSNUEA +https://www.youtube.com/feeds/videos.xml?channel_id=UCpIafFPGutTAKOBHMtGen7g +https://www.youtube.com/feeds/videos.xml?channel_id=UCdBK94H6oZT2Q7l0-b0xmMg +https://www.youtube.com/feeds/videos.xml?channel_id=UC0e3QhIYukixgh5VVpKHH9Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCsP7Bpw36J666Fct5M8u-ZA +https://www.youtube.com/feeds/videos.xml?channel_id=UCHnyfMqiRRG1u-2MsSQLbXA +https://www.youtube.com/feeds/videos.xml?channel_id=UCu6mSoMNzHQiBIOCkHUa2Aw +https://www.youtube.com/feeds/videos.xml?channel_id=UC6107grRI4m0o2-emgoDnAA +https://www.youtube.com/feeds/videos.xml?channel_id=UC4USoIAL9qcsx5nCZV_QRnA +https://www.youtube.com/feeds/videos.xml?channel_id=UC9_p50tH3WmMslWRWKnM7dQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCPZUQqtVDmcjm4NY5FkzqLA +https://www.youtube.com/feeds/videos.xml?channel_id=UCafxR2HWJRmMfSdyZXvZMTw +https://www.youtube.com/feeds/videos.xml?channel_id=UCi7l9chXMljpUft67vw78qw +https://www.youtube.com/feeds/videos.xml?channel_id=UCgmI-uiLLAg--vDe7FFdekA +https://www.youtube.com/feeds/videos.xml?channel_id=UC7SeFWZYFmsm1tqWxfuOTPQ +https://www.youtube.com/feeds/videos.xml?channel_id=UC3KEoMzNz8eYnwBC34RaKCQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCYwVxWpjeKFWwu8TML-Te9A +https://www.youtube.com/feeds/videos.xml?channel_id=UCimiUgDLbi6P17BdaCZpVbg +https://www.youtube.com/feeds/videos.xml?channel_id=UCyQ-DUV6lZgoL8wiPusYiUg +https://www.youtube.com/feeds/videos.xml?channel_id=UCEtB-nx5ngoNJWEzYa-yXBg +https://www.youtube.com/feeds/videos.xml?channel_id=UCcMDMoNu66_1Hwi5-MeiQgw +https://www.youtube.com/feeds/videos.xml?channel_id=UCNtQ6jbQgkV4kII043lU06w +https://www.youtube.com/feeds/videos.xml?channel_id=UCyWDmyZRjrGHeKF-ofFsT5Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCPcFg7aBbaVzXoIKSNqwaww +https://www.youtube.com/feeds/videos.xml?channel_id=UCKOvOaJv4GK-oDqx-sj7VVg +https://www.youtube.com/feeds/videos.xml?channel_id=UCEIwxahdLz7bap-VDs9h35A +https://www.youtube.com/feeds/videos.xml?channel_id=UC2C_jShtL725hvbm1arSV9w +https://www.youtube.com/feeds/videos.xml?channel_id=UC4PIiYewI1YGyiZvgNlJNrA +https://www.youtube.com/feeds/videos.xml?channel_id=UCpFuaxD-0PKLolFR3gWhrMw +https://www.youtube.com/feeds/videos.xml?channel_id=UCUmLRMERmJrmUtgnbFfknAg +https://www.youtube.com/feeds/videos.xml?channel_id=UCm9K6rby98W8JigLoZOh6FQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCMu5gPmKp5av0QCAajKTMhw +https://www.youtube.com/feeds/videos.xml?channel_id=UCl2mFZoRqjw_ELax4Yisf6w +https://www.youtube.com/feeds/videos.xml?channel_id=UCSl5Uxu2LyaoAoMMGp6oTJA +https://www.youtube.com/feeds/videos.xml?channel_id=UCtqxG9IrHFU_ID1khGvx9sA +https://www.youtube.com/feeds/videos.xml?channel_id=UCmEu9Y8nodUV0jvsR9NYLJA +https://www.youtube.com/feeds/videos.xml?channel_id=UCOw4v1j3QnzH7X4krQAS7fg +https://www.youtube.com/feeds/videos.xml?channel_id=UCekQr9znsk2vWxBo3YiLq2w +https://www.youtube.com/feeds/videos.xml?channel_id=UCZ-oWkpMnHjTJpeOOlD80OA +https://www.youtube.com/feeds/videos.xml?channel_id=UCwkm_Wcyh0pc7UUmZZfL-6w +https://www.youtube.com/feeds/videos.xml?channel_id=UCSE6yilNScIz1SLTNQvrXMw +https://www.youtube.com/feeds/videos.xml?channel_id=UCGed7ONu3481RxIT7jQ6ngA +https://www.youtube.com/feeds/videos.xml?channel_id=UCkitABalXafr-NqceQdDXtg +https://www.youtube.com/feeds/videos.xml?channel_id=UCtfg1tENiu3SgGMZVduFmTg +https://www.youtube.com/feeds/videos.xml?channel_id=UC91V6D3nkhP89wUb9f_h17g +https://www.youtube.com/feeds/videos.xml?channel_id=UCJdKr0Bgd_5saZYqLCa9mng +https://www.youtube.com/feeds/videos.xml?channel_id=UC9-y-6csu5WGm29I7JiwpnA +https://www.youtube.com/feeds/videos.xml?channel_id=UCBNG0osIBAprVcZZ3ic84vw +https://www.youtube.com/feeds/videos.xml?channel_id=UC9PIn6-XuRKZ5HmYeu46AIw +https://www.youtube.com/feeds/videos.xml?channel_id=UCm9MKnZdmwCAPXvmysjT33g +https://www.youtube.com/feeds/videos.xml?channel_id=UC-j3S3cIXZSzzCkJhJW9_eg +https://www.youtube.com/feeds/videos.xml?channel_id=UCy0tKL1T7wFoYcxCe0xjN6Q +https://www.youtube.com/feeds/videos.xml?channel_id=UC4_bwov47DseacR1-ttTdOg +https://www.youtube.com/feeds/videos.xml?channel_id=UCOxaitvZzdNuGK7jlMsWzlw +https://www.youtube.com/feeds/videos.xml?channel_id=UC0Ize0RLIbGdH5x4wI45G-A +https://www.youtube.com/feeds/videos.xml?channel_id=UCtzpB_RJqbpgJcWXhEo-1iQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCQD3awTLw9i8Xzh85FKsuJA +https://www.youtube.com/feeds/videos.xml?channel_id=UCiRiQGCHGjDLT9FQXFW0I3A +https://www.youtube.com/feeds/videos.xml?channel_id=UCFhXFikryT4aFcLkLw2LBLA +https://www.youtube.com/feeds/videos.xml?channel_id=UCEgoThiTZG6wbTVA6B1Ksaw +https://www.youtube.com/feeds/videos.xml?channel_id=UCoziFm3M4sHDq1kkx0UwtRw +https://www.youtube.com/feeds/videos.xml?channel_id=UCXgxNzAgZ1GExhTW4X1mUrg +https://www.youtube.com/feeds/videos.xml?channel_id=UCecrxw9xtxME6o5_mz4TtOA +https://www.youtube.com/feeds/videos.xml?channel_id=UCmQXOAse-VnzuXHebX5I77g +https://www.youtube.com/feeds/videos.xml?channel_id=UCm6r_b2K5jn1JGkwDcwJXrQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCyyBmfMEmwzv291E-QHdEyg +https://www.youtube.com/feeds/videos.xml?channel_id=UCV3iHQsE2h3CH-LehgPRkMg +https://www.youtube.com/feeds/videos.xml?channel_id=UCVGVbOl6F5rGF4wSYS6Y5yQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCsDmESjqNPukDmVnuneLrqw +https://www.youtube.com/feeds/videos.xml?channel_id=UC9bTzW3hPRF1cV0tBlskT6w +https://www.youtube.com/feeds/videos.xml?channel_id=UCny_vGt2N7_QJ5qBOAHxlcw +https://www.youtube.com/feeds/videos.xml?channel_id=UC0fDG3byEcMtbOqPMymDNbw +https://www.youtube.com/feeds/videos.xml?channel_id=UCm6r_b2K5jn1JGkwDcwJXrQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCNnKprAG-MWLsk-GsbsC2BA +https://www.youtube.com/feeds/videos.xml?channel_id=UCV9_KinVpV-snHe3C3n1hvA +https://www.youtube.com/feeds/videos.xml?channel_id=UCoHhuummRZaIVX7bD4t2czg +https://www.youtube.com/feeds/videos.xml?channel_id=UCJRSYkPQeuf6_6oLsBTf0Tw +https://www.youtube.com/feeds/videos.xml?channel_id=UCDAjO0-hd_RS8ZYJ4W-Iq5Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCGSGPehp0RWfca-kENgBJ9Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCaGev0JRG7Dp5c_R4ROADLw +https://www.youtube.com/feeds/videos.xml?channel_id=UCny_vGt2N7_QJ5qBOAHxlcw +https://www.youtube.com/feeds/videos.xml?channel_id=UC9bTzW3hPRF1cV0tBlskT6w +https://www.youtube.com/feeds/videos.xml?channel_id=UCt7fwAhXDy3oNFTAzF2o8Pw +https://www.youtube.com/feeds/videos.xml?channel_id=UC2V1ul4ul85kac0Y81wXTqQ +https://www.youtube.com/feeds/videos.xml?channel_id=UC_sp6oZDuNfTWzZDfwZyJOg +https://www.youtube.com/feeds/videos.xml?channel_id=UCOxaitvZzdNuGK7jlMsWzlw +https://www.youtube.com/feeds/videos.xml?channel_id=UC5rT7F0PGNuD54rJ9kzgWzw +https://www.youtube.com/feeds/videos.xml?channel_id=UC9RM-iSvTu1uPJb8X5yp3EQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCIMn9OGAE5eeQJhCeO-JvJQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCI1ggmx7c1PUlTkfsv0fU-w +https://www.youtube.com/feeds/videos.xml?channel_id=UCJbPGzawDH1njbqV-D5HqKw +https://www.youtube.com/feeds/videos.xml?channel_id=UCfnJvKB2Nr55ZvHj20O5JZA +https://www.youtube.com/feeds/videos.xml?channel_id=UCtuFxawHK5fDrA8yFy8Vo1Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCJ0-OtVpF0wOKEqT2Z1HEtA +https://www.youtube.com/feeds/videos.xml?channel_id=UCJHvN0zYgO2ZLjePERRLjKQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCveB47lgzZJ1WOf4XYVJNBw +https://www.youtube.com/feeds/videos.xml?channel_id=UCm6QkJHb53JbFeqG8X7S-sg +https://www.youtube.com/feeds/videos.xml?channel_id=UCxZSqd46lCmULpciul-LT6w +https://www.youtube.com/feeds/videos.xml?channel_id=UCLUrVTVTA3PnUFpYvpfMcpg +https://www.youtube.com/feeds/videos.xml?channel_id=UCRbOPaGDB_xOQkVM8Rnn62Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCiDJtJKMICpb9B1qf7qjEOA +https://www.youtube.com/feeds/videos.xml?channel_id=UCp68_FLety0O-n9QU6phsgw +https://www.youtube.com/feeds/videos.xml?channel_id=UCDv0JHqrlqgl0S2TNpNrmdw +https://www.youtube.com/feeds/videos.xml?channel_id=UC4zJAMaYN592qQhMR2OfX_Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCsDmESjqNPukDmVnuneLrqw +https://www.youtube.com/feeds/videos.xml?channel_id=UC6uASnNXIjWzt6zxrWZdLNg +https://www.youtube.com/feeds/videos.xml?channel_id=UCIUATMnLtNo51kKuv95R1UQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCNIuvl7V8zACPpTmmNIqP2A +https://www.youtube.com/feeds/videos.xml?channel_id=UC1_uAIS3r8Vu6JjXWvastJg +https://www.youtube.com/feeds/videos.xml?channel_id=UCYandFV7VSfXwZU15XUHHKQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCivA7_KLKWo43tFcCkFvydw +https://www.youtube.com/feeds/videos.xml?channel_id=UCUgRtDziJirGWqdIveI30SA +https://www.youtube.com/feeds/videos.xml?channel_id=UCR4s1DE9J4DHzZYXMltSMAg +https://www.youtube.com/feeds/videos.xml?channel_id=UCDWIvJwLJsE4LG1Atne2blQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCNjHgaLpdy1IMNK57pYiKiQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCEOXxzW2vU0P-0THehuIIeg +https://www.youtube.com/feeds/videos.xml?channel_id=UCqSHAXN5sqtyE93A-w-8Ddw +https://www.youtube.com/feeds/videos.xml?channel_id=UCaXEr4t_QBZBk3qlIlc2HRg +https://www.youtube.com/feeds/videos.xml?channel_id=UC_w9QzR9_fFJcCSYwtDeKLA +https://www.youtube.com/feeds/videos.xml?channel_id=UCb3orki_DopRkkP3xwMgW2Q +https://www.youtube.com/feeds/videos.xml?channel_id=UC5nc_ZtjKW1htCVZVRxlQAQ +https://www.youtube.com/feeds/videos.xml?channel_id=UC67gfx2Fg7K2NSHqoENVgwA +https://www.youtube.com/feeds/videos.xml?channel_id=UCSKFuxhXiJjF49nwQGZuROQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCA-p1wZ5Tuz9J1_AI_A2NqA +https://www.youtube.com/feeds/videos.xml?channel_id=UCtHaxi4GTYDpJgMSGy7AeSw +https://www.youtube.com/feeds/videos.xml?channel_id=UCoziFm3M4sHDq1kkx0UwtRw +https://www.youtube.com/feeds/videos.xml?channel_id=UCtzpB_RJqbpgJcWXhEo-1iQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCsc44rMgJqxU_7bhM9GGFhg +https://www.youtube.com/feeds/videos.xml?channel_id=UC0Ize0RLIbGdH5x4wI45G-A +https://www.youtube.com/feeds/videos.xml?channel_id=UC4_bwov47DseacR1-ttTdOg +https://www.youtube.com/feeds/videos.xml?channel_id=UCOsATJw-IZgqGT8MFrHjKGg +https://www.youtube.com/feeds/videos.xml?channel_id=UCT31um1Ic8KweVWEMBC1K7A +https://www.youtube.com/feeds/videos.xml?channel_id=UCuolJRKmlevmTqz-tUV0LCQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCaoxFlhy4oGz3EvkTGhWvkA +https://www.youtube.com/feeds/videos.xml?channel_id=UC9RM-iSvTu1uPJb8X5yp3EQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCsXVk37bltHxD1rDPwtNM8Q +https://www.youtube.com/feeds/videos.xml?channel_id=UC0aanx5rpr7D1M7KCFYzrLQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCR4s1DE9J4DHzZYXMltSMAg +https://www.youtube.com/feeds/videos.xml?channel_id=UCgITW_70LNZFkNna7VsXbuQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCmQXOAse-VnzuXHebX5I77g +https://www.youtube.com/feeds/videos.xml?channel_id=UCGwu0nbY2wSkW8N-cghnLpA +https://www.youtube.com/feeds/videos.xml?channel_id=UCV9_KinVpV-snHe3C3n1hvA +https://www.youtube.com/feeds/videos.xml?channel_id=UCUgRtDziJirGWqdIveI30SA +https://www.youtube.com/feeds/videos.xml?channel_id=UCtGoikgbxP4F3rgI9PldI9g +https://www.youtube.com/feeds/videos.xml?channel_id=UCAPrhJwVweWZA8GEPoClSdw +https://www.youtube.com/feeds/videos.xml?channel_id=UC2V1ul4ul85kac0Y81wXTqQ +https://www.youtube.com/feeds/videos.xml?channel_id=UC-i3WnEFcTntkZc-Pv9gArw +https://www.youtube.com/feeds/videos.xml?channel_id=UCOxaitvZzdNuGK7jlMsWzlw +https://www.youtube.com/feeds/videos.xml?channel_id=UCF1fG3gT44nGTPU2sVLoFWg +https://www.youtube.com/feeds/videos.xml?channel_id=UC5rT7F0PGNuD54rJ9kzgWzw +https://www.youtube.com/feeds/videos.xml?channel_id=UC7sD7-uGMPmRDrT8mUHlWBA +https://www.youtube.com/feeds/videos.xml?channel_id=UCUueEx_ceEQrjlR9ctPNKyg +https://www.youtube.com/feeds/videos.xml?channel_id=UCJRSYkPQeuf6_6oLsBTf0Tw +https://www.youtube.com/feeds/videos.xml?channel_id=UCYGDiVemmhY_Q1M-hKp4fvw +https://www.youtube.com/feeds/videos.xml?channel_id=UCYeF244yNGuFefuFKqxIAXw +https://www.youtube.com/feeds/videos.xml?channel_id=UCQD3awTLw9i8Xzh85FKsuJA +https://www.youtube.com/feeds/videos.xml?channel_id=UCMOgdURr7d8pOVlc-alkfRg +https://www.youtube.com/feeds/videos.xml?channel_id=UCErSSa3CaP_GJxmFpdjG9Jw +https://www.youtube.com/feeds/videos.xml?channel_id=UCZzU0PyZlnfcmJglvmnH12w +https://www.youtube.com/feeds/videos.xml?channel_id=UCLv6LhnosAyBGwEZeytrKyg +https://www.youtube.com/feeds/videos.xml?channel_id=UCLJcVCVvcD802r80B9oaM3A +https://www.youtube.com/feeds/videos.xml?channel_id=UCFV5pMEsfMP8duOumA8klmA +https://www.youtube.com/feeds/videos.xml?channel_id=UC7ucvC0OrD2BQUmEec5NJeg +https://www.youtube.com/feeds/videos.xml?channel_id=UCr-cm90DwFJC0W3f9jBs5jA +https://www.youtube.com/feeds/videos.xml?channel_id=UChrYe70o7NmDioL02PRVWVg +https://www.youtube.com/feeds/videos.xml?channel_id=UCm6QkJHb53JbFeqG8X7S-sg +https://www.youtube.com/feeds/videos.xml?channel_id=UCa6TeYZ2DlueFRne5DyAnyg +https://www.youtube.com/feeds/videos.xml?channel_id=UCgNg3vwj3xt7QOrcIDaHdFg +https://www.youtube.com/feeds/videos.xml?channel_id=UCtwKon9qMt5YLVgQt1tvJKg +https://www.youtube.com/feeds/videos.xml?channel_id=UC8XjmAEDVZSCQjI150cb4QA +https://www.youtube.com/feeds/videos.xml?channel_id=UCNjHgaLpdy1IMNK57pYiKiQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCTg4jls4URruaHauposrhMg +https://www.youtube.com/feeds/videos.xml?channel_id=UCSdma21fnJzgmPodhC9SJ3g +https://www.youtube.com/feeds/videos.xml?channel_id=UCV5vCi3jPJdURZwAOO_FNfQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCmtQGojT9O2LVzVIVKDGEjw +https://www.youtube.com/feeds/videos.xml?channel_id=UCLs1ozoolo_-mKZqq6GuEIQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCS1qGIA0306vV8aisea4BLQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCuo9VyowIT-ljA5G2ZuC6Yw +https://www.youtube.com/feeds/videos.xml?channel_id=UC0-QuVLhCc4hmJaiLSCMwcw +https://www.youtube.com/feeds/videos.xml?channel_id=UCO7fujFV_MuxTM0TuZrnE6Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCo_IB5145EVNcf8hw1Kku7w +https://www.youtube.com/feeds/videos.xml?channel_id=UCeovElJP0n0i8ADaPsRSd8g +https://www.youtube.com/feeds/videos.xml?channel_id=UC7ucvC0OrD2BQUmEec5NJeg +https://www.youtube.com/feeds/videos.xml?channel_id=UCrmTTabqjlMBq-vL8j7EQkA +https://www.youtube.com/feeds/videos.xml?channel_id=UCOojfmX4Wq3Ww-XP_IkvviQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCivA7_KLKWo43tFcCkFvydw +https://www.youtube.com/feeds/videos.xml?channel_id=UCKd49wwdEdIoM-7Fumhwmog +https://www.youtube.com/feeds/videos.xml?channel_id=UCpLB7kBu9O5dbBKhaIOmqcQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCtuFxawHK5fDrA8yFy8Vo1Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCIMn9OGAE5eeQJhCeO-JvJQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCbK8u9UIIuLPku9abSlIbgw +https://www.youtube.com/feeds/videos.xml?channel_id=UC3v6sjWuPxtW36jQ-if4OuA +https://www.youtube.com/feeds/videos.xml?channel_id=UCDv0JHqrlqgl0S2TNpNrmdw +https://www.youtube.com/feeds/videos.xml?channel_id=UCXKH52cGX4rtK_X-q1GH02Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCRbOPaGDB_xOQkVM8Rnn62Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCXgxNzAgZ1GExhTW4X1mUrg +https://www.youtube.com/feeds/videos.xml?channel_id=UCsXVk37bltHxD1rDPwtNM8Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCJvhxlROfb5lqj-G5UF3l_w +https://www.youtube.com/feeds/videos.xml?channel_id=UCjFqcJQXGZ6T6sxyFB-5i6A +https://www.youtube.com/feeds/videos.xml?channel_id=UCKzJFdi57J53Vr_BkTfN3uQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCyp1gCHZJU_fGWFf2rtMkCg +https://www.youtube.com/feeds/videos.xml?channel_id=UC5rT7F0PGNuD54rJ9kzgWzw +https://www.youtube.com/feeds/videos.xml?channel_id=UC1_uAIS3r8Vu6JjXWvastJg +https://www.youtube.com/feeds/videos.xml?channel_id=UCr-cm90DwFJC0W3f9jBs5jA +https://www.youtube.com/feeds/videos.xml?channel_id=UC5nc_ZtjKW1htCVZVRxlQAQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCIUATMnLtNo51kKuv95R1UQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCF1fG3gT44nGTPU2sVLoFWg +https://www.youtube.com/feeds/videos.xml?channel_id=UCfnJvKB2Nr55ZvHj20O5JZA +https://www.youtube.com/feeds/videos.xml?channel_id=UCTjPBE9BNsmv44wgxWEy2zw +https://www.youtube.com/feeds/videos.xml?channel_id=UCBvo9EONLsFRjLRd9WDtCiw +https://www.youtube.com/feeds/videos.xml?channel_id=UCGtqkLvM_jCEWKwT9ksGDVg +https://www.youtube.com/feeds/videos.xml?channel_id=UCS0N5baNlQWJCUrhCEo8WlA +https://www.youtube.com/feeds/videos.xml?channel_id=UCG36u-k09zdIPQh5EEdVgTA +https://www.youtube.com/feeds/videos.xml?channel_id=UCT31um1Ic8KweVWEMBC1K7A +https://www.youtube.com/feeds/videos.xml?channel_id=UCsvn_Po0SmunchJYOWpOxMg +https://www.youtube.com/feeds/videos.xml?channel_id=UC0aanx5rpr7D1M7KCFYzrLQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCm6QkJHb53JbFeqG8X7S-sg +https://www.youtube.com/feeds/videos.xml?channel_id=UC-XXmB9IHCUdteHjgmmsaeg +https://www.youtube.com/feeds/videos.xml?channel_id=UCA-p1wZ5Tuz9J1_AI_A2NqA +https://www.youtube.com/feeds/videos.xml?channel_id=UCp68_FLety0O-n9QU6phsgw +https://www.youtube.com/feeds/videos.xml?channel_id=UCFV5pMEsfMP8duOumA8klmA +https://www.youtube.com/feeds/videos.xml?channel_id=UChrYe70o7NmDioL02PRVWVg +https://www.youtube.com/feeds/videos.xml?channel_id=UCtccbWvR1RQb976Jo6Mt7Yw +https://www.youtube.com/feeds/videos.xml?channel_id=UCsc44rMgJqxU_7bhM9GGFhg +https://www.youtube.com/feeds/videos.xml?channel_id=UC6FwRO2_a4nrqWJNN32M-Dg +https://www.youtube.com/feeds/videos.xml?channel_id=UCh-PyMficPzVAihCJkFJVAA +https://www.youtube.com/feeds/videos.xml?channel_id=UCrrSA2uXHnFom2HQgNmUivw +https://www.youtube.com/feeds/videos.xml?channel_id=UCsvn_Po0SmunchJYOWpOxMg +https://www.youtube.com/feeds/videos.xml?channel_id=UCeP4Yv3s4RvS0-6d9OInRMw +https://www.youtube.com/feeds/videos.xml?channel_id=UCr6LvLhGBnB7z0Tj4-nY34A +https://www.youtube.com/feeds/videos.xml?channel_id=UCY1kMZp36IQSyNx_9h4mpCg +https://www.youtube.com/feeds/videos.xml?channel_id=UClvX7kIblTWcwfRGMZSgRIw +https://www.youtube.com/feeds/videos.xml?channel_id=UCLuHOqDilyLQT4NPXQuVN4Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCQeYs5oIyB0wIxyjOXg1XFg +https://www.youtube.com/feeds/videos.xml?channel_id=UCYGDiVemmhY_Q1M-hKp4fvw +https://www.youtube.com/feeds/videos.xml?channel_id=UCo0Ek8Te0osbhI0WnhF3QzA +https://www.youtube.com/feeds/videos.xml?channel_id=UC4zJAMaYN592qQhMR2OfX_Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCoxcjq-8xIDTYp3uz647V5A +https://www.youtube.com/feeds/videos.xml?channel_id=UCt7fwAhXDy3oNFTAzF2o8Pw +https://www.youtube.com/feeds/videos.xml?channel_id=UC9RM-iSvTu1uPJb8X5yp3EQ +https://www.youtube.com/feeds/videos.xml?channel_id=UC3tNpTOHsTnkmbwztCs30sA +https://www.youtube.com/feeds/videos.xml?channel_id=UCg45A-ph7Eu8jQgfrwDkHLg +https://www.youtube.com/feeds/videos.xml?channel_id=UC67gfx2Fg7K2NSHqoENVgwA +https://www.youtube.com/feeds/videos.xml?channel_id=UCR0tBVaZPaSqmdqkw7oYmcw +https://www.youtube.com/feeds/videos.xml?channel_id=UCYzwyzV2WNMgrL6RKSF8nrg +https://www.youtube.com/feeds/videos.xml?channel_id=UCm6GSA5OROHcIBNkXkH53zQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCRYv1Y9SQaI3dp57syZUdIw +https://www.youtube.com/feeds/videos.xml?channel_id=UC9pO2YNforRbdwKOh09djKA +https://www.youtube.com/feeds/videos.xml?channel_id=UC9NeBnf-9pzDC3C86MeOJvA +https://www.youtube.com/feeds/videos.xml?channel_id=UC_ufxdQbKBrrMOiZ4LzrUyA +https://www.youtube.com/feeds/videos.xml?channel_id=UC1_uAIS3r8Vu6JjXWvastJg +https://www.youtube.com/feeds/videos.xml?channel_id=UCIUATMnLtNo51kKuv95R1UQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCLUrVTVTA3PnUFpYvpfMcpg +https://www.youtube.com/feeds/videos.xml?channel_id=UCNIuvl7V8zACPpTmmNIqP2A +https://www.youtube.com/feeds/videos.xml?channel_id=UCn1XB-jvmd9fXMzhiA6IR0w +https://www.youtube.com/feeds/videos.xml?channel_id=UCNBOw3pfI3E26f1vsozUA-A +https://www.youtube.com/feeds/videos.xml?channel_id=UCI1ggmx7c1PUlTkfsv0fU-w +https://www.youtube.com/feeds/videos.xml?channel_id=UC_E4px0RST-qFwXLJWBav8Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCOojfmX4Wq3Ww-XP_IkvviQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCFKDEp9si4RmHFWJW1vYsMA +https://www.youtube.com/feeds/videos.xml?channel_id=UCJbPGzawDH1njbqV-D5HqKw +https://www.youtube.com/feeds/videos.xml?channel_id=UCDWIvJwLJsE4LG1Atne2blQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCRbOPaGDB_xOQkVM8Rnn62Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCny_vGt2N7_QJ5qBOAHxlcw +https://www.youtube.com/feeds/videos.xml?channel_id=UCFhXFikryT4aFcLkLw2LBLA +https://www.youtube.com/feeds/videos.xml?channel_id=UCNnKprAG-MWLsk-GsbsC2BA +https://www.youtube.com/feeds/videos.xml?channel_id=UC9bTzW3hPRF1cV0tBlskT6w +https://www.youtube.com/feeds/videos.xml?channel_id=UCYandFV7VSfXwZU15XUHHKQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCoHhuummRZaIVX7bD4t2czg +https://www.youtube.com/feeds/videos.xml?channel_id=UCtM5z2gkrGRuWd0JQMx76qA +https://www.youtube.com/feeds/videos.xml?channel_id=UCahfy_XV7nFYceg6GIthwMQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCivA7_KLKWo43tFcCkFvydw +https://www.youtube.com/feeds/videos.xml?channel_id=UCfnJvKB2Nr55ZvHj20O5JZA +https://www.youtube.com/feeds/videos.xml?channel_id=UCecrxw9xtxME6o5_mz4TtOA +https://www.youtube.com/feeds/videos.xml?channel_id=UCm6r_b2K5jn1JGkwDcwJXrQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCIMn9OGAE5eeQJhCeO-JvJQ +https://www.youtube.com/feeds/videos.xml?channel_id=UC0fDG3byEcMtbOqPMymDNbw +https://www.youtube.com/feeds/videos.xml?channel_id=UCV1G6JkQtB2nobFm3MGNsBQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCXgxNzAgZ1GExhTW4X1mUrg +https://www.youtube.com/feeds/videos.xml?channel_id=UCbK8u9UIIuLPku9abSlIbgw +https://www.youtube.com/feeds/videos.xml?channel_id=UCmtQGojT9O2LVzVIVKDGEjw +https://www.youtube.com/feeds/videos.xml?channel_id=UC1_uAIS3r8Vu6JjXWvastJg +https://www.youtube.com/feeds/videos.xml?channel_id=UCIUATMnLtNo51kKuv95R1UQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCJspWFXSL1guQPdFqh4lFjQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCg45A-ph7Eu8jQgfrwDkHLg +https://www.youtube.com/feeds/videos.xml?channel_id=UCgkzrMGEbZemPI4hkz0Z9Bw +https://www.youtube.com/feeds/videos.xml?channel_id=UCMLgHbpJ8qYqj3CkdbvC0Ww +https://www.youtube.com/feeds/videos.xml?channel_id=UCO8DQrSp5yEP937qNqTooOw +https://www.youtube.com/feeds/videos.xml?channel_id=UCdz4CF1VWEMCm8r4DFLSWig +https://www.youtube.com/feeds/videos.xml?channel_id=UCLUrVTVTA3PnUFpYvpfMcpg +https://www.youtube.com/feeds/videos.xml?channel_id=UCiDJtJKMICpb9B1qf7qjEOA +https://www.youtube.com/feeds/videos.xml?channel_id=UC0-QuVLhCc4hmJaiLSCMwcw +https://www.youtube.com/feeds/videos.xml?channel_id=UC2V1ul4ul85kac0Y81wXTqQ +https://www.youtube.com/feeds/videos.xml?channel_id=UC5rT7F0PGNuD54rJ9kzgWzw +https://www.youtube.com/feeds/videos.xml?channel_id=UC7kQhIHX4SSSIT9gSVq6QzQ +https://www.youtube.com/feeds/videos.xml?channel_id=UC6uASnNXIjWzt6zxrWZdLNg +https://www.youtube.com/feeds/videos.xml?channel_id=UC_sp6oZDuNfTWzZDfwZyJOg +https://www.youtube.com/feeds/videos.xml?channel_id=UCIfAlCwj-ZPZq5fqjpYDX3w +https://www.youtube.com/feeds/videos.xml?channel_id=UCBvo9EONLsFRjLRd9WDtCiw +https://www.youtube.com/feeds/videos.xml?channel_id=UCG36u-k09zdIPQh5EEdVgTA +https://www.youtube.com/feeds/videos.xml?channel_id=UCz0l5LJhNQkktxKWcGUtWxg +https://www.youtube.com/feeds/videos.xml?channel_id=UCSKFuxhXiJjF49nwQGZuROQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCaGev0JRG7Dp5c_R4ROADLw +https://www.youtube.com/feeds/videos.xml?channel_id=UCAgoEUwn-LQy0fTyUxMngag +https://www.youtube.com/feeds/videos.xml?channel_id=UCBk4FLs_it6Sck7L0XptYjQ +https://www.youtube.com/feeds/videos.xml?channel_id=UC0aanx5rpr7D1M7KCFYzrLQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCuo9VyowIT-ljA5G2ZuC6Yw +https://www.youtube.com/feeds/videos.xml?channel_id=UCYZtp0YIxYOipX15v_h_jnA +https://www.youtube.com/feeds/videos.xml?channel_id=UCxseO_JzIiiJENauW2RmcJQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCS1qGIA0306vV8aisea4BLQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCmQXOAse-VnzuXHebX5I77g +https://www.youtube.com/feeds/videos.xml?channel_id=UC2DjFE7Xf11URZqWBigcVOQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCDAjO0-hd_RS8ZYJ4W-Iq5Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCMLgHbpJ8qYqj3CkdbvC0Ww +https://www.youtube.com/feeds/videos.xml?channel_id=UCG1h-Wqjtwz7uUANw6gazRw +https://www.youtube.com/feeds/videos.xml?channel_id=UCRbOPaGDB_xOQkVM8Rnn62Q +https://www.youtube.com/feeds/videos.xml?channel_id=UC8AvcEE8l8mHs-rZTXoynVQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCLUrVTVTA3PnUFpYvpfMcpg +https://www.youtube.com/feeds/videos.xml?channel_id=UCD84uEcRgneWDYpmBd8BbsQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCI1ggmx7c1PUlTkfsv0fU-w +https://www.youtube.com/feeds/videos.xml?channel_id=UCJHvN0zYgO2ZLjePERRLjKQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCY1kMZp36IQSyNx_9h4mpCg +https://www.youtube.com/feeds/videos.xml?channel_id=UC_E4px0RST-qFwXLJWBav8Q +https://www.youtube.com/feeds/videos.xml?channel_id=UCQeYs5oIyB0wIxyjOXg1XFg +https://www.youtube.com/feeds/videos.xml?channel_id=UCO79NsDE5FpMowUH1YcBFcA +https://www.youtube.com/feeds/videos.xml?channel_id=UCYandFV7VSfXwZU15XUHHKQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCoUqzYqTYp9SE9RTkUYusZA +https://www.youtube.com/feeds/videos.xml?channel_id=UCn1XB-jvmd9fXMzhiA6IR0w +https://www.youtube.com/feeds/videos.xml?channel_id=UCoHhuummRZaIVX7bD4t2czg +https://www.youtube.com/feeds/videos.xml?channel_id=UC7sD7-uGMPmRDrT8mUHlWBA +https://www.youtube.com/feeds/videos.xml?channel_id=UCPsDdWokYPtOQ7OXXcdUTRw +https://www.youtube.com/feeds/videos.xml?channel_id=UCKg2LxItoBGzOGbTpYuD6mw +https://www.youtube.com/feeds/videos.xml?channel_id=UCivA7_KLKWo43tFcCkFvydw +https://www.youtube.com/feeds/videos.xml?channel_id=UCYzwyzV2WNMgrL6RKSF8nrg +https://www.youtube.com/feeds/videos.xml?channel_id=UC67gfx2Fg7K2NSHqoENVgwA +https://www.youtube.com/feeds/videos.xml?channel_id=UCFKDEp9si4RmHFWJW1vYsMA +https://www.youtube.com/feeds/videos.xml?channel_id=UCIUATMnLtNo51kKuv95R1UQ +https://www.youtube.com/feeds/videos.xml?channel_id=UCMuPLU5S9vVC5tZAiPVt4HA +https://www.youtube.com/feeds/videos.xml?channel_id=UCrmTTabqjlMBq-vL8j7EQkA +https://www.youtube.com/feeds/videos.xml?channel_id=UCtccbWvR1RQb976Jo6Mt7Yw diff --git a/.screenlayout/normal.sh b/.screenlayout/normal.sh new file mode 100755 index 0000000..b92aab5 --- /dev/null +++ b/.screenlayout/normal.sh @@ -0,0 +1,2 @@ +#!/bin/sh +xrandr --output DVI-D-0 --mode 1680x1050 --pos 4240x195 --rotate normal --output HDMI-0 --mode 1680x1050 --pos 0x195 --rotate normal --output DP-0 --off --output DP-1 --off --output DP-2 --off --output DP-3 --mode 1280x1024 --pos 4240x1245 --rotate normal --output DP-4 --primary --mode 2560x1440 --pos 1680x0 --rotate normal --output DP-5 --off --output DVI-I-1-0 --off --output DVI-I-1-1 --off --output HDMI-1-0 --off diff --git a/.scripts/prompt b/.scripts/prompt new file mode 100755 index 0000000..8c33fac --- /dev/null +++ b/.scripts/prompt @@ -0,0 +1,15 @@ +#!/bin/bash + +# A dmenu binary prompt script. +# Gives a dmenu prompt labelled with $1 to perform command $2. +# For example: +# `./prompt "Do you want to shutdown?" "shutdown now"` + +# Taken shamelessly from Luke Smith + +choice=$(echo -e "No\nYes" | dmenu -i -p "$1") + +if [ $choice = "Yes" ] +then + $2 +fi diff --git a/.xmonad/xmonad.hs b/.xmonad/xmonad.hs new file mode 100644 index 0000000..7b93c83 --- /dev/null +++ b/.xmonad/xmonad.hs @@ -0,0 +1,478 @@ +-- +-- Xmonad config for Solomon Laing +-- + +-- Base +import XMonad +import System.IO (hPutStrLn) +import System.Exit (ExitCode(ExitSuccess), exitWith ) +import qualified XMonad.StackSet as W + + -- Actions +import XMonad.Actions.CycleWS (moveTo, shiftTo, WSType(..), nextScreen, prevScreen) +import XMonad.Actions.GridSelect +import XMonad.Actions.MouseResize +import XMonad.Actions.Promote +import XMonad.Actions.RotSlaves (rotSlavesDown, rotAllDown) +import qualified XMonad.Actions.TreeSelect as TS +import XMonad.Actions.WindowGo (runOrRaise) +import XMonad.Actions.WithAll (sinkAll, killAll) +import qualified XMonad.Actions.Search as S + + -- Data +import Data.Monoid +import Data.Tree +import qualified Data.Map as M + + -- Hooks +import XMonad.Hooks.DynamicLog (dynamicLogWithPP, wrap, xmobarPP, xmobarColor, statusBar, shorten, PP(..)) +import XMonad.Hooks.FadeInactive +import XMonad.Hooks.ManageDocks (docks, avoidStruts, docksEventHook, manageDocks, ToggleStruts(..)) +import XMonad.Hooks.ManageHelpers (isFullscreen, doFullFloat) +import XMonad.Hooks.ServerMode +import XMonad.Hooks.WorkspaceHistory + + -- Layouts +import XMonad.Layout.GridVariants (Grid(Grid)) +import XMonad.Layout.SimplestFloat +import XMonad.Layout.Spiral +import XMonad.Layout.ResizableTile +import XMonad.Layout.Tabbed +import XMonad.Layout.ThreeColumns + + -- Layouts modifiers +import XMonad.Layout.Fullscreen +import XMonad.Layout.LayoutModifier +import XMonad.Layout.LimitWindows (limitWindows) +import XMonad.Layout.Magnifier +import XMonad.Layout.MultiToggle (mkToggle, single, EOT(EOT), (??)) +import XMonad.Layout.MultiToggle.Instances (StdTransformers(NBFULL, MIRROR, NOBORDERS)) +import XMonad.Layout.NoBorders +import XMonad.Layout.Renamed (renamed, Rename(Replace)) +import XMonad.Layout.ShowWName +import XMonad.Layout.Spacing +import XMonad.Layout.WindowArranger (windowArrange, WindowArrangerMsg(..)) +import qualified XMonad.Layout.ToggleLayouts as T (toggleLayouts, ToggleLayout(Toggle)) +import qualified XMonad.Layout.MultiToggle as MT (Toggle(..)) + + -- Utilities +import XMonad.Util.Run (runProcessWithInput, safeSpawn, spawnPipe) +import XMonad.Util.SpawnOnce + +-- The preferred terminal program, which is used in a binding below and by +-- certain contrib modules. +myTerminal :: String +myTerminal = "alacritty" + +myFileManager :: String +myFileManager = "dolphin" + +-- The font to be used +myFont :: String +myFont = "xft:Fira Code:bold:size=9:antialias=true:hinting=true" + +-- Whether focus follows the mouse pointer. +myFocusFollowsMouse :: Bool +myFocusFollowsMouse = True + +-- Whether clicking on a window to focus also passes the click to the window +myClickJustFocuses :: Bool +myClickJustFocuses = False + +-- Width of the window border in pixels. +myBorderWidth :: Dimension +myBorderWidth = 1 + +-- Border colors for unfocused and focused windows, respectively. +myNormalBorderColor :: String +myNormalBorderColor = "#dddddd" + +myFocusedBorderColor :: String +myFocusedBorderColor = "#551155" + +-- modMask lets you specify which modkey you want to use. The default +-- is mod1Mask ("left alt"). You may also consider using mod3Mask +-- ("right alt"), which does not conflict with emacs keybindings. The +-- "windows key" is usually mod4Mask. +myModMask :: KeyMask +myModMask = mod4Mask + +-- The default number of workspaces (virtual screens) and their names. +-- By default we use numeric strings, but any string may be used as a +-- workspace name. The number of workspaces is determined by the length +-- of this list. +-- +-- A tagging example: +-- +-- > workspaces = ["web", "irc", "code" ] ++ map show [4..9] +xmobarEscape :: String -> String +xmobarEscape = concatMap doubleLts + where + doubleLts '<' = "<<" + doubleLts x = [x] + +myWorkspaces :: [String] + +-- myWorkspaces = ["dev", "`www`", "sys", "doc", "vbox", "chat", "mus", "vid", "gfx"] + +myWorkspaces = clickable . (map xmobarEscape) + -- $ ["1", "2", "3", "4", "5", "6", "7", "8", "9"] + $ ["web", "game", "dev", "doc", "mus", "vid", "sys", "chat", "virt"] + where + clickable l = [ ""++ws++"" | + (i,ws) <- zip [1..9] l, + let n = i ] + +windowCount :: X (Maybe String) +windowCount = gets $ Just . show . length . W.integrate' . W.stack . W.workspace . W.current . windowset + +------------------------------------------------------------------------ +-- Key bindings. Add, modify or remove key bindings here. +myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $ + + -- launch a terminal + [ ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf) + + -- launch rofi + , ((modm, xK_a ), spawn "rofi -show run") + + -- launch dmenu + , ((modm, xK_o ), spawn "dmenu_run") + + -- prompt computer shutdown + , ((modm .|. shiftMask, xK_s ), spawn "/home/solomon/.scripts/prompt \"Are you sure you want to Shutdown?\" \"shutdown -h now\"") + + -- prompt computer reboot + , ((modm .|. shiftMask, xK_r ), spawn "/home/solomon/.scripts/prompt \"Are you sure you want to Restart?\" \"reboot\"") + + -- launch rofi ssh + , ((modm .|. shiftMask, xK_a ), spawn "rofi -show ssh") + + -- launch my file manager + , ((modm, xK_l ), spawn myFileManager) + + -- close focused window + , ((modm .|. shiftMask, xK_j ), kill) + + -- Rotate through the available layout algorithms + , ((modm, xK_space ), sendMessage NextLayout) + + -- Reset the layouts on the current workspace to default + , ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) + + -- Resize viewed windows to the correct size + , ((modm, xK_b ), refresh) + + -- Move focus to the next window + , ((modm, xK_Tab ), windows W.focusDown) + + -- Move focus to the next window + , ((modm, xK_h ), windows W.focusDown) + + -- Move focus to the previous window + , ((modm, xK_t ), windows W.focusUp ) + + -- Move focus to the master window + , ((modm, xK_m ), windows W.focusMaster ) + + -- Swap the focused window and the master window + , ((modm, xK_Return), windows W.swapMaster) + + -- Swap the focused window with the next window + , ((modm .|. shiftMask, xK_d ), windows W.swapDown ) + + -- Swap the focused window with the previous window + , ((modm .|. shiftMask, xK_t ), windows W.swapUp ) + + -- Shrink the master area + , ((modm, xK_d ), sendMessage Shrink) + + -- Expand the master area + , ((modm, xK_n ), sendMessage Expand) + + -- Push window back into tiling + , ((modm, xK_y ), withFocused $ windows . W.sink) + + -- Increment the number of windows in the master area + , ((modm , xK_w ), sendMessage (IncMasterN 1)) + + -- Deincrement the number of windows in the master area + , ((modm , xK_v), sendMessage (IncMasterN (-1))) + + -- Toggle the status bar gap + -- Use this binding with avoidStruts from Hooks.ManageDocks. + -- See also the statusBar function from Hooks.DynamicLog. + -- + , ((modm , xK_b ), sendMessage ToggleStruts) + + -- Quit xmonad + , ((modm .|. shiftMask, xK_apostrophe ), io (exitWith ExitSuccess)) + + -- Restart xmonad + , ((modm , xK_apostrophe ), spawn "xmonad --recompile; xmonad --restart") + + -- Run xmessage with a summary of the default keybindings (useful for beginners) + , ((modm .|. shiftMask, xK_z ), spawn ("echo \"" ++ help ++ "\" | xmessage -file -")) + ] + ++ + + -- + -- mod-[1..9], Switch to workspace N + -- mod-shift-[1..9], Move client to workspace N + -- + [((m .|. modm, k), windows $ f i) + | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9] + , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]] + ++ + + -- + -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3 + -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3 + -- + [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f)) + | (key, sc) <- zip [xK_comma, xK_period, xK_p] [0..] + , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]] + +-- Mouse bindings: default actions bound to mouse events +myMouseBindings (XConfig {XMonad.modMask = modm}) = M.fromList $ + + -- mod-button1, Set the window to floating mode and move by dragging + [ ((modm, button1), (\w -> focus w >> mouseMoveWindow w + >> windows W.shiftMaster)) + + -- mod-button2, Raise the window to the top of the stack + , ((modm, button2), (\w -> focus w >> windows W.shiftMaster)) + + -- mod-button3, Set the window to floating mode and resize by dragging + , ((modm, button3), (\w -> focus w >> mouseResizeWindow w + >> windows W.shiftMaster)) + + -- you may also bind events to the mouse scroll wheel (button4 and button5) + ] + +------------------------------------------------------------------------ +-- Layouts: + +mySpacing :: Integer -> l a -> XMonad.Layout.LayoutModifier.ModifiedLayout Spacing l a +mySpacing i = spacingRaw False (Border i i i i) True (Border i i i i) True + +-- Defining a bunch of layouts, many that I don't use. +tall = renamed [Replace "tall"] + $ limitWindows 12 + $ mySpacing 8 + $ ResizableTall 1 (3/100) (1/2) [] +magnify = renamed [Replace "magnify"] + $ magnifier + $ limitWindows 12 + $ mySpacing 8 + $ ResizableTall 1 (3/100) (1/2) [] +monocle = renamed [Replace "monocle"] + $ limitWindows 20 Full +floats = renamed [Replace "floats"] + $ limitWindows 20 simplestFloat +grid = renamed [Replace "grid"] + $ limitWindows 12 + $ mySpacing 8 + $ mkToggle (single MIRROR) + $ Grid (16/10) +spirals = renamed [Replace "spirals"] + $ mySpacing 8 + $ spiral (6/7) +tabs = renamed [Replace "tabs"] + -- I cannot add spacing to this layout because it will + -- add spacing between window and tabs which looks bad. + $ tabbed shrinkText myTabConfig + where + myTabConfig = def { fontName = "xft:Fira Code:regular:pixelsize=11" + , activeColor = "#282c34" + , inactiveColor = "#3e445e" + , activeBorderColor = "#282c34" + , inactiveBorderColor = "#282c34" + , activeTextColor = "#ffffff" + , inactiveTextColor = "#d0d0d0" + } + +-- The layout hook +myLayout = avoidStruts $ mouseResize $ windowArrange $ T.toggleLayouts floats $ + mkToggle (NBFULL ?? NOBORDERS ?? EOT) myDefaultLayout + where + -- I've commented out the layouts I don't use. + myDefaultLayout = + grid + ||| noBorders monocle + ||| spirals + ||| tall + ||| noBorders tabs + ||| floats + ||| magnify + +------------------------------------------------------------------------ +-- Window rules: + +-- Execute arbitrary actions and WindowSet manipulations when managing +-- a new window. You can use this to, for example, always float a +-- particular program, or have a client always appear on a particular +-- workspace. +-- +-- To find the property name associated with a program, use +-- > xprop | grep WM_CLASS +-- and click on the client you're interested in. +-- +-- To match on the WM_NAME, you can use 'title' in the same way that +-- 'className' and 'resource' are used below. +myManageHook = composeAll + [ className =? "Gimp" --> doFloat + , className =? "guake" --> doIgnore + , className =? "barrier" --> doFloat + , className =? "net-runelite-client-RuneLite" --> doFloat + , className =? "net-runelite-launcher-Launcher" --> doIgnore + , resource =? "desktop_window" --> doIgnore + , resource =? "kdesktop" --> doIgnore ] + +------------------------------------------------------------------------ +-- Event handling + +-- * EwmhDesktops users should change this to ewmhDesktopsEventHook +-- +-- Defines a custom handler function for X Events. The function should +-- return (All True) if the default handler is to be run afterwards. To +-- combine event hooks use mappend or mconcat from Data.Monoid. +myEventHook = mempty + +------------------------------------------------------------------------ +-- Status bars and logging + +-- Perform an arbitrary action on each internal state change or X event. +-- See the 'XMonad.Hooks.DynamicLog' extension for examples. +myLogHook :: X () +myLogHook = fadeInactiveLogHook fadeAmount + where fadeAmount = 1.0 + +------------------------------------------------------------------------ +-- Startup hook + +-- Perform an arbitrary action each time xmonad starts or is restarted +-- with mod-q. Used by, e.g., XMonad.Layout.PerWorkspace to initialize +-- per-workspace layout choices. +-- +-- By default, do nothing. +myStartupHook = do + spawnOnce "/usr/lib/x86_64-linux-gnu/libexec/org_kde_powerdevil &" + spawnOnce "/home/solomon/.screenlayout/normal.sh" + spawnOnce "compton &" + spawnOnce "nitrogen --restore &" + spawnOnce "dunst &" + spawnOnce "xsetroot -cursor_name left_ptr" + spawnOnce "numlockx" + spawnOnce "trayer --edge top --align right --widthtype request --padding 6 --SetDockType true --SetPartialStrut true --expand true --monitor 1 --transparent true --alpha 0 --tint 0x14071F --height 20 &" + spawnOnce "volumeicon &" + spawnOnce "nm-applet &" + spawnOnce "blueman-applet &" + spawnOnce "kdeconnect-indicator &" + spawnOnce "ibus-daemon &" + spawnOnce "guake &" + spawnOnce "barrier &" + spawnOnce "nextcloud &" + spawnOnce "slack &" + +------------------------------------------------------------------------ + +-- Now run xmonad with all the defaults we set up. +-- Run xmonad with the settings you specify. No need to modify this. +main :: IO () +main = do + xmproc <- spawnPipe "xmobar -x 0 /home/solomon/.config/xmobar/xmobarrc.hs" + -- xmproc <- spawnPipe "xmobar -x 0 /home/solomon/.config/xmobar/xmobarrc0" + -- xmproc <- spawnPipe "xmobar -x 1 /home/solomon/.config/xmobar/xmobarrc1" + -- xmproc <- spawnPipe "xmobar -x 2 /home/solomon/.config/xmobar/xmobarrc2" + -- xmonad =<< statusBar myBar myPP toggleStrutsKey defaults + xmonad $ docks def +-- defaults = def + { + -- simple stuff + terminal = myTerminal, + focusFollowsMouse = myFocusFollowsMouse, + clickJustFocuses = myClickJustFocuses, + borderWidth = myBorderWidth, + modMask = myModMask, + workspaces = myWorkspaces, + normalBorderColor = myNormalBorderColor, + focusedBorderColor = myFocusedBorderColor, + + -- key bindings + keys = myKeys, + mouseBindings = myMouseBindings, + + -- hooks, layouts + layoutHook = myLayout, + manageHook = ( isFullscreen --> doFullFloat ) <+> myManageHook <+> manageDocks, + handleEventHook = myEventHook <+> fullscreenEventHook, + -- logHook = myLogHook, + logHook = myLogHook <+> dynamicLogWithPP xmobarPP + { ppOutput = \x -> hPutStrLn xmproc x + , ppCurrent = xmobarColor "#a8de45" "" . wrap "[" "]" -- Current workspace in xmobar + , ppVisible = xmobarColor "#98be65" "" -- Visible but not current workspace + , ppHidden = xmobarColor "#82AAFF" "" . wrap "*" "" -- Hidden workspaces in xmobar + , ppHiddenNoWindows = xmobarColor "#c792ea" "" -- Hidden workspaces (no windows) + -- , ppTitle = xmobarColor "#b3afc2" "" . shorten 20 -- Title of active window in xmobar + , ppSep = " | " -- Separators in xmobar + , ppUrgent = xmobarColor "#C45500" "" . wrap "!" "!" -- Urgent workspace + -- , ppExtras = [windowCount] -- # of windows current workspace + -- , ppOrder = \(ws:l:t:ex) -> [ws,l]++ex++[t] + , ppOrder = \(ws:l:t:ex) -> [ws,l] + }, + startupHook = myStartupHook + } + +-- | Finally, a copy of the default bindings in simple textual tabular format. +help :: String +help = unlines ["The default modifier key is 'alt'. Default keybindings:", + "", + "-- launching and killing programs", + "mod-Shift-Enter Launch terminal", + "mod-a Launch run menu", + "mod-Shift-a Launch ssh menu", + "mod-o Launch dmenu", + "mod-l Launch file manager", + "mod-Shift-j Close/kill the focused window", + "mod-Space Rotate through the available layout algorithms", + "mod-Shift-Space Reset the layouts on the current workSpace to default", + "mod-n Resize/refresh viewed windows to the correct size", + "", + "-- move focus up or down the window stack", + "mod-Tab Move focus to the next window", + "mod-Shift-Tab Move focus to the previous window", + "mod-h Move focus to the next window", + "mod-t Move focus to the previous window", + "mod-m Move focus to the master window", + "", + "-- modifying the window order", + "mod-Return Swap the focused window and the master window", + "mod-Shift-h Swap the focused window with the next window", + "mod-Shift-t Swap the focused window with the previous window", + "", + "-- resizing the master/slave ratio", + "mod-d Shri sk the master area", + "mod-n Expand the master area", + "", + "-- floating layer support", + "mod-y Push window back into tiling; unfloat and re-tile it", + "", + "-- increase or decrease number of windows in the master area", + "mod-w (mod-,) Increment the number of windows in the master area", + "mod-vL (mod-.) Deincrement the number of windows in the master area", + "", + "-- quit, or restart", + "mod-Shift-' Quit xmonad", + "mod-' Restart xmonad", + "mod-[1..9] Switch to workSpace N", + "", + "-- Workspaces & screens", + "mod-Shift-[1..9] Move client to workspace N", + "mod-{',','.','p'} Switch to physical/Xinerama screens 1, 2, or 3", + "mod-Shift-{',','.','p'} Move client to screen 1, 2, or 3", + "", + "-- Mouse bindings: default actions bound to mouse events", + "mod-button1 Set the window to floating mode and move by dragging", + "mod-button2 Raise the window to the top of the stack", + "mod-button3 Set the window to floating mode and resize by dragging"] diff --git a/.xmonad/xpm/calendar-clock-icon_20.xpm b/.xmonad/xpm/calendar-clock-icon_20.xpm new file mode 100644 index 0000000..ad19417 --- /dev/null +++ b/.xmonad/xpm/calendar-clock-icon_20.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static char * calendar_clock_icon_20_xpm[] = { +"20 20 2 1", +" c None", +". c #EFF0F1", +" ", +" ", +" ", +" ........ ", +" .. .. ", +" .. . .. ", +" .. . .. ", +" . . . ", +" . . . ", +" . . . ", +" . ...... . ", +" . . ", +" . . ", +" .. .. ", +" .. .. ", +" .. .. ", +" ........ ", +" ", +" ", +" "}; diff --git a/.xmonad/xpm/cpu_20.xpm b/.xmonad/xpm/cpu_20.xpm new file mode 100644 index 0000000..4fdfd6b --- /dev/null +++ b/.xmonad/xpm/cpu_20.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static char * cpu_20_xpm[] = { +"20 20 2 1", +" c None", +". c #EFF0F1", +" ", +" ", +" ", +" ", +" ................ ", +" .. .. ", +" .. .. ", +" .. .. ", +" .. .. ", +" .. .. ", +" .. .. ", +" .. .. ", +" ................ ", +" .............. ", +" .. ", +" ........ ", +" ", +" ", +" ", +" "}; diff --git a/.xmonad/xpm/harddisk-icon_20.xpm b/.xmonad/xpm/harddisk-icon_20.xpm new file mode 100644 index 0000000..db338bd --- /dev/null +++ b/.xmonad/xpm/harddisk-icon_20.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static char * harddisk_icon_20_xpm[] = { +"20 20 2 1", +" c None", +". c #EFF0F1", +" ", +" ", +" ", +" ............ ", +" .. .. ", +" . . ", +" . . ", +" . . ", +" .. .. ", +" .. .. ", +" . . ", +" . . ", +" . . ", +" .. .. ", +" ............ ", +" . ... . ", +" ............ ", +" ............ ", +" ", +" "}; diff --git a/.xmonad/xpm/haskell_20.xpm b/.xmonad/xpm/haskell_20.xpm new file mode 100644 index 0000000..9e11ae2 --- /dev/null +++ b/.xmonad/xpm/haskell_20.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static char * haskell_20_xpm[] = { +"20 20 2 1", +" c None", +". c #FFFFFF", +" ", +" ", +" ", +".... .... ", +" .... ... ", +" ... .... ", +" .... .... ", +" .... ... ........", +" ... .... .......", +" .... .... ", +" .... .... ", +" ... ...... .....", +" .... ....... ....", +" .... .... ... ", +" ... .... .... ", +" .... ... .... ", +".... .... ... ", +" ", +" ", +" "}; diff --git a/.xmonad/xpm/memory-icon_20.xpm b/.xmonad/xpm/memory-icon_20.xpm new file mode 100644 index 0000000..2214b12 --- /dev/null +++ b/.xmonad/xpm/memory-icon_20.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static char * memory_icon_20_xpm[] = { +"20 20 2 1", +" c None", +". c #EFF0F1", +" ", +" ", +" ", +" ........... ", +" . . ", +" . . . ", +" . . . . . ", +" . .. . .. . ", +" . .. . .. . ", +" . .. . .. . ", +" . . ", +" . . ", +" .. . ", +" . . ", +" . . ", +" . . ", +" ............ ", +" ............ ", +" ", +" "}; diff --git a/.xmonad/xpm/net_down_20.xpm b/.xmonad/xpm/net_down_20.xpm new file mode 100644 index 0000000..2e2f7ac --- /dev/null +++ b/.xmonad/xpm/net_down_20.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static char * net_down_20_xpm[] = { +"20 20 2 1", +" c None", +". c #EFF0F1", +" ", +" ", +" . ", +" . ", +" . ", +" . ", +" . ", +" . ", +" . ", +" .. . . ", +" . . .. ", +" .. . . ", +" . ... ", +" .... ", +" ... ", +" .. ", +" . ", +" ", +" ", +" "}; diff --git a/.xmonad/xpm/net_up_20.xpm b/.xmonad/xpm/net_up_20.xpm new file mode 100644 index 0000000..7b15d13 --- /dev/null +++ b/.xmonad/xpm/net_up_20.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static char * net_up_20_xpm[] = { +"20 20 2 1", +" c None", +". c #EFF0F1", +" ", +" ", +" ", +" . ", +" .. ", +" ... ", +" .... ", +" . ... ", +" .. . . ", +" . . .. ", +" .. . . ", +" . ", +" . ", +" . ", +" . ", +" . ", +" . ", +" . ", +" ", +" "}; diff --git a/README.md b/README.md new file mode 100644 index 0000000..2c5156e --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +My Dotfiles, managed using the following tutorial: + +https://www.atlassian.com/git/tutorials/dotfiles diff --git a/ansible/hosts b/ansible/hosts new file mode 100644 index 0000000..c531ff1 --- /dev/null +++ b/ansible/hosts @@ -0,0 +1,14 @@ +#File name: hosts +#Description: Inventory file for your application. Defines machine type abcnode to deploy specific artifacts +# Defines machine type def node to upload metadata. + +[abc-node] +#server1 ansible_host = +ansible_user = ansible_connection = ssh +server1 ansible_host = ansible_user = +ansible_connection = ssh + +[def-node] +#server2 ansible_host = +ansible_user = ansible_connection = ssh +server2 ansible_host = ansible_user = ansible_connection = ssh diff --git a/ansible/kube-cluster/1_initial.yml b/ansible/kube-cluster/1_initial.yml new file mode 100644 index 0000000..aafd337 --- /dev/null +++ b/ansible/kube-cluster/1_initial.yml @@ -0,0 +1,16 @@ +- hosts: all + become : yes + tasks: + - name: create the 'ubuntu' user + user: name=ubuntu append=yes state=present createhome=yes shell=/bin/bash + + - name: allow 'ubuntu' to have passwordless sudo + lineinfile: + dest: /etc/sudoers + line: 'ubuntu ALL=(ALL) NOPASSWD: ALL' + validate: 'visudo -cf %s' + + - name: set up authorised keys for the 'ubuntu' user + authorized_key: user=ubuntu key="{{item}}" + with_file: + - ~/.ssh/id_rsa.pub diff --git a/ansible/kube-cluster/2_kube_dependencies.yml b/ansible/kube-cluster/2_kube_dependencies.yml new file mode 100644 index 0000000..adc1e0f --- /dev/null +++ b/ansible/kube-cluster/2_kube_dependencies.yml @@ -0,0 +1,38 @@ +- hosts: all + become: yes + tasks: + - name: install APT Transport HTTPS + apt: + name: apt-transport-https + state: present + + - name: add Kubernetes apt-key + apt_key: + url: https://packages.cloud.google.com/apt/doc/apt-key.gpg + state: present + + - name: add Kubernetes' APT repository + apt_repository: + repo: deb http://apt.kubernetes.io/ kubernetes-xenial main + state: present + filename: 'kubernetes' + + - name: install kubelet + apt: + name: kubelet=1.18.0-00 + state: present + update_cache: true + + - name: install kubeadm + apt: + name: kubeadm=1.18.0-00 + state: present + +- hosts: master + become: yes + tasks: + - name: install kubectl + apt: + name: kubectl=1.18.0-00 + state: present + force: yes diff --git a/ansible/kube-cluster/2_kube_dependencies.yml.bak b/ansible/kube-cluster/2_kube_dependencies.yml.bak new file mode 100644 index 0000000..ba3e428 --- /dev/null +++ b/ansible/kube-cluster/2_kube_dependencies.yml.bak @@ -0,0 +1,44 @@ +- hosts: all + become: yes + tasks: + - name: install Docker + apt: + name: docker.io + state: present + update_cache: true + + - name: install APT Transport HTTPS + apt: + name: apt-transport-https + state: present + + - name: add Kubernetes apt-key + apt_key: + url: https://packages.cloud.google.com/apt/doc/apt-key.gpg + state: present + + - name: add Kubernetes' APT repository + apt_repository: + repo: deb http://apt.kubernetes.io/ kubernetes-xenial main + state: present + filename: 'kubernetes' + + - name: install kubelet + apt: + name: kubelet=1.18.0-00 + state: present + update_cache: true + + - name: install kubeadm + apt: + name: kubeadm=1.18.0-00 + state: present + +- hosts: master + become: yes + tasks: + - name: install kubectl + apt: + name: kubectl=1.18.0-00 + state: present + force: yes diff --git a/ansible/kube-cluster/3_master.yml b/ansible/kube-cluster/3_master.yml new file mode 100644 index 0000000..4b5fd44 --- /dev/null +++ b/ansible/kube-cluster/3_master.yml @@ -0,0 +1,42 @@ +- hosts: master + become: yes + tasks: + - name: initialise the cluster + shell: kubeadm init --pod-network-cidr=10.244.0.0/16 >> cluster_initialized.txt + args: + chdir: $HOME + creates: cluster_initialized.txt + become: yes + become_user: root + + - name: create .kube directory + become: yes + become_user: ubuntu + file: + path: $HOME/.kube + state: directory + mode: 0755 + + - name: copy admin.conf to user's kube config + copy: + src: /etc/kubernetes/admin.conf + dest: /home/ubuntu/.kube/config + remote_src: yes + owner: ubuntu + + - name: copy Pod network config + copy: + src: ./kube-flannel.yml + dest: /home/ubuntu/ + owner: ubuntu + group: ubuntu + mode: '0644' + + - name: install Pod network + become: yes + become_user: ubuntu + shell: kubectl apply -f kube-flannel.yml >> pod_network_setup.txt + args: + chdir: $HOME + creates: pot_network_setup.txt + diff --git a/ansible/kube-cluster/4_workers.yml b/ansible/kube-cluster/4_workers.yml new file mode 100644 index 0000000..f669882 --- /dev/null +++ b/ansible/kube-cluster/4_workers.yml @@ -0,0 +1,21 @@ +- hosts: master + become: yes + gather_facts: false + tasks: + - name: get join command + shell: kubeadm token create --print-join-command + register: join_command_raw + + - name: set join command + set_fact: + join_command: "{{ join_command_raw.stdout_lines[0] }}" + +- hosts: workers + become: yes + tasks: + - name: join cluster + shell: "{{ hostvars['master'].join_command }} >> node_joined.txt" + args: + chdir: $HOME + creates: node_joined.txt + diff --git a/ansible/kube-cluster/ansible-playbook b/ansible/kube-cluster/ansible-playbook new file mode 100644 index 0000000..f4ed22f --- /dev/null +++ b/ansible/kube-cluster/ansible-playbook @@ -0,0 +1 @@ +WirrealpaSSH0429 -i hosts /root/kube-cluster/initial.yml diff --git a/ansible/kube-cluster/cluster-update-reboot.yml b/ansible/kube-cluster/cluster-update-reboot.yml new file mode 100644 index 0000000..952088e --- /dev/null +++ b/ansible/kube-cluster/cluster-update-reboot.yml @@ -0,0 +1,10 @@ +- hosts: all + become: yes + tasks: + + - name: Update and upgrade apt package + become: true + apt: + upgrade: yes + update_cache: yes + cache_valid_time: 86400 #One day diff --git a/ansible/kube-cluster/kube-flannel.yml b/ansible/kube-cluster/kube-flannel.yml new file mode 100644 index 0000000..d1dbda8 --- /dev/null +++ b/ansible/kube-cluster/kube-flannel.yml @@ -0,0 +1,603 @@ +--- +apiVersion: policy/v1beta1 +kind: PodSecurityPolicy +metadata: + name: psp.flannel.unprivileged + annotations: + seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default + seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default + apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default + apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default +spec: + privileged: false + volumes: + - configMap + - secret + - emptyDir + - hostPath + allowedHostPaths: + - pathPrefix: "/etc/cni/net.d" + - pathPrefix: "/etc/kube-flannel" + - pathPrefix: "/run/flannel" + readOnlyRootFilesystem: false + # Users and groups + runAsUser: + rule: RunAsAny + supplementalGroups: + rule: RunAsAny + fsGroup: + rule: RunAsAny + # Privilege Escalation + allowPrivilegeEscalation: false + defaultAllowPrivilegeEscalation: false + # Capabilities + allowedCapabilities: ['NET_ADMIN'] + defaultAddCapabilities: [] + requiredDropCapabilities: [] + # Host namespaces + hostPID: false + hostIPC: false + hostNetwork: true + hostPorts: + - min: 0 + max: 65535 + # SELinux + seLinux: + # SELinux is unused in CaaSP + rule: 'RunAsAny' +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: flannel +rules: + - apiGroups: ['extensions'] + resources: ['podsecuritypolicies'] + verbs: ['use'] + resourceNames: ['psp.flannel.unprivileged'] + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - apiGroups: + - "" + resources: + - nodes + verbs: + - list + - watch + - apiGroups: + - "" + resources: + - nodes/status + verbs: + - patch +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: flannel +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: flannel +subjects: +- kind: ServiceAccount + name: flannel + namespace: kube-system +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: flannel + namespace: kube-system +--- +kind: ConfigMap +apiVersion: v1 +metadata: + name: kube-flannel-cfg + namespace: kube-system + labels: + tier: node + app: flannel +data: + cni-conf.json: | + { + "name": "cbr0", + "cniVersion": "0.3.1", + "plugins": [ + { + "type": "flannel", + "delegate": { + "hairpinMode": true, + "isDefaultGateway": true + } + }, + { + "type": "portmap", + "capabilities": { + "portMappings": true + } + } + ] + } + net-conf.json: | + { + "Network": "10.244.0.0/16", + "Backend": { + "Type": "vxlan" + } + } +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: kube-flannel-ds-amd64 + namespace: kube-system + labels: + tier: node + app: flannel +spec: + selector: + matchLabels: + app: flannel + template: + metadata: + labels: + tier: node + app: flannel + spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - linux + - key: kubernetes.io/arch + operator: In + values: + - amd64 + hostNetwork: true + tolerations: + - operator: Exists + effect: NoSchedule + serviceAccountName: flannel + initContainers: + - name: install-cni + image: quay.io/coreos/flannel:v0.12.0-amd64 + command: + - cp + args: + - -f + - /etc/kube-flannel/cni-conf.json + - /etc/cni/net.d/10-flannel.conflist + volumeMounts: + - name: cni + mountPath: /etc/cni/net.d + - name: flannel-cfg + mountPath: /etc/kube-flannel/ + containers: + - name: kube-flannel + image: quay.io/coreos/flannel:v0.12.0-amd64 + command: + - /opt/bin/flanneld + args: + - --ip-masq + - --kube-subnet-mgr + resources: + requests: + cpu: "100m" + memory: "50Mi" + limits: + cpu: "100m" + memory: "50Mi" + securityContext: + privileged: false + capabilities: + add: ["NET_ADMIN"] + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + volumeMounts: + - name: run + mountPath: /run/flannel + - name: flannel-cfg + mountPath: /etc/kube-flannel/ + volumes: + - name: run + hostPath: + path: /run/flannel + - name: cni + hostPath: + path: /etc/cni/net.d + - name: flannel-cfg + configMap: + name: kube-flannel-cfg +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: kube-flannel-ds-arm64 + namespace: kube-system + labels: + tier: node + app: flannel +spec: + selector: + matchLabels: + app: flannel + template: + metadata: + labels: + tier: node + app: flannel + spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - linux + - key: kubernetes.io/arch + operator: In + values: + - arm64 + hostNetwork: true + tolerations: + - operator: Exists + effect: NoSchedule + serviceAccountName: flannel + initContainers: + - name: install-cni + image: quay.io/coreos/flannel:v0.12.0-arm64 + command: + - cp + args: + - -f + - /etc/kube-flannel/cni-conf.json + - /etc/cni/net.d/10-flannel.conflist + volumeMounts: + - name: cni + mountPath: /etc/cni/net.d + - name: flannel-cfg + mountPath: /etc/kube-flannel/ + containers: + - name: kube-flannel + image: quay.io/coreos/flannel:v0.12.0-arm64 + command: + - /opt/bin/flanneld + args: + - --ip-masq + - --kube-subnet-mgr + resources: + requests: + cpu: "100m" + memory: "50Mi" + limits: + cpu: "100m" + memory: "50Mi" + securityContext: + privileged: false + capabilities: + add: ["NET_ADMIN"] + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + volumeMounts: + - name: run + mountPath: /run/flannel + - name: flannel-cfg + mountPath: /etc/kube-flannel/ + volumes: + - name: run + hostPath: + path: /run/flannel + - name: cni + hostPath: + path: /etc/cni/net.d + - name: flannel-cfg + configMap: + name: kube-flannel-cfg +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: kube-flannel-ds-arm + namespace: kube-system + labels: + tier: node + app: flannel +spec: + selector: + matchLabels: + app: flannel + template: + metadata: + labels: + tier: node + app: flannel + spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - linux + - key: kubernetes.io/arch + operator: In + values: + - arm + hostNetwork: true + tolerations: + - operator: Exists + effect: NoSchedule + serviceAccountName: flannel + initContainers: + - name: install-cni + image: quay.io/coreos/flannel:v0.12.0-arm + command: + - cp + args: + - -f + - /etc/kube-flannel/cni-conf.json + - /etc/cni/net.d/10-flannel.conflist + volumeMounts: + - name: cni + mountPath: /etc/cni/net.d + - name: flannel-cfg + mountPath: /etc/kube-flannel/ + containers: + - name: kube-flannel + image: quay.io/coreos/flannel:v0.12.0-arm + command: + - /opt/bin/flanneld + args: + - --ip-masq + - --kube-subnet-mgr + resources: + requests: + cpu: "100m" + memory: "50Mi" + limits: + cpu: "100m" + memory: "50Mi" + securityContext: + privileged: false + capabilities: + add: ["NET_ADMIN"] + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + volumeMounts: + - name: run + mountPath: /run/flannel + - name: flannel-cfg + mountPath: /etc/kube-flannel/ + volumes: + - name: run + hostPath: + path: /run/flannel + - name: cni + hostPath: + path: /etc/cni/net.d + - name: flannel-cfg + configMap: + name: kube-flannel-cfg +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: kube-flannel-ds-ppc64le + namespace: kube-system + labels: + tier: node + app: flannel +spec: + selector: + matchLabels: + app: flannel + template: + metadata: + labels: + tier: node + app: flannel + spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - linux + - key: kubernetes.io/arch + operator: In + values: + - ppc64le + hostNetwork: true + tolerations: + - operator: Exists + effect: NoSchedule + serviceAccountName: flannel + initContainers: + - name: install-cni + image: quay.io/coreos/flannel:v0.12.0-ppc64le + command: + - cp + args: + - -f + - /etc/kube-flannel/cni-conf.json + - /etc/cni/net.d/10-flannel.conflist + volumeMounts: + - name: cni + mountPath: /etc/cni/net.d + - name: flannel-cfg + mountPath: /etc/kube-flannel/ + containers: + - name: kube-flannel + image: quay.io/coreos/flannel:v0.12.0-ppc64le + command: + - /opt/bin/flanneld + args: + - --ip-masq + - --kube-subnet-mgr + resources: + requests: + cpu: "100m" + memory: "50Mi" + limits: + cpu: "100m" + memory: "50Mi" + securityContext: + privileged: false + capabilities: + add: ["NET_ADMIN"] + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + volumeMounts: + - name: run + mountPath: /run/flannel + - name: flannel-cfg + mountPath: /etc/kube-flannel/ + volumes: + - name: run + hostPath: + path: /run/flannel + - name: cni + hostPath: + path: /etc/cni/net.d + - name: flannel-cfg + configMap: + name: kube-flannel-cfg +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: kube-flannel-ds-s390x + namespace: kube-system + labels: + tier: node + app: flannel +spec: + selector: + matchLabels: + app: flannel + template: + metadata: + labels: + tier: node + app: flannel + spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - linux + - key: kubernetes.io/arch + operator: In + values: + - s390x + hostNetwork: true + tolerations: + - operator: Exists + effect: NoSchedule + serviceAccountName: flannel + initContainers: + - name: install-cni + image: quay.io/coreos/flannel:v0.12.0-s390x + command: + - cp + args: + - -f + - /etc/kube-flannel/cni-conf.json + - /etc/cni/net.d/10-flannel.conflist + volumeMounts: + - name: cni + mountPath: /etc/cni/net.d + - name: flannel-cfg + mountPath: /etc/kube-flannel/ + containers: + - name: kube-flannel + image: quay.io/coreos/flannel:v0.12.0-s390x + command: + - /opt/bin/flanneld + args: + - --ip-masq + - --kube-subnet-mgr + resources: + requests: + cpu: "100m" + memory: "50Mi" + limits: + cpu: "100m" + memory: "50Mi" + securityContext: + privileged: false + capabilities: + add: ["NET_ADMIN"] + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + volumeMounts: + - name: run + mountPath: /run/flannel + - name: flannel-cfg + mountPath: /etc/kube-flannel/ + volumes: + - name: run + hostPath: + path: /run/flannel + - name: cni + hostPath: + path: /etc/cni/net.d + - name: flannel-cfg + configMap: + name: kube-flannel-cfg + diff --git a/ansible/kube-cluster/notes.txt b/ansible/kube-cluster/notes.txt new file mode 100644 index 0000000..b41a111 --- /dev/null +++ b/ansible/kube-cluster/notes.txt @@ -0,0 +1,7 @@ +got up to workers +seems that docker is not starting and the worker nodes cannot join the cluster because they have no properly functioning container runtime +can't see any other problems. + + +following this : https://www.digitalocean.com/community/tutorials/how-to-create-a-kubernetes-cluster-using-kubeadm-on-ubuntu-18-04 +interesting notes : https://elatov.github.io/2020/04/adding-a-node-to-a-kubernetes-cluster-with-kubeadm/ diff --git a/ansible/kube-cluster/odroid-hosts b/ansible/kube-cluster/odroid-hosts new file mode 100644 index 0000000..d0fb549 --- /dev/null +++ b/ansible/kube-cluster/odroid-hosts @@ -0,0 +1,12 @@ +[masters] +master ansible_host=192.168.2.180 ansible_user=root ansible_ssh_pass=odroid + +[workers] +worker1 ansible_host=192.168.2.181 ansible_user=root ansible_ssh_pass=odroid +worker2 ansible_host=192.168.2.182 ansible_user=root ansible_ssh_pass=odroid +worker3 ansible_host=192.168.2.183 ansible_user=root ansible_ssh_pass=odroid +worker4 ansible_host=192.168.2.184 ansible_user=root ansible_ssh_pass=odroid +worker5 ansible_host=192.168.2.185 ansible_user=root ansible_ssh_pass=odroid + +[all:vars] +ansible_python_interpreter=/usr/bin/python3 diff --git a/ansible/kube-cluster/vm-hosts b/ansible/kube-cluster/vm-hosts new file mode 100644 index 0000000..bfd0a00 --- /dev/null +++ b/ansible/kube-cluster/vm-hosts @@ -0,0 +1,8 @@ +[masters] +master ansible_host=192.168.2.180 ansible_user=root ansible_ssh_pass=odroid + +[workers] +worker6 ansible_host=192.168.2.186 ansible_user=solomon ansible_ssh_pass=Solomon123 ansible_sudo_pass=Solomon123 + +[all:vars] +ansible_python_interpreter=/usr/bin/python3 diff --git a/code_extensions b/code_extensions new file mode 100644 index 0000000..477e675 --- /dev/null +++ b/code_extensions @@ -0,0 +1,29 @@ +code --install-extension ahmadawais.shades-of-purple +code --install-extension austin.code-gnu-global +code --install-extension christian-kohler.path-intellisense +code --install-extension CoenraadS.bracket-pair-colorizer-2 +code --install-extension DotJoshJohnson.xml +code --install-extension dracula-theme.theme-dracula +code --install-extension formulahendry.auto-close-tag +code --install-extension formulahendry.auto-rename-tag +code --install-extension formulahendry.code-runner +code --install-extension Fudge.auto-using +code --install-extension HookyQR.beautify +code --install-extension humao.rest-client +code --install-extension justusadam.language-haskell +code --install-extension marcochavezf.darcula-operator-mono-vscode +code --install-extension mitaki28.vscode-clang +code --install-extension ms-azuretools.vscode-azureappservice +code --install-extension ms-dotnettools.csharp +code --install-extension ms-python.python +code --install-extension ms-vscode-remote.remote-wsl +code --install-extension ms-vscode.azure-account +code --install-extension ms-vscode.cmake-tools +code --install-extension ms-vscode.cpptools +code --install-extension quicktype.quicktype +code --install-extension sdras.night-owl +code --install-extension teabyii.ayu +code --install-extension tomoki1207.pdf +code --install-extension twxs.cmake +code --install-extension wayou.vscode-todo-highlight +code --install-extension wesbos.theme-cobalt2 diff --git a/iommu.sh b/iommu.sh new file mode 100755 index 0000000..556d5aa --- /dev/null +++ b/iommu.sh @@ -0,0 +1,8 @@ +#!/bin/bash +shopt -s nullglob +for g in /sys/kernel/iommu_groups/*; do + echo "IOMMU Group ${g##*/}:" + for d in $g/devices/*; do + echo -e "\t$(lspci -nns ${d##*/})" + done; +done; diff --git a/misc/youtube_subscription_parser.py b/misc/youtube_subscription_parser.py new file mode 100755 index 0000000..b24fe50 --- /dev/null +++ b/misc/youtube_subscription_parser.py @@ -0,0 +1,22 @@ +import json +import os +import hashlib + +subscriptions = {} +channels = [] + +# read subscirptions from google takeout file +with open('./subscriptions.json') as f: + doc = json.load(f) + subscriptions[u'all'] = doc + +# create a list of channels using id +for subscription in subscriptions.values(): + for snippet in subscription: + channels.append('https://www.youtube.com/feeds/videos.xml?channel_id=' + snippet['snippet']['resourceId']['channelId'] + '\n') + +# write subscription urls to file +with open('urls', 'a') as f: + for channel in channels: + f.writelines(channel) + diff --git a/qemu.sh b/qemu.sh new file mode 100644 index 0000000..d0a6fd2 --- /dev/null +++ b/qemu.sh @@ -0,0 +1,115 @@ +#!/bin/bash + +## Check if the script was executed as root +[[ "$EUID" -ne 0 ]] && echo "Please run as root" && exit 1 + +## Load the config file +source "/etc/libvirt/hooks/kvm.conf" + +## Check libvirtd is running +[[ $(systemctl status libvirtd | grep running) ]] || systemctl start libvirtd && sleep 1 && LIBVIRTD=STOPPED + +function bind_vfio { + ## Unload nvidia + modprobe -r nvidia_drm + modprobe -r nvidia_uvm + modprobe -r nvidia_modeset + + ## Load vfio + modprobe vfio + modprobe vfio_iommu_type1 + modprobe vfio_pci + + ## Unbind gpu from nvidia and bind to vfio + virsh nodedev-detach $VIRSH_GPU_VIDEO + virsh nodedev-detach $VIRSH_GPU_AUDIO + ## Unbind ssd from nvme and bind to vfio + virsh nodedev-detach $VIRSH_SSD +} + +function unbind_vfio { + ## Unbind gpu from vfio and bind to nvidia + virsh nodedev-reattach $VIRSH_GPU_VIDEO + virsh nodedev-reattach $VIRSH_GPU_AUDIO + ## Unbind ssd from vfio and bind to nvme + virsh nodedev-reattach $VIRSH_SSD + + ## Unload vfio + modprobe -r vfio_pci + modprobe -r vfio_iommu_type1 + modprobe -r vfio + + ## Load nvidia + modprobe nvidia_modeset + modprobe nvidia_uvm + modprobe nvidia_drm +} + +function allocate_hugepages { + HUGEPAGES="$(($MEMORY/$(($(grep Hugepagesize /proc/meminfo | awk '{print $2}')/1024))))" + echo "Allocating hugepages..." + echo $HUGEPAGES > /proc/sys/vm/nr_hugepages + ALLOC_PAGES=$(cat /proc/sys/vm/nr_hugepages) + + TRIES=0 + while (( $ALLOC_PAGES != $HUGEPAGES && $TRIES < 1000 )) + do + echo 1 > /proc/sys/vm/compact_memory ## defrag ram + echo $HUGEPAGES > /proc/sys/vm/nr_hugepages + ALLOC_PAGES=$(cat /proc/sys/vm/nr_hugepages) + echo "Succesfully allocated $ALLOC_PAGES / $HUGEPAGES" + let TRIES+=1 + done + + if [ "$ALLOC_PAGES" -ne "HUGEPAGES" ] + then + echo "Not able to allocate all hugepages. Reverting..." + echo 0 > /proc/sys/vm/nr_hugepages + exit 1 + fi +} + +function deallocate_hugepages { + echo 0 > /proc/sys/vm/nr_hugepages +} + +function cpu_mode_performance { + ## Enable CPU governor performance mode + cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor + for file in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo "performance" > $file; done + cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor +} + +function cpu_mode_ondemand { + ## Enable CPU governor on-demand mode + cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor + for file in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo "ondemand" > $file; done + cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor +} + +## Kill the display manager +#systemctl stop display-manager.service + +## Kill the console +#echo 0 > /sys/class/vtconsole/vtcon0/bind +#echo 0 > /sys/class/vtconsole/vtcon1/bind +#echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind + +bind_vfio +#allocate_hugepages +#cpu_mode_performance + +## QEMU KVM +#TODO context https://github.com/bryansteiner/gpu-passthrough-tutorial#return9 + +#cpu_mode_ondemand +#deallocate_hugepages +unbind_vfio + +## Start the display manager +#systemctl start display-manager.service + +## Start the console +#echo 1 > /sys/class/vtconsole/vtcon0/bind +#echo 1 > /sys/class/vtconsole/vtcon1/bind +#echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/bind