commit 07ab3a77b44944a1ac234fbd717391f36370416e Author: Brian Picciano Date: Tue Oct 17 18:12:57 2017 -0600 initial public commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b2be92b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +result diff --git a/README.md b/README.md new file mode 100644 index 0000000..ffee234 --- /dev/null +++ b/README.md @@ -0,0 +1,103 @@ +# Mediocre Loadout + +This repo contains everything needed to build my loadout, which is everything +which I tend to take from one linux machine to the next. This includes: + +* My development environment (neovim + plugins + a lot of customization) +* My shell (zsh + plugins + a custom theme) +* My window manager (awesome + plugins + a lot of customization) + +I'm calling the result the "Mediocre Loadout". It is designed to be completely +agnostic to the system it is running on, and to make little to no mutations to +that system. + +# Build/Installation/Usage options + +To build the Mediocre Loadout you must have a working +[nix](https://nixos.org/manual/nix/stable/) installation, as well as an `x86_64` +machine. That's it. + +There are multiple build/installation options: + +## nix Derivation + +To build the nix derivation of the loadout you can do: + +``` +nix-build -A loadout +``` + +This will place the result in the `result` symlink in the root directory. +Components of the loadout can then be executed from the `bin` subdirectory, +e.g.: + +``` +./result/bin/nvim +``` + +## nix Environment + +Alternatively, to install it to your nix profile do: + +``` +nix-env -i default.nix -A loadout +``` + +Assuming your nix environment is set up correctly, you should be able to execute +components directly: + +``` +nvim +``` + +## AppImage + +An [AppImage](https://appimage.org/) binary can be built which can run any +component of the loadout individually. This binary can be copied from one +machine to the next without any of them requiring nix or any other dependencry +to run it. + +To build the binary: + +``` +nix-build -A appimage +``` + +The resulting binary will be placed in the `result` symlink in the root +directory. + +Specific components of the loadout can be run by passing an argument to the +binary: + +``` +./Mediocre_Loadout-x86_64.AppImage nvim +``` + +# Available Components + +Components of the loadout can be run separate from the others, depending on what +you're trying to do. The following components are available to be run: + +* `zsh` (`shell` in the AppImage): My terminal shell. There's some customization + to it but it should be pretty self-explanatory to "just use". + +* `nvim` (`editor` in the AppImage): My neovim development environment, plus all + plugins I use. I mostly work in golang, so it's most tuned for that, but it + does fine for general dev work. `Ctrl-N` will open NerdTree, `tn` + will open a terminal tab, and `th`/`tl` can be used to + navigate tabs. There's a lot more customization that's been done, see the + `nvim/init.vim` file. + +* `alacritty` (`gui` in the AppImage, might be broken): Terminal which I use. + Yes, I always use a light-mode theme, because I work in well lit spaces + generally. There's not much else to this. + +* `awesome` (`wm` in the AppImage, almost definitely broken): My window manager. + There's so much customization I couldn't begin to start. `Meta+Enter` should + open a terminal, where `Meta` is probably the windows key on your keyboard. + +# Status + +This configuration is still fairly new, and so expect it to be fairly broken. +I'll be updating it as I go though, so it should stabalize into something +functional. diff --git a/alacritty/alacritty.yml b/alacritty/alacritty.yml new file mode 100644 index 0000000..ad3f385 --- /dev/null +++ b/alacritty/alacritty.yml @@ -0,0 +1,861 @@ +# Configuration for Alacritty, the GPU enhanced terminal emulator. + +# Import additional configuration files +# +# Imports are loaded in order, skipping all missing files, with the importing +# file being loaded last. If a field is already present in a previous import, it +# will be replaced. +# +# All imports must either be absolute paths starting with `/`, or paths relative +# to the user's home directory starting with `~/`. +#import: +# - /path/to/alacritty.yml + +# 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: alacritty + +#window: + # Window dimensions (changes require restart) + # + # Number of lines/columns (not pixels) in the terminal. The number of columns + # must be at least `2`, while using a value of `0` for columns and lines will + # fall back to the window manager's recommended size. + #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: 0 + # y: 0 + + # 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 and no title bar buttons + decorations: none + + # 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 + + # Allow terminal applications to change Alacritty's window title. + #dynamic_title: true + + # 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: 10000 + + # Scrolling distance multiplier. + #multiplier: 3 + +## Font configuration +#font: +# size: 7 + + # + #TODO I'd like to restore this font configuration, but I can't cause nix + #doesn't play nicely with fontconfig +font: + # Normal (roman) font face + normal: + # Font family + # + # Default: + # - (macOS) Menlo + # - (Linux/BSD) monospace + # - (Windows) Consolas + family: Source Code Pro + + # 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: Source Code Pro + + # 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: Source Code Pro + + # 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: Source Code Pro + + # The `style` can be specified to pick a specific face. + style: Bold Italic + + # Point size + size: 6.3 + + # 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 upward. + #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`. + #use_thin_strokes: true + +# If `true`, bold text is drawn using the bright color variants. +#draw_bold_text_with_bright_colors: false + +# Base16 PaperColor Light 256 - alacritty color config +# Jon Leopard (http://github.com/jonleopard) based on PaperColor Theme (https://github.com/NLKNguyen/papercolor-theme) +colors: + # Default colors + primary: + background: '0xeeeeee' + foreground: '0x444444' + + # Colors the cursor will use if `custom_cursor_colors` is true + cursor: + text: '0xeeeeee' + cursor: '0x444444' + + # Normal colors + normal: + black: '0xeeeeee' + red: '0xbcbcbc' + green: '0x8700af' + yellow: '0xd70087' + blue: '0xd75f00' + magenta: '0x005faf' + cyan: '0xd75f00' + white: '0x444444' + + # Bright colors + bright: + black: '0x5f8700' + red: '0xbcbcbc' + green: '0x8700af' + yellow: '0xd70087' + blue: '0xd75f00' + magenta: '0x005faf' + cyan: '0xd75f00' + white: '0x878787' + + indexed_colors: + - { index: 16, color: '0xd70000' } + - { index: 17, color: '0x005f87' } + - { index: 18, color: '0xaf0000' } + - { index: 19, color: '0x008700' } + - { index: 20, color: '0x0087af' } + - { index: 21, color: '0x005f87' } + +# Colors (Tomorrow Night) +#colors: + # Default colors + #primary: + # background: '#1d1f21' + # foreground: '#c5c8c6' + + # 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: '#828482' + #bright_foreground: '#eaeaea' + + # Cursor colors + # + # Colors which should be used to draw the terminal cursor. + # + # Allowed values are CellForeground and CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + #cursor: + # text: CellBackground + # cursor: CellForeground + + # Vi mode cursor colors + # + # Colors for the cursor when the vi mode is active. + # + # Allowed values are CellForeground and CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + #vi_mode_cursor: + # text: CellBackground + # cursor: CellForeground + + # Search colors + # + # Colors used for the search bar and match highlighting. + #search: + # Allowed values are CellForeground and CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + #matches: + # foreground: '#000000' + # background: '#ffffff' + #focused_match: + # foreground: CellBackground + # background: CellForeground + + #bar: + # background: '#c5c8c6' + # foreground: '#1d1f21' + + # Line indicator + # + # Color used for the indicator displaying the position in history during + # search and vi mode. + # + # By default, these will use the opposing primary color. + #line_indicator: + # foreground: None + # background: None + + # Selection colors + # + # Colors which should be used to draw the selection area. + # + # Allowed values are CellForeground and CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + #selection: + # text: CellBackground + # background: CellForeground + + # Normal colors + #normal: + # black: '#1d1f21' + # red: '#cc6666' + # green: '#b5bd68' + # yellow: '#f0c674' + # blue: '#81a2be' + # magenta: '#b294bb' + # cyan: '#8abeb7' + # white: '#c5c8c6' + + # Bright colors + #bright: + # black: '#666666' + # red: '#d54e53' + # green: '#b9ca4a' + # yellow: '#e7c547' + # blue: '#7aa6da' + # magenta: '#c397d8' + # cyan: '#70c0b1' + # white: '#eaeaea' + + # Dim colors + # + # If the dim colors are not set, they will be calculated automatically based + # on the `normal` colors. + #dim: + # black: '#131415' + # red: '#864343' + # green: '#777c44' + # yellow: '#9e824c' + # blue: '#556a7d' + # magenta: '#75617b' + # cyan: '#5b7d78' + # white: '#828482' + + # 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: '#ff00ff' }` + # + #indexed_colors: [] + +# Bell +# +# The bell is rung every time the BEL control character is received. +#bell: + # Visual Bell Animation + # + # Animation effect for flashing the screen when the visual bell is rung. + # + # Values for `animation`: + # - Ease + # - EaseOut + # - EaseOutSine + # - EaseOutQuad + # - EaseOutCubic + # - EaseOutQuart + # - EaseOutQuint + # - EaseOutExpo + # - EaseOutCirc + # - Linear + #animation: EaseOutExpo + + # Duration of the visual bell flash in milliseconds. A `duration` of `0` will + # disable the visual bell animation. + #duration: 0 + + # Visual bell animation color. + #color: '#ffffff' + + # Bell Command + # + # This program is executed whenever the bell is rung. + # + # When set to `command: None`, no command will be executed. + # + # Example: + # command: + # program: notify-send + # args: ["Hello, World!"] + # + #command: None + +# 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: 1.0 + +#selection: + # This string contains all characters that are used as separators for + # "semantic words" in Alacritty. + #semantic_escape_chars: ",│`|:\"' ()[]{}<>\t" + + # When set to `true`, selected text will be copied to the primary clipboard. + #save_to_clipboard: false + +#cursor: + # Cursor style + #style: + # Cursor shape + # + # Values for `shape`: + # - ▇ Block + # - _ Underline + # - | Beam + #shape: Block + + # Cursor blinking state + # + # Values for `blinking`: + # - Never: Prevent the cursor from ever blinking + # - Off: Disable blinking by default + # - On: Enable blinking by default + # - Always: Force the cursor to always blink + #blinking: Off + + # Vi mode cursor style + # + # If the vi mode cursor style is `None` or not specified, it will fall back to + # the style of the active value of the normal cursor. + # + # See `cursor.style` for available options. + #vi_mode_style: None + + # Cursor blinking interval in milliseconds. + #blink_interval: 750 + + # If this is `true`, the cursor will be rendered as a hollow box when the + # window is not focused. + #unfocused_hollow: true + + # Thickness of the cursor relative to the cell width as floating point number + # from `0.0` to `1.0`. + #thickness: 0.15 + +# 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 + +# 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 + +# Send ESC (\x1b) before characters when alt is pressed. +#alt_send_esc: true + +#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 `launcher: 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. +# +# To trigger mouse bindings when an application running within Alacritty +# captures the mouse, the `Shift` modifier is automatically added as a +# requirement. +# +# 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 +# +# - ToggleViMode +# - SearchForward +# Start searching toward the right of the search origin. +# - SearchBackward +# Start searching toward the left of the search origin. +# - Copy +# - Paste +# - IncreaseFontSize +# - DecreaseFontSize +# - ResetFontSize +# - ScrollPageUp +# - ScrollPageDown +# - ScrollHalfPageUp +# - ScrollHalfPageDown +# - ScrollLineUp +# - ScrollLineDown +# - ScrollToTop +# - ScrollToBottom +# - ClearHistory +# Remove the terminal's scrollback history. +# - Hide +# Hide the Alacritty window. +# - Minimize +# Minimize the Alacritty window. +# - Quit +# Quit Alacritty. +# - ToggleFullscreen +# - SpawnNewInstance +# Spawn a new instance of Alacritty. +# - ClearLogNotice +# Clear Alacritty's UI warning and error notice. +# - ClearSelection +# Remove the active selection. +# - ReceiveChar +# - None +# +# - Vi mode exclusive actions: +# +# - Open +# Open URLs at the cursor location with the launcher configured in +# `url.launcher`. +# - ToggleNormalSelection +# - ToggleLineSelection +# - ToggleBlockSelection +# - ToggleSemanticSelection +# Toggle semantic selection based on `selection.semantic_escape_chars`. +# +# - Vi mode exclusive cursor motion actions: +# +# - Up +# One line up. +# - Down +# One line down. +# - Left +# One character left. +# - Right +# One character right. +# - First +# First column, or beginning of the line when already at the first column. +# - Last +# Last column, or beginning of the line when already at the last column. +# - FirstOccupied +# First non-empty cell in this terminal row, or first non-empty cell of +# the line when already at the first cell of the row. +# - High +# Top of the screen. +# - Middle +# Center of the screen. +# - Low +# Bottom of the screen. +# - SemanticLeft +# Start of the previous semantically separated word. +# - SemanticRight +# Start of the next semantically separated word. +# - SemanticLeftEnd +# End of the previous semantically separated word. +# - SemanticRightEnd +# End of the next semantically separated word. +# - WordLeft +# Start of the previous whitespace separated word. +# - WordRight +# Start of the next whitespace separated word. +# - WordLeftEnd +# End of the previous whitespace separated word. +# - WordRightEnd +# End of the next whitespace separated word. +# - Bracket +# Character matching the bracket at the cursor's location. +# - SearchNext +# Beginning of the next match. +# - SearchPrevious +# Beginning of the previous match. +# - SearchStart +# Start of the match to the left of the vi mode cursor. +# - SearchEnd +# End of the match to the right of the vi mode cursor. +# +# - Search mode exclusive actions: +# - SearchFocusNext +# Move the focus to the next search match. +# - SearchFocusPrevious +# Move the focus to the previous search match. +# - SearchConfirm +# - SearchCancel +# - SearchClear +# Reset the search regex. +# - SearchDeleteWord +# Delete the last word in the search regex. +# - SearchHistoryPrevious +# Go to the previous regex in the search history. +# - SearchHistoryNext +# Go to the next regex in the search history. +# +# - macOS exclusive actions: +# - ToggleSimpleFullscreen +# Enter fullscreen without occupying another space. +# +# - Linux/BSD exclusive actions: +# +# - CopySelection +# Copy from the selection buffer. +# - PasteSelection +# Paste from the selection buffer. +# +# - `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 +# - Search +# - Alt +# - Vi +# +# 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. +# +# If the same trigger is assigned to multiple actions, all of them are executed +# in the order they were defined in. +#key_bindings: + #- { key: Paste, action: Paste } + #- { key: Copy, action: Copy } + #- { key: L, mods: Control, action: ClearLogNotice } + #- { key: L, mods: Control, mode: ~Vi|~Search, chars: "\x0c" } + #- { key: PageUp, mods: Shift, mode: ~Alt, action: ScrollPageUp, } + #- { key: PageDown, mods: Shift, mode: ~Alt, action: ScrollPageDown } + #- { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop, } + #- { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom } + + # Vi Mode + #- { key: Space, mods: Shift|Control, mode: Vi|~Search, action: ScrollToBottom } + #- { key: Space, mods: Shift|Control, mode: ~Search, action: ToggleViMode } + #- { key: Escape, mode: Vi|~Search, action: ClearSelection } + #- { key: I, mode: Vi|~Search, action: ScrollToBottom } + #- { key: I, mode: Vi|~Search, action: ToggleViMode } + #- { key: C, mods: Control, mode: Vi|~Search, action: ToggleViMode } + #- { key: Y, mods: Control, mode: Vi|~Search, action: ScrollLineUp } + #- { key: E, mods: Control, mode: Vi|~Search, action: ScrollLineDown } + #- { key: G, mode: Vi|~Search, action: ScrollToTop } + #- { key: G, mods: Shift, mode: Vi|~Search, action: ScrollToBottom } + #- { key: B, mods: Control, mode: Vi|~Search, action: ScrollPageUp } + #- { key: F, mods: Control, mode: Vi|~Search, action: ScrollPageDown } + #- { key: U, mods: Control, mode: Vi|~Search, action: ScrollHalfPageUp } + #- { key: D, mods: Control, mode: Vi|~Search, action: ScrollHalfPageDown } + #- { key: Y, mode: Vi|~Search, action: Copy } + #- { key: Y, mode: Vi|~Search, action: ClearSelection } + #- { key: Copy, mode: Vi|~Search, action: ClearSelection } + #- { key: V, mode: Vi|~Search, action: ToggleNormalSelection } + #- { key: V, mods: Shift, mode: Vi|~Search, action: ToggleLineSelection } + #- { key: V, mods: Control, mode: Vi|~Search, action: ToggleBlockSelection } + #- { key: V, mods: Alt, mode: Vi|~Search, action: ToggleSemanticSelection } + #- { key: Return, mode: Vi|~Search, action: Open } + #- { key: K, mode: Vi|~Search, action: Up } + #- { key: J, mode: Vi|~Search, action: Down } + #- { key: H, mode: Vi|~Search, action: Left } + #- { key: L, mode: Vi|~Search, action: Right } + #- { key: Up, mode: Vi|~Search, action: Up } + #- { key: Down, mode: Vi|~Search, action: Down } + #- { key: Left, mode: Vi|~Search, action: Left } + #- { key: Right, mode: Vi|~Search, action: Right } + #- { key: Key0, mode: Vi|~Search, action: First } + #- { key: Key4, mods: Shift, mode: Vi|~Search, action: Last } + #- { key: Key6, mods: Shift, mode: Vi|~Search, action: FirstOccupied } + #- { key: H, mods: Shift, mode: Vi|~Search, action: High } + #- { key: M, mods: Shift, mode: Vi|~Search, action: Middle } + #- { key: L, mods: Shift, mode: Vi|~Search, action: Low } + #- { key: B, mode: Vi|~Search, action: SemanticLeft } + #- { key: W, mode: Vi|~Search, action: SemanticRight } + #- { key: E, mode: Vi|~Search, action: SemanticRightEnd } + #- { key: B, mods: Shift, mode: Vi|~Search, action: WordLeft } + #- { key: W, mods: Shift, mode: Vi|~Search, action: WordRight } + #- { key: E, mods: Shift, mode: Vi|~Search, action: WordRightEnd } + #- { key: Key5, mods: Shift, mode: Vi|~Search, action: Bracket } + #- { key: Slash, mode: Vi|~Search, action: SearchForward } + #- { key: Slash, mods: Shift, mode: Vi|~Search, action: SearchBackward } + #- { key: N, mode: Vi|~Search, action: SearchNext } + #- { key: N, mods: Shift, mode: Vi|~Search, action: SearchPrevious } + + # Search Mode + #- { key: Return, mode: Search|Vi, action: SearchConfirm } + #- { key: Escape, mode: Search, action: SearchCancel } + #- { key: C, mods: Control, mode: Search, action: SearchCancel } + #- { key: U, mods: Control, mode: Search, action: SearchClear } + #- { key: W, mods: Control, mode: Search, action: SearchDeleteWord } + #- { key: P, mods: Control, mode: Search, action: SearchHistoryPrevious } + #- { key: N, mods: Control, mode: Search, action: SearchHistoryNext } + #- { key: Up, mode: Search, action: SearchHistoryPrevious } + #- { key: Down, mode: Search, action: SearchHistoryNext } + #- { key: Return, mode: Search|~Vi, action: SearchFocusNext } + #- { key: Return, mods: Shift, mode: Search|~Vi, action: SearchFocusPrevious } + + # (Windows, Linux, and BSD only) + #- { key: V, mods: Control|Shift, mode: ~Vi, action: Paste } + #- { key: C, mods: Control|Shift, action: Copy } + #- { key: F, mods: Control|Shift, mode: ~Search, action: SearchForward } + #- { key: B, mods: Control|Shift, mode: ~Search, action: SearchBackward } + #- { key: C, mods: Control|Shift, mode: Vi|~Search, action: ClearSelection } + #- { key: Insert, mods: Shift, action: PasteSelection } + #- { key: Key0, mods: Control, action: ResetFontSize } + #- { key: Equals, mods: Control, action: IncreaseFontSize } + #- { key: Plus, mods: Control, action: IncreaseFontSize } + #- { key: NumpadAdd, mods: Control, action: IncreaseFontSize } + #- { key: Minus, mods: Control, action: DecreaseFontSize } + #- { key: NumpadSubtract, mods: Control, action: DecreaseFontSize } + + # (Windows only) + #- { key: Return, mods: Alt, action: ToggleFullscreen } + + # (macOS only) + #- { key: K, mods: Command, mode: ~Vi|~Search, chars: "\x0c" } + #- { key: K, mods: Command, mode: ~Vi|~Search, action: ClearHistory } + #- { key: Key0, mods: Command, action: ResetFontSize } + #- { key: Equals, mods: Command, action: IncreaseFontSize } + #- { key: Plus, mods: Command, action: IncreaseFontSize } + #- { key: NumpadAdd, mods: Command, action: IncreaseFontSize } + #- { key: Minus, mods: Command, action: DecreaseFontSize } + #- { key: NumpadSubtract, mods: Command, action: DecreaseFontSize } + #- { key: V, mods: Command, action: Paste } + #- { key: C, mods: Command, action: Copy } + #- { key: C, mods: Command, mode: Vi|~Search, action: ClearSelection } + #- { key: H, mods: Command, action: Hide } + #- { key: M, mods: Command, action: Minimize } + #- { key: Q, mods: Command, action: Quit } + #- { key: W, mods: Command, action: Quit } + #- { key: N, mods: Command, action: SpawnNewInstance } + #- { key: F, mods: Command|Control, action: ToggleFullscreen } + #- { key: F, mods: Command, mode: ~Search, action: SearchForward } + #- { key: B, mods: Command, mode: ~Search, action: SearchBackward } + +#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`: + # - Off + # - Error + # - Warn + # - Info + # - Debug + # - Trace + #log_level: Warn + + # Print all received window events. + #print_events: false diff --git a/alacritty/default.nix b/alacritty/default.nix new file mode 100644 index 0000000..c5681b0 --- /dev/null +++ b/alacritty/default.nix @@ -0,0 +1,35 @@ +{ + + pkgs ? (import ../pkgs.nix) {}, + zsh ? pkgs.zsh, + +}: rec { + + # TODO figure out a way to provide my font to alacritty at runtime. fontconfig + # is a hot mess... + # + #dataDir = pkgs.stdenv.mkDerivation { + # name = "alacritty-dataDir"; + # src = ./fonts; + # buildInputs = [ pkgs.fontconfig ]; + # builder = builtins.toFile "builder.sh" '' + # source $stdenv/setup + # mkdir "$out" + # cp -r "$src" "$out"/fonts + # chmod -R +w "$out" + + # env + + # export FONTCONFIG_FILE="$out"/fontconfig + # fc-cache --verbose "$out"/fonts + + # ''; + #}; + + alacritty = pkgs.writeScriptBin "alacritty" '' + #!${pkgs.bash}/bin/bash + exec ${pkgs.nixgl}/bin/nixGLIntel ${pkgs.alacritty}/bin/alacritty \ + --config-file ${./alacritty.yml} \ + -e "${zsh}/bin/zsh" + ''; +} diff --git a/alacritty/fonts/SourceCodePro-Black.ttf b/alacritty/fonts/SourceCodePro-Black.ttf new file mode 100644 index 0000000..ea73e60 Binary files /dev/null and b/alacritty/fonts/SourceCodePro-Black.ttf differ diff --git a/alacritty/fonts/SourceCodePro-Bold.ttf b/alacritty/fonts/SourceCodePro-Bold.ttf new file mode 100644 index 0000000..a56f1fa Binary files /dev/null and b/alacritty/fonts/SourceCodePro-Bold.ttf differ diff --git a/alacritty/fonts/SourceCodePro-ExtraLight.ttf b/alacritty/fonts/SourceCodePro-ExtraLight.ttf new file mode 100644 index 0000000..f409b71 Binary files /dev/null and b/alacritty/fonts/SourceCodePro-ExtraLight.ttf differ diff --git a/alacritty/fonts/SourceCodePro-Light.ttf b/alacritty/fonts/SourceCodePro-Light.ttf new file mode 100644 index 0000000..51eb963 Binary files /dev/null and b/alacritty/fonts/SourceCodePro-Light.ttf differ diff --git a/alacritty/fonts/SourceCodePro-Medium.ttf b/alacritty/fonts/SourceCodePro-Medium.ttf new file mode 100644 index 0000000..1ee45eb Binary files /dev/null and b/alacritty/fonts/SourceCodePro-Medium.ttf differ diff --git a/alacritty/fonts/SourceCodePro-Regular.ttf b/alacritty/fonts/SourceCodePro-Regular.ttf new file mode 100644 index 0000000..b2cff92 Binary files /dev/null and b/alacritty/fonts/SourceCodePro-Regular.ttf differ diff --git a/alacritty/fonts/SourceCodePro-Semibold.ttf b/alacritty/fonts/SourceCodePro-Semibold.ttf new file mode 100644 index 0000000..b425f9c Binary files /dev/null and b/alacritty/fonts/SourceCodePro-Semibold.ttf differ diff --git a/appimage.nix b/appimage.nix new file mode 100644 index 0000000..04778e5 --- /dev/null +++ b/appimage.nix @@ -0,0 +1,17 @@ +{ + + pkgsSrc ? ./pkgs.nix, + +}: let + + nixBundle = builtins.fetchGit { + url = "https://github.com/matthewbauer/nix-bundle.git"; + rev = "223f4ffc4179aa318c34dc873a08cb00090db829"; + }; + + appimageTop = (import "${nixBundle}/appimage-top.nix") { + nixpkgs' = pkgsSrc; + }; + +in { name, target }: + appimageTop.appimage (appimageTop.appdir { inherit name target; }) diff --git a/awesome/awesome.desktop b/awesome/awesome.desktop new file mode 100644 index 0000000..1945e7a --- /dev/null +++ b/awesome/awesome.desktop @@ -0,0 +1,9 @@ +# For use in ubuntu, just copy into /usr/share/xsessions + +[Desktop Entry] +Name=awesome +Comment=Highly configurable framework window manager +Exec=/home/mediocregopher/.nix-profile/bin/awesome +Type=Application +Icon=/usr/share/pixmaps/awesome.xpm +Keywords=Window manager diff --git a/awesome/bat.lua b/awesome/bat.lua new file mode 100644 index 0000000..a5348d6 --- /dev/null +++ b/awesome/bat.lua @@ -0,0 +1,43 @@ +local io = io +local math = math +local tonumber = tonumber +local string = string +local naughty = require("naughty") + +function batteryInfo() + for i=0,1 do + local dir = "/sys/class/power_supply/BAT" .. tostring(i) .. "/" + local f_status = io.popen("cat " .. dir .. "status 2>/dev/null") + local c_status = f_status:read() + f_status:close() + + if c_status and c_status ~= "" then + local prefix = "energy" + local f_now = io.popen("cat " .. dir .. prefix .. "_now 2>/dev/null") + local c_now_str = f_now:read() + f_now:close() + + if not c_now_str or c_now_str == "" then + prefix = "charge" + local f_now = io.popen("cat " .. dir .. prefix .. "_now") + c_now_str = f_now:read() + f_now:close() + end + + local f_full = io.popen("cat " .. dir .. prefix .. "_full") + local c_full_str = f_full:read() + f_full:close() + + local c_now = tonumber(c_now_str) + local c_full = tonumber(c_full_str) + + local charging = (c_status == "Charging" or c_status == "Full") + + if c_now ~= nil and c_full ~= nil then + local percent = math.floor((c_now/c_full) * 100) + return percent, charging + end + end + end + return nil, charging +end diff --git a/awesome/bin/cricket b/awesome/bin/cricket new file mode 100755 index 0000000..b8d5699 Binary files /dev/null and b/awesome/bin/cricket differ diff --git a/awesome/bin/imgavg b/awesome/bin/imgavg new file mode 100755 index 0000000..f839d31 Binary files /dev/null and b/awesome/bin/imgavg differ diff --git a/awesome/bin/random_i3lock.sh b/awesome/bin/random_i3lock.sh new file mode 100755 index 0000000..e5f4e16 --- /dev/null +++ b/awesome/bin/random_i3lock.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +R=`find "$1" | grep -P 'png$' | sort -R | head -n1` +exec i3lock -i $R -t diff --git a/awesome/bin/scrot-gobin.sh b/awesome/bin/scrot-gobin.sh new file mode 100755 index 0000000..33bfc9f --- /dev/null +++ b/awesome/bin/scrot-gobin.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +scrot -o -s "/tmp/shot.png" +eog /tmp/shot.png diff --git a/awesome/bin/sysstats.sh b/awesome/bin/sysstats.sh new file mode 100755 index 0000000..f42588e --- /dev/null +++ b/awesome/bin/sysstats.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +cd $(dirname "$0") + +sep=" | " + +out=$(/home/mediocregopher/.config/awesome/bin/cricket \ + --limit 1 \ + --ping-hosts 8.8.8.8 \ + --net-interval "" \ + --disk-interval "" \ + --disk-io-interval "") + +function outNum { + echo "$out" | grep "$1" | grep -oP "$2=\"[0-9]+\"" | grep -oP '[0-9]+' +} + +echo -n "ping:$(outNum "ping result" "tookMSAvg")ms" + +echo -n "$sep" + +memBarSize=10 +memPer=$(outNum "mem stats" "memUsedPer") +memUsed=$(expr $memPer / $memBarSize) +memUnused=$(expr $memBarSize - $memUsed) +echo -n "mem:" +for i in $(seq $memUsed); do echo -n "█"; done +for i in $(seq $memUnused); do echo -n "░"; done +for i in $(seq $(expr $memBarSize - $memUsed - $memUnused)); do echo -n "░"; done + +echo -n "$sep" + +cpuBarSize=20 +cpuIdle=$(outNum "cpu stats" "cpuIdle") +cpuSys=$(outNum "cpu stats" "cpuSystem") +cpuUser=$(outNum "cpu stats" "cpuUser") +cpuTot=$(expr $cpuIdle + $cpuSys + $cpuUser) +function cpuL { + python -c "print(int($1 / $cpuTot * $cpuBarSize))" +} +cpuLIdle=$(cpuL $cpuIdle) +cpuLSys=$(cpuL $cpuSys) +cpuLUser=$(cpuL $cpuUser) +echo -n "cpu:" +for i in $(seq $cpuLUser); do echo -n "█"; done +for i in $(seq $cpuLSys); do echo -n "▓"; done +for i in $(seq $cpuLIdle); do echo -n "░"; done +for i in $(seq $(expr $cpuBarSize - $cpuLIdle - $cpuLSys - $cpuLUser)); do echo -n "░"; done + +echo "" diff --git a/awesome/default.nix b/awesome/default.nix new file mode 100644 index 0000000..8b52d9c --- /dev/null +++ b/awesome/default.nix @@ -0,0 +1,26 @@ +{ + + pkgs ? (import ../pkgs.nix) {}, + +}: rec { + + cfg = ./.; + wp = ../wallpapers; + + dirsLua = pkgs.writeTextDir "dirs.lua" '' + home_dir = os.getenv("HOME").."/" + conf_dir = "${cfg}/" + wp_dir = "${wp}/" + ''; + + awesome = pkgs.writeScriptBin "awesome" '' + #!${pkgs.bash}/bin/bash + echo "[$(date)] New awesome session starting" > ~/.awesome.log + exec ${pkgs.awesome}/bin/awesome \ + -c ${cfg}/rc.lua \ + --search ${dirsLua} \ + --search ${cfg} \ + 2>&1 2>>~/.awesome.log + ''; + +} diff --git a/awesome/helper.png b/awesome/helper.png new file mode 100644 index 0000000..4b43bf7 Binary files /dev/null and b/awesome/helper.png differ diff --git a/awesome/mediocregopher-sysstats.service b/awesome/mediocregopher-sysstats.service new file mode 100644 index 0000000..bac39ba --- /dev/null +++ b/awesome/mediocregopher-sysstats.service @@ -0,0 +1,13 @@ +[Unit] +Description=mediocregopher's sysstats +Requires=network.target +After=network.target + +[Service] +Restart=always +RestartSec=1s +User=mediocregopher +ExecStart=/bin/bash -c 'while [ 1 ]; do out=$(~/.config/awesome/bin/sysstats.sh); echo "$out" > /tmp/sysstats; sleep 1; done' + +[Install] +WantedBy=multi-user.target diff --git a/awesome/pulseaudio.lua b/awesome/pulseaudio.lua new file mode 100644 index 0000000..765fd12 --- /dev/null +++ b/awesome/pulseaudio.lua @@ -0,0 +1,40 @@ +local io = io +local math = math +local tonumber = tonumber +local tostring = tostring +local string = string +local naughty = require("naughty") + +function volumeInfo() + volmin = 0 + volmax = 65536 + local f = io.popen("pacmd dump |grep set-sink-volume|grep analog-stereo") + local g = io.popen("pacmd dump |grep set-sink-mute|grep analog-stereo") + local v = f:read() + local mute = g:read() + if mute ~= nil and string.find(mute, "no") then + volume = math.floor(tonumber(string.sub(v, string.find(v, 'x')-1)) * 100 / volmax) + else + volume = "off" + end + f:close() + g:close() + return "vol:"..volume.." " +end + +function muteAll() + local outh = io.popen("pactl list short sources | awk '{print $1}'") + while true do + local i = outh:read() + if i == nil then break end + io.popen("pactl set-source-mute " .. i .. " 1"):close() + end + outh:close() +end + +function unmuted() + local outh = io.popen("pactl list sources | grep 'Mute: no'") + local any = outh:read() + outh:close() + return any ~= nil +end diff --git a/awesome/rc.lua b/awesome/rc.lua new file mode 100644 index 0000000..5ec053e --- /dev/null +++ b/awesome/rc.lua @@ -0,0 +1,544 @@ +-- Standard awesome library +local gears = require("gears") +local awful = require("awful") +awful.rules = require("awful.rules") +require("awful.autofocus") +-- Widget and layout library +local wibox = require("wibox") +-- Notification library +local naughty = require("naughty") +local menubar = require("menubar") + +local function debug(msg) + if not msg then msg = "" end + naughty.notify({ text = "debug: " .. msg }) +end + +local function info(msg) + naughty.notify({ text = msg }) +end + +require("dirs") +require("bat") +require("pulseaudio") +muteAll() -- pre-emptively mute all mics, just in-case + +-- for sanity +local home_dir = os.getenv("HOME").."/" + +-- {{{ Naughty config (the notification library) +naughty.config.defaults.position = "bottom_right" +naughty.config.defaults.width = 250 +naughty.config.defaults.icon=conf_dir .. "helper.png" +naughty.config.defaults.icon_size = 75 +-- }}} + +-- {{{ Error handling +-- Check if awesome encountered an error during startup and fell back to +-- another config (This code will only ever execute for the fallback config) +if awesome.startup_errors then + naughty.notify({ preset = naughty.config.presets.critical, + title = "Oops, there were errors during startup!", + text = awesome.startup_errors }) +end + +-- Handle runtime errors after startup +do + local in_error = false + awesome.connect_signal("debug::error", function (err) + -- Make sure we don't go into an endless error loop + if in_error then return end + in_error = true + + naughty.notify({ preset = naughty.config.presets.critical, + title = "Oops, an error happened!", + text = err }) + in_error = false + end) +end +-- }}} + + +local beautiful = require("beautiful") + +-- {{{ Wallpaper +-- we do this here, before the theme is loaded, because our theme depends on +-- knowing what our wallpaper is, cause this shit is cray +function rand_wp() + local ls = io.popen("ls " .. wp_dir .. " | shuf -n1") + local wp = ls:read("*l") + return wp_dir .. '/' .. wp +end + +function rand_wp_lock() + awful.spawn(conf_dir.."bin/random_i3lock.sh "..wp_dir, false) +end + +local wp = rand_wp() +local imgavg = io.popen("cat " .. wp .. " | " .. conf_dir .. "/bin/imgavg") +local avgcolor = imgavg:read() +local comcolor = imgavg:read() +imgavg:close() + +for s = 1, screen.count() do + gears.wallpaper.maximized(wp, s, true) +end +-- }}} + +require("theme/theme") +local theme = load_theme(avgcolor, comcolor) +beautiful.init(theme) + +-- This is used later as the default terminal and editor to run. +terminal = "alacritty" + +editor = os.getenv("EDITOR") or "nano" +editor_cmd = terminal .. " -e " .. editor + +-- Default modkey. +-- Usually, Mod4 is the key with a logo between Control and Alt. +-- If you do not like this or do not have such a key, +-- I suggest you to remap Mod4 to another key using xmodmap or other tools. +-- However, you can use another modifier like Mod1, but it may interact with others. +modkey = "Mod4" + +-- Table of layouts to cover with awful.layout.inc, order matters. +local layouts = +{ + awful.layout.suit.fair, + awful.layout.suit.fair.horizontal, + awful.layout.suit.tile, + awful.layout.suit.tile.left, + awful.layout.suit.tile.bottom, + awful.layout.suit.tile.top, + -- awful.layout.suit.spiral, + -- awful.layout.suit.spiral.dwindle, + -- awful.layout.suit.max, + -- awful.layout.suit.max.fullscreen, + -- awful.layout.suit.magnifier, + awful.layout.suit.floating +} +-- }}} + + +-- {{{ Tags +-- Define a tag table which hold all screen tags. +tags = {} +for s = 1, screen.count() do + -- Each screen has its own tag table. + tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, layouts[1]) +end +-- }}} + +-- Menubar configuration +menubar.utils.terminal = terminal -- Set the terminal for applications that require it + +-- {{{ Wibox + +-- {{{ Battery widget +local battimerintvl = 4 +batwidget = wibox.widget.textbox("") +battimer = gears.timer({ timeout = battimerintvl }) +battimer:connect_signal("timeout", + function() + local batlevel, charging = batteryInfo() + if batlevel == nil then batlevel = "unk" + elseif (tonumber(batlevel) < 10) then + naughty.notify({ + preset = naughty.config.presets.critical, + title="ALERT", + text="BATTERY LEVEL LOW", + timeout=battimerintvl-1, + }) + end + if charging then + batwidget:set_markup('bat:'..batlevel) + else + batwidget:set_markup('bat:'..batlevel..'') + end + end) +battimer:start() +-- }}} + +-- {{{ sysstats widget +sysstatswidget = wibox.widget.textbox("") +sysstatstimer = gears.timer({ timeout = 1 }) +sysstatstimer:connect_signal("timeout", + function() + local sysstats = "??? STATS ???" + local f_sysstats = io.open("/tmp/sysstats") + if f_sysstats then + c_sysstats = f_sysstats:read() + f_sysstats:close() + if c_sysstats then sysstats = c_sysstats end + end + sysstatswidget:set_markup(sysstats) + end) +sysstatstimer:start() +-- }}} + +-- {{{ notifier for when my mic isn't muted +local unmuteNot +mutechecktimer = gears.timer({ timeout = 0.5 }) +mutechecktimer:connect_signal("timeout", + function() + local anyUnmuted = unmuted() + if unmuteNot and not anyUnmuted then + naughty.destroy(unmuteNot, naughty.notificationClosedReason.dismissedByUser) + unmuteNot = nil + elseif not unmuteNot and anyUnmuted then + unmuteNot = naughty.notify({ + preset = naughty.config.presets.critical, + text = "Mic is hot!", + timeout = 0, + }) + end + end) +mutechecktimer:start() +-- }}} + + +-- Create a textclock widget +mytextclock = wibox.widget.textclock("%a %d/%m %H:%M %z") +myutctextclock = wibox.widget.textclock("%a %d/%m %H:%M %z", 60, "Z") + +-- Create a wibox for each screen and add it +mywibox = {} +mypromptbox = {} +mylayoutbox = {} +mytaglist = {} +mytaglist.buttons = awful.util.table.join( + awful.button({ }, 1, awful.tag.viewonly), + awful.button({ modkey }, 1, awful.client.movetotag), + awful.button({ }, 3, awful.tag.viewtoggle), + awful.button({ modkey }, 3, awful.client.toggletag), + awful.button({ }, 4, function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end), + awful.button({ }, 5, function(t) awful.tag.viewprev(awful.tag.getscreen(t)) end) + ) +mytasklist = {} +mytasklist.buttons = awful.util.table.join( + awful.button({ }, 1, function (c) + if c == client.focus then + c.minimized = true + else + -- Without this, the following + -- :isvisible() makes no sense + c.minimized = false + if not c:isvisible() then + awful.tag.viewonly(c:tags()[1]) + end + -- This will also un-minimize + -- the client, if needed + client.focus = c + c:raise() + end + end), + awful.button({ }, 3, function () + if instance then + instance:hide() + instance = nil + else + instance = awful.menu.clients({ + theme = { width = 250 } + }) + end + end), + awful.button({ }, 4, function () + awful.client.focus.byidx(1) + if client.focus then client.focus:raise() end + end), + awful.button({ }, 5, function () + awful.client.focus.byidx(-1) + if client.focus then client.focus:raise() end + end)) + +for s = 1, screen.count() do + -- Create a promptbox for each screen + mypromptbox[s] = awful.widget.prompt() + -- Create an imagebox widget which will contains an icon indicating which layout we're using. + -- We need one layoutbox per screen. + mylayoutbox[s] = awful.widget.layoutbox(s) + mylayoutbox[s]:buttons(awful.util.table.join( + awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end), + awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end), + awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end), + awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end))) + -- Create a taglist widget + mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.filter.all, mytaglist.buttons) + + -- Create a tasklist widget + mytasklist[s] = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, mytasklist.buttons) + + -- Create the wibox + mywibox[s] = awful.wibar({ position = "top", screen = s }) + + -- Widgets that are aligned to the left + local left_layout = wibox.layout.fixed.horizontal() + left_layout:add(mylayoutbox[s]) + left_layout:add(mypromptbox[s]) + + -- Widgets that are aligned to the right + local right_sep = " | " + local right_layout = wibox.layout.fixed.horizontal() + --right_layout:add(wibox.widget.textbox(right_sep)) + right_layout:add(sysstatswidget) + right_layout:add(wibox.widget.textbox(right_sep)) + right_layout:add(batwidget) + right_layout:add(wibox.widget.textbox(right_sep)) + right_layout:add(wibox.widget.systray()) + right_layout:add(wibox.widget.textbox(right_sep)) + right_layout:add(mytaglist[s]) + right_layout:add(wibox.widget.textbox(right_sep)) + right_layout:add(myutctextclock) + right_layout:add(wibox.widget.textbox(right_sep)) + right_layout:add(mytextclock) + + -- Now bring it all together (with the tasklist in the middle) + local layout = wibox.layout.align.horizontal() + layout:set_left(left_layout) + layout:set_middle(mytasklist[s]) + layout:set_right(right_layout) + + mywibox[s]:set_widget(layout) +end +-- }}} + +local function focused() + return awful.screen.focused().index +end + +-- {{{ Mouse bindings +root.buttons(awful.util.table.join( + -- awful.button({ }, 3, function () mymainmenu:toggle() end), + awful.button({ }, 4, awful.tag.viewnext), + awful.button({ }, 5, awful.tag.viewprev) +)) +-- }}} + +-- {{{ Key bindings +globalkeys = awful.util.table.join( + awful.key({ modkey, }, "Left", awful.tag.viewprev ), + awful.key({ modkey, }, "Right", awful.tag.viewnext ), + + -- j and k are used for moving around windows and moving windows around + awful.key({ modkey, }, "j", + function () + awful.client.focus.byidx( 1) + if client.focus then client.focus:raise() end + end), + awful.key({ modkey, }, "k", + function () + awful.client.focus.byidx(-1) + if client.focus then client.focus:raise() end + end), + awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end), + awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end), + awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end), + awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end), + + -- h and l are for resizing + awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end), + awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end), + awful.key({ modkey, "Control" }, "h", function () awful.tag.incnmaster( 1) end), + awful.key({ modkey, "Control" }, "l", function () awful.tag.incnmaster(-1) end), + + -- Space is for changing the layout + awful.key({ modkey, }, "space", function () awful.layout.inc(layouts, 1) end), + awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end), + + + -- r is for restart, awesome or the whole computer + awful.key({ modkey }, "r", awesome.restart), + awful.key({ modkey, "Control" }, "r", + function () + info("rebooting") + awful.spawn("systemctl reboot") + end), + + -- Escape is for quitting, either the current program, all of awesome, or + -- or all of everything (suspend) (current program is under clientkeys) + awful.key({ modkey, "Control" }, "Escape", awesome.quit), + awful.key({ modkey, "Control", "Shift" }, "Escape", + function () + info("hibernating") + awful.spawn("systemctl hibernate") + end), + + -- n is for minimizing and unminimizing (minimmize is implemented under + -- clientkeys) + awful.key({ modkey, "Control" }, "n", awful.client.restore), + + -- Prompt + awful.key({ modkey }, "p", function () + local screen = awful.screen.focused().index + mywibox[screen].visible = true + mypromptbox[screen]:run() + end), + + --Terminal + awful.key({ modkey }, "Return", function () + awful.spawn(terminal) + end), + + --PrintScreen + awful.key({}, "Print", false, function () awful.spawn(conf_dir.."bin/scrot-gobin.sh",false) end), + awful.key({ "Control" }, "Print", function () + local scr_dir = home_dir..'Screenshots' + awful.spawn("mkdir -p "..scr_dir, false) + awful.spawn("scrot -e 'mv $f "..scr_dir.."/ 2>/dev/null'",false) + naughty.notify({ text = "Screenshot taken" }) + end), + + --Lock screen + awful.key({ modkey, "Control" }, "Delete", rand_wp_lock), + + awful.key( { }, "XF86AudioRaiseVolume", function() + awful.spawn("/usr/bin/pactl set-sink-volume @DEFAULT_SINK@ +5%", false) + awful.spawn("/usr/bin/pactl set-sink-mute @DEFAULT_SINK@ 0", false) + end), + + awful.key( { }, "XF86AudioLowerVolume", function() + awful.spawn("/usr/bin/pactl set-sink-volume @DEFAULT_SINK@ -5%", false) + awful.spawn("/usr/bin/pactl set-sink-mute @DEFAULT_SINK@ 0", false) + end), + + awful.key( { }, "XF86AudioMute", function() + awful.spawn("/usr/bin/pactl set-sink-mute @DEFAULT_SINK@ toggle", false) + end), + + awful.key( { }, "XF86MonBrightnessUp", function() + awful.spawn("/usr/bin/xbacklight -inc 5", false) + end), + + awful.key( { }, "XF86MonBrightnessDown", function() + awful.spawn("/usr/bin/xbacklight -dec 5", false) + end), + + -- Push to talk + awful.key( { modkey }, "q", function() + awful.spawn("/usr/bin/pactl set-source-mute @DEFAULT_SOURCE@ 0") + end, + muteAll, + { }) +) + +globalkeys = awful.util.table.join(globalkeys, + awful.key( { modkey }, "a", function() + info(tostring(os.time())) + end) +) + +clientkeys = awful.util.table.join( + awful.key({ modkey, }, "f", function (c) c.fullscreen = not c.fullscreen end), + awful.key({ modkey, }, "Escape", function (c) c:kill() end), + awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ), + awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end), + awful.key({ modkey, }, "n", + function (c) + -- The client currently has the input focus, so it cannot be + -- minimized, since minimized clients can't have the focus. + c.minimized = true + end), + awful.key({ modkey, }, "m", + function (c) + c.maximized_horizontal = not c.maximized_horizontal + c.maximized_vertical = not c.maximized_vertical + end) +) + +-- Bind all key numbers to tags. +-- Be careful: we use keycodes to make it works on any keyboard layout. +-- This should map on the top row of your keyboard, usually 1 to 9. +for i = 1, 9 do + globalkeys = awful.util.table.join(globalkeys, + -- View tag only. + awful.key({ modkey }, "#" .. i + 9, + function () + local screen = awful.screen.focused() + local tag = screen.tags[i] + if tag then + tag:view_only() + end + end), + -- Toggle tag. + awful.key({ modkey, "Control" }, "#" .. i + 9, + function () + local screen = awful.screen.focused() + local tag = screen.tags[i] + if tag then + awful.tag.viewtoggle(tag) + end + end), + -- Move client to tag. + awful.key({ modkey, "Shift" }, "#" .. i + 9, + function () + if client.focus then + local screen = awful.screen.focused() + local tag = screen.tags[i] + if tag then + client.focus:move_to_tag(tag) + end + end + end)) +end + +clientbuttons = awful.util.table.join( + awful.button({ }, 1, function (c) client.focus = c; c:raise() end), + awful.button({ modkey }, 1, awful.mouse.client.move), + awful.button({ modkey }, 3, awful.mouse.client.resize)) + +-- Set keys +root.keys(globalkeys) +-- }}} + +-- {{{ Rules +-- Rules to apply to new clients (through the "manage" signal). +awful.rules.rules = { + -- All clients will match this rule. + { rule = { }, + properties = { border_width = beautiful.border_width, + border_color = beautiful.border_normal, + focus = awful.client.focus.filter, + raise = true, + keys = clientkeys, + buttons = clientbuttons } }, + { rule = { class = "MPlayer" }, + properties = { floating = true } }, + { rule = { class = "pinentry" }, + properties = { floating = true } }, + { rule = { class = "gimp" }, + properties = { floating = true } } + -- Set Firefox to always map on tags number 2 of screen 1. + -- { rule = { class = "Firefox" }, + -- properties = { tag = tags[1][2] } }, +} +-- }}} + +-- {{{ Signals +-- Signal function to execute when a new client appears. +client.connect_signal("manage", function (c, startup) + -- Enable sloppy focus + c:connect_signal("mouse::enter", function(c) + if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier + and awful.client.focus.filter(c) then + client.focus = c + end + end) + + if not startup then + -- Set the windows at the slave, + -- i.e. put it at the end of others instead of setting it master. + -- awful.client.setslave(c) + + -- Put windows in a smart way, only if they does not set an initial position. + if not c.size_hints.user_position and not c.size_hints.program_position then + c:move_to_screen(awful.screen.focused()) + awful.placement.no_overlap(c) + awful.placement.no_offscreen(c) + end + end +end) + +client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end) +client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) +-- }}} diff --git a/awesome/theme/README b/awesome/theme/README new file mode 100644 index 0000000..1ddb349 --- /dev/null +++ b/awesome/theme/README @@ -0,0 +1,3 @@ +Background images: + Mikael Eriksson + Licensed under CC-BY-SA-3.0 diff --git a/awesome/theme/background.png b/awesome/theme/background.png new file mode 100644 index 0000000..d72a39e Binary files /dev/null and b/awesome/theme/background.png differ diff --git a/awesome/theme/background_white.png b/awesome/theme/background_white.png new file mode 100644 index 0000000..363ddd6 Binary files /dev/null and b/awesome/theme/background_white.png differ diff --git a/awesome/theme/layouts/dwindle.png b/awesome/theme/layouts/dwindle.png new file mode 100644 index 0000000..943ece5 Binary files /dev/null and b/awesome/theme/layouts/dwindle.png differ diff --git a/awesome/theme/layouts/dwindlew.png b/awesome/theme/layouts/dwindlew.png new file mode 100644 index 0000000..36de1ba Binary files /dev/null and b/awesome/theme/layouts/dwindlew.png differ diff --git a/awesome/theme/layouts/fairh.png b/awesome/theme/layouts/fairh.png new file mode 100644 index 0000000..b4e289d Binary files /dev/null and b/awesome/theme/layouts/fairh.png differ diff --git a/awesome/theme/layouts/fairhw.png b/awesome/theme/layouts/fairhw.png new file mode 100644 index 0000000..514d66d Binary files /dev/null and b/awesome/theme/layouts/fairhw.png differ diff --git a/awesome/theme/layouts/fairv.png b/awesome/theme/layouts/fairv.png new file mode 100644 index 0000000..e5aad70 Binary files /dev/null and b/awesome/theme/layouts/fairv.png differ diff --git a/awesome/theme/layouts/fairvw.png b/awesome/theme/layouts/fairvw.png new file mode 100644 index 0000000..f97ce56 Binary files /dev/null and b/awesome/theme/layouts/fairvw.png differ diff --git a/awesome/theme/layouts/floating.png b/awesome/theme/layouts/floating.png new file mode 100644 index 0000000..cbc7804 Binary files /dev/null and b/awesome/theme/layouts/floating.png differ diff --git a/awesome/theme/layouts/floatingw.png b/awesome/theme/layouts/floatingw.png new file mode 100644 index 0000000..7ddf7ae Binary files /dev/null and b/awesome/theme/layouts/floatingw.png differ diff --git a/awesome/theme/layouts/fullscreen.png b/awesome/theme/layouts/fullscreen.png new file mode 100644 index 0000000..46716f5 Binary files /dev/null and b/awesome/theme/layouts/fullscreen.png differ diff --git a/awesome/theme/layouts/fullscreenw.png b/awesome/theme/layouts/fullscreenw.png new file mode 100644 index 0000000..2c3cfad Binary files /dev/null and b/awesome/theme/layouts/fullscreenw.png differ diff --git a/awesome/theme/layouts/magnifier.png b/awesome/theme/layouts/magnifier.png new file mode 100644 index 0000000..1476555 Binary files /dev/null and b/awesome/theme/layouts/magnifier.png differ diff --git a/awesome/theme/layouts/magnifierw.png b/awesome/theme/layouts/magnifierw.png new file mode 100644 index 0000000..97c1d11 Binary files /dev/null and b/awesome/theme/layouts/magnifierw.png differ diff --git a/awesome/theme/layouts/max.png b/awesome/theme/layouts/max.png new file mode 100644 index 0000000..fe70bef Binary files /dev/null and b/awesome/theme/layouts/max.png differ diff --git a/awesome/theme/layouts/maxw.png b/awesome/theme/layouts/maxw.png new file mode 100644 index 0000000..d8debb8 Binary files /dev/null and b/awesome/theme/layouts/maxw.png differ diff --git a/awesome/theme/layouts/spiral.png b/awesome/theme/layouts/spiral.png new file mode 100644 index 0000000..a24faf5 Binary files /dev/null and b/awesome/theme/layouts/spiral.png differ diff --git a/awesome/theme/layouts/spiralw.png b/awesome/theme/layouts/spiralw.png new file mode 100644 index 0000000..f34ceb0 Binary files /dev/null and b/awesome/theme/layouts/spiralw.png differ diff --git a/awesome/theme/layouts/tile.png b/awesome/theme/layouts/tile.png new file mode 100644 index 0000000..071a385 Binary files /dev/null and b/awesome/theme/layouts/tile.png differ diff --git a/awesome/theme/layouts/tilebottom.png b/awesome/theme/layouts/tilebottom.png new file mode 100644 index 0000000..aeedbe2 Binary files /dev/null and b/awesome/theme/layouts/tilebottom.png differ diff --git a/awesome/theme/layouts/tilebottomw.png b/awesome/theme/layouts/tilebottomw.png new file mode 100644 index 0000000..f42da9d Binary files /dev/null and b/awesome/theme/layouts/tilebottomw.png differ diff --git a/awesome/theme/layouts/tileleft.png b/awesome/theme/layouts/tileleft.png new file mode 100644 index 0000000..ab55e08 Binary files /dev/null and b/awesome/theme/layouts/tileleft.png differ diff --git a/awesome/theme/layouts/tileleftw.png b/awesome/theme/layouts/tileleftw.png new file mode 100644 index 0000000..c18e7b4 Binary files /dev/null and b/awesome/theme/layouts/tileleftw.png differ diff --git a/awesome/theme/layouts/tiletop.png b/awesome/theme/layouts/tiletop.png new file mode 100644 index 0000000..3febc35 Binary files /dev/null and b/awesome/theme/layouts/tiletop.png differ diff --git a/awesome/theme/layouts/tiletopw.png b/awesome/theme/layouts/tiletopw.png new file mode 100644 index 0000000..daf965f Binary files /dev/null and b/awesome/theme/layouts/tiletopw.png differ diff --git a/awesome/theme/layouts/tilew.png b/awesome/theme/layouts/tilew.png new file mode 100644 index 0000000..c722a35 Binary files /dev/null and b/awesome/theme/layouts/tilew.png differ diff --git a/awesome/theme/submenu.png b/awesome/theme/submenu.png new file mode 100644 index 0000000..b2778e2 Binary files /dev/null and b/awesome/theme/submenu.png differ diff --git a/awesome/theme/taglist/squarefw.png b/awesome/theme/taglist/squarefw.png new file mode 100644 index 0000000..2a86430 Binary files /dev/null and b/awesome/theme/taglist/squarefw.png differ diff --git a/awesome/theme/taglist/squarew.png b/awesome/theme/taglist/squarew.png new file mode 100644 index 0000000..913f2ca Binary files /dev/null and b/awesome/theme/taglist/squarew.png differ diff --git a/awesome/theme/theme.lua b/awesome/theme/theme.lua new file mode 100644 index 0000000..904c2bd --- /dev/null +++ b/awesome/theme/theme.lua @@ -0,0 +1,105 @@ +--------------------------- +-- Default awesome theme -- +--------------------------- + +function load_theme(avgcolor, comcolor) + if not avgcolor then avgcolor = "#000000" end + if not comcolor then comcolor = "#FFFFFF" end + + local theme = {} + + theme.font = "sans 8" + + --theme.bg_normal = "#222222" + theme.bg_normal = avgcolor + theme.bg_focus = theme.bg_normal + theme.bg_urgent = "#ff0000" -- TODO should be opposite of bg_normal + theme.bg_minimize = theme.bg_normal + theme.bg_systray = theme.bg_normal + + + --theme.fg_normal = "#aaaaaa" + theme.fg_normal = comcolor + theme.fg_focus = comcolor + theme.fg_urgent = "#ffffff" + theme.fg_minimize = comcolor + + theme.border_width = 1 + theme.border_normal = "#000000" + theme.border_focus = "#535d6c" + theme.border_marked = "#91231c" + + -- There are other variable sets + -- overriding the default one when + -- defined, the sets are: + -- [taglist|tasklist]_[bg|fg]_[focus|urgent] + -- titlebar_[bg|fg]_[normal|focus] + -- tooltip_[font|opacity|fg_color|bg_color|border_width|border_color] + -- mouse_finder_[color|timeout|animate_timeout|radius|factor] + -- Example: + --theme.taglist_bg_focus = "#ff0000" + + -- Display the taglist squares + theme.taglist_squares_sel = "/usr/share/awesome/themes/default/taglist/squarefw.png" + theme.taglist_squares_unsel = "/usr/share/awesome/themes/default/taglist/squarew.png" + + -- Variables set for theming the menu: + -- menu_[bg|fg]_[normal|focus] + -- menu_[border_color|border_width] + theme.menu_submenu_icon = "/usr/share/awesome/themes/default/submenu.png" + theme.menu_height = 15 + theme.menu_width = 100 + + -- You can add as many variables as + -- you wish and access them by using + -- beautiful.variable in your rc.lua + --theme.bg_widget = "#cc0000" + + -- Define the image to load + theme.titlebar_close_button_normal = "/usr/share/awesome/themes/default/titlebar/close_normal.png" + theme.titlebar_close_button_focus = "/usr/share/awesome/themes/default/titlebar/close_focus.png" + + theme.titlebar_ontop_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/ontop_normal_inactive.png" + theme.titlebar_ontop_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/ontop_focus_inactive.png" + theme.titlebar_ontop_button_normal_active = "/usr/share/awesome/themes/default/titlebar/ontop_normal_active.png" + theme.titlebar_ontop_button_focus_active = "/usr/share/awesome/themes/default/titlebar/ontop_focus_active.png" + + theme.titlebar_sticky_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/sticky_normal_inactive.png" + theme.titlebar_sticky_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/sticky_focus_inactive.png" + theme.titlebar_sticky_button_normal_active = "/usr/share/awesome/themes/default/titlebar/sticky_normal_active.png" + theme.titlebar_sticky_button_focus_active = "/usr/share/awesome/themes/default/titlebar/sticky_focus_active.png" + + theme.titlebar_floating_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/floating_normal_inactive.png" + theme.titlebar_floating_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/floating_focus_inactive.png" + theme.titlebar_floating_button_normal_active = "/usr/share/awesome/themes/default/titlebar/floating_normal_active.png" + theme.titlebar_floating_button_focus_active = "/usr/share/awesome/themes/default/titlebar/floating_focus_active.png" + + theme.titlebar_maximized_button_normal_inactive = "/usr/share/awesome/themes/default/titlebar/maximized_normal_inactive.png" + theme.titlebar_maximized_button_focus_inactive = "/usr/share/awesome/themes/default/titlebar/maximized_focus_inactive.png" + theme.titlebar_maximized_button_normal_active = "/usr/share/awesome/themes/default/titlebar/maximized_normal_active.png" + theme.titlebar_maximized_button_focus_active = "/usr/share/awesome/themes/default/titlebar/maximized_focus_active.png" + + theme.wallpaper = "/usr/share/awesome/themes/default/background.png" + + -- You can use your own layout icons like this: + theme.layout_fairh = "/usr/share/awesome/themes/default/layouts/fairhw.png" + theme.layout_fairv = "/usr/share/awesome/themes/default/layouts/fairvw.png" + theme.layout_floating = "/usr/share/awesome/themes/default/layouts/floatingw.png" + theme.layout_magnifier = "/usr/share/awesome/themes/default/layouts/magnifierw.png" + theme.layout_max = "/usr/share/awesome/themes/default/layouts/maxw.png" + theme.layout_fullscreen = "/usr/share/awesome/themes/default/layouts/fullscreenw.png" + theme.layout_tilebottom = "/usr/share/awesome/themes/default/layouts/tilebottomw.png" + theme.layout_tileleft = "/usr/share/awesome/themes/default/layouts/tileleftw.png" + theme.layout_tile = "/usr/share/awesome/themes/default/layouts/tilew.png" + theme.layout_tiletop = "/usr/share/awesome/themes/default/layouts/tiletopw.png" + theme.layout_spiral = "/usr/share/awesome/themes/default/layouts/spiralw.png" + theme.layout_dwindle = "/usr/share/awesome/themes/default/layouts/dwindlew.png" + + theme.awesome_icon = "/usr/share/awesome/icons/awesome16.png" + + -- Define the icon theme for application icons. If not set then the icons + -- from /usr/share/icons and /usr/share/icons/hicolor will be used. + theme.icon_theme = nil + + return theme +end diff --git a/awesome/theme/titlebar/close_focus.png b/awesome/theme/titlebar/close_focus.png new file mode 100644 index 0000000..a5b7958 Binary files /dev/null and b/awesome/theme/titlebar/close_focus.png differ diff --git a/awesome/theme/titlebar/close_normal.png b/awesome/theme/titlebar/close_normal.png new file mode 100644 index 0000000..d0fdb7e Binary files /dev/null and b/awesome/theme/titlebar/close_normal.png differ diff --git a/awesome/theme/titlebar/floating_focus_active.png b/awesome/theme/titlebar/floating_focus_active.png new file mode 100644 index 0000000..3447bb2 Binary files /dev/null and b/awesome/theme/titlebar/floating_focus_active.png differ diff --git a/awesome/theme/titlebar/floating_focus_inactive.png b/awesome/theme/titlebar/floating_focus_inactive.png new file mode 100644 index 0000000..fe5bb3c Binary files /dev/null and b/awesome/theme/titlebar/floating_focus_inactive.png differ diff --git a/awesome/theme/titlebar/floating_normal_active.png b/awesome/theme/titlebar/floating_normal_active.png new file mode 100644 index 0000000..3108e9e Binary files /dev/null and b/awesome/theme/titlebar/floating_normal_active.png differ diff --git a/awesome/theme/titlebar/floating_normal_inactive.png b/awesome/theme/titlebar/floating_normal_inactive.png new file mode 100644 index 0000000..d6f19db Binary files /dev/null and b/awesome/theme/titlebar/floating_normal_inactive.png differ diff --git a/awesome/theme/titlebar/maximized_focus_active.png b/awesome/theme/titlebar/maximized_focus_active.png new file mode 100644 index 0000000..78a2914 Binary files /dev/null and b/awesome/theme/titlebar/maximized_focus_active.png differ diff --git a/awesome/theme/titlebar/maximized_focus_inactive.png b/awesome/theme/titlebar/maximized_focus_inactive.png new file mode 100644 index 0000000..2c3a5b7 Binary files /dev/null and b/awesome/theme/titlebar/maximized_focus_inactive.png differ diff --git a/awesome/theme/titlebar/maximized_normal_active.png b/awesome/theme/titlebar/maximized_normal_active.png new file mode 100644 index 0000000..7eb34a9 Binary files /dev/null and b/awesome/theme/titlebar/maximized_normal_active.png differ diff --git a/awesome/theme/titlebar/maximized_normal_inactive.png b/awesome/theme/titlebar/maximized_normal_inactive.png new file mode 100644 index 0000000..63cc537 Binary files /dev/null and b/awesome/theme/titlebar/maximized_normal_inactive.png differ diff --git a/awesome/theme/titlebar/ontop_focus_active.png b/awesome/theme/titlebar/ontop_focus_active.png new file mode 100644 index 0000000..f954bed Binary files /dev/null and b/awesome/theme/titlebar/ontop_focus_active.png differ diff --git a/awesome/theme/titlebar/ontop_focus_inactive.png b/awesome/theme/titlebar/ontop_focus_inactive.png new file mode 100644 index 0000000..7b7cf11 Binary files /dev/null and b/awesome/theme/titlebar/ontop_focus_inactive.png differ diff --git a/awesome/theme/titlebar/ontop_normal_active.png b/awesome/theme/titlebar/ontop_normal_active.png new file mode 100644 index 0000000..48defb3 Binary files /dev/null and b/awesome/theme/titlebar/ontop_normal_active.png differ diff --git a/awesome/theme/titlebar/ontop_normal_inactive.png b/awesome/theme/titlebar/ontop_normal_inactive.png new file mode 100644 index 0000000..fd1dc01 Binary files /dev/null and b/awesome/theme/titlebar/ontop_normal_inactive.png differ diff --git a/awesome/theme/titlebar/sticky_focus_active.png b/awesome/theme/titlebar/sticky_focus_active.png new file mode 100644 index 0000000..1106399 Binary files /dev/null and b/awesome/theme/titlebar/sticky_focus_active.png differ diff --git a/awesome/theme/titlebar/sticky_focus_inactive.png b/awesome/theme/titlebar/sticky_focus_inactive.png new file mode 100644 index 0000000..d75fa0e Binary files /dev/null and b/awesome/theme/titlebar/sticky_focus_inactive.png differ diff --git a/awesome/theme/titlebar/sticky_normal_active.png b/awesome/theme/titlebar/sticky_normal_active.png new file mode 100644 index 0000000..b33956a Binary files /dev/null and b/awesome/theme/titlebar/sticky_normal_active.png differ diff --git a/awesome/theme/titlebar/sticky_normal_inactive.png b/awesome/theme/titlebar/sticky_normal_inactive.png new file mode 100644 index 0000000..7aeac90 Binary files /dev/null and b/awesome/theme/titlebar/sticky_normal_inactive.png differ diff --git a/base/gitconfig b/base/gitconfig new file mode 100644 index 0000000..2d4a1ea --- /dev/null +++ b/base/gitconfig @@ -0,0 +1,29 @@ +[push] + default = simple + +[alias] + #Shows diff in log + ll = log --stat --abbrev-commit + + #Show all aliases + alias = !git config --list | grep 'alias\\.' | sed 's/alias\\.\\([^=]*\\)=\\(.*\\)/\\1\\t=> \\2/' | sort + + #Full sync of local database + sync = fetch -pv --all + + cam = commit -a -m + lug = log --color --graph --date=short --pretty=format:'%Cgreen%cd (%cr)%Creset %C(bold blue)%an%Creset %Cred%h%Creset -%C(yellow)%d%Creset %s' --abbrev-commit + purr = pull --rebase + chk = checkout + from = !git fetch origin master && git rebase -i origin/master + + # print local branches and their last commit times + blanch = for-each-ref --sort=authordate --format '%(HEAD)%(align:left,40)%(refname:short)%(end) | %(align:left,20)%(authordate:iso)%(end) | %(subject)' refs/heads + + # checkout master and delete previously checked out branch + close = !git checkout master && git branch -D @{-1} + +[color] + branch = auto + diff = auto + status = auto diff --git a/bin/git-remote-gcrypt b/bin/git-remote-gcrypt new file mode 100755 index 0000000..8b66f2f --- /dev/null +++ b/bin/git-remote-gcrypt @@ -0,0 +1,921 @@ +#!/bin/sh + +# git-remote-gcrypt +# +# Copyright (c) 2013 engla +# Copyright (c) 2013, 2014 Joey Hess +# Copyright (c) 2016 Sean Whitton and contributors +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) version 2 or any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# See README.rst for usage instructions + +set -e # errexit +set -f # noglob +set -C # noclobber + +export GITCEPTION="${GITCEPTION:-}+" # Reuse $Gref except when stacked +Gref="refs/gcrypt/gitception$GITCEPTION" +Gref_rbranch="refs/heads/master" +Packkey_bytes=63 # nbr random bytes for packfile keys, any >= 256 bit is ok +Hashtype=SHA256 # SHA512 SHA384 SHA256 SHA224 supported. +Manifestfile=91bd0c092128cf2e60e1a608c31e92caf1f9c1595f83f2890ef17c0e4881aa0a +Hex40="[a-f0-9]" +Hex40=$Hex40$Hex40$Hex40$Hex40$Hex40$Hex40$Hex40$Hex40 +Hex40=$Hex40$Hex40$Hex40$Hex40$Hex40 # Match SHA-1 hexdigest +GPG="$(git config --get "gpg.program" '.+' || echo gpg)" + +Did_find_repo= # yes for connected, no for no repo +Localdir="${GIT_DIR:=.git}/remote-gcrypt" +Tempdir= + +Repoid= +Refslist= +Packlist= +Keeplist= +Extnlist= +Repack_limit=25 + +Recipients= + +# compat/utility functions +# xfeed: The most basic output function puts $1 into the stdin of $2..$# +xfeed() +{ + local input_= + input_=$1; shift + "$@" <&2; } +echo_die() { echo_info "$@" ; exit 1; } + +isnull() { case "$1" in "") return 0;; *) return 1;; esac; } +isnonnull() { ! isnull "$1"; } +iseq() { case "$1" in "$2") return 0;; *) return 1;; esac; } +isnoteq() { ! iseq "$1" "$2"; } +negate() { ! "$@"; } + +# Execute $@ or die +pipefail() +{ + "$@" || { echo_info "'$1' failed!"; kill $$; exit 1; } +} + +isurl() { isnull "${2%%$1://*}"; } +islocalrepo() { isnull "${1##/*}" && [ ! -e "$1/HEAD" ]; } + +xgrep() { command grep "$@" || : ; } + +# setvar is used for named return variables +# $1 *must* be a valid variable name, $2 is any value +# +# Conventions +# return variable names are passed with a @ prefix +# return variable functions use f_ prefix local vars +# return var consumers use r_ prefix vars (or Titlecase globals) +setvar() +{ + isnull "${1##@*}" || echo_die "Missing @ for return variable: $1" + eval ${1#@}=\$2 +} + +Newline=" +" + +# $1 is return var, $2 is value appended with newline separator +append_to() +{ + local f_append_tmp_= + eval f_append_tmp_=\$${1#@} + isnull "$f_append_tmp_" || f_append_tmp_=$f_append_tmp_$Newline + setvar "$1" "$f_append_tmp_$2" +} + +# Pick words from each line +# $1 return variable name +# $2 input value +pick_fields_1_2() +{ + local f_ret= f_one= f_two= + while read f_one f_two _ # from << here-document + do + f_ret="$f_ret$f_one $f_two$Newline" + done </dev/null && + obj_id="$(git ls-tree "$Gref" | xgrep -E '\b'"$2"'$' | awk '{print $3}')" && + isnonnull "$obj_id" && git cat-file blob "$obj_id" && ret_=: || + { ret_=false && : ; } + [ -e "$fet_head.$$~" ] && command mv -f "$fet_head.$$~" "$fet_head" || : + $ret_ +} + +anon_commit() +{ + GIT_AUTHOR_NAME="root" GIT_AUTHOR_EMAIL="root@localhost" \ + GIT_AUTHOR_DATE="1356994801 -0400" GIT_COMMITTER_NAME="root" \ + GIT_COMMITTER_EMAIL="root@localhost" \ + GIT_COMMITTER_DATE="1356994801 -0400" \ + git commit-tree "$@" </dev/null >&2 || : + git rev-parse -q --verify "$Gref" >/dev/null && return 0 || + commit_id=$(anon_commit "$empty_tree") && + git update-ref "$Gref" "$commit_id" +} +## end gitception + +# Fetch repo $1, file $2, tmpfile in $3 +GET() +{ + if isurl sftp "$1" + then + (exec 0>&-; curl -s -S -k "$1/$2") > "$3" + elif isurl rsync "$1" + then + (exec 0>&-; rsync -I -W "${1#rsync://}"/"$2" "$3" >&2) + elif islocalrepo "$1" + then + cat "$1/$2" > "$3" + else + gitception_get "${1#gitception://}" "$2" > "$3" + fi +} + +# Put repo $1, file $2 or fail, tmpfile in $3 +PUT() +{ + if isurl sftp "$1" + then + curl -s -S -k --ftp-create-dirs -T "$3" "$1/$2" + elif isurl rsync "$1" + then + rsync -I -W "$3" "${1#rsync://}"/"$2" >&2 + elif islocalrepo "$1" + then + cat >| "$1/$2" < "$3" + else + gitception_put "${1#gitception://}" "$2" < "$3" + fi +} + +# Put all PUT changes for repo $1 at once +PUT_FINAL() +{ + if isurl sftp "$1" || islocalrepo "$1" || isurl rsync "$1" + then + : + else + git push --quiet -f "${1#gitception://}" "$Gref:$Gref_rbranch" + fi +} + +# Put directory for repo $1 +PUTREPO() +{ + if isurl sftp "$1" + then + : + elif isurl rsync "$1" + then + rsync -q -r --exclude='*' "$Localdir/" "${1#rsync://}" >&2 + elif islocalrepo "$1" + then + mkdir -p "$1" + else + gitception_new_repo "${1#gitception://}" + fi +} + +# For repo $1, delete all newline-separated files in $2 +REMOVE() +{ + local fn_= + if isurl sftp "$1" + then + # FIXME + echo_info "sftp: Ignore remove request $1/$2" + elif isurl rsync "$1" + then + xfeed "$2" rsync -I -W -v -r --delete --include-from=- \ + --exclude='*' "$Localdir"/ "${1#rsync://}/" >&2 + elif islocalrepo "$1" + then + for fn_ in $2; do + rm -f "$1"/"$fn_" + done + else + for fn_ in $2; do + gitception_remove "${1#gitception://}" "$fn_" + done + fi +} + +CLEAN_FINAL() +{ + if isurl sftp "$1" || islocalrepo "$1" || isurl rsync "$1" + then + : + else + git update-ref -d "$Gref" || : + fi +} + +ENCRYPT() +{ + rungpg --batch --force-mdc --compress-algo none --trust-model=always --passphrase-fd 3 -c 3<&1 && + status_=$(rungpg --status-fd 3 -q -d 3>&1 1>&4) && + xfeed "$status_" grep "^\[GNUPG:\] ENC_TO " >/dev/null && + (xfeed "$status_" grep -e "$1" >/dev/null || { + echo_info "Failed to verify manifest signature!" && + echo_info "Only accepting signatories: ${2:-(none)}" && + return 1 + }) +} + +# Generate $1 random bytes +genkey() +{ + rungpg --armor --gen-rand 1 "$1" +} + +gpg_hash() +{ + local hash_= + hash_=$(rungpg --with-colons --print-md "$1" | tr A-F a-f) + hash_=${hash_#:*:} + xecho "${hash_%:}" +} + +rungpg() +{ + if isnonnull "$Conf_gpg_args"; then + set -- "$Conf_gpg_args" "$@" + fi + # gpg will fail to run when there is no controlling tty, + # due to trying to print messages to it, even if a gpg agent is set + # up. --no-tty fixes this. + if [ "x$GPG_AGENT_INFO" != "x" ]; then + ${GPG} --no-tty $@ + else + ${GPG} $@ + fi +} + +# Pass the branch/ref by pipe to git +safe_git_rev_parse() +{ + git cat-file --batch-check 2>/dev/null | + xgrep -v "missing" | cut -f 1 -d ' ' +} + +make_new_repo() +{ + echo_info "Setting up new repository" + PUTREPO "$URL" + + # Needed assumption: the same user should have no duplicate Repoid + Repoid=":id:$(genkey 15)" + iseq "${NAME#gcrypt::}" "$URL" || + git config "remote.$NAME.gcrypt-id" "$Repoid" + echo_info "Remote ID is $Repoid" + Extnlist="extn comment" +} + + +# $1 return var for goodsig match, $2 return var for signers text +read_config() +{ + local recp_= r_tail= r_keyinfo= r_keyfpr= gpg_list= cap_= conf_part= good_sig= signers_= + Conf_signkey=$(git config --get "remote.$NAME.gcrypt-signingkey" '.+' || + git config --path user.signingkey || :) + conf_part=$(git config --get "remote.$NAME.gcrypt-participants" '.+' || + git config --get gcrypt.participants '.+' || :) + Conf_pubish_participants=$(git config --get --bool "remote.$NAME.gcrypt-publish-participants" '.+' || + git config --get --bool gcrypt.publish-participants || :) + Conf_gpg_args=$(git config --get gcrypt.gpg-args '.+' || :) + + # Figure out which keys we should encrypt to or accept signatures from + if isnull "$conf_part" || iseq "$conf_part" simple + then + signers_="(default keyring)" + Recipients="--throw-keyids --default-recipient-self" + good_sig="^\[GNUPG:\] GOODSIG " + setvar "$1" "$good_sig" + setvar "$2" "$signers_" + return 0 + fi + + for recp_ in $conf_part + do + gpg_list=$(rungpg --with-colons --fingerprint -k "$recp_") + r_tail_=$(echo "$recp_" | sed -e 's/^0x//') + filter_to @r_keyinfo "pub*" "$gpg_list" + if echo "$recp_" | grep -E -q '^[xA-F0-9]+$'; then # is $recp_ a keyid? + filter_to @r_keyfpr "fpr*$r_tail_*" "$gpg_list" + else + filter_to @r_keyfpr "fpr*" "$gpg_list" + fi + isnull "$r_keyinfo" || isnonnull "${r_keyinfo##*"$Newline"*}" || + echo_info "WARNING: '$recp_' matches multiple keys, using one" + isnull "$r_keyfpr" || isnonnull "${r_keyfpr##*"$Newline"*}" || + echo_info "WARNING: '$recp_' matches multiple fingerprints, using one" + r_keyinfo=${r_keyinfo%%"$Newline"*} + r_keyfpr=${r_keyfpr%%"$Newline"*} + keyid_=$(xfeed "$r_keyinfo" cut -f 5 -d :) + fprid_=$(xfeed "$r_keyfpr" cut -f 10 -d :) + + isnonnull "$fprid_" && + signers_="$signers_ $keyid_" && + append_to @good_sig "^\[GNUPG:\] VALIDSIG .*$fprid_$" || { + echo_info "WARNING: Skipping missing key $recp_" + continue + } + # Check 'E'ncrypt capability + cap_=$(xfeed "$r_keyinfo" cut -f 12 -d :) + if ! iseq "${cap_#*E}" "$cap_"; then + if [ "$Conf_pubish_participants" = true ]; then + Recipients="$Recipients -r $keyid_" + else + Recipients="$Recipients -R $keyid_" + fi + fi + done + + if isnull "$Recipients" + then + echo_info "You have not configured any keys you can encrypt to" \ + "for this repository" + echo_info "Use ::" + echo_info " git config gcrypt.participants YOURKEYID" + exit 1 + fi + setvar "$1" "$good_sig" + setvar "$2" "$signers_" +} + +ensure_connected() +{ + local manifest_= r_repoid= r_name= url_frag= r_sigmatch= r_signers= \ + tmp_manifest= + + if isnonnull "$Did_find_repo" + then + return + fi + Did_find_repo=no + read_config @r_sigmatch @r_signers + + iseq "${NAME#gcrypt::}" "$URL" || r_name=$NAME + + if isurl gitception "$URL" && isnonnull "$r_name"; then + git config "remote.$r_name.url" "gcrypt::${URL#gitception://}" + echo_info "Updated URL for $r_name, gitception:// -> ()" + fi + + # Find the URL fragment + url_frag=${URL##*"#"} + isnoteq "$url_frag" "$URL" || url_frag= + URL=${URL%"#$url_frag"} + + # manifestfile -- sha224 hash if we can, else the default location + if isurl sftp "$URL" || islocalrepo "$URL" || isurl rsync "$URL" + then + # not for gitception + isnull "$url_frag" || + Manifestfile=$(xecho_n "$url_frag" | gpg_hash SHA224) + else + isnull "$url_frag" || Gref_rbranch="refs/heads/$url_frag" + fi + + Repoid= + isnull "$r_name" || + Repoid=$(git config "remote.$r_name.gcrypt-id" || :) + + + tmp_manifest="$Tempdir/maniF" + GET "$URL" "$Manifestfile" "$tmp_manifest" 2>/dev/null || { + echo_info "Repository not found: $URL" + if ! isnull "$Repoid"; then + echo_info "..but repository ID is set. Aborting." + return 1 + else + return 0 + fi + } + + Did_find_repo=yes + echo_info "Decrypting manifest" + manifest_=$(PRIVDECRYPT "$r_sigmatch" "$r_signers" < "$tmp_manifest") && + isnonnull "$manifest_" || + echo_die "Failed to decrypt manifest!" + rm -f "$tmp_manifest" + + filter_to @Refslist "$Hex40 *" "$manifest_" + filter_to @Packlist "pack :*:* *" "$manifest_" + filter_to @Keeplist "keep :*:*" "$manifest_" + filter_to @Extnlist "extn *" "$manifest_" + filter_to @r_repoid "repo *" "$manifest_" + + r_repoid=${r_repoid#repo } + r_repoid=${r_repoid% *} + if isnull "$Repoid" + then + echo_info "Remote ID is $r_repoid" + Repoid=$r_repoid + elif isnoteq "$r_repoid" "$Repoid" + then + echo_info "WARNING:" + echo_info "WARNING: Remote ID has changed!" + echo_info "WARNING: from $Repoid" + echo_info "WARNING: to $r_repoid" + echo_info "WARNING:" + Repoid=$r_repoid + else + return 0 + fi + + isnull "$r_name" || git config "remote.$r_name.gcrypt-id" "$r_repoid" +} + +# $1 is the hash type (SHA256 etc) +# $2 the pack id +# $3 the key +get_verify_decrypt_pack() +{ + local rcv_id= tmp_encrypted= + tmp_encrypted="$Tempdir/packF" + GET "$URL" "$2" "$tmp_encrypted" && + rcv_id=$(gpg_hash "$1" < "$tmp_encrypted") && + iseq "$rcv_id" "$2" || echo_die "Packfile $2 does not match digest!" + DECRYPT "$3" < "$tmp_encrypted" + rm -f "$tmp_encrypted" +} + +# download all packlines (pack :SHA256:a32abc1231) from stdin (or die) +# $1 destdir (when repack, else "") +get_pack_files() +{ + local pack_id= r_pack_key_line= htype_= pack_= key_= + while IFS=': ' read -r _ htype_ pack_ # </dev/null + xecho "pack $pack_id" >> "$Localdir/have_packs$GITCEPTION" + else + git index-pack -v --stdin "$1/${pack_}.pack" >/dev/null + fi + done +} + +# Download and unpack remote packfiles +# $1 return var for list of packfiles to delete +repack_if_needed() +{ + local n_= m_= kline_= r_line= r_keep_packlist= r_del_list= + + isnonnull "$Packlist" || return 0 + + if isnonnull "${GCRYPT_FULL_REPACK:-}" + then + Keeplist= + Repack_limit=0 + fi + + pick_fields_1_2 @r_del_list "$Packlist" + + n_=$(line_count "$Packlist") + m_=$(line_count "$Keeplist") + if iseq 0 "$(( $Repack_limit < ($n_ - $m_) ))"; then + return + fi + echo_info "Repacking remote $NAME, ..." + + mkdir "$Tempdir/pack" + + # Split packages to keep and to repack + if isnonnull "$Keeplist"; then + while read -r _ kline_ _ # < (if sha-1 exists locally) + r_revlist=$(xfeed "$Refslist" cut -f 1 -d ' ' | + safe_git_rev_parse | sed -e 's/^\(.\)/^&/') + fi + + while IFS=: read -r src_ dst_ # << +src:dst + do + src_=${src_#+} + filter_to ! @Refslist "$Hex40 $dst_" "$Refslist" + + if isnonnull "$src_" + then + append_to @r_revlist "$src_" + obj_=$(xfeed "$src_" safe_git_rev_parse) + append_to @Refslist "$obj_ $dst_" + fi + done < "$tmp_objlist" + + # Only send pack if we have any objects to send + if [ -s "$tmp_objlist" ] + then + key_=$(genkey "$Packkey_bytes") + pack_id=$(export GIT_ALTERNATE_OBJECT_DIRECTORIES=$Tempdir; + pipefail git pack-objects --stdout < "$tmp_objlist" | + pipefail ENCRYPT "$key_" | + tee "$tmp_encrypted" | gpg_hash "$Hashtype") + + append_to @Packlist "pack :${Hashtype}:$pack_id $key_" + if isnonnull "$r_pack_delete" + then + append_to @Keeplist "keep :${Hashtype}:$pack_id 1" + fi + fi + + # Generate manifest + echo_info "Encrypting to: $Recipients" + echo_info "Requesting manifest signature" + + tmp_manifest="$Tempdir/maniP" + PRIVENCRYPT "$Recipients" > "$tmp_manifest" <&2 +} + +setup() +{ + mkdir -p "$Localdir" + + # Set up a subdirectory in /tmp + temp_key=$(genkey 9 | tr '/' _) + Tempdir="${TMPDIR:-/tmp}/git-remote-gcrypt-${temp_key}.$$" + case "${MSYSTEM:-unknown}" in + MSYS*|MINGW*) + mkdir "${Tempdir}" + echo_info "Warning: Not securing tempdir ${Tempdir} because we are on mingw/msys" + ;; + unknown|*) + mkdir -m 700 "${Tempdir}" + ;; + esac + + trap cleanup_tmpfiles EXIT + trap 'exit 1' 1 2 3 15 +} + +# handle git-remote-helpers protocol +gcrypt_main_loop() +{ + local input_= input_inner= r_args= temp_key= + + NAME=$1 # Remote name + URL=$2 # Remote URL + + setup + + while read input_ + do + case "$input_" in + capabilities) + do_capabilities + ;; + list|list\ for-push) + do_list + ;; + fetch\ *) + r_args=${input_##fetch } + while read input_inner + do + case "$input_inner" in + fetch*) + r_args= #ignored + ;; + *) + break + ;; + esac + done + do_fetch "$r_args" + ;; + push\ *) + r_args=${input_##push } + while read input_inner + do + case "$input_inner" in + push\ *) + append_to @r_args "${input_inner#push }" + ;; + *) + break + ;; + esac + done + do_push "$r_args" + ;; + ?*) + echo_die "Unknown input!" + ;; + *) + CLEAN_FINAL "$URL" + exit 0 + ;; + esac + done +} + +if [ "x$1" = x--check ] +then + NAME=dummy-gcrypt-check + URL=$2 + setup + ensure_connected + git remote remove $NAME 2>/dev/null || true + if iseq "$Did_find_repo" "no" + then + exit 100 + fi +else + gcrypt_main_loop "$@" +fi diff --git a/bin/go-playground b/bin/go-playground new file mode 100755 index 0000000..37675d0 --- /dev/null +++ b/bin/go-playground @@ -0,0 +1,5 @@ +#!/bin/sh +cd "$(mktemp -d)"; +go mod init local-playground; +echo -e 'package main\n\nimport (\n\t"fmt"\n)\n\nfunc main() {\n\tfmt.Println("aloha")\n}\n' > main.go; +$EDITOR main.go; diff --git a/bin/sshfs b/bin/sshfs new file mode 100755 index 0000000..d5d5ee7 --- /dev/null +++ b/bin/sshfs @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +/usr/bin/sshfs -oTCPKeepAlive=yes -oServerAliveCountMax=1 -oServerAliveInterval=5 $@ diff --git a/bonzi.png b/bonzi.png new file mode 100644 index 0000000..6833377 Binary files /dev/null and b/bonzi.png differ diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..950dee0 --- /dev/null +++ b/default.nix @@ -0,0 +1,130 @@ +{ + + pkgsSrc ? ./pkgs.nix + +}: rec { + + pkgs = (import pkgsSrc) {}; + + gitConfig = pkgs.writeTextDir "git/config" + (builtins.readFile ./base/gitconfig); + + git = pkgs.writeScriptBin "git" '' + #!${pkgs.bash}/bin/bash + export XDG_CONFIG_HOME=${gitConfig} + exec ${pkgs.git}/bin/git "$@" + ''; + + zsh = ((import ./zsh) { inherit pkgs; }).zsh; + + loadout = pkgs.buildEnv { + name = "loadout"; + paths = [ + + pkgs.gnugrep + pkgs.ag + pkgs.gawk + + git + pkgs.mercurial + pkgs.breezy # bzr + + pkgs.gcc + pkgs.gnumake + pkgs.cmake + pkgs.strace + + pkgs.curl + pkgs.wget + pkgs.rsync + + pkgs.hostname + pkgs.netcat + pkgs.nmap + pkgs.dnsutils + pkgs.openssh + + pkgs.tmux + + pkgs.ncdu + pkgs.htop + + pkgs.unzip + pkgs.unrar + pkgs.gzip + + pkgs.jq + pkgs.yq + pkgs.go + + pkgs.xsel + pkgs.pavucontrol + + (pkgs.nerdfonts.override { fonts = [ "SourceCodePro" ]; }) + + ((import ./nvim) { inherit pkgs; }).nvim + zsh + ((import ./alacritty) { inherit pkgs zsh; }).alacritty + ((import ./awesome) { inherit pkgs; }).awesome + ]; + }; + + appimageEntrypoint = pkgs.writeScriptBin "mediocre-loadout" '' + #!${pkgs.bash}/bin/bash + + cmd="$1"; shift; + + if [ "$cmd" = "editor" ]; then exec nvim "$@"; fi + if [ "$cmd" = "shell" ]; then exec zsh "$@"; fi + if [ "$cmd" = "gui" ]; then exec alacritty "$@"; fi + if [ "$cmd" = "wm" ]; then exec awesome "$@"; fi + + echo "USAGE: $0 [editor|shell|gui|wm] [passthrough args...]" + exit 1 + ''; + + appimageIcon = pkgs.stdenv.mkDerivation { + name = "mediocre-loadout-icon"; + src = ./bonzi.png; + builder = builtins.toFile "builder.sh" '' + source $stdenv/setup + dir=share/icons/hicolor/256x256/apps + mkdir -p "$out"/$dir + cp $src "$out"/$dir/mediocre-loadout.png + ''; + }; + + appimageDesktopFile = pkgs.writeTextDir "share/applications/mediocre-loadout.desktop" '' + [Desktop Entry] + Name=Mediocre Loadout + Exec=mediocre-loadout gui + Icon=mediocre-loadout + Type=Application + Categories=Utility; + ''; + + appimageTarget = pkgs.buildEnv { + name = "mediocre-loadout-target"; + paths = [ + loadout + appimageEntrypoint + appimageIcon + appimageDesktopFile + ]; + }; + + appimageTargetFlat = pkgs.stdenv.mkDerivation { + name = "mediocre-loadout-target-flat"; + src = appimageTarget; + builder = builtins.toFile "builder.sh" '' + source $stdenv/setup + cp -rL "$src" "$out" + ''; + }; + + appimage = ((import ./appimage.nix) { pkgsSrc = pkgsSrc; }) { + name = "mediocre-loadout"; + target = appimageTargetFlat; + }; + +} diff --git a/nvim/default.nix b/nvim/default.nix new file mode 100644 index 0000000..d6d4a94 --- /dev/null +++ b/nvim/default.nix @@ -0,0 +1,94 @@ +{ + + pkgs ? (import ../pkgs.nix) {}, + +}: rec { + + goimports = pkgs.buildGoModule rec { + pname = "goimports"; + version = "v0.1.7"; + src = builtins.fetchGit { + url = "https://go.googlesource.com/tools"; + rev = "0df0ca0f43117120bd7cc900ebf765f9b799438a"; + }; + vendorSha256 = "1vs4vbl3kh8lbqrm4yqqn27ammlqj7jdbi0ca9s4fkja2sk45ibi"; + subPackages = [ "cmd/goimports" ]; + }; + + # the gocode-gomod which comes with nixpkgs places the binary at + # gocode-gomod, we gotta rename it + gocode = pkgs.stdenv.mkDerivation { + name = "gocode"; + src = pkgs.gocode-gomod; + builder = builtins.toFile "builder.sh" '' + source $stdenv/setup + mkdir -p "$out"/bin/ + cp "$src"/bin/gocode-gomod "$out"/bin/gocode + ''; + }; + + env = pkgs.buildEnv { + name = "nvim-env"; + paths = [ + pkgs.vimPlugins.vim-plug + pkgs.vimPlugins.deoplete-nvim + pkgs.vimPlugins.deoplete-go + pkgs.vimPlugins.nerdtree + pkgs.vimPlugins.nerdtree-git-plugin + pkgs.vimPlugins.vim-gitgutter + pkgs.vimPlugins.neomake + pkgs.vimPlugins.papercolor-theme + pkgs.vimPlugins.vim-go + pkgs.vimPlugins.vim-nix + + pkgs.golangci-lint + pkgs.gopls + gocode + goimports + ]; + }; + + envPlugins = "${env}/share/vim-plugins"; + + init = pkgs.writeText "nvim-init" '' + source ${envPlugins}/vim-plug/plug.vim + + call plug#begin('${envPlugins}') + Plug '${envPlugins}/deoplete-nvim' + Plug '${envPlugins}/deoplete-go', { 'for': 'go' } + Plug '${envPlugins}/nerdtree', { 'on': 'NERDTreeToggle' } + Plug '${envPlugins}/nerdtree-git-plugin' + Plug '${envPlugins}/vim-gitgutter' + Plug '${envPlugins}/neomake' + Plug '${envPlugins}/papercolor-theme' + Plug '${envPlugins}/vim-go', { 'for': 'go' } + Plug '${envPlugins}/vim-nix', { 'for': 'nix' } + call plug#end() + + source ${./init.vim} + ''; + + nvimRaw = pkgs.writeScriptBin "nvim" '' + #!${pkgs.bash}/bin/bash + export PATH=${env}/bin:$PATH + exec ${pkgs.neovim}/bin/nvim -u ${init} "$@" + ''; + + rplugin = pkgs.stdenv.mkDerivation { + name = "nvim-rplugin"; + buildInputs = [ pkgs.git nvimRaw ]; + builder = builtins.toFile "builder.sh" '' + source $stdenv/setup + mkdir -p "$out"/ + export NVIM_RPLUGIN_MANIFEST="$out"/rplugin.vim + nvim -c ':UpdateRemotePlugins' -c ':exit' >/dev/null + ''; + }; + + nvim = pkgs.writeScriptBin "nvim" '' + #!${pkgs.bash}/bin/bash + export NVIM_RPLUGIN_MANIFEST=${rplugin}/rplugin.vim + exec ${nvimRaw}/bin/nvim "$@" + ''; + +} diff --git a/nvim/init.vim b/nvim/init.vim new file mode 100644 index 0000000..630b90d --- /dev/null +++ b/nvim/init.vim @@ -0,0 +1,170 @@ +" PaperColor ############################################################### + +set background=light +colorscheme PaperColor + +" Deoplete ################################################################# +let g:deoplete#enable_at_startup = 1 +" use tab to cycle +inoremap pumvisible() ? "\" : "\" +" close preview when leaving insert +autocmd InsertLeave,CompleteDone * if pumvisible() == 0 | pclose | endif + +" NERDTree ################################################################# +let NERDTreeMouseMode=3 +let NERDTreeMinimalUI=1 +let NERDTreeAutoDeleteBuffer=1 +let NERDTreeHighlightCursorline=1 +let NERDTreeShowHidden=1 +let g:NERDTreeIndicatorMapCustom = { + \ "Modified" : "Δ", + \ "Staged" : "✚", + \ "Untracked" : "✭", + \ "Renamed" : "➜", + \ "Unmerged" : "☢", + \ "Deleted" : "-", + \ "Dirty" : "Δ", + \ "Clean" : "", + \ "Unknown" : "" + \ } + +map :NERDTreeToggle +" always enter term buffer in insert mode +autocmd BufEnter * if &buftype == 'terminal' | :startinsert | endif + +" vim-go ################################################################### +" +"use goimports for formatting instead of gofmt +let g:go_fmt_command = "goimports" + +" neomake ################################################################## +autocmd! BufWritePost * Neomake +"let g:neomake_verbose=3 +"let g:neomake_logfile='/tmp/neomake.log' + +" the sidebar sign placement wasn't playing nice with gitgutter, so use the +" location list instead. But location list is kinda dumb cause it pops open +" multiple times and at weird times, sooo.... fuck it +"let g:neomake_open_list=2 +let g:neomake_open_list=0 +let g:neomake_place_signs=0 + +let g:neomake_go_enabled_makers = ['go', 'golangcilint'] +let g:neomake_go_golangcilint_maker = { + \ 'exe': 'golangci-lint', + \ 'args': [ + \ 'run', + \ '--no-config', + \ '--out-format=line-number', + \ '--print-issued-lines=false', + \ '-E=durationcheck', + \ '-E=errorlint', + \ '-E=exportloopref', + \ '-E=forbidigo', + \ '-E=gochecknoinits', + \ '-E=godot', + \ '-E=goimports', + \ '-E=misspell', + \ '-E=revive', + \ '-E=unconvert', + \ '-E=unparam', + \ '.' + \ ], + \ 'output_stream': 'stdout', + \ 'append_file': 0, + \ 'cwd': '%:h', + \ 'errorformat': + \ '%f:%l:%c: %m,' . + \ '%f:%l: %m' + \ } + +let g:neomake_markdown_enabled_makers = ['misspell'] +let g:neomake_markdown_misspell_maker = { + \ 'errorformat': '%f:%l:%c:%m', + \ } + +" mine ##################################################################### + +"Makes current line/column highlighted, and set text width +set tw=80 +set colorcolumn=+1 +"autocmd bufenter * set cursorline cursorcolumn colorcolumn=+1 +"autocmd bufleave * set nocursorline nocursorcolumn colorcolumn=0 +hi ColorColumn ctermfg=none ctermbg=grey cterm=none +"hi CursorLine ctermfg=none ctermbg=lightgrey cterm=none +"hi CursorColumn ctermfg=none ctermbg=lightgrey cterm=none + +"Buffers scroll a bit so cursor doens't go all the way to the bottom before +"scroll begins +set scrolloff=3 + +"Makes all .swp files go to /tmp instead of . CAUSE FUCK DA POLICE +set backupdir=/tmp +set directory=/tmp + +"Better indenting +set autoindent +set expandtab +set tabstop=4 +set shiftwidth=4 + +"Show eol and tabs +set list +set listchars=trail:░,tab:►\ ,extends:>,precedes:< + +"Don't highlight search matches, don't jump while mid-search +set noincsearch +set nohlsearch + +"We want certain types to only have 2 space for tabs +au FileType clojure setlocal tabstop=2 shiftwidth=2 +au FileType ruby setlocal tabstop=2 shiftwidth=2 +au FileType yaml setlocal tabstop=2 shiftwidth=2 +au FileType html setlocal tabstop=2 shiftwidth=2 +au FileType proto setlocal tabstop=2 shiftwidth=2 +au FileType javascript setlocal tabstop=2 shiftwidth=2 + +"We want certain types to use tabs instead of spaces +au FileType go setlocal nolist noexpandtab +au FileType make setlocal nolist noexpandtab + +"terminal shortcuts +tnoremap \ +tnoremap +"tab shortcuts for terminal mode have terminal escape code preceding them +tnoremap tn :tabe term://zsh +tnoremap tN :tabe +tnoremap ts :vs term://zsh +tnoremap tS :vnew +tnoremap ti :sp term://zsh +tnoremap tI :new +tnoremap th gT +tnoremap tH :-tabmove +tnoremap tl gt +tnoremap tL :+tabmove +tnoremap tx :tabclose + +"tab shortcuts +noremap tn :tabe term://zsh +noremap tN :tabe +noremap ts :vs term://zsh +noremap tS :vnew +noremap ti :sp term://zsh +noremap tI :new +noremap th gT +noremap tH :-tabmove +noremap tl gt +noremap tL :+tabmove +noremap tx :tabclose + +" yank/paste into/from clipboard +set clipboard+=unnamedplus + +"Clojure specific mappings +" Eval outerform +au FileType clojure nmap cpP :Eval +" Eval full page +au FileType clojure nmap cpR :%Eval + +" Disable Ex mode! +nnoremap Q diff --git a/pkgs.nix b/pkgs.nix new file mode 100644 index 0000000..c79130d --- /dev/null +++ b/pkgs.nix @@ -0,0 +1,41 @@ +let + + src = builtins.fetchTarball { + name = "nixpkgs-2105"; + url = "https://github.com/nixos/nixpkgs/archive/7e9b0dff974c89e070da1ad85713ff3c20b0ca97.tar.gz"; + sha256 = "1ckzhh24mgz6jd1xhfgx0i9mijk6xjqxwsshnvq789xsavrmsc36"; + }; + + normalPkgs = (import src) {}; + + config = { + allowUnfree = true; + packageOverrides = pkgs: { + + go = builtins.fetchTarball { + url = "https://golang.org/dl/go1.17.1.linux-amd64.tar.gz"; + sha256 = "1196h1jx9cn5ks1y9r95z0q2s6m6ssvnx7jd34g435jvxjgb2c94"; + }; + + nixgl = let + + src = builtins.fetchTarball { + name = "nixgl-unstable"; + url = "https://github.com/guibou/nixGL/archive/51f19871a31b15b482ac4c80976da173289e77fb.tar.gz"; + sha256 = "0dj2apbx5iqvkiixyz1dzx4id51iw9s2isp1f9x60a03f5sqcvvi"; + }; + + nixgl = (import src) { + inherit pkgs; + enable32bits = false; + }; + + in nixgl.nixGLIntel; + + }; + }; + +in pkgsArg: + (import src) ( + normalPkgs.lib.attrsets.recursiveUpdate { config = config; } pkgsArg + ) diff --git a/wallpapers/4k-oled-wallpaper-of-the-m87-black-hole-2560×1440.jpg b/wallpapers/4k-oled-wallpaper-of-the-m87-black-hole-2560×1440.jpg new file mode 100644 index 0000000..3a32367 Binary files /dev/null and b/wallpapers/4k-oled-wallpaper-of-the-m87-black-hole-2560×1440.jpg differ diff --git a/wallpapers/4o1bisow7ps21.png b/wallpapers/4o1bisow7ps21.png new file mode 100644 index 0000000..2c3a4b0 Binary files /dev/null and b/wallpapers/4o1bisow7ps21.png differ diff --git a/wallpapers/7nmbvhlv21s21.jpg b/wallpapers/7nmbvhlv21s21.jpg new file mode 100644 index 0000000..a314071 Binary files /dev/null and b/wallpapers/7nmbvhlv21s21.jpg differ diff --git a/wallpapers/abra.jpg b/wallpapers/abra.jpg new file mode 100644 index 0000000..4feb484 Binary files /dev/null and b/wallpapers/abra.jpg differ diff --git a/wallpapers/articuno.jpg b/wallpapers/articuno.jpg new file mode 100644 index 0000000..c203f3d Binary files /dev/null and b/wallpapers/articuno.jpg differ diff --git a/wallpapers/big_71d0086eab49280fed10d14d573893a876b5eaf4.png b/wallpapers/big_71d0086eab49280fed10d14d573893a876b5eaf4.png new file mode 100644 index 0000000..4f7920f Binary files /dev/null and b/wallpapers/big_71d0086eab49280fed10d14d573893a876b5eaf4.png differ diff --git a/wallpapers/big_aaf416dcccb774b6e508f40e34bd040f72c3d854.jpg b/wallpapers/big_aaf416dcccb774b6e508f40e34bd040f72c3d854.jpg new file mode 100644 index 0000000..ef2df65 Binary files /dev/null and b/wallpapers/big_aaf416dcccb774b6e508f40e34bd040f72c3d854.jpg differ diff --git a/wallpapers/big_b1f7b91cb5f611733e723dfcd394364997738589.jpg b/wallpapers/big_b1f7b91cb5f611733e723dfcd394364997738589.jpg new file mode 100644 index 0000000..73594e2 Binary files /dev/null and b/wallpapers/big_b1f7b91cb5f611733e723dfcd394364997738589.jpg differ diff --git a/wallpapers/big_c52f705c7d5b9b74b96c30b5c44361fb04b7d0c7.png b/wallpapers/big_c52f705c7d5b9b74b96c30b5c44361fb04b7d0c7.png new file mode 100644 index 0000000..7370c81 Binary files /dev/null and b/wallpapers/big_c52f705c7d5b9b74b96c30b5c44361fb04b7d0c7.png differ diff --git a/wallpapers/bmc5i4njj4t21.png b/wallpapers/bmc5i4njj4t21.png new file mode 100644 index 0000000..f867598 Binary files /dev/null and b/wallpapers/bmc5i4njj4t21.png differ diff --git a/wallpapers/charizard.jpg b/wallpapers/charizard.jpg new file mode 100644 index 0000000..ba8318c Binary files /dev/null and b/wallpapers/charizard.jpg differ diff --git a/wallpapers/cubone.jpg b/wallpapers/cubone.jpg new file mode 100644 index 0000000..2bc4e8d Binary files /dev/null and b/wallpapers/cubone.jpg differ diff --git a/wallpapers/dragonair.jpg b/wallpapers/dragonair.jpg new file mode 100644 index 0000000..442d8c5 Binary files /dev/null and b/wallpapers/dragonair.jpg differ diff --git a/wallpapers/dratini.jpg b/wallpapers/dratini.jpg new file mode 100644 index 0000000..24637f8 Binary files /dev/null and b/wallpapers/dratini.jpg differ diff --git a/wallpapers/efo9jncq20s21.jpg b/wallpapers/efo9jncq20s21.jpg new file mode 100644 index 0000000..c4fde2f Binary files /dev/null and b/wallpapers/efo9jncq20s21.jpg differ diff --git a/wallpapers/elochki-by-hangmoon-2560×1440.jpg b/wallpapers/elochki-by-hangmoon-2560×1440.jpg new file mode 100644 index 0000000..63e3352 Binary files /dev/null and b/wallpapers/elochki-by-hangmoon-2560×1440.jpg differ diff --git a/wallpapers/evee.jpg b/wallpapers/evee.jpg new file mode 100644 index 0000000..e701480 Binary files /dev/null and b/wallpapers/evee.jpg differ diff --git a/wallpapers/gastly.jpg b/wallpapers/gastly.jpg new file mode 100644 index 0000000..700a4ad Binary files /dev/null and b/wallpapers/gastly.jpg differ diff --git a/wallpapers/growlithe.jpg b/wallpapers/growlithe.jpg new file mode 100644 index 0000000..c470858 Binary files /dev/null and b/wallpapers/growlithe.jpg differ diff --git a/wallpapers/haunter.jpg b/wallpapers/haunter.jpg new file mode 100644 index 0000000..80fd1f6 Binary files /dev/null and b/wallpapers/haunter.jpg differ diff --git a/wallpapers/ivysaur.jpg b/wallpapers/ivysaur.jpg new file mode 100644 index 0000000..ebd4bda Binary files /dev/null and b/wallpapers/ivysaur.jpg differ diff --git a/wallpapers/jolteon.jpg b/wallpapers/jolteon.jpg new file mode 100644 index 0000000..12c01a5 Binary files /dev/null and b/wallpapers/jolteon.jpg differ diff --git a/wallpapers/magicarp.jpg b/wallpapers/magicarp.jpg new file mode 100644 index 0000000..5499d85 Binary files /dev/null and b/wallpapers/magicarp.jpg differ diff --git a/wallpapers/melee_minimal_wallpaper_by_browniehooves-d8lwcvk.png b/wallpapers/melee_minimal_wallpaper_by_browniehooves-d8lwcvk.png new file mode 100644 index 0000000..f61a217 Binary files /dev/null and b/wallpapers/melee_minimal_wallpaper_by_browniehooves-d8lwcvk.png differ diff --git a/wallpapers/mew.jpg b/wallpapers/mew.jpg new file mode 100644 index 0000000..961825b Binary files /dev/null and b/wallpapers/mew.jpg differ diff --git a/wallpapers/mewtwo.jpg b/wallpapers/mewtwo.jpg new file mode 100644 index 0000000..0b8b570 Binary files /dev/null and b/wallpapers/mewtwo.jpg differ diff --git a/wallpapers/pikachu.jpg b/wallpapers/pikachu.jpg new file mode 100644 index 0000000..8d14f48 Binary files /dev/null and b/wallpapers/pikachu.jpg differ diff --git a/wallpapers/polywhirl.jpg b/wallpapers/polywhirl.jpg new file mode 100644 index 0000000..d6f2223 Binary files /dev/null and b/wallpapers/polywhirl.jpg differ diff --git a/wallpapers/rapidash.jpg b/wallpapers/rapidash.jpg new file mode 100644 index 0000000..20742b5 Binary files /dev/null and b/wallpapers/rapidash.jpg differ diff --git a/wallpapers/sand-inside-house-2560×1440.jpg b/wallpapers/sand-inside-house-2560×1440.jpg new file mode 100644 index 0000000..09d1195 Binary files /dev/null and b/wallpapers/sand-inside-house-2560×1440.jpg differ diff --git a/wallpapers/sea-house-spirited-away-2560×1440.jpg b/wallpapers/sea-house-spirited-away-2560×1440.jpg new file mode 100644 index 0000000..b7d3bc6 Binary files /dev/null and b/wallpapers/sea-house-spirited-away-2560×1440.jpg differ diff --git a/wallpapers/slowpoke.jpg b/wallpapers/slowpoke.jpg new file mode 100644 index 0000000..8ebf502 Binary files /dev/null and b/wallpapers/slowpoke.jpg differ diff --git a/wallpapers/snorlax.jpg b/wallpapers/snorlax.jpg new file mode 100644 index 0000000..96bff3c Binary files /dev/null and b/wallpapers/snorlax.jpg differ diff --git a/wallpapers/typhlosion.jpg b/wallpapers/typhlosion.jpg new file mode 100644 index 0000000..5fcc122 Binary files /dev/null and b/wallpapers/typhlosion.jpg differ diff --git a/wallpapers/umbreon.jpg b/wallpapers/umbreon.jpg new file mode 100644 index 0000000..de41fdb Binary files /dev/null and b/wallpapers/umbreon.jpg differ diff --git a/wallpapers/wallhaven-103929.png b/wallpapers/wallhaven-103929.png new file mode 100644 index 0000000..7764444 Binary files /dev/null and b/wallpapers/wallhaven-103929.png differ diff --git a/wallpapers/wallhaven-109635.jpg b/wallpapers/wallhaven-109635.jpg new file mode 100644 index 0000000..c06379d Binary files /dev/null and b/wallpapers/wallhaven-109635.jpg differ diff --git a/wallpapers/wallhaven-113202.jpg b/wallpapers/wallhaven-113202.jpg new file mode 100644 index 0000000..4456b0d Binary files /dev/null and b/wallpapers/wallhaven-113202.jpg differ diff --git a/wallpapers/wallhaven-114805.jpg b/wallpapers/wallhaven-114805.jpg new file mode 100644 index 0000000..43b3a54 Binary files /dev/null and b/wallpapers/wallhaven-114805.jpg differ diff --git a/wallpapers/wallhaven-134336.jpg b/wallpapers/wallhaven-134336.jpg new file mode 100644 index 0000000..9197387 Binary files /dev/null and b/wallpapers/wallhaven-134336.jpg differ diff --git a/wallpapers/wallhaven-13623.jpg b/wallpapers/wallhaven-13623.jpg new file mode 100644 index 0000000..27ccfe5 Binary files /dev/null and b/wallpapers/wallhaven-13623.jpg differ diff --git a/wallpapers/wallhaven-152672.jpg b/wallpapers/wallhaven-152672.jpg new file mode 100644 index 0000000..5600902 Binary files /dev/null and b/wallpapers/wallhaven-152672.jpg differ diff --git a/wallpapers/wallhaven-154036.jpg b/wallpapers/wallhaven-154036.jpg new file mode 100644 index 0000000..f16259c Binary files /dev/null and b/wallpapers/wallhaven-154036.jpg differ diff --git a/wallpapers/wallhaven-157.jpg b/wallpapers/wallhaven-157.jpg new file mode 100644 index 0000000..6562feb Binary files /dev/null and b/wallpapers/wallhaven-157.jpg differ diff --git a/wallpapers/wallhaven-15767.jpg b/wallpapers/wallhaven-15767.jpg new file mode 100644 index 0000000..7a3e69a Binary files /dev/null and b/wallpapers/wallhaven-15767.jpg differ diff --git a/wallpapers/wallhaven-164029.png b/wallpapers/wallhaven-164029.png new file mode 100644 index 0000000..99950e0 Binary files /dev/null and b/wallpapers/wallhaven-164029.png differ diff --git a/wallpapers/wallhaven-164037.jpg b/wallpapers/wallhaven-164037.jpg new file mode 100644 index 0000000..93db74f Binary files /dev/null and b/wallpapers/wallhaven-164037.jpg differ diff --git a/wallpapers/wallhaven-17773.jpg b/wallpapers/wallhaven-17773.jpg new file mode 100644 index 0000000..6189c19 Binary files /dev/null and b/wallpapers/wallhaven-17773.jpg differ diff --git a/wallpapers/wallhaven-192010.jpg b/wallpapers/wallhaven-192010.jpg new file mode 100644 index 0000000..4dff785 Binary files /dev/null and b/wallpapers/wallhaven-192010.jpg differ diff --git a/wallpapers/wallhaven-20691.jpg b/wallpapers/wallhaven-20691.jpg new file mode 100644 index 0000000..368b01a Binary files /dev/null and b/wallpapers/wallhaven-20691.jpg differ diff --git a/wallpapers/wallhaven-22782.jpg b/wallpapers/wallhaven-22782.jpg new file mode 100644 index 0000000..d611548 Binary files /dev/null and b/wallpapers/wallhaven-22782.jpg differ diff --git a/wallpapers/wallhaven-264484.jpg b/wallpapers/wallhaven-264484.jpg new file mode 100644 index 0000000..f6cf688 Binary files /dev/null and b/wallpapers/wallhaven-264484.jpg differ diff --git a/wallpapers/wallhaven-28204.jpg b/wallpapers/wallhaven-28204.jpg new file mode 100644 index 0000000..8312a12 Binary files /dev/null and b/wallpapers/wallhaven-28204.jpg differ diff --git a/wallpapers/wallhaven-2986.jpg b/wallpapers/wallhaven-2986.jpg new file mode 100644 index 0000000..54301d9 Binary files /dev/null and b/wallpapers/wallhaven-2986.jpg differ diff --git a/wallpapers/wallhaven-310.jpg b/wallpapers/wallhaven-310.jpg new file mode 100644 index 0000000..038a860 Binary files /dev/null and b/wallpapers/wallhaven-310.jpg differ diff --git a/wallpapers/wallhaven-356350.jpg b/wallpapers/wallhaven-356350.jpg new file mode 100644 index 0000000..4946ecd Binary files /dev/null and b/wallpapers/wallhaven-356350.jpg differ diff --git a/wallpapers/wallhaven-421330.png b/wallpapers/wallhaven-421330.png new file mode 100644 index 0000000..4540152 Binary files /dev/null and b/wallpapers/wallhaven-421330.png differ diff --git a/wallpapers/wallhaven-433992.png b/wallpapers/wallhaven-433992.png new file mode 100644 index 0000000..ec3eb5b Binary files /dev/null and b/wallpapers/wallhaven-433992.png differ diff --git a/wallpapers/wallhaven-43843.jpg b/wallpapers/wallhaven-43843.jpg new file mode 100644 index 0000000..f38c9e7 Binary files /dev/null and b/wallpapers/wallhaven-43843.jpg differ diff --git a/wallpapers/wallhaven-440501.jpg b/wallpapers/wallhaven-440501.jpg new file mode 100644 index 0000000..001077c Binary files /dev/null and b/wallpapers/wallhaven-440501.jpg differ diff --git a/wallpapers/wallhaven-441571.png b/wallpapers/wallhaven-441571.png new file mode 100644 index 0000000..c141657 Binary files /dev/null and b/wallpapers/wallhaven-441571.png differ diff --git a/wallpapers/wallhaven-48652.jpg b/wallpapers/wallhaven-48652.jpg new file mode 100644 index 0000000..9618cda Binary files /dev/null and b/wallpapers/wallhaven-48652.jpg differ diff --git a/wallpapers/wallhaven-4914.jpg b/wallpapers/wallhaven-4914.jpg new file mode 100644 index 0000000..bbf02f9 Binary files /dev/null and b/wallpapers/wallhaven-4914.jpg differ diff --git a/wallpapers/wallhaven-50898.png b/wallpapers/wallhaven-50898.png new file mode 100644 index 0000000..67545d6 Binary files /dev/null and b/wallpapers/wallhaven-50898.png differ diff --git a/wallpapers/wallhaven-5168.png b/wallpapers/wallhaven-5168.png new file mode 100644 index 0000000..400920b Binary files /dev/null and b/wallpapers/wallhaven-5168.png differ diff --git a/wallpapers/wallhaven-52603.jpg b/wallpapers/wallhaven-52603.jpg new file mode 100644 index 0000000..e682ef1 Binary files /dev/null and b/wallpapers/wallhaven-52603.jpg differ diff --git a/wallpapers/wallhaven-64346.png b/wallpapers/wallhaven-64346.png new file mode 100644 index 0000000..f69a20e Binary files /dev/null and b/wallpapers/wallhaven-64346.png differ diff --git a/wallpapers/wallhaven-66430.jpg b/wallpapers/wallhaven-66430.jpg new file mode 100644 index 0000000..750c1e3 Binary files /dev/null and b/wallpapers/wallhaven-66430.jpg differ diff --git a/wallpapers/wallhaven-75547.jpg b/wallpapers/wallhaven-75547.jpg new file mode 100644 index 0000000..87c7572 Binary files /dev/null and b/wallpapers/wallhaven-75547.jpg differ diff --git a/wallpapers/wallhaven-80073.jpg b/wallpapers/wallhaven-80073.jpg new file mode 100644 index 0000000..c89ec7a Binary files /dev/null and b/wallpapers/wallhaven-80073.jpg differ diff --git a/wallpapers/wallhaven-89245.png b/wallpapers/wallhaven-89245.png new file mode 100644 index 0000000..f01e592 Binary files /dev/null and b/wallpapers/wallhaven-89245.png differ diff --git a/wallpapers/wallhaven-89936.jpg b/wallpapers/wallhaven-89936.jpg new file mode 100644 index 0000000..a7e61d3 Binary files /dev/null and b/wallpapers/wallhaven-89936.jpg differ diff --git a/wallpapers/wallpaper-1031754.png b/wallpapers/wallpaper-1031754.png new file mode 100644 index 0000000..ed8e79d Binary files /dev/null and b/wallpapers/wallpaper-1031754.png differ diff --git a/wallpapers/wallpaper-1092661.png b/wallpapers/wallpaper-1092661.png new file mode 100644 index 0000000..e12e007 Binary files /dev/null and b/wallpapers/wallpaper-1092661.png differ diff --git a/wallpapers/wallpaper-1096348.png b/wallpapers/wallpaper-1096348.png new file mode 100644 index 0000000..6b07556 Binary files /dev/null and b/wallpapers/wallpaper-1096348.png differ diff --git a/wallpapers/wallpaper-1170647.jpg b/wallpapers/wallpaper-1170647.jpg new file mode 100644 index 0000000..301cd55 Binary files /dev/null and b/wallpapers/wallpaper-1170647.jpg differ diff --git a/wallpapers/wallpaper-1233776.jpg b/wallpapers/wallpaper-1233776.jpg new file mode 100644 index 0000000..7bb28f7 Binary files /dev/null and b/wallpapers/wallpaper-1233776.jpg differ diff --git a/wallpapers/wallpaper-1259135.jpg b/wallpapers/wallpaper-1259135.jpg new file mode 100644 index 0000000..74377ca Binary files /dev/null and b/wallpapers/wallpaper-1259135.jpg differ diff --git a/wallpapers/wallpaper-1335059.jpg b/wallpapers/wallpaper-1335059.jpg new file mode 100644 index 0000000..b8d54f2 Binary files /dev/null and b/wallpapers/wallpaper-1335059.jpg differ diff --git a/wallpapers/wallpaper-1571358.jpg b/wallpapers/wallpaper-1571358.jpg new file mode 100644 index 0000000..069f16c Binary files /dev/null and b/wallpapers/wallpaper-1571358.jpg differ diff --git a/wallpapers/wallpaper-1673697.jpg b/wallpapers/wallpaper-1673697.jpg new file mode 100644 index 0000000..14f5705 Binary files /dev/null and b/wallpapers/wallpaper-1673697.jpg differ diff --git a/wallpapers/wallpaper-1727148.jpg b/wallpapers/wallpaper-1727148.jpg new file mode 100644 index 0000000..1307852 Binary files /dev/null and b/wallpapers/wallpaper-1727148.jpg differ diff --git a/wallpapers/wallpaper-1845598.jpg b/wallpapers/wallpaper-1845598.jpg new file mode 100644 index 0000000..cd7e565 Binary files /dev/null and b/wallpapers/wallpaper-1845598.jpg differ diff --git a/wallpapers/wallpaper-1856538.jpg b/wallpapers/wallpaper-1856538.jpg new file mode 100644 index 0000000..3f84b48 Binary files /dev/null and b/wallpapers/wallpaper-1856538.jpg differ diff --git a/wallpapers/wallpaper-2020049.png b/wallpapers/wallpaper-2020049.png new file mode 100644 index 0000000..eef8f94 Binary files /dev/null and b/wallpapers/wallpaper-2020049.png differ diff --git a/wallpapers/wallpaper-2098909.jpg b/wallpapers/wallpaper-2098909.jpg new file mode 100644 index 0000000..6c661f9 Binary files /dev/null and b/wallpapers/wallpaper-2098909.jpg differ diff --git a/wallpapers/wallpaper-2123373.jpg b/wallpapers/wallpaper-2123373.jpg new file mode 100644 index 0000000..e9b5243 Binary files /dev/null and b/wallpapers/wallpaper-2123373.jpg differ diff --git a/wallpapers/wallpaper-2292757.jpg b/wallpapers/wallpaper-2292757.jpg new file mode 100644 index 0000000..07a4060 Binary files /dev/null and b/wallpapers/wallpaper-2292757.jpg differ diff --git a/wallpapers/wallpaper-2383182.jpg b/wallpapers/wallpaper-2383182.jpg new file mode 100644 index 0000000..aac5942 Binary files /dev/null and b/wallpapers/wallpaper-2383182.jpg differ diff --git a/wallpapers/wallpaper-2404915.jpg b/wallpapers/wallpaper-2404915.jpg new file mode 100644 index 0000000..d65ca23 Binary files /dev/null and b/wallpapers/wallpaper-2404915.jpg differ diff --git a/wallpapers/wallpaper-2451854.jpg b/wallpapers/wallpaper-2451854.jpg new file mode 100644 index 0000000..1aff9d4 Binary files /dev/null and b/wallpapers/wallpaper-2451854.jpg differ diff --git a/wallpapers/wallpaper-2462730.jpg b/wallpapers/wallpaper-2462730.jpg new file mode 100644 index 0000000..7764691 Binary files /dev/null and b/wallpapers/wallpaper-2462730.jpg differ diff --git a/wallpapers/wallpaper-2468040.jpg b/wallpapers/wallpaper-2468040.jpg new file mode 100644 index 0000000..fe42909 Binary files /dev/null and b/wallpapers/wallpaper-2468040.jpg differ diff --git a/wallpapers/wallpaper-2469209.jpg b/wallpapers/wallpaper-2469209.jpg new file mode 100644 index 0000000..f827a2b Binary files /dev/null and b/wallpapers/wallpaper-2469209.jpg differ diff --git a/wallpapers/wallpaper-2514662.jpg b/wallpapers/wallpaper-2514662.jpg new file mode 100644 index 0000000..e132edb Binary files /dev/null and b/wallpapers/wallpaper-2514662.jpg differ diff --git a/wallpapers/wallpaper-2547585.jpg b/wallpapers/wallpaper-2547585.jpg new file mode 100644 index 0000000..db40298 Binary files /dev/null and b/wallpapers/wallpaper-2547585.jpg differ diff --git a/wallpapers/wallpaper-2552963.jpg b/wallpapers/wallpaper-2552963.jpg new file mode 100644 index 0000000..c503913 Binary files /dev/null and b/wallpapers/wallpaper-2552963.jpg differ diff --git a/wallpapers/wallpaper-2571307.jpg b/wallpapers/wallpaper-2571307.jpg new file mode 100644 index 0000000..1d3c5ed Binary files /dev/null and b/wallpapers/wallpaper-2571307.jpg differ diff --git a/wallpapers/wallpaper-2571513.jpg b/wallpapers/wallpaper-2571513.jpg new file mode 100644 index 0000000..90e2cf4 Binary files /dev/null and b/wallpapers/wallpaper-2571513.jpg differ diff --git a/wallpapers/wallpaper-2576834.jpg b/wallpapers/wallpaper-2576834.jpg new file mode 100644 index 0000000..89e9754 Binary files /dev/null and b/wallpapers/wallpaper-2576834.jpg differ diff --git a/wallpapers/wallpaper-2594238.png b/wallpapers/wallpaper-2594238.png new file mode 100644 index 0000000..7d6910d Binary files /dev/null and b/wallpapers/wallpaper-2594238.png differ diff --git a/wallpapers/wallpaper-2626467.jpg b/wallpapers/wallpaper-2626467.jpg new file mode 100644 index 0000000..3a9bb82 Binary files /dev/null and b/wallpapers/wallpaper-2626467.jpg differ diff --git a/wallpapers/wallpaper-2644066.jpg b/wallpapers/wallpaper-2644066.jpg new file mode 100644 index 0000000..8212462 Binary files /dev/null and b/wallpapers/wallpaper-2644066.jpg differ diff --git a/wallpapers/wallpaper-2761476.png b/wallpapers/wallpaper-2761476.png new file mode 100644 index 0000000..164ab56 Binary files /dev/null and b/wallpapers/wallpaper-2761476.png differ diff --git a/wallpapers/wallpaper-2774743.png b/wallpapers/wallpaper-2774743.png new file mode 100644 index 0000000..ee418a2 Binary files /dev/null and b/wallpapers/wallpaper-2774743.png differ diff --git a/wallpapers/wallpaper-2794845.png b/wallpapers/wallpaper-2794845.png new file mode 100644 index 0000000..364595d Binary files /dev/null and b/wallpapers/wallpaper-2794845.png differ diff --git a/wallpapers/wallpaper-2795513.png b/wallpapers/wallpaper-2795513.png new file mode 100644 index 0000000..ffbc221 Binary files /dev/null and b/wallpapers/wallpaper-2795513.png differ diff --git a/wallpapers/wallpaper-2827849.jpg b/wallpapers/wallpaper-2827849.jpg new file mode 100644 index 0000000..73c1a61 Binary files /dev/null and b/wallpapers/wallpaper-2827849.jpg differ diff --git a/wallpapers/wallpaper-2831602.png b/wallpapers/wallpaper-2831602.png new file mode 100644 index 0000000..63934b4 Binary files /dev/null and b/wallpapers/wallpaper-2831602.png differ diff --git a/wallpapers/wallpaper-2845795.png b/wallpapers/wallpaper-2845795.png new file mode 100644 index 0000000..58c3595 Binary files /dev/null and b/wallpapers/wallpaper-2845795.png differ diff --git a/wallpapers/wallpaper-2849326.jpg b/wallpapers/wallpaper-2849326.jpg new file mode 100644 index 0000000..8d12fed Binary files /dev/null and b/wallpapers/wallpaper-2849326.jpg differ diff --git a/wallpapers/wallpaper-2905680.jpg b/wallpapers/wallpaper-2905680.jpg new file mode 100644 index 0000000..1e7b37a Binary files /dev/null and b/wallpapers/wallpaper-2905680.jpg differ diff --git a/wallpapers/wallpaper-2912392.png b/wallpapers/wallpaper-2912392.png new file mode 100644 index 0000000..80d17f9 Binary files /dev/null and b/wallpapers/wallpaper-2912392.png differ diff --git a/wallpapers/wallpaper-2917632.jpg b/wallpapers/wallpaper-2917632.jpg new file mode 100644 index 0000000..a2fcc46 Binary files /dev/null and b/wallpapers/wallpaper-2917632.jpg differ diff --git a/wallpapers/wallpaper-2940335.jpg b/wallpapers/wallpaper-2940335.jpg new file mode 100644 index 0000000..7ea4c3f Binary files /dev/null and b/wallpapers/wallpaper-2940335.jpg differ diff --git a/wallpapers/wallpaper-2940344.jpg b/wallpapers/wallpaper-2940344.jpg new file mode 100644 index 0000000..7c884d7 Binary files /dev/null and b/wallpapers/wallpaper-2940344.jpg differ diff --git a/wallpapers/wallpaper-2940924.jpg b/wallpapers/wallpaper-2940924.jpg new file mode 100644 index 0000000..90b85e8 Binary files /dev/null and b/wallpapers/wallpaper-2940924.jpg differ diff --git a/wallpapers/wallpaper-2986307.jpg b/wallpapers/wallpaper-2986307.jpg new file mode 100644 index 0000000..185e941 Binary files /dev/null and b/wallpapers/wallpaper-2986307.jpg differ diff --git a/wallpapers/wallpaper-2994852.jpg b/wallpapers/wallpaper-2994852.jpg new file mode 100644 index 0000000..894a346 Binary files /dev/null and b/wallpapers/wallpaper-2994852.jpg differ diff --git a/wallpapers/wallpaper-432387.jpg b/wallpapers/wallpaper-432387.jpg new file mode 100644 index 0000000..f9fb865 Binary files /dev/null and b/wallpapers/wallpaper-432387.jpg differ diff --git a/wallpapers/wallpaper-678322.jpg b/wallpapers/wallpaper-678322.jpg new file mode 100644 index 0000000..829a763 Binary files /dev/null and b/wallpapers/wallpaper-678322.jpg differ diff --git a/wallpapers/wallpaper-744402.jpg b/wallpapers/wallpaper-744402.jpg new file mode 100644 index 0000000..4756936 Binary files /dev/null and b/wallpapers/wallpaper-744402.jpg differ diff --git a/wallpapers/wallpaper-756794.jpg b/wallpapers/wallpaper-756794.jpg new file mode 100644 index 0000000..71aba03 Binary files /dev/null and b/wallpapers/wallpaper-756794.jpg differ diff --git a/wallpapers/wallpaper-798984.jpg b/wallpapers/wallpaper-798984.jpg new file mode 100644 index 0000000..b52f7e9 Binary files /dev/null and b/wallpapers/wallpaper-798984.jpg differ diff --git a/wallpapers/wallpaper-897227.jpg b/wallpapers/wallpaper-897227.jpg new file mode 100644 index 0000000..2a323a4 Binary files /dev/null and b/wallpapers/wallpaper-897227.jpg differ diff --git a/wallpapers/zapdos.jpg b/wallpapers/zapdos.jpg new file mode 100644 index 0000000..6f6fdf3 Binary files /dev/null and b/wallpapers/zapdos.jpg differ diff --git a/zsh/aliases b/zsh/aliases new file mode 100644 index 0000000..1c71cea --- /dev/null +++ b/zsh/aliases @@ -0,0 +1,38 @@ +alias grep='grep --color=auto' +alias lal='ls -la' + +alias src='cd ~/src/' +alias s='src && ls' +alias gosrc='cd ~/src/go/src' +alias gs='gosrc && ls' + +alias t='tmuxn' +alias tmuxn='tmux new -s' +alias ta='tmuxa' +alias tmuxa='tmux attach -d -t' +alias tls='tmux ls' + +alias cb='xsel -bi; xsel -bo' + +alias rsyncv='rsync -av --progress' + +function psgrep { + ps aux | grep -P "[^]]$1" +} + +function pskill { + PROCS=$(psgrep "$1") + echo "$PROCS" + echo "$PROCS" | awk '{print $2}' | xargs kill +} + +# takes in a search regex and a replace string, and does a recursive +# find/replace inside the current directory. Safe to run on repos with .git +# folders and shit like that +function agsed { + search="$1" + replace="$2" + files=$(ag "$search" -l0) + echo -n "$files" | xargs -0 -n1 echo + echo -n "$files" | xargs -0 sed -i "s/$search/$replace/g" +} diff --git a/zsh/custom/themes/mediocregopher.zsh-theme b/zsh/custom/themes/mediocregopher.zsh-theme new file mode 100644 index 0000000..529f46b --- /dev/null +++ b/zsh/custom/themes/mediocregopher.zsh-theme @@ -0,0 +1,23 @@ +#!/usr/bin/env zsh + +# Unique string based on hostname +sha1=$(echo $(hostname) | sha1sum | awk '{print $1}' | grep -oP '[0-9a-f]{8}' | head -n1) +# Turn sha1 into int +asint=$(printf "%d" 0x$sha1) + +colorint=$(printf "%03d" $(expr $asint % 255)) +color=$FG[$colorint] + +PROMPT='%{$color%} %~%{$reset_color%}$(git_prompt_info)$(git_prompt_status)%{$reset_color%} :: ' + +ZSH_THEME_GIT_PROMPT_PREFIX=" ::%{$fg[green]%} " +ZSH_THEME_GIT_PROMPT_SUFFIX="" +ZSH_THEME_GIT_PROMPT_DIRTY="" +ZSH_THEME_GIT_PROMPT_CLEAN="" + +ZSH_THEME_GIT_PROMPT_ADDED=" +" +ZSH_THEME_GIT_PROMPT_MODIFIED=" ^" +ZSH_THEME_GIT_PROMPT_DELETED=" -" +ZSH_THEME_GIT_PROMPT_RENAMED=" >" +ZSH_THEME_GIT_PROMPT_UNMERGED=" @" +ZSH_THEME_GIT_PROMPT_UNTRACKED=" *" diff --git a/zsh/default.nix b/zsh/default.nix new file mode 100644 index 0000000..5071c9f --- /dev/null +++ b/zsh/default.nix @@ -0,0 +1,31 @@ +{ + + pkgs ? (import ../pkgs.nix) {}, + +}: rec { + + ohMyZsh = ./oh-my-zsh; + + zshrc = pkgs.writeTextDir ".zshrc" '' + + # oh-my-zsh + export ZSH=${pkgs.oh-my-zsh}/share/oh-my-zsh + ZSH_CUSTOM=${./custom} + ZSH_THEME=mediocregopher + DISABLE_AUTO_UPDATE=true + plugins=(git vi-mode) + source $ZSH/oh-my-zsh.sh + + PATH=${../bin}:$PATH + + . ${./zshrc} + . ${./env} + . ${./aliases} + . ${pkgs.nix}/etc/profile.d/nix.sh + ''; + + zsh = pkgs.writeScriptBin "zsh" '' + #!${pkgs.bash}/bin/bash + ZDOTDIR=${zshrc} exec ${pkgs.zsh}/bin/zsh "$@" + ''; +} diff --git a/zsh/env b/zsh/env new file mode 100644 index 0000000..0188d76 --- /dev/null +++ b/zsh/env @@ -0,0 +1,18 @@ +#Global stuff shitty programs use +export EDITOR=~/.nix-profile/bin/nvim + +#Basics +export PATH=$PATH:/bin +export PATH=$PATH:/usr/bin +export PATH=$PATH:/usr/local/bin + +#my shit +export PATH=~/bin:$PATH + +#Go has its own path system. Way to be difficult go +export GOPATH=~/.go +export GOBIN=$GOPATH/bin +export PATH=$GOPATH/bin:$PATH + +# GPG is needy +export GPG_TTY=$(tty) diff --git a/zsh/zshrc b/zsh/zshrc new file mode 100644 index 0000000..c939401 --- /dev/null +++ b/zsh/zshrc @@ -0,0 +1,18 @@ +#Correctly background processes +setopt nohup + +#Stop zsh from stupidly asking me to correct vim to .vim +unsetopt correctall + +#Bind my shit +bindkey -s "\eu" "cd ..\n" #cd up + +#Turn off share history +unsetopt share_history + +#zmv is the bee's-knees +autoload -U zmv + +# Save ssh password within a terminal +eval $(ssh-agent) 2>&1 >/dev/null +trap "kill $SSH_AGENT_PID" 0