diff options
| author | Max Bossing <max@bossi.ng> | 2025-07-15 21:20:49 +0200 |
|---|---|---|
| committer | Max Bossing <max@bossi.ng> | 2025-07-15 21:20:49 +0200 |
| commit | 432b77a28734ed6a744f40a9f1210f1a3d58d0ca (patch) | |
| tree | e19230d4ef8ff16ca5942942370b8a843d5b2dc7 | |
init
| -rw-r--r-- | fish/.gitignore | 3 | ||||
| -rw-r--r-- | fish/config.fish | 50 | ||||
| -rw-r--r-- | hermes.dots.toml | 23 | ||||
| -rw-r--r-- | hestia.dots.toml | 23 | ||||
| -rw-r--r-- | hypr/hermes.hyprland.conf | 298 | ||||
| -rw-r--r-- | hypr/hyprlock.conf | 124 | ||||
| -rw-r--r-- | hypr/hyprpaper.conf | 2 | ||||
| -rw-r--r-- | kitty/current-theme.conf | 50 | ||||
| -rw-r--r-- | kitty/kitty.conf | 18 | ||||
| -rw-r--r-- | nvim/.gitignore | 1 | ||||
| -rw-r--r-- | nvim/init.lua | 117 |
11 files changed, 709 insertions, 0 deletions
diff --git a/fish/.gitignore b/fish/.gitignore new file mode 100644 index 0000000..847b95c --- /dev/null +++ b/fish/.gitignore @@ -0,0 +1,3 @@ +completions +functions +fish_variables diff --git a/fish/config.fish b/fish/config.fish new file mode 100644 index 0000000..82f9d8c --- /dev/null +++ b/fish/config.fish @@ -0,0 +1,50 @@ +# Remove fish greeting +set fish_greeting + +# Set terminal/visual editor to nvim +set EDITOR 'nvim' +set VISUAL 'nvim' + +fish_add_path ~/.cargo/bin +fish_add_path ~/.local/bin + +# This is used so the pgp keys on my Yubikey can be used for ssh etc +eval (ssh-agent -c) +gpg-agent --enable-ssh-support +set SSH_AUTH_SOCK (gpgconf --list-dirs agent-ssh-socket) +set GPG_TTY (tty) +export GPG_TTY=(tty) +gpg-connect-agent updatestartuptty /bye >/dev/null + +# Switch gpg to backup keys +# Main key +alias switchto1='gpg-connect-agent "20576321" "learn --force" /bye' +# Backup Key +alias switchto2='gpg-connect-agent "20576243" "learn --force" /bye' + +# exa > ls +alias ls='exa -al --group-directories-first --icons --color=always' + +alias battery='upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep percentage' + +# attach to tmux session +alias attach='tmux -f ~/tmux.conf new-session -A -s terminal' + +# hö +alias ed='nvim' + +# Colors +set fish_color_normal white +set fish_color_autosuggestion '#555555' +set fish_color_command white +set fish_color_error '#ff6c6b' +set fish_color_param '#777777' + + +# PATH +set PATH "$PATH:/home/max/.local/bin" + +clear + +# Init starship +starship init fish | source diff --git a/hermes.dots.toml b/hermes.dots.toml new file mode 100644 index 0000000..5d38dab --- /dev/null +++ b/hermes.dots.toml @@ -0,0 +1,23 @@ +[[dot]] +src = "nvim" +dest = ".config/nvim" + +[[dot]] +src = "fish" +dest = ".config/fish" + +[[dot]] +src = "hypr/hermes.hyprland.conf" +dest = ".config/hypr/hyprland.conf" + +[[dot]] +src = "hypr/hyprpaper.conf" +dest = ".config/hypr/hyprpaper.conf" + +[[dot]] +src = "hypr/hyprlock.conf" +dest = ".config/hypr/hyprlock.conf" + +[[dot]] +src = "kitty" +dest = ".config/kitty" diff --git a/hestia.dots.toml b/hestia.dots.toml new file mode 100644 index 0000000..c8591d7 --- /dev/null +++ b/hestia.dots.toml @@ -0,0 +1,23 @@ +[[dot]] +src = "nvim" +dest = ".config/nvim" + +[[dot]] +src = "fish" +dest = ".config/fish" + +[[dot]] +src = "hypr/hestia.hyprland.conf" +dest = ".config/hypr/hyprland.conf" + +[[dot]] +src = "hypr/hyprpaper.conf" +dest = ".config/hypr/hyprpaper.conf" + +[[dot]] +src = "hypr/hyprlock.conf" +dest = ".config/hypr/hyprlock.conf" + +[[dot]] +src = "kitty" +dest = ".config/kitty" diff --git a/hypr/hermes.hyprland.conf b/hypr/hermes.hyprland.conf new file mode 100644 index 0000000..3222165 --- /dev/null +++ b/hypr/hermes.hyprland.conf @@ -0,0 +1,298 @@ +################ +### MONITORS ### +################ + +# See https://wiki.hyprland.org/Configuring/Monitors/ +monitor=,preferred,auto,auto + +################### +### MY PROGRAMS ### +################### + +# See https://wiki.hyprland.org/Configuring/Keywords/ + +# Set programs that you use +$terminal = kitty +$fileManager = nautilus +$menu = fuzzel + +################# +### AUTOSTART ### +################# + +# Autostart necessary processes (like notifications daemons, status bars, etc.) +# Or execute your favorite apps at launch like this: + +# exec-once = $terminal +# exec-once = nm-applet & +exec-once = hyprpaper +exec-once = systemctl --user start hyprpolkitagent + +############################# +### ENVIRONMENT VARIABLES ### +############################# + +# See https://wiki.hyprland.org/Configuring/Environment-variables/ + +env = XCURSOR_SIZE,10 +env = HYPRCURSOR_SIZE,10 + +################### +### PERMISSIONS ### +################### + +# See https://wiki.hyprland.org/Configuring/Permissions/ +# Please note permission changes here require a Hyprland restart and are not applied on-the-fly +# for security reasons + +# ecosystem { +# enforce_permissions = 1 +# } + +# permission = /usr/(bin|local/bin)/grim, screencopy, allow +# permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow +# permission = /usr/(bin|local/bin)/hyprpm, plugin, allow + +##################### +### LOOK AND FEEL ### +##################### + +# Refer to https://wiki.hyprland.org/Configuring/Variables/ + +# https://wiki.hyprland.org/Configuring/Variables/#general +general { + gaps_in = 0 + gaps_out = 0 + + border_size = 0 + + # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors + col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg + col.inactive_border = rgba(595959aa) + + # Set to true enable resizing windows by clicking and dragging on borders and gaps + resize_on_border = true + + # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = false + + layout = dwindle +} + +# https://wiki.hyprland.org/Configuring/Variables/#decoration +decoration { + rounding = 2 + rounding_power = 2 + + # Change transparency of focused and unfocused windows + active_opacity = 1.0 + inactive_opacity = 0.8 + + shadow { + enabled = true + range = 4 + render_power = 3 + color = rgba(1a1a1aee) + } + + # https://wiki.hyprland.org/Configuring/Variables/#blur + blur { + enabled = true + size = 3 + passes = 1 + + vibrancy = 0.1696 + } +} + +# https://wiki.hyprland.org/Configuring/Variables/#animations +animations { + enabled = true + # Animation curves + + bezier = linear, 0, 0, 1, 1 + bezier = md3_standard, 0.2, 0, 0, 1 + bezier = md3_decel, 0.05, 0.7, 0.1, 1 + bezier = md3_accel, 0.3, 0, 0.8, 0.15 + bezier = overshot, 0.05, 0.9, 0.1, 1.1 + bezier = crazyshot, 0.1, 1.5, 0.76, 0.92 + bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0 + bezier = menu_decel, 0.1, 1, 0, 1 + bezier = menu_accel, 0.38, 0.04, 1, 0.07 + bezier = easeInOutCirc, 0.85, 0, 0.15, 1 + bezier = easeOutCirc, 0, 0.55, 0.45, 1 + bezier = easeOutExpo, 0.16, 1, 0.3, 1 + bezier = softAcDecel, 0.26, 0.26, 0.15, 1 + bezier = md2, 0.4, 0, 0.2, 1 # use with .2s duration + # Animation configs + animation = windows, 1, 3, md3_decel, popin 60% + animation = windowsIn, 1, 3, md3_decel, popin 60% + animation = windowsOut, 1, 3, md3_accel, popin 60% + animation = border, 1, 10, default + animation = fade, 1, 3, md3_decel + # animation = layers, 1, 2, md3_decel, slide + animation = layersIn, 1, 3, menu_decel, slide + animation = layersOut, 1, 1.6, menu_accel + animation = fadeLayersIn, 1, 2, menu_decel + animation = fadeLayersOut, 1, 4.5, menu_accel + animation = workspaces, 1, 7, menu_decel, slide + # animation = workspaces, 1, 2.5, softAcDecel, slide + # animation = workspaces, 1, 7, menu_decel, slidefade 15% + # animation = specialWorkspace, 1, 3, md3_decel, slidefadevert 15% + animation = specialWorkspace, 1, 3, md3_decel, slidevert +} + +# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/ +# "Smart gaps" / "No gaps when only" +# uncomment all if you wish to use that. +# workspace = w[tv1], gapsout:0, gapsin:0 +# workspace = f[1], gapsout:0, gapsin:0 +# windowrule = bordersize 0, floating:0, onworkspace:w[tv1] +# windowrule = rounding 0, floating:0, onworkspace:w[tv1] +# windowrule = bordersize 0, floating:0, onworkspace:f[1] +# windowrule = rounding 0, floating:0, onworkspace:f[1] + +# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more +dwindle { + pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = true # You probably want this +} + +# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more +master { + new_status = master +} + +# https://wiki.hyprland.org/Configuring/Variables/#misc +misc { + force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers + disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :( +} + + +############# +### INPUT ### +############# + +# https://wiki.hyprland.org/Configuring/Variables/#input +input { + kb_layout = de + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. + + touchpad { + natural_scroll = true + } + kb_options = caps:swapescape +} + +# https://wiki.hyprland.org/Configuring/Variables/#gestures +gestures { + workspace_swipe = true +} + +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more +device { + name = epic-mouse-v1 + sensitivity = -0.5 +} + + +################### +### KEYBINDINGS ### +################### + +# See https://wiki.hyprland.org/Configuring/Keywords/ +$mainMod = SUPER # Sets "Windows" key as main modifier + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, return, exec, $terminal +bind = $mainMod, Q, killactive, +bind = $mainMod, E, exit, +bind = $mainMod SHIFT, return, exec, $fileManager +bind = $mainMod, V, togglefloating, +bind = $mainMod, D, exec, $menu +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod, J, togglesplit, # dwindle + +# Move focus with mainMod + arrow keys +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 +bind = $mainMod SHIFT, 3, movetoworkspace, 3 +bind = $mainMod SHIFT, 4, movetoworkspace, 4 +bind = $mainMod SHIFT, 5, movetoworkspace, 5 +bind = $mainMod SHIFT, 6, movetoworkspace, 6 +bind = $mainMod SHIFT, 7, movetoworkspace, 7 +bind = $mainMod SHIFT, 8, movetoworkspace, 8 +bind = $mainMod SHIFT, 9, movetoworkspace, 9 +bind = $mainMod SHIFT, 0, movetoworkspace, 10 + +# Example special workspace (scratchpad) +bind = $mainMod, S, togglespecialworkspace, magic +bind = $mainMod SHIFT, S, movetoworkspace, special:magic + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Mute and lock the system +bind = $mainMod, L, exec, pactl set-sink-mute @DEFAULT_SINK@ 1 && hyprlock + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + +# Laptop multimedia keys for volume and LCD brightness +bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ +bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle +bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+ +bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%- + +# Requires playerctl +bindl = , XF86AudioNext, exec, playerctl next +bindl = , XF86AudioPause, exec, playerctl play-pause +bindl = , XF86AudioPlay, exec, playerctl play-pause +bindl = , XF86AudioPrev, exec, playerctl previous + +############################## +### WINDOWS AND WORKSPACES ### +############################## + +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more +# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules + +# Example windowrule +# windowrule = float,class:^(kitty)$,title:^(kitty)$ + +# Ignore maximize requests from apps. You'll probably like this. +windowrule = suppressevent maximize, class:.* + +# Fix some dragging issues with XWayland +windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 diff --git a/hypr/hyprlock.conf b/hypr/hyprlock.conf new file mode 100644 index 0000000..621b26f --- /dev/null +++ b/hypr/hyprlock.conf @@ -0,0 +1,124 @@ +# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # +# Hyprlock +# Original config submitted by https://github.com/SherLock707 + +# Sourcing colors generated by wallust +source = $HOME/.config/hypr/wallust/wallust-hyprland.conf + +general { + grace = 1 +} + +background { + monitor = + #path = screenshot # screenshot of your desktop + path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_modified # NOTE only png supported for now + #color = $color7 + + # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations + blur_size = 5 + blur_passes = 1 # 0 disables blurring + noise = 0.0117 + contrast = 1.3000 # Vibrant!!! + brightness = 0.8000 + vibrancy = 0.2100 + vibrancy_darkness = 0.0 +} + +input-field { + monitor = + size = 250, 50 + outline_thickness = 3 + dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8 + dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0 + dots_center = true + outer_color = $color5 + inner_color = $color0 + font_color = $color12 + #fade_on_empty = true + placeholder_text = <i>Password...</i> # Text rendered in the input box when it's empty. + hide_input = false + + position = 0, 200 + halign = center + valign = bottom +} + +# Date +label { + monitor = + text = cmd[update:18000000] echo "<b> "$(date +'%A, %-d %B %Y')" </b>" + color = $color12 + font_size = 34 + font_family = JetBrains Mono Nerd Font 10 + + position = 0, -150 + halign = center + valign = top +} + +# Week +label { + monitor = + text = cmd[update:18000000] echo "<b> "$(date +'Week %U')" </b>" + color = $color5 + font_size = 24 + font_family = JetBrains Mono Nerd Font 10 + position = 0, -250 + halign = center + valign = top +} + +# Time +label { + monitor = + #text = cmd[update:1000] echo "<b><big> $(date +"%I:%M:%S %p") </big></b>" # AM/PM + text = cmd[update:1000] echo "<b><big> $(date +"%H:%M:%S") </big></b>" # 24H + color = $color15 + font_size = 94 + font_family = JetBrains Mono Nerd Font 10 + + position = 0, 0 + halign = center + valign = center +} + +# User +label { + monitor = + text = $USER + color = $color12 + font_size = 18 + font_family = Inter Display Medium + + position = 0, 100 + halign = center + valign = bottom +} + +# weather edit specific location. Note, this cause a 2-4 seconds delay in locking +label { + monitor = + text = cmd[update:3600000] [ -f ~/.cache/.weather_cache ] && cat ~/.cache/.weather_cache + color = $color12 + font_size = 24 + font_family = JetBrains Mono Nerd Font 10 + position = 50, 0 + halign = left + valign = bottom +} + +# Put a picture of choice here. Default is the current wallpaper +image { + monitor = + path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current + size = 230 + rounding = -1 + border_size = 2 + border_color = $color11 + rotate = 0 + reload_time = -1 + position = 0, 300 + halign = center + valign = bottom +} diff --git a/hypr/hyprpaper.conf b/hypr/hyprpaper.conf new file mode 100644 index 0000000..eb2af1f --- /dev/null +++ b/hypr/hyprpaper.conf @@ -0,0 +1,2 @@ +preload = ~/Pictures/pissarro_3.jpg +wallpaper = ,~/Pictures/pissarro_3.jpg diff --git a/kitty/current-theme.conf b/kitty/current-theme.conf new file mode 100644 index 0000000..014901b --- /dev/null +++ b/kitty/current-theme.conf @@ -0,0 +1,50 @@ +# vim:ft=kitty + +## name: Tokyo Night Moon +## license: MIT +## author: Folke Lemaitre +## upstream: https://github.com/folke/tokyonight.nvim/raw/main/extras/kitty/tokyonight_moon.conf + + +background #222436 +foreground #c8d3f5 +selection_background #2d3f76 +selection_foreground #c8d3f5 +url_color #4fd6be +cursor #c8d3f5 +cursor_text_color #222436 + +# Tabs +active_tab_background #82aaff +active_tab_foreground #1e2030 +inactive_tab_background #2f334d +inactive_tab_foreground #545c7e +#tab_bar_background #1b1d2b + +# Windows +active_border_color #82aaff +inactive_border_color #2f334d + +# normal +color0 #1b1d2b +color1 #ff757f +color2 #c3e88d +color3 #ffc777 +color4 #82aaff +color5 #c099ff +color6 #86e1fc +color7 #828bb8 + +# bright +color8 #444a73 +color9 #ff757f +color10 #c3e88d +color11 #ffc777 +color12 #82aaff +color13 #c099ff +color14 #86e1fc +color15 #c8d3f5 + +# extended colors +color16 #ff966c +color17 #c53b53 diff --git a/kitty/kitty.conf b/kitty/kitty.conf new file mode 100644 index 0000000..9b73588 --- /dev/null +++ b/kitty/kitty.conf @@ -0,0 +1,18 @@ +# vim:fileencoding=utf-8:foldmethod=marker + +# BEGIN_KITTY_THEME +# Tokyo Night Moon +include current-theme.conf +# END_KITTY_THEME + +confirm_os_window_close 0 +cursor_shape block +cursor_trail 1 +cursor_trail_start_threshold 2 + +# BEGIN_KITTY_FONTS +font_family family="IBM Plex Mono" +bold_font auto +italic_font auto +bold_italic_font auto +# END_KITTY_FONTS diff --git a/nvim/.gitignore b/nvim/.gitignore new file mode 100644 index 0000000..e033bc6 --- /dev/null +++ b/nvim/.gitignore @@ -0,0 +1 @@ +lazy-lock.json diff --git a/nvim/init.lua b/nvim/init.lua new file mode 100644 index 0000000..d911177 --- /dev/null +++ b/nvim/init.lua @@ -0,0 +1,117 @@ +vim.g.loaded_netrw = 1 +vim.g.loaded_netrwPlugin = 1 + +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not vim.loop.fs_stat(lazypath) then + vim.fn.system({ + "git", + "clone", + "--filter=blob:none", + "https://github.com/folke/lazy.nvim.git", + "--branch=stable", -- latest stable release + lazypath, + }) +end +vim.opt.rtp:prepend(lazypath) + +require("lazy").setup({ + + -- Color Scheme + "folke/tokyonight.nvim", + + -- Syntax highlighting + 'nvim-treesitter/nvim-treesitter', + + -- Status line + 'nvim-lualine/lualine.nvim', + + -- Git + 'airblade/vim-gitgutter', + + -- File System + 'stevearc/oil.nvim', + + { + 'OXY2DEV/markview.nvim', + lazy = false, + priority = 49, + + }, + + -- Telescope + { + 'nvim-telescope/telescope.nvim', + tag = '0.1.5', + dependencies = { + 'nvim-lua/plenary.nvim', + 'sharkdp/fd', + { 'nvim-telescope/telescope-fzf-native.nvim', build = 'make' }, + } + }, + + -- Icons + { + "echasnovski/mini.icons", + lazy = true, + init = function() + package.preload["nvim-web-devicons"] = function() + require("mini.icons").mock_nvim_web_devicons() + return package.loaded["nvim-web-devicons"] + end + end, + }, +}) + + + +-- Colorscheme +vim.cmd [[colorscheme tokyonight-moon]] + +vim.opt.termguicolors = true +vim.o.background = "dark" + +-- Map leader to space +vim.g.mapleader = ' ' + +-- Tabs sind für lutscher +vim.opt.tabstop = 2 +vim.opt.shiftwidth = 2 +vim.o.expandtab = true + +-- Numbers on the side +vim.wo.number = true +vim.wo.relativenumber = true +vim.o.ruler = true +-- Show something in the command line not sure +vim.o.showcmd = true + +-- reload config without restart +vim.keymap.set('n', '<leader>r', ':so %<CR>') + +-- Lualine setup +require('lualine').setup { + options = { + icons_enabled = true, + theme = 'auto', + section_separators = { left = '', right = '' }, + component_separators = { left = '', right = '' } + }, +} + +-- Treesitter setup +require('nvim-treesitter.configs').setup { + highlight = { enable = true } +} + +-- Telescope setup +local telescope = require('telescope') +telescope.load_extension('fzf') +vim.keymap.set('n', '<leader>tf', ':Telescope find_files<CR>') -- file search +vim.keymap.set('n', '<leader>tb', ':Telescope buffers<CR>') -- buffer peak +vim.keymap.set('n', '<leader>th', ':Telescope help_tags<CR>') -- help menu +vim.keymap.set('n', '<leader>tt', ':Telescope treesitter <CR>') -- treesitter symbol menu +vim.keymap.set('n', '<leader>tp', ':Telescope builtin<CR>') -- picker picker lmao + +require('oil').setup() + + |
