debian-btw

debian-btw

https://git.tonybtw.com/debian-btw.git git://git.tonybtw.com/debian-btw.git

initial commit

Commit
fd84660d2cf70234a6203617f53868aa4c65197a
Author
tony <tony@tonybtw.com>
Date
2026-02-18 22:55:18

Diff

diff --git a/alacritty/alacritty.toml b/alacritty/alacritty.toml
new file mode 100644
index 0000000..11f8351
--- /dev/null
+++ b/alacritty/alacritty.toml
@@ -0,0 +1,39 @@
+[window]
+# opacity=0.9
+[window.padding]
+y = 6 
+x = 6  
+
+[font]
+# normal = { family = "JetBrainsMono Nerd Font Propo", style = "Regular" }
+# normal = { family = "Iosevka Nerd Font Propo", style = "Regular" }
+normal = { family = "UbuntuMono Nerd Font Propo", style = "Regular" }
+
+# size = 20
+size = 14
+
+[colors.bright]
+black   = "#444b6a"
+blue    = "#7da6ff"
+cyan    = "#0db9d7"
+green   = "#b9f27c"
+magenta = "#bb9af7"
+red     = "#ff7a93"
+white   = "#acb0d0"
+yellow  = "#ff9e64"
+
+
+[colors.primary]
+background = "#1a1b26"
+foreground = "#c0caf5"
+
+[colors.normal]
+black   = "#15161e"
+red     = "#f7768e"
+green   = "#9ece6a"
+yellow  = "#e0af68"
+blue    = "#7aa2f7"
+magenta = "#bb9af7"
+cyan    = "#7dcfff"
+white   = "#a9b1d6"
+
diff --git a/alacritty/readme.org b/alacritty/readme.org
new file mode 100644
index 0000000..6921c5f
--- /dev/null
+++ b/alacritty/readme.org
@@ -0,0 +1,44 @@
+#+title: Alacritty Config
+#+AUTHOR: Tony
+
+* Introduction
+This is my literately defined alacritty.toml readme using
+my first emacs org mode file.
+
+* Font
+Here I will define my font to be JetBrains Mono
+#+begin_src toml :tangle alacritty.toml
+[font]
+normal = { family = "JetBrainsMono Nerd Font Mono", style = "Regular" }
+size = 20
+#+end_src
+
+* Colors
+Using a TokyoNight theme, I note why I like it here.
+
+#+BEGIN_SRC toml :tangle alacritty.toml
+[colors.primary]
+background = "#1a1b26"
+foreground = "#c0caf5"
+
+[colors.normal]
+black   = "#15161e"
+red     = "#f7768e"
+green   = "#9ece6a"
+yellow  = "#e0af68"
+blue    = "#7aa2f7"
+magenta = "#bb9af7"
+cyan    = "#7dcfff"
+white   = "#a9b1d6"
+#+END_SRC
+
+* Terminal Stuff
+This is required to set the terminal to /bin/bash instead of /bin/zsh, and login automatically to bash.
+#+begin_src toml :tangle alacritty.toml
+[terminal]
+
+[terminal.shell]
+program = "/bin/bash"
+args = ["--login"]
+
+#+end_src
diff --git a/hello.go b/hello.go
new file mode 100644
index 0000000..fcbaab3
--- /dev/null
+++ b/hello.go
@@ -0,0 +1,31 @@
+package main
+
+import (
+	"fmt"
+	"runtime"
+	"strings"
+)
+
+func hello_world(s string) {
+	pc, _, _, _ := runtime.Caller(0) 
+	fn := runtime.FuncForPC(pc)
+	funcName := strings.Split(fn.Name(), ".")[1]
+
+	words := strings.Split(funcName, "_")
+	for i := range words {
+		words[i] = strings.Title(words[i])
+	}
+
+	message := strings.Join(words, ", ") + "!!"
+	funcs := map[string]func(...interface{})(int, error) {
+		"println": fmt.Println,
+		"print": fmt.Print,
+	}
+	MrBeast := funcs[strings.ToLower(s)+"ln"]
+	MrBeast(message)
+}
+
+func main() {
+	hello_world("print")
+}
+
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/README.md b/nvim/README.md
new file mode 100644
index 0000000..1779e97
--- /dev/null
+++ b/nvim/README.md
@@ -0,0 +1,117 @@
+# Neovim Keybinds Documentation
+
+This document provides a simple and organized overview of all the custom keybinds defined in my Neovim configuration.
+
+## General Keybinds
+
+| Mode | Key             | Action                                                                                      |
+|------|-----------------|---------------------------------------------------------------------------------------------|
+| `n`  | `<leader>cd`    | Open Ex mode (`:Ex`)                                                                        |
+| `n`  | `J`             | Join lines while keeping the cursor in place                                                |
+| `n`  | `<C-d>`         | Scroll half-page down and keep the cursor centered                                          |
+| `n`  | `<C-u>`         | Scroll half-page up and keep the cursor centered                                            |
+| `n`  | `n`             | Move to next search result and keep it centered                                             |
+| `n`  | `N`             | Move to previous search result and keep it centered                                         |
+| `n`  | `Q`             | Disable Ex mode                                                                             |
+| `n`  | `<C-k>`         | Jump to next quickfix entry and keep it centered                                            |
+| `n`  | `<C-j>`         | Jump to previous quickfix entry and keep it centered                                        |
+| `n`  | `<leader>k`     | Jump to next location entry and keep it centered                                            |
+| `n`  | `<leader>j`     | Jump to previous location entry and keep it centered                                        |
+| `i`  | `<C-c>`         | Exit insert mode (acts like `Esc`)                                                          |
+| `n`  | `<leader>x`     | Make current file executable (`chmod +x`)                                                   |
+| `n`  | `<leader>u`     | Toggle Undotree                                                                             |
+| `n`  | `<leader>rl`    | Reload the Neovim config (`~/.config/nvim/init.lua`)                                        |
+| `n`  | `<leader><leader>` | Source the current file (`:so`)                                                          |
+
+---
+
+## Visual Mode Keybinds
+
+| Mode | Key             | Action                                                                                      |
+|------|-----------------|---------------------------------------------------------------------------------------------|
+| `v`  | `J`             | Move selected block down                                                                    |
+| `v`  | `K`             | Move selected block up                                                                      |
+| `x`  | `<leader>p`     | Paste without overwriting clipboard                                                         |
+| `v`  | `<leader>y`     | Yank into system clipboard (even on SSH)                                                    |
+
+---
+
+## Linting and Formatting
+
+| Mode | Key             | Action                                                                                      |
+|------|-----------------|---------------------------------------------------------------------------------------------|
+| `n`  | `<leader>cc`    | Run `php-cs-fixer` to lint and format PHP files                                             |
+| `n`  | `<F3>`          | Format code (`LSP`)                                                                         |
+
+---
+
+## Telescope Keybinds
+
+| Mode | Key             | Action                                                                                      |
+|------|-----------------|---------------------------------------------------------------------------------------------|
+| `n`  | `<leader>ff`    | Find files                                                                                  |
+| `n`  | `<leader>fg`    | Find git-tracked files                                                                      |
+| `n`  | `<leader>fo`    | Open recent files                                                                           |
+| `n`  | `<leader>fq`    | Open quickfix list                                                                          |
+| `n`  | `<leader>fh`    | Open help tags                                                                              |
+| `n`  | `<leader>fb`    | Open buffer list                                                                            |
+| `n`  | `<leader>fs`    | Grep current string                                                                         |
+| `n`  | `<leader>fc`    | Grep instances of the current file name without the extension                               |
+| `n`  | `<leader>fi`    | Find files in Neovim configuration directory (`~/.config/nvim/`)                            |
+
+---
+
+## Harpoon Integration
+
+| Mode | Key             | Action                                                                                      |
+|------|-----------------|---------------------------------------------------------------------------------------------|
+| `n`  | `<leader>a`     | Add current file to Harpoon list                                                            |
+| `n`  | `<C-e>`         | Toggle Harpoon quick menu                                                                   |
+| `n`  | `<leader>fl`    | Open Harpoon window with Telescope                                                          |
+| `n`  | `<C-p>`         | Go to previous Harpoon mark                                                                 |
+| `n`  | `<C-n>`         | Go to next Harpoon mark                                                                     |
+
+---
+
+## LSP Keybinds
+
+| Mode      | Key        | Action                                                                                      |
+|-----------|------------|---------------------------------------------------------------------------------------------|
+| `n`       | `K`        | Show hover information                                                                      |
+| `n`       | `gd`       | Go to definition                                                                            |
+| `n`       | `gD`       | Go to declaration                                                                           |
+| `n`       | `gi`       | Go to implementation                                                                        |
+| `n`       | `go`       | Go to type definition                                                                       |
+| `n`       | `gr`       | Show references                                                                             |
+| `n`       | `gs`       | Show signature help                                                                         |
+| `n`       | `gl`       | Show diagnostics in a floating window                                                       |
+| `n`       | `<F2>`     | Rename symbol                                                                               |
+| `n`, `x`  | `<F3>`     | Format code asynchronously                                                                 |
+| `n`       | `<F4>`     | Show code actions                                                                           |
+
+---
+
+## Miscellaneous
+
+| Mode | Key             | Action                                                                                      |
+|------|-----------------|---------------------------------------------------------------------------------------------|
+| `n`  | `<leader>dg`    | Run `DogeGenerate` (comment documentation generation)                                       |
+| `n`  | `<leader>s`     | Replace all instances of the word under the cursor on the current line                      |
+
+---
+
+# LSP servers:
+
+I am migrating my lsp config to /lua/plugins/lsp.lua because nvim v0.11 allows a very minimal debloated way to setup language server protocols. 
+
+Below is a running list of what and how to install the lsp's that are going to be configured in this build. I will avoid mason for now because I think its better to have full control over your system, and not outsource it to mason. Just uncommonet `return {` in /plugins/lsp.lua from the original lspconfig if you want to go that route.
+
+1. { lua-language-server } 
+  - refer to distro ( pacman -Ss lua-language-server )
+2. { css-language-server --studio, html-language-server }
+  - npm install -g vscode-langservers-extracted
+3. { intelephense }
+  - npm install -g intelephense
+4. { typescript-language-server }
+  - npm install -g typescript-language-server typescript
+
diff --git a/nvim/after/ftplugin/goon.lua b/nvim/after/ftplugin/goon.lua
new file mode 100644
index 0000000..2059624
--- /dev/null
+++ b/nvim/after/ftplugin/goon.lua
@@ -0,0 +1,2 @@
+vim.bo.commentstring = "// %s"
+vim.bo.comments = "s:/*,m: *,ex:*/,://"
diff --git a/nvim/after/ftplugin/hare.lua b/nvim/after/ftplugin/hare.lua
new file mode 100644
index 0000000..539428b
--- /dev/null
+++ b/nvim/after/ftplugin/hare.lua
@@ -0,0 +1,12 @@
+local set = vim.opt_local
+
+vim.bo.commentstring = "// %s"
+vim.bo.comments = "s:/*,m: *,ex:*/,://"
+
+set.shiftwidth = 4
+set.tabstop = 4
+set.softtabstop = 4
+set.expandtab = true
+
+set.number = true
+set.relativenumber = true
diff --git a/nvim/after/ftplugin/jsonc.lua b/nvim/after/ftplugin/jsonc.lua
new file mode 100644
index 0000000..e1833b8
--- /dev/null
+++ b/nvim/after/ftplugin/jsonc.lua
@@ -0,0 +1,9 @@
+local set = vim.opt_local
+
+set.shiftwidth = 2
+set.tabstop = 2
+set.softtabstop = 2
+set.expandtab = true
+
+set.number = true
+set.relativenumber = true
diff --git a/nvim/after/ftplugin/man.lua b/nvim/after/ftplugin/man.lua
new file mode 100644
index 0000000..f21d675
--- /dev/null
+++ b/nvim/after/ftplugin/man.lua
@@ -0,0 +1,8 @@
+local set = vim.opt_local
+set.number = true
+set.relativenumber = true
+set.number = true
+set.relativenumber = false
+set.wrap = true
+set.linebreak = true
+set.conceallevel = 0
diff --git a/nvim/after/ftplugin/nix.lua b/nvim/after/ftplugin/nix.lua
new file mode 100644
index 0000000..6425eda
--- /dev/null
+++ b/nvim/after/ftplugin/nix.lua
@@ -0,0 +1,8 @@
+local set = vim.opt_local
+
+set.shiftwidth = 2
+set.tabstop = 2
+set.softtabstop = 2
+set.expandtab = true
+set.number = true
+set.relativenumber = true
diff --git a/nvim/after/plugin/colors.lua b/nvim/after/plugin/colors.lua
new file mode 100644
index 0000000..e9af665
--- /dev/null
+++ b/nvim/after/plugin/colors.lua
@@ -0,0 +1,6 @@
+vim.cmd.colorscheme("tokyonight")
+vim.cmd("hi Directory guibg=NONE")
+vim.cmd("hi SignColumn guibg=NONE")
+vim.api.nvim_set_hl(0, "Normal", { bg = "none" })
+vim.api.nvim_set_hl(0, "NormalFloat", { bg = "none" })
+vim.api.nvim_set_hl(0, "LineNr", { bg = "none" })
diff --git a/nvim/after/plugin/completion.lua b/nvim/after/plugin/completion.lua
new file mode 100644
index 0000000..da77d42
--- /dev/null
+++ b/nvim/after/plugin/completion.lua
@@ -0,0 +1,27 @@
+local cmp = require("cmp")
+
+cmp.setup({
+    preselect = cmp.PreselectMode.Item,
+    completion = { completeopt = "menu,menuone,noinsert" },
+    window = { documentation = cmp.config.window.bordered() },
+    mapping = cmp.mapping.preset.insert({
+        ["<CR>"] = cmp.mapping.confirm({ select = false }),
+        ["<C-e>"] = cmp.mapping.abort(),
+        ["<C-Space>"] = cmp.mapping.complete(),
+        ["<C-n>"] = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Select }),
+        ["<C-p>"] = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Select }),
+        ["<C-f>"] = cmp.mapping.scroll_docs(4),
+        ["<C-u>"] = cmp.mapping.scroll_docs(-4),
+        ["<Tab>"] = cmp.mapping(function(fallback)
+            if cmp.visible() then cmp.select_next_item() else fallback() end
+        end, { "i", "s" }),
+        ["<S-Tab>"] = cmp.mapping(function()
+            if cmp.visible() then cmp.select_prev_item() end
+        end, { "i", "s" }),
+    }),
+    sources = {
+        { name = "nvim_lsp" },
+        { name = "path" },
+        { name = "buffer", keyword_length = 3 },
+    },
+})
diff --git a/nvim/after/plugin/harpoon.lua b/nvim/after/plugin/harpoon.lua
new file mode 100644
index 0000000..cb0ddfc
--- /dev/null
+++ b/nvim/after/plugin/harpoon.lua
@@ -0,0 +1,21 @@
+local harpoon = require("harpoon")
+harpoon:setup()
+
+vim.keymap.set("n", "<leader>a", function() harpoon:list():add() end)
+vim.keymap.set("n", "<C-e>", function() harpoon.ui:toggle_quick_menu(harpoon:list()) end)
+vim.keymap.set("n", "<C-p>", function() harpoon:list():prev() end)
+vim.keymap.set("n", "<C-n>", function() harpoon:list():next() end)
+
+vim.keymap.set("n", "<leader>fl", function()
+    local conf = require("telescope.config").values
+    local themes = require("telescope.themes")
+    local file_paths = {}
+    for _, item in ipairs(harpoon:list().items) do
+        table.insert(file_paths, item.value)
+    end
+    require("telescope.pickers").new(themes.get_ivy({ prompt_title = "Working List" }), {
+        finder = require("telescope.finders").new_table({ results = file_paths }),
+        previewer = conf.file_previewer({}),
+        sorter = conf.generic_sorter({}),
+    }):find()
+end, { desc = "Open harpoon window" })
diff --git a/nvim/after/plugin/one-liners.lua b/nvim/after/plugin/one-liners.lua
new file mode 100644
index 0000000..63ed17e
--- /dev/null
+++ b/nvim/after/plugin/one-liners.lua
@@ -0,0 +1,6 @@
+require("lualine").setup({ options = { theme = "tokyonight" } })
+require("nvim-highlight-colors").setup({})
+require("orgmode").setup({
+    org_agenda_files = "~/orgfiles/**/*",
+    org_default_notes_file = "~/orgfiles/refile.org",
+})
diff --git a/nvim/after/plugin/telescope.lua b/nvim/after/plugin/telescope.lua
new file mode 100644
index 0000000..081311c
--- /dev/null
+++ b/nvim/after/plugin/telescope.lua
@@ -0,0 +1,31 @@
+local actions = require("telescope.actions")
+require("telescope").setup({
+    defaults = {
+        mappings = {
+            i = {
+                ["<C-k>"] = actions.move_selection_previous,
+                ["<C-j>"] = actions.move_selection_next,
+                ["<C-q>"] = actions.smart_send_to_qflist + actions.open_qflist,
+            },
+        },
+    },
+})
+
+local builtin = require("telescope.builtin")
+vim.keymap.set("n", "<leader>ff", builtin.find_files)
+vim.keymap.set("n", "<leader>fo", builtin.oldfiles)
+vim.keymap.set("n", "<leader>fq", builtin.quickfix)
+vim.keymap.set("n", "<leader>fh", builtin.help_tags, { desc = "Telescope help tags" })
+vim.keymap.set("n", "<leader>fb", builtin.buffers, { desc = "Telescope buffers" })
+vim.keymap.set("n", "<leader>fg", function()
+    builtin.grep_string({ search = vim.fn.input("Grep > ") })
+end)
+vim.keymap.set("n", "<leader>fc", function()
+    builtin.grep_string({ search = vim.fn.expand("%:t:r") })
+end, { desc = "Find current file" })
+vim.keymap.set("n", "<leader>fs", function()
+    builtin.grep_string({})
+end, { desc = "Find current string" })
+vim.keymap.set("n", "<leader>fi", function()
+    builtin.find_files({ cwd = "~/.config/nvim/" })
+end)
diff --git a/nvim/after/plugin/treesitter.lua b/nvim/after/plugin/treesitter.lua
new file mode 100644
index 0000000..32815ad
--- /dev/null
+++ b/nvim/after/plugin/treesitter.lua
@@ -0,0 +1,42 @@
+vim.filetype.add({ extension = { goon = "goon" } })
+
+-- Register custom goon parser with treesitter (old API)
+local parser_config = require("nvim-treesitter.parsers").get_parser_configs()
+parser_config.goon = {
+    install_info = {
+        url = "/home/tony/repos/tree-sitter-goon",
+        files = { "src/parser.c" },
+    },
+    filetype = "goon",
+}
+
+-- Configure nvim-treesitter with ensure_installed
+require("nvim-treesitter.configs").setup({
+    ensure_installed = {
+        "json", "python", "ron", "javascript", "haskell", "d", "query",
+        "typescript", "tsx", "rust", "zig", "php", "yaml", "html", "css",
+        "markdown", "markdown_inline", "bash", "lua", "vim", "vimdoc", "c",
+        "dockerfile", "gitignore", "astro", "go", "templ"
+    },
+    highlight = {
+        enable = true,
+    },
+    indent = {
+        enable = true,
+    },
+})
+
+require("nvim-treesitter-textobjects").setup({
+    select = {
+        lookahead = true,
+    },
+})
+
+vim.keymap.set({ "x", "o" }, "af", function()
+    require("nvim-treesitter-textobjects.select").select_textobject("@function.outer", "textobjects")
+end)
+vim.keymap.set({ "x", "o" }, "if", function()
+    require("nvim-treesitter-textobjects.select").select_textobject("@function.inner", "textobjects")
+end)
+
+require("treesitter-context").setup({})
diff --git a/nvim/init.lua b/nvim/init.lua
new file mode 100644
index 0000000..36a1d08
--- /dev/null
+++ b/nvim/init.lua
@@ -0,0 +1,3 @@
+require("config.options")
+require("config.keybinds")
+require("manage").setup()
diff --git a/nvim/lua/config/keybinds.lua b/nvim/lua/config/keybinds.lua
new file mode 100644
index 0000000..a2979b8
--- /dev/null
+++ b/nvim/lua/config/keybinds.lua
@@ -0,0 +1,66 @@
+-- KEYBINDS
+vim.g.mapleader = " "
+vim.keymap.set("n", "<leader>cd", vim.cmd.Ex)
+
+vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv") -- Alt Up/Down in vscode
+vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv")
+
+vim.keymap.set("n", "J", "mzJ`z")       -- Remap joining lines
+vim.keymap.set("n", "<C-d>", "<C-d>zz") -- Keep cursor in place while moving up/down page
+vim.keymap.set("n", "<C-u>", "<C-u>zz")
+vim.keymap.set("n", "n", "nzzzv")       -- center screen when looping search results
+vim.keymap.set("n", "N", "Nzzzv")
+
+-- paste and don't replace clipboard over deleted text
+vim.keymap.set("x", "<leader>p", [["_dP]])
+vim.keymap.set({ "n", "v" }, "<leader>d", [["_d]])
+
+
+-- sometimes in insert mode, control-c doesn't exactly work like escape
+vim.keymap.set("i", "<C-c>", "<Esc>")
+
+-- add binds for Control J/K to scroll thru quickfix list
+vim.keymap.set("n", "<C-j>", "<cmd>cnext<CR>zz")
+vim.keymap.set("n", "<C-k>", "<cmd>cprev<CR>zz")
+
+-- What the heck is Ex mode?
+vim.keymap.set("n", "Q", "<nop>")
+
+vim.keymap.set("n", "<leader>k", "<cmd>lnext<CR>zz")
+vim.keymap.set("n", "<leader>j", "<cmd>lprev<CR>zz")
+
+-- getting Alex off my back :)
+vim.keymap.set("n", "<leader>dg", "<cmd>DogeGenerate<cr>")
+
+-- lint / format php files for LC
+vim.keymap.set("n", "<leader>cc", "<cmd>!php-cs-fixer fix % --using-cache=no<cr>")
+
+-- Replace all instances of whatever is under cursor (on line)
+vim.keymap.set("n", "<leader>s", [[:s/\<<C-r><C-w>\>//gI<Left><Left><Left>]])
+
+-- make file executable
+vim.keymap.set("n", "<leader>x", "<cmd>!chmod +x %<CR>", { silent = true })
+
+-- yank into clipboard even if on ssh
+vim.keymap.set('n', '<leader>y', '<Plug>OSCYankOperator')
+vim.keymap.set('v', '<leader>y', '<Plug>OSCYankVisual')
+
+-- reload without exiting vim
+vim.keymap.set("n", "<leader>rl", "<cmd>source ~/.config/nvim/init.lua<cr>")
+
+vim.keymap.set("n", "<leader>u", vim.cmd.UndotreeToggle)
+
+-- Quickfix list stuff
+vim.keymap.set("n", "<leader>cl", ":cclose<CR>", { silent = true })
+vim.keymap.set("n", "<leader>co", ":copen<CR>", { silent = true })
+vim.keymap.set("n", "<leader>cn", ":cnext<CR>zz")
+vim.keymap.set("n", "<leader>cp", ":cprev<CR>zz")
+vim.keymap.set("n", "<leader>li", ":checkhealth vim.lsp<CR>", { desc = "LSP Info" })
+
+-- run make in current working directory
+vim.keymap.set("n", "<leader>mm", "<cmd>make<CR>")
+
+-- source file
+vim.keymap.set("n", "<leader><leader>", function()
+    vim.cmd("so")
+end)
diff --git a/nvim/lua/config/options.lua b/nvim/lua/config/options.lua
new file mode 100644
index 0000000..52de0a7
--- /dev/null
+++ b/nvim/lua/config/options.lua
@@ -0,0 +1,55 @@
+-- OPTIONS
+local set = vim.opt
+
+--line nums
+set.relativenumber = true
+set.number = true
+
+-- indentation and tabs
+set.tabstop = 4
+set.shiftwidth = 4
+set.autoindent = true
+set.expandtab = true
+
+-- search settings
+set.ignorecase = true
+set.smartcase = true
+
+-- appearance
+set.termguicolors = true
+set.background = "dark"
+set.signcolumn = "yes"
+
+-- cursor line
+set.cursorline = true
+
+-- 80th column
+set.colorcolumn = "80"
+
+-- clipboard
+set.clipboard:append("unnamedplus")
+
+-- backspace
+set.backspace = "indent,eol,start"
+
+-- split windows
+set.splitbelow = true
+set.splitright = true
+
+-- dw/diw/ciw works on full-word
+set.iskeyword:append("-")
+
+-- keep cursor at least 8 rows from top/bot
+set.scrolloff = 8
+
+-- undo dir settings
+set.swapfile = false
+set.backup = false
+set.undodir = os.getenv("HOME") .. "/.vim/undodir"
+set.undofile = true
+
+-- incremental search
+set.incsearch = true
+
+-- faster cursor hold
+set.updatetime = 50
diff --git a/nvim/lua/manage.lua b/nvim/lua/manage.lua
new file mode 100644
index 0000000..97d24c0
--- /dev/null
+++ b/nvim/lua/manage.lua
@@ -0,0 +1,35 @@
+local M = {}
+local plug_dir = vim.fn.stdpath("data") .. "/plugins"
+
+local function ensure(spec)
+    local repo = type(spec) == "string" and spec or spec[1]
+    local name = repo:match(".+/(.+)$")
+    local path = plug_dir .. "/" .. name
+
+    if not vim.uv.fs_stat(path) then
+        vim.fn.mkdir(plug_dir, "p")
+        local cmd = { "git", "clone", "--depth=1" }
+        if spec.branch then
+            table.insert(cmd, "-b")
+            table.insert(cmd, spec.branch)
+        end
+        table.insert(cmd, "https://github.com/" .. repo)
+        table.insert(cmd, path)
+        print("Installing " .. name .. "...")
+        vim.fn.system(cmd)
+    end
+
+    vim.opt.rtp:append(path)
+    local lua_path = path .. "/lua"
+    if vim.uv.fs_stat(lua_path) then
+        package.path = package.path .. ";" .. lua_path .. "/?.lua;" .. lua_path .. "/?/init.lua"
+    end
+end
+
+function M.setup()
+    for _, spec in ipairs(require("plugin-list")) do
+        ensure(spec)
+    end
+end
+
+return M
diff --git a/nvim/lua/plugin-list.lua b/nvim/lua/plugin-list.lua
new file mode 100644
index 0000000..33f3d4c
--- /dev/null
+++ b/nvim/lua/plugin-list.lua
@@ -0,0 +1,22 @@
+return {
+    "nvim-lua/plenary.nvim",
+    "nvim-tree/nvim-web-devicons",
+    { "nvim-treesitter/nvim-treesitter", branch = "master" },
+    { "nvim-treesitter/nvim-treesitter-textobjects", branch = "main" },
+    "nvim-treesitter/nvim-treesitter-context",
+    "hrsh7th/nvim-cmp",
+    "hrsh7th/cmp-nvim-lsp",
+    "hrsh7th/cmp-path",
+    "hrsh7th/cmp-buffer",
+    "nvim-telescope/telescope.nvim",
+    { "ThePrimeagen/harpoon", branch = "harpoon2" },
+    "folke/tokyonight.nvim",
+    "nvim-lualine/lualine.nvim",
+    "brenoprata10/nvim-highlight-colors",
+    "nvim-orgmode/orgmode",
+    "tpope/vim-fugitive",
+    "mbbill/undotree",
+    "ojroques/vim-oscyank",
+    "kkoomen/vim-doge",
+    "captbaritone/better-indent-support-for-php-with-html",
+}
diff --git a/nvim/plugin/flterm.lua b/nvim/plugin/flterm.lua
new file mode 100644
index 0000000..d766181
--- /dev/null
+++ b/nvim/plugin/flterm.lua
@@ -0,0 +1,55 @@
+-- Remap leaving 'terminal mode' to double tap esc
+vim.keymap.set("t", "<esc><esc>", "<c-\\><c-n>")
+
+local state = {
+    floating = {
+        buf = -1,
+        win = -1,
+    }
+}
+
+local function open_floating_terminal(opts)
+    opts = opts or {}
+    local width = opts.width or math.floor(vim.o.columns * 0.8)
+    local height = opts.height or math.floor(vim.o.lines * 0.8)
+
+    local row = math.floor((vim.o.lines - height) / 2)
+    local col = math.floor((vim.o.columns - width) / 2)
+
+    local buf = nil
+    if vim.api.nvim_buf_is_valid(opts.buf) then
+        buf = opts.buf
+    else
+        buf = vim.api.nvim_create_buf(false, true)
+    end
+    if not buf then
+        error("Failed to create buffer")
+    end
+
+    local win = vim.api.nvim_open_win(buf, true, {
+        relative = 'editor',
+        width = width,
+        height = height,
+        row = row,
+        col = col,
+        style = 'minimal',
+        border = 'rounded',
+    })
+
+    return { buf = buf, win = win }
+end
+
+local toggle_terminal = function()
+    if not vim.api.nvim_win_is_valid(state.floating.win) then
+        state.floating = open_floating_terminal({ buf = state.floating.buf });
+        if vim.bo[state.floating.buf].buftype ~= "terminal" then
+            vim.cmd.terminal()
+            vim.cmd("startinsert!")
+        end
+    else
+        vim.api.nvim_win_hide(state.floating.win)
+    end
+end
+
+vim.api.nvim_create_user_command("Flterm", toggle_terminal, {})
+vim.api.nvim_set_keymap('n', '<leader>ft', [[:Flterm<CR>]], { noremap = true, silent = true })
diff --git a/nvim/plugin/lsp.lua b/nvim/plugin/lsp.lua
new file mode 100644
index 0000000..9986ca4
--- /dev/null
+++ b/nvim/plugin/lsp.lua
@@ -0,0 +1,280 @@
+vim.lsp.config('*', {
+    root_markers = { '.git' },
+})
+
+vim.diagnostic.config({
+    virtual_text  = true,
+    severity_sort = true,
+    float         = {
+        style  = 'minimal',
+        border = 'rounded',
+        source = 'if_many',
+        header = '',
+        prefix = '',
+    },
+    signs         = {
+        text = {
+            [vim.diagnostic.severity.ERROR] = '✘',
+            [vim.diagnostic.severity.WARN]  = '▲',
+            [vim.diagnostic.severity.HINT]  = '⚑',
+            [vim.diagnostic.severity.INFO]  = '»',
+        },
+    },
+})
+
+local orig = vim.lsp.util.open_floating_preview
+---@diagnostic disable-next-line: duplicate-set-field
+function vim.lsp.util.open_floating_preview(contents, syntax, opts, ...)
+    opts            = opts or {}
+    opts.border     = opts.border or 'rounded'
+    opts.max_width  = opts.max_width or 80
+    opts.max_height = opts.max_height or 24
+    opts.wrap       = opts.wrap ~= false
+    return orig(contents, syntax, opts, ...)
+end
+
+vim.api.nvim_create_autocmd('LspAttach', {
+    group = vim.api.nvim_create_augroup('my.lsp', {}),
+    callback = function(args)
+        local client = assert(vim.lsp.get_client_by_id(args.data.client_id))
+        local buf    = args.buf
+        local map    = function(mode, lhs, rhs) vim.keymap.set(mode, lhs, rhs, { buffer = buf }) end
+
+        map('n', 'K', vim.lsp.buf.hover)
+        map('n', 'gd', vim.lsp.buf.definition)
+        map('n', 'gD', vim.lsp.buf.declaration)
+        map('n', 'gi', vim.lsp.buf.implementation)
+        map('n', 'go', vim.lsp.buf.type_definition)
+        map('n', 'gr', vim.lsp.buf.references)
+        map('n', 'gs', vim.lsp.buf.signature_help)
+        map('n', 'gl', vim.diagnostic.open_float)
+        map('n', '<F2>', vim.lsp.buf.rename)
+        map({ 'n', 'x' }, '<F3>', function() vim.lsp.buf.format({ async = true }) end)
+        map('n', '<F4>', vim.lsp.buf.code_action)
+
+        if client:supports_method('textDocument/documentHighlight') then
+            local highlight_augroup = vim.api.nvim_create_augroup('my.lsp.highlight', { clear = false })
+            vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
+                buffer = buf,
+                group = highlight_augroup,
+                callback = vim.lsp.buf.document_highlight,
+            })
+            vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
+                buffer = buf,
+                group = highlight_augroup,
+                callback = vim.lsp.buf.clear_references,
+            })
+        end
+
+        local excluded_filetypes = { php = true, c = true, cpp = true }
+        if not client:supports_method('textDocument/willSaveWaitUntil')
+            and client:supports_method('textDocument/formatting')
+            and not excluded_filetypes[vim.bo[buf].filetype]
+        then
+            vim.api.nvim_create_autocmd('BufWritePre', {
+                group = vim.api.nvim_create_augroup('my.lsp.format', { clear = false }),
+                buffer = buf,
+                callback = function()
+                    vim.lsp.buf.format({ bufnr = buf, id = client.id, timeout_ms = 1000 })
+                end,
+            })
+        end
+    end,
+})
+local caps = require("cmp_nvim_lsp").default_capabilities()
+vim.lsp.config['luals'] = {
+    cmd = { 'lua-language-server' },
+    filetypes = { 'lua' },
+    root_markers = { { '.luarc.json', '.luarc.jsonc' }, '.git' },
+    capabilities = caps,
+    settings = {
+        Lua = {
+            runtime = { version = 'LuaJIT' },
+            diagnostics = { globals = { 'vim' } },
+            workspace = {
+                checkThirdParty = false,
+                library = vim.api.nvim_get_runtime_file('', true),
+            },
+            telemetry = { enable = false },
+        },
+    },
+}
+
+vim.lsp.config['cssls'] = {
+    cmd = { 'vscode-css-language-server', '--stdio' },
+    filetypes = { 'css', 'scss', 'less' },
+    root_markers = { 'package.json', '.git' },
+    capabilities = caps,
+    settings = {
+        css = { validate = true },
+        scss = { validate = true },
+        less = { validate = true },
+    },
+}
+
+vim.lsp.config['phpls'] = {
+    cmd = { 'intelephense', '--stdio' },
+    filetypes = { 'php' },
+    root_markers = { 'composer.json', '.git' },
+    capabilities = caps,
+    settings = {
+        intelephense = {
+            files = {
+                maxSize = 5000000, -- default 5MB
+            },
+        },
+    },
+}
+
+vim.lsp.config['ts_ls'] = {
+    cmd = { 'typescript-language-server', '--stdio' },
+    filetypes = {
+        'javascript', 'javascriptreact', 'javascript.jsx',
+        'typescript', 'typescriptreact', 'typescript.tsx',
+    },
+    root_markers = { 'package.json', 'tsconfig.json', 'jsconfig.json', '.git' },
+    capabilities = caps,
+    settings = {
+        completions = {
+            completeFunctionCalls = true,
+        },
+    },
+}
+
+vim.lsp.config['zls'] = {
+    cmd = { 'zls' },
+    filetypes = { 'zig', 'zir' },
+    root_markers = { 'zls.json', 'build.zig', '.git' },
+    capabilities = caps,
+    settings = {
+        zls = {
+            enable_build_on_save = true,
+            build_on_save_step = "install",
+            warn_style = false,
+            enable_snippets = true,
+        }
+    }
+}
+
+vim.lsp.config['nil_ls'] = {
+    cmd = { 'nil' },
+    filetypes = { 'nix' },
+    root_markers = { 'flake.nix', 'default.nix', '.git' },
+    capabilities = caps,
+    settings = {
+        ['nil'] = {
+            formatting = {
+                command = { "alejandra" }
+            }
+        }
+    }
+}
+
+vim.lsp.config['rust_analyzer'] = {
+    cmd = { 'rust-analyzer' },
+    filetypes = { 'rust' },
+    root_markers = { 'Cargo.toml', 'rust-project.json', '.git' },
+    capabilities = caps,
+    settings = {
+        ['rust-analyzer'] = {
+            cargo = { allFeatures = true },
+            formatting = {
+                command = { "rustfmt" }
+            },
+        },
+    },
+}
+
+-- C / C++ via clangd
+vim.lsp.config['clangd'] = {
+    cmd = {
+        'clangd',
+        '--background-index',
+        '--clang-tidy',
+        '--header-insertion=never',
+        '--completion-style=detailed',
+        '--query-driver=/nix/store/*-gcc-*/bin/gcc*,/nix/store/*-clang-*/bin/clang*,/run/current-system/sw/bin/cc*',
+    },
+    filetypes = { 'c', 'cpp', 'objc', 'objcpp' },
+    root_markers = { 'compile_commands.json', '.clangd', 'configure.ac', 'Makefile', '.git' },
+    capabilities = caps,
+    init_options = {
+        fallbackFlags = { '-std=c23' }, -- Default to C23
+    },
+}
+
+vim.lsp.config['c3lsp'] = {
+    cmd = { 'c3-lsp' },
+    filetypes = { 'c3' },
+    root_markers = { 'project.json', '.git' },
+    capabilities = caps,
+}
+
+vim.lsp.config['serve_d'] = {
+    cmd = { 'serve-d' },
+    filetypes = { 'd' },
+    root_markers = { 'dub.sdl', 'dub.json', '.git' },
+    capabilities = caps,
+}
+
+vim.lsp.config['jsonls'] = {
+    cmd = { 'vscode-json-languageserver', '--stdio' },
+    filetypes = { 'json', 'jsonc' },
+    root_markers = { 'package.json', '.git', 'config.jsonc' },
+    capabilities = caps,
+}
+
+vim.lsp.config['hls'] = {
+    cmd = { 'haskell-language-server-wrapper', '--lsp' },
+    filetypes = { 'haskell', 'lhaskell' },
+    root_markers = { 'stack.yaml', 'cabal.project', 'package.yaml', '*.cabal', 'hie.yaml', '.git' },
+    capabilities = caps,
+    settings = {
+        haskell = {
+            formattingProvider = 'fourmolu',
+            plugin = {
+                semanticTokens = { globalOn = false }
+            },
+        },
+    },
+}
+
+vim.lsp.config['gopls'] = {
+    cmd = { 'gopls' },
+    filetypes = { 'go', 'gomod', 'gowork', 'gotmpl' },
+    root_markers = { 'go.mod', 'go.work', '.git' },
+    capabilities = caps,
+    settings = {
+        gopls = {
+            analyses = {
+                unusedparams = false,
+                ST1003 = false,
+                ST1000 = false,
+            },
+            staticcheck = true,
+        },
+    },
+}
+
+vim.lsp.config['templ'] = {
+    cmd = { 'templ', 'lsp' },
+    filetypes = { 'templ' },
+    root_markers = { 'go.mod', '.git' },
+    capabilities = caps,
+}
+
+vim.filetype.add({
+    extension = {
+        h = 'c',
+        c3 = 'c3',
+        d = 'd',
+        templ = 'templ',
+    },
+})
+
+---@diagnostic disable-next-line: invisible
+for name, _ in pairs(vim.lsp.config._configs) do
+    if name ~= '*' then
+        vim.lsp.enable(name)
+    end
+end
diff --git a/nvim/plugin/quickformat.lua b/nvim/plugin/quickformat.lua
new file mode 100644
index 0000000..038dadf
--- /dev/null
+++ b/nvim/plugin/quickformat.lua
@@ -0,0 +1,40 @@
+local function reformat_parenthesized_content()
+    local bufnr = vim.api.nvim_get_current_buf()
+    local row = vim.api.nvim_win_get_cursor(0)[1]
+    local line = vim.api.nvim_buf_get_lines(bufnr, row - 1, row, false)[1]
+
+    local inside = line:match("%((.-)%)")
+    if not inside then
+        vim.notify(
+            "No content found inside parentheses",
+            vim.log.levels.ERROR
+        )
+        return
+    end
+
+    local prefix = line:match("^(.-)%(") or ""
+    local suffix = line:match("%)(.*)$") or ""
+
+    local parts = vim.split(inside, ",%s*")
+    if #parts == 0 then
+        vim.notify("No comma-separated content found", vim.log.levels.ERROR)
+        return
+    end
+
+    local new_lines = {}
+    table.insert(new_lines, prefix .. "(")
+    for i, part in ipairs(parts) do
+        if i < #parts then
+            table.insert(new_lines, "        " .. part .. ",")
+        else
+            table.insert(new_lines, "        " .. part)
+        end
+    end
+    table.insert(new_lines, "    )" .. suffix)
+
+    vim.api.nvim_buf_set_lines(bufnr, row - 1, row, false, new_lines)
+end
+
+vim.keymap.set("n", "<leader>qq", function()
+    reformat_parenthesized_content()
+end)
diff --git a/nvim/queries/goon/highlights.scm b/nvim/queries/goon/highlights.scm
new file mode 100644
index 0000000..893c012
--- /dev/null
+++ b/nvim/queries/goon/highlights.scm
@@ -0,0 +1,55 @@
+; Keywords
+"let" @keyword
+"if" @keyword.conditional
+"then" @keyword.conditional
+"else" @keyword.conditional
+"import" @keyword.import
+
+; Literals
+(string) @string
+(string_content) @string
+(escape_sequence) @string.escape
+(number) @number
+(boolean) @boolean
+
+; Identifiers
+(identifier) @variable
+
+; Types
+(type_annotation) @type
+
+; Fields
+(record_field
+  key: (identifier) @property)
+
+(field_access
+  (identifier) @property)
+
+; Functions
+(call_expression
+  function: (identifier) @function.call)
+
+; Operators
+"=" @operator
+":" @punctuation.delimiter
+"?" @operator
+"..." @operator
+"." @punctuation.delimiter
+
+; Punctuation
+"{" @punctuation.bracket
+"}" @punctuation.bracket
+"[" @punctuation.bracket
+"]" @punctuation.bracket
+"(" @punctuation.bracket
+")" @punctuation.bracket
+";" @punctuation.delimiter
+"," @punctuation.delimiter
+
+; Interpolation
+(interpolation
+  "${" @punctuation.special
+  "}" @punctuation.special)
+
+; Comments
+(comment) @comment
diff --git a/oxwm/.luarc.json b/oxwm/.luarc.json
new file mode 100644
index 0000000..2234f28
--- /dev/null
+++ b/oxwm/.luarc.json
@@ -0,0 +1,5 @@
+{
+  "workspace.library": [
+    "/usr/share/oxwm"
+  ]
+}
diff --git a/oxwm/colors/custom-colors.lua b/oxwm/colors/custom-colors.lua
new file mode 100644
index 0000000..d8c2075
--- /dev/null
+++ b/oxwm/colors/custom-colors.lua
@@ -0,0 +1,14 @@
+return {
+    bg = "#000000",
+    fg = "#d4d4d4",
+    red = "#f14c4c",
+    cyan = "#9cdcfe",
+    green = "#6a9955",
+    light_blue = "#4ec9b0",
+    blue = "#569cd6",
+    purple = "#c586c0",
+    yellow = "#dcdcaa",
+    orange = "#ce9178",
+    grey = "#808080",
+    sep = "#3c3c3c",
+}
diff --git a/oxwm/config.lua b/oxwm/config.lua
new file mode 100644
index 0000000..537773c
--- /dev/null
+++ b/oxwm/config.lua
@@ -0,0 +1,287 @@
+---@meta
+-------------------------------------------------------------------------------
+-- OXWM Configuration File
+-------------------------------------------------------------------------------
+
+---Load type definitions for LSP
+---@module 'oxwm'
+
+-------------------------------------------------------------------------------
+-- Variables
+-------------------------------------------------------------------------------
+-- Define your variables here for easy customization throughout the config.
+-- This makes it simple to change keybindings, colors, and settings in one place.
+
+-- Modifier key: "Mod4" is the Super/Windows key, "Mod1" is Alt
+local modkey = "Mod1"
+
+-- Terminal emulator command (defualts to alacritty)
+local terminal = "alacritty"
+
+-- Color palette - customize these to match your theme
+-- Alternatively you can import other files in here, such as
+-- local colors = require("colors.lua") and make colors.lua a file
+-- in the ~/.config/oxwm directory
+-- local colors = require("tokyonight");
+local colors = require("colors.custom-colors");
+
+local tags = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }
+-- local tags = { "", "󰊯", "", "󰰏", "󰟿", "󱇤", "", "󱘶", "󰧮" } -- Example of nerd font icon tags
+
+local bar_font = "UbuntuMono Nerd Font Propo:style=Bold:size=12"
+
+local blocks = {
+    oxwm.bar.block.shell({
+        format = " {}",
+        command = "uname -r",
+        interval = 999999999,
+        color = colors.red,
+        underline = true,
+    }),
+    oxwm.bar.block.static({
+        text = "│",
+        interval = 999999999,
+        color = colors.sep,
+        underline = false,
+    }),
+    oxwm.bar.block.ram({
+        format = "󰍛 Ram: {used}/{total} GB",
+        interval = 5,
+        color = colors.light_blue,
+        underline = true,
+    }),
+    oxwm.bar.block.static({
+        text = "│",
+        interval = 999999999,
+        color = colors.sep,
+        underline = false,
+    }),
+    oxwm.bar.block.datetime({
+        format = "󰸘 {}",
+        date_format = "%a, %b %d - %-I:%M %P",
+        interval = 1,
+        color = colors.cyan,
+        underline = true,
+    }),
+    -- Uncomment to add battery status (useful for laptops)
+    -- oxwm.bar.block.battery({
+    --     format = "Bat: {}%",
+    --     charging = "⚡ Bat: {}%",
+    --     discharging = "- Bat: {}%",
+    --     full = "✓ Bat: {}%",
+    --     interval = 30,
+    --     color = colors.green,
+    --     underline = true,
+    -- }),
+};
+
+-------------------------------------------------------------------------------
+-- Basic Settings
+-------------------------------------------------------------------------------
+oxwm.set_terminal(terminal)
+oxwm.set_modkey(modkey)
+oxwm.set_tags(tags)
+
+-------------------------------------------------------------------------------
+-- Layouts
+-------------------------------------------------------------------------------
+oxwm.set_layout_symbol("tiling", "[T]")
+oxwm.set_layout_symbol("normie", "[F]")
+oxwm.set_layout_symbol("tabbed", "[=]")
+
+-------------------------------------------------------------------------------
+-- Appearance
+-------------------------------------------------------------------------------
+oxwm.border.set_width(0)
+oxwm.border.set_focused_color(colors.purple)
+oxwm.border.set_unfocused_color(colors.grey)
+
+-- Smart Enabled = No border if 1 window
+oxwm.gaps.set_smart(false)
+-- Inner gaps (horizontal, vertical) in pixels
+oxwm.gaps.set_inner(5, 5)
+-- Outer gaps (horizontal, vertical) in pixels
+oxwm.gaps.set_outer(5, 5)
+
+-------------------------------------------------------------------------------
+-- Window Rules
+-------------------------------------------------------------------------------
+-- Rules allow you to automatically configure windows based on their properties
+-- You can match windows by class, instance, title, or role
+-- Available properties: floating, tag, fullscreen, etc.
+--
+-- Common use cases:
+-- - Force floating for certain applications (dialogs, utilities)
+-- - Send specific applications to specific workspaces
+-- - Configure window behavior based on title or class
+
+-- Examples (uncomment to use):
+oxwm.rule.add({ instance = "gimp", floating = true })
+oxwm.rule.add({ instance = "brave-browser", tag = 2 })
+oxwm.rule.add({ class = "firefox", tag = 3 })
+oxwm.rule.add({ instance = "slack", tag = 4 })
+oxwm.rule.add({ instance = "discord", tag = 5 })
+
+-- To find window properties, use xprop and click on the window
+-- WM_CLASS(STRING) shows both instance and class (instance, class)
+
+-------------------------------------------------------------------------------
+-- Status Bar Configuration
+-------------------------------------------------------------------------------
+-- Font configuration
+oxwm.bar.set_font(bar_font)
+
+-- Set your blocks here (defined above)
+oxwm.bar.set_blocks(blocks)
+
+-- Bar color schemes (for workspace tag display)
+-- Parameters: foreground, background, border
+
+-- Unoccupied tags
+oxwm.bar.set_scheme_normal(colors.fg, colors.bg, "#444444")
+-- Occupied tags
+oxwm.bar.set_scheme_occupied(colors.blue, colors.bg, colors.cyan)
+-- Currently selected tag
+oxwm.bar.set_scheme_selected(colors.blue, colors.bg, colors.purple)
+
+-------------------------------------------------------------------------------
+-- Keybindings
+-------------------------------------------------------------------------------
+-- Basic window management
+
+oxwm.key.bind({ modkey }, "Return", oxwm.spawn_terminal())
+-- Launch Dmenu
+-- oxwm.key.bind({ modkey }, "D", oxwm.spawn({ "sh", "-c", "dmenu_run -l 10" }))
+oxwm.key.bind({ modkey }, "D", oxwm.spawn({ "sh", "-c", "rofi -show drun" }))
+-- Copy screenshot to clipboard
+oxwm.key.bind({ modkey }, "S", oxwm.spawn({ "sh", "-c", "maim -s | xclip -selection clipboard -t image/png" }))
+oxwm.key.bind({ modkey }, "Q", oxwm.client.kill())
+
+-- Keybind overlay - Shows important keybindings on screen
+oxwm.key.bind({ modkey, "Shift" }, "Slash", oxwm.show_keybinds())
+
+-- Window state toggles
+oxwm.key.bind({ modkey, "Shift" }, "F", oxwm.client.toggle_fullscreen())
+oxwm.key.bind({ modkey, "Shift" }, "Space", oxwm.client.toggle_floating())
+
+-- Layout management
+oxwm.key.bind({ modkey }, "C", oxwm.layout.set("tiling"))
+-- Cycle through layouts
+oxwm.key.bind({ modkey }, "N", oxwm.layout.cycle())
+
+-- Master area controls (tiling layout)
+
+-- Decrease/Increase master area width
+oxwm.key.bind({ modkey }, "H", oxwm.set_master_factor(-5))
+oxwm.key.bind({ modkey }, "L", oxwm.set_master_factor(5))
+-- Increment/Decrement number of master windows
+oxwm.key.bind({ modkey }, "I", oxwm.inc_num_master(1))
+oxwm.key.bind({ modkey }, "P", oxwm.inc_num_master(-1))
+
+-- Gaps toggle
+oxwm.key.bind({ modkey }, "A", oxwm.toggle_gaps())
+
+-- Window manager controls
+oxwm.key.bind({ modkey, "Shift" }, "Q", oxwm.quit())
+oxwm.key.bind({ modkey, "Shift" }, "R", oxwm.restart())
+
+-- Focus movement [1 for up in the stack, -1 for down]
+oxwm.key.bind({ modkey }, "J", oxwm.client.focus_stack(1))
+oxwm.key.bind({ modkey }, "K", oxwm.client.focus_stack(-1))
+
+-- Window movement (swap position in stack)
+oxwm.key.bind({ modkey, "Shift" }, "J", oxwm.client.move_stack(1))
+oxwm.key.bind({ modkey, "Shift" }, "K", oxwm.client.move_stack(-1))
+
+-- Multi-monitor support
+
+-- Focus next/previous Monitors
+oxwm.key.bind({ modkey }, "Comma", oxwm.monitor.focus(-1))
+oxwm.key.bind({ modkey }, "Period", oxwm.monitor.focus(1))
+-- Move window to next/previous Monitors
+oxwm.key.bind({ modkey, "Shift" }, "Comma", oxwm.monitor.tag(-1))
+oxwm.key.bind({ modkey, "Shift" }, "Period", oxwm.monitor.tag(1))
+
+-- Workspace (tag) navigation
+-- Switch to workspace N (tags are 0-indexed, so tag "1" is index 0)
+oxwm.key.bind({ modkey }, "1", oxwm.tag.view(0))
+oxwm.key.bind({ modkey }, "2", oxwm.tag.view(1))
+oxwm.key.bind({ modkey }, "3", oxwm.tag.view(2))
+oxwm.key.bind({ modkey }, "4", oxwm.tag.view(3))
+oxwm.key.bind({ modkey }, "5", oxwm.tag.view(4))
+oxwm.key.bind({ modkey }, "6", oxwm.tag.view(5))
+oxwm.key.bind({ modkey }, "7", oxwm.tag.view(6))
+oxwm.key.bind({ modkey }, "8", oxwm.tag.view(7))
+oxwm.key.bind({ modkey }, "9", oxwm.tag.view(8))
+
+-- Move focused window to workspace N
+oxwm.key.bind({ modkey, "Shift" }, "1", oxwm.tag.move_to(0))
+oxwm.key.bind({ modkey, "Shift" }, "2", oxwm.tag.move_to(1))
+oxwm.key.bind({ modkey, "Shift" }, "3", oxwm.tag.move_to(2))
+oxwm.key.bind({ modkey, "Shift" }, "4", oxwm.tag.move_to(3))
+oxwm.key.bind({ modkey, "Shift" }, "5", oxwm.tag.move_to(4))
+oxwm.key.bind({ modkey, "Shift" }, "6", oxwm.tag.move_to(5))
+oxwm.key.bind({ modkey, "Shift" }, "7", oxwm.tag.move_to(6))
+oxwm.key.bind({ modkey, "Shift" }, "8", oxwm.tag.move_to(7))
+oxwm.key.bind({ modkey, "Shift" }, "9", oxwm.tag.move_to(8))
+
+-- Combo view (view multiple tags at once) {argos_nothing}
+-- Example: Mod+Ctrl+2 while on tag 1 will show BOTH tags 1 and 2
+oxwm.key.bind({ modkey, "Control" }, "1", oxwm.tag.toggleview(0))
+oxwm.key.bind({ modkey, "Control" }, "2", oxwm.tag.toggleview(1))
+oxwm.key.bind({ modkey, "Control" }, "3", oxwm.tag.toggleview(2))
+oxwm.key.bind({ modkey, "Control" }, "4", oxwm.tag.toggleview(3))
+oxwm.key.bind({ modkey, "Control" }, "5", oxwm.tag.toggleview(4))
+oxwm.key.bind({ modkey, "Control" }, "6", oxwm.tag.toggleview(5))
+oxwm.key.bind({ modkey, "Control" }, "7", oxwm.tag.toggleview(6))
+oxwm.key.bind({ modkey, "Control" }, "8", oxwm.tag.toggleview(7))
+oxwm.key.bind({ modkey, "Control" }, "9", oxwm.tag.toggleview(8))
+
+-- Multi tag (window on multiple tags)
+-- Example: Mod+Ctrl+Shift+2 puts focused window on BOTH current tag and tag 2
+oxwm.key.bind({ modkey, "Control", "Shift" }, "1", oxwm.tag.toggletag(0))
+oxwm.key.bind({ modkey, "Control", "Shift" }, "2", oxwm.tag.toggletag(1))
+oxwm.key.bind({ modkey, "Control", "Shift" }, "3", oxwm.tag.toggletag(2))
+oxwm.key.bind({ modkey, "Control", "Shift" }, "4", oxwm.tag.toggletag(3))
+oxwm.key.bind({ modkey, "Control", "Shift" }, "5", oxwm.tag.toggletag(4))
+oxwm.key.bind({ modkey, "Control", "Shift" }, "6", oxwm.tag.toggletag(5))
+oxwm.key.bind({ modkey, "Control", "Shift" }, "7", oxwm.tag.toggletag(6))
+oxwm.key.bind({ modkey, "Control", "Shift" }, "8", oxwm.tag.toggletag(7))
+oxwm.key.bind({ modkey, "Control", "Shift" }, "9", oxwm.tag.toggletag(8))
+
+-------------------------------------------------------------------------------
+-- Advanced: Keychords
+-------------------------------------------------------------------------------
+-- Keychords allow you to bind multiple-key sequences (like Emacs or Vim)
+-- Format: {{modifiers}, key1}, {{modifiers}, key2}, ...
+-- Example: Press Mod4+Space, then release and press T to spawn a terminal
+oxwm.key.chord({
+    { { modkey }, "Space" },
+    { {},         "T" }
+}, oxwm.spawn_terminal())
+
+oxwm.key.chord({
+    { { modkey }, "F" },
+    { {},         "B" }
+}, oxwm.spawn({ "sh", "-c", "$HOME/repos/dmenu-scripts/bookmarks-dmenu.sh" }))
+
+oxwm.key.chord({
+    { { modkey }, "F" },
+    { {},         "F" }
+}, oxwm.spawn({ "sh", "-c", "$HOME/repos/dmenu-scripts/repos-dmenu.sh" }))
+
+oxwm.key.chord({
+    { { modkey }, "F" },
+    { {},         "O" }
+}, oxwm.spawn({ "sh", "-c", "$HOME/repos/dmenu-scripts/tmux-dmenu.sh" }))
+
+-------------------------------------------------------------------------------
+-- Autostart
+-------------------------------------------------------------------------------
+-- Commands to run once when OXWM starts
+-- Uncomment and modify these examples, or add your own
+
+-- oxwm.autostart("picom")
+-- oxwm.autostart("xwallpaper --zoom ~/walls/dune.jpg")
+-- oxwm.autostart("dunst")
+-- oxwm.autostart("nm-applet")
diff --git a/oxwm/custom-colors.lua b/oxwm/custom-colors.lua
new file mode 100644
index 0000000..d8c2075
--- /dev/null
+++ b/oxwm/custom-colors.lua
@@ -0,0 +1,14 @@
+return {
+    bg = "#000000",
+    fg = "#d4d4d4",
+    red = "#f14c4c",
+    cyan = "#9cdcfe",
+    green = "#6a9955",
+    light_blue = "#4ec9b0",
+    blue = "#569cd6",
+    purple = "#c586c0",
+    yellow = "#dcdcaa",
+    orange = "#ce9178",
+    grey = "#808080",
+    sep = "#3c3c3c",
+}
diff --git a/oxwm/gruvbox.lua b/oxwm/gruvbox.lua
new file mode 100644
index 0000000..140c36a
--- /dev/null
+++ b/oxwm/gruvbox.lua
@@ -0,0 +1,13 @@
+return {
+    fg = "#ebdbb2",
+    red = "#fb4934",
+    bg = "#282828",
+    cyan = "#8ec07c",
+    green = "#b8bb26",
+    lavender = "#d3869b",
+    light_blue = "#83a598",
+    grey = "#928374",
+    blue = "#83a598",
+    purple = "#d3869b",
+    sep = "#504945",
+}
diff --git a/oxwm/nord.lua b/oxwm/nord.lua
new file mode 100644
index 0000000..1754d2a
--- /dev/null
+++ b/oxwm/nord.lua
@@ -0,0 +1,13 @@
+return {
+    fg = "#d8dee9",
+    red = "#bf616a",
+    bg = "#2e3440",
+    cyan = "#88c0d0",
+    green = "#a3be8c",
+    lavender = "#b48ead",
+    light_blue = "#88c0d0",
+    grey = "#4c566a",
+    blue = "#81a1c1",
+    purple = "#b48ead",
+    sep = "#434c5e",
+}
diff --git a/oxwm/tokyonight.lua b/oxwm/tokyonight.lua
new file mode 100644
index 0000000..16df343
--- /dev/null
+++ b/oxwm/tokyonight.lua
@@ -0,0 +1,13 @@
+return {
+    fg = "#bbbbbb",
+    red = "#f7768e",
+    bg = "#1a1b26",
+    cyan = "#0db9d7",
+    green = "#9ece6a",
+    lavender = "#a9b1d6",
+    light_blue = "#7aa2f7",
+    grey = "#bbbbbb",
+    blue = "#6dade3",
+    purple = "#ad8ee6",
+    sep = "#444b6a",
+}
diff --git a/picom/picom.conf b/picom/picom.conf
new file mode 100644
index 0000000..6b9de4e
--- /dev/null
+++ b/picom/picom.conf
@@ -0,0 +1,51 @@
+shadow-radius = 7;
+shadow-offset-x = -7;
+shadow-offset-y = -7;
+shadow-exclude = [
+  "name = 'Notification'",
+  "class_g ?= 'Notify-osd'",
+  "_GTK_FRAME_EXTENTS@:c"
+];
+
+fading = true;
+fade-in-step = 0.03;
+fade-out-step = 0.03;
+
+inactive-opacity = 0.8;
+
+frame-opacity = 1.0
+
+inactive-opacity-override = false;
+
+opacity-rule = [
+    "100:class_g = 'Alacritty' && fullscreen",
+    "90:class_g = 'Alacritty'"
+];
+
+blur-kern = "3x3box";
+
+blur-background-exclude = [
+  "window_type = 'dock'",
+  "window_type = 'desktop'",
+  "_GTK_FRAME_EXTENTS@:c"
+];
+
+# backend = "glx"
+backend = "xrender";
+dithered-present = false;
+vsync = true;
+mark-wmwin-focused = true;
+mark-ovredir-focused = true;
+detect-client-opacity = true;
+detect-transient = true;
+use-damage = false;
+log-level = "warn";
+
+wintypes:
+{
+  tooltip = { fade = true; shadow = true; opacity = 0.95; focus = true; full-shadow = false; };
+  dock = { shadow = false; clip-shadow-above = true; }
+  dnd = { shadow = false; }
+  popup_menu = { opacity = 0.95; }
+  dropdown_menu = { opacity = 0.95; }
+};
diff --git a/rofi/backup-config b/rofi/backup-config
new file mode 100644
index 0000000..57fdb88
--- /dev/null
+++ b/rofi/backup-config
@@ -0,0 +1,48 @@
+configuration {
+    modi: "drun,run";
+    show-icons: false;
+    font: "monospace 10";
+    fullscreen: false;
+    dpi: 96;
+}
+
+* {
+    background: #2E3440;  /* Nord0 */
+    foreground: #D8DEE9;  /* Nord4 */
+    selected-background: #88C0D0; /* Nord8 */
+    selected-foreground: #2E3440; /* Nord0 */
+    border: 0;
+    padding: 6;
+    spacing: 5;
+    width: 50%;
+}
+
+window {
+    location: center;
+    border-radius: 6px;
+}
+
+inputbar {
+    background: @background;
+    text-color: @foreground;
+    padding: 10px;
+    border-radius: 6px;
+}
+
+listview {
+    padding: 5px;
+    lines: 10;
+}
+
+element {
+    background: transparent;
+    text-color: @foreground;
+}
+
+element selected {
+    background: @selected-background;
+    text-color: @selected-foreground;
+    border-radius: 4px;
+}
+
+@theme "/usr/share/rofi/themes/DarkBlue.rasi"
diff --git a/rofi/config.rasi b/rofi/config.rasi
new file mode 100644
index 0000000..488136c
--- /dev/null
+++ b/rofi/config.rasi
@@ -0,0 +1,29 @@
+configuration{
+    modi: ["drun", "window", "run"];
+    icon-theme: "Papirus-Dark";
+    show-icons: true;
+    terminal: "alacritty";
+    drun-display-format: "{icon} {name}";
+    location: 0;
+    disable-history: false;
+    sidebar-mode: false;
+    display-drun: " ";
+    display-run: " ";
+    display-window: " ";
+    
+    //adding vim keybindings
+    kb-row-up: "Up,Control+k";
+    kb-row-left: "Left,Control+h";
+    kb-row-right: "Right,Control+l";
+    kb-row-down: "Down,Control+j";
+
+    kb-accept-entry: "Control+z,Control+y,Return,KP_Enter";
+
+    //fixing up
+    kb-remove-to-eol: "";
+    kb-move-char-back: "Control+b";
+    kb-remove-char-back: "BackSpace";
+    kb-move-char-forward: "Control+f";
+    kb-mode-complete: "Control+o";
+}
+@theme "tokyonight.rasi"
diff --git a/rofi/dwm-config.rasi b/rofi/dwm-config.rasi
new file mode 100644
index 0000000..e2ae40c
--- /dev/null
+++ b/rofi/dwm-config.rasi
@@ -0,0 +1,93 @@
+configuration {
+	modi: "drun";
+	font: "JetBrainsMono Nerd Font 10";
+	show-icons: false;
+	terminal: "alacritty";
+	icon-theme: "Papirus-Dark";
+	drun-display-format: "{name}";
+	display-drun: "";
+  timeout {
+      action: "kb-cancel";
+      delay:  0;
+  }
+  filebrowser {
+      directories-first: true;
+      sorting-method:    "name";
+  }
+}
+
+@theme "/dev/null"
+
+* {
+    bg: #232933;
+    fg: #d8dee9;
+    selected: #2d3543;
+    accent: #4d6a8e;
+    background-color: @bg;
+
+    color: @fg;
+    border: 0;
+    border-color: @bg;
+    margin: 0;
+    padding: 0;
+    spacing: 0;    
+    highlight: none;
+}
+
+window {
+    width: 700px;
+}
+
+element {
+    padding: 6 5 7 5;
+    text-color: @fg;
+}
+
+element-text {
+    vertical-align: 0.5;
+    padding: 5px;
+}
+
+element selected {
+    background-color: @selected;
+}
+
+element-text selected {
+    background-color: @selected;
+}
+
+element-icon selected {
+    background-color: @selected;
+}
+
+element-icon {
+    size: 30;
+}
+
+entry {
+    background-color: @bg;
+    columns: 1;
+    lines: 20;
+}
+
+inputbar {
+    children: [prompt, entry];
+}
+
+prompt {
+    text-color: @bg;
+    background-color: @accent;
+    padding: 12 12 12 12;
+}
+
+entry {
+    text-color: @bg;
+    background-color: @accent;
+    padding: 12 5 12 0;
+}
+
+listview {
+    background-color: @bg;
+    columns: 3;
+    lines: 6;
+}
diff --git a/rofi/tokyonight.rasi b/rofi/tokyonight.rasi
new file mode 100644
index 0000000..bd64a99
--- /dev/null
+++ b/rofi/tokyonight.rasi
@@ -0,0 +1,137 @@
+/*
+ * Tokyonight colorscheme (big icons) for rofi
+ * User: w8ste
+ */
+
+
+// define colors etc.
+* {
+    bg: #24283b;
+    hv: #9274ca; 
+    primary: #444b6a;  // TokyoNight bright black
+    ug: #0B2447;
+    font: "Monospace 11";
+    background-color: @bg;
+    //dark: @bg;
+    border: 0px;
+    kl: #7aa2f7;
+    black: #000000;
+
+    transparent: rgba(46,52,64,0);
+}
+
+// defines different aspects of the window
+window {
+    width: 700;
+    /*since line wont work with height, i comment it out 
+    if you rather control the size via height
+    just comment it out */
+    //height: 500;
+
+    orientation: horizontal;
+    location: center;
+    anchor: center;
+    transparency: "screenshot";
+    border-color: @transparent;   
+    border: 0px;
+    border-radius: 6px;
+    spacing: 0;
+    children: [ mainbox ];
+}
+
+mainbox {
+    spacing: 0;
+    children: [ inputbar, message, listview ];
+}
+
+inputbar {
+    color: @kl;
+    padding: 11px;
+    border: 3px 3px 2px 3px;
+    border-color: @primary;
+    border-radius: 6px 6px 0px 0px;
+}
+
+message {
+    padding: 0;
+    border-color: @primary;
+    border: 0px 1px 1px 1px;
+}
+
+entry, prompt, case-indicator {
+    text-font: inherit;
+    text-color: inherit;
+}
+
+entry {
+    cursor: pointer;
+}
+
+prompt {
+    margin: 0px 5px 0px 0px;
+}
+
+listview {
+    layout: vertical;
+    //spacing: 5px;
+    padding: 8px;
+    lines: 7;
+    columns: 2;
+    border: 0px 3px 3px 3px; 
+    border-radius: 0px 0px 6px 6px;
+    border-color: @primary;
+    dynamic: false;
+}
+
+element {
+    padding: 2px;
+    vertical-align: 1;
+    color: @kl;
+    font: inherit;
+}
+
+element-text {
+    background-color: inherit;
+    text-color: inherit;
+    vertical-align: 0.5;
+}
+
+element selected.normal {
+    color: @black;
+    background-color: @hv;
+}
+
+element normal active {
+    background-color: @hv;
+    color: @black;
+}
+
+element-icon {
+    background-color: inherit;
+    text-color: inherit;
+    size: 2.5em;
+}
+
+element normal urgent {
+    background-color: @primary;
+}
+
+element selected active {
+    background: @hv;
+    foreground: @bg;
+}
+
+button {
+    padding: 6px;
+    color: @primary;
+    horizonatal-align: 0.5;
+
+    border: 2px 0px 2px 2px;
+    border-radius: 4px 0px 0px 4px;
+    border-color: @primary;
+}
+
+button selected normal {
+    border: 2px 0px 2px 2px;
+    border-color: @primary;
+}
diff --git a/wall1.jpg b/wall1.jpg
new file mode 100644
index 0000000..f288fc6
Binary files /dev/null and b/wall1.jpg differ