From 7c22850442a8b69775d45f1cf2c47141c8f694d4 Mon Sep 17 00:00:00 2001 From: datsudo <76833632+datsudo@users.noreply.github.com> Date: Fri, 30 May 2025 22:59:38 +0800 Subject: [PATCH] stable gen --- bin/books | 15 + bin/boomer | Bin 0 -> 331760 bytes bin/clipboard | 3 + bin/define | 24 + bin/keyboard-toggle | 15 + bin/show_colors | 10 + bin/show_def | 9 + bin/stm | 40 ++ bin/tmux-sessionizer | 48 ++ bin/touchpad-toggle-xinput | 14 + config/dracula.toml | 76 +++ config/ghostty-dracula | 22 + config/ideavimrc | 8 + config/mpd.conf | 19 + config/nvim/after/ftplugin/astro.lua | 1 + config/nvim/after/ftplugin/html.lua | 1 + config/nvim/after/ftplugin/javascript.lua | 2 + .../nvim/after/ftplugin/javascriptreact.lua | 1 + config/nvim/after/ftplugin/json.lua | 3 + config/nvim/after/ftplugin/lua.lua | 1 + config/nvim/after/ftplugin/markdown.lua | 15 + config/nvim/after/ftplugin/nix.lua | 3 + config/nvim/after/ftplugin/oil.lua | 2 + config/nvim/after/ftplugin/python.lua | 3 + config/nvim/after/ftplugin/toml.lua | 3 + config/nvim/after/ftplugin/typescript.lua | 1 + .../nvim/after/ftplugin/typescriptreact.lua | 1 + config/nvim/after/ftplugin/typst.lua | 2 + config/nvim/after/ftplugin/yaml.lua | 3 + config/nvim/init.lua | 7 + config/nvim/lsp/astro.lua | 9 + config/nvim/lsp/basedpyright.lua | 12 + config/nvim/lsp/clangd.lua | 4 + config/nvim/lsp/emmet_ls.lua | 13 + config/nvim/lsp/luals.lua | 23 + config/nvim/lsp/nixd.lua | 4 + config/nvim/lsp/tailwindcss.lua | 14 + config/nvim/lsp/ts_ls.lua | 4 + config/nvim/lua/config/autocmds.lua | 24 + config/nvim/lua/config/keymaps.lua | 56 ++ config/nvim/lua/config/lazy.lua | 40 ++ config/nvim/lua/config/lsp.lua | 58 ++ config/nvim/lua/config/options.lua | 30 + .../nvim/lua/config/telescope/multigrep.lua | 57 ++ config/nvim/lua/plugins/autotag.lua | 7 + config/nvim/lua/plugins/blink.lua | 23 + config/nvim/lua/plugins/colorscheme.lua | 12 + config/nvim/lua/plugins/comment.lua | 17 + config/nvim/lua/plugins/fzf.lua | 47 ++ config/nvim/lua/plugins/gitsigns.lua | 15 + config/nvim/lua/plugins/obsidian.lua | 19 + config/nvim/lua/plugins/oil.lua | 16 + config/nvim/lua/plugins/snacks.lua | 13 + config/nvim/lua/plugins/treesitter.lua | 38 ++ config/nvim/plugin/floaterm.lua | 51 ++ config/p10k-config | 199 +++++++ config/spacemacs | 542 ++++++++++++++++++ config/zathurarc | 77 +++ flake.lock | 91 +++ flake.nix | 29 + misc/camera.desktop | 9 + misc/nsxiv.desktop | 8 + system/audio.nix | 12 + system/boot.nix | 23 + system/configuration.nix | 147 +++++ system/devtools.nix | 69 +++ system/filesystems.nix | 14 + system/flatpak.nix | 26 + system/fontconfig.nix | 15 + system/hardware-configuration.nix | 40 ++ system/localisation.nix | 19 + user/docs.nix | 44 ++ user/editors.nix | 40 ++ user/home.nix | 102 ++++ user/music.nix | 101 ++++ user/shells.nix | 81 +++ user/subs/alacritty.nix | 52 ++ user/subs/emacs.nix | 25 + user/subs/ghostty.nix | 47 ++ user/subs/git.nix | 42 ++ user/subs/mpv.nix | 16 + user/subs/neovim.nix | 29 + user/subs/sioyek.nix | 44 ++ user/subs/sxhkd.nix | 56 ++ user/subs/tmux.nix | 64 +++ user/subs/zed.nix | 132 +++++ user/terminals.nix | 33 ++ user/termtools.nix | 28 + user/theming.nix | 63 ++ user/utils.nix | 41 ++ 90 files changed, 3318 insertions(+) create mode 100755 bin/books create mode 100755 bin/boomer create mode 100755 bin/clipboard create mode 100755 bin/define create mode 100755 bin/keyboard-toggle create mode 100755 bin/show_colors create mode 100755 bin/show_def create mode 100755 bin/stm create mode 100755 bin/tmux-sessionizer create mode 100755 bin/touchpad-toggle-xinput create mode 100644 config/dracula.toml create mode 100644 config/ghostty-dracula create mode 100644 config/ideavimrc create mode 100644 config/mpd.conf create mode 100644 config/nvim/after/ftplugin/astro.lua create mode 100644 config/nvim/after/ftplugin/html.lua create mode 100644 config/nvim/after/ftplugin/javascript.lua create mode 100644 config/nvim/after/ftplugin/javascriptreact.lua create mode 100644 config/nvim/after/ftplugin/json.lua create mode 100644 config/nvim/after/ftplugin/lua.lua create mode 100644 config/nvim/after/ftplugin/markdown.lua create mode 100644 config/nvim/after/ftplugin/nix.lua create mode 100644 config/nvim/after/ftplugin/oil.lua create mode 100644 config/nvim/after/ftplugin/python.lua create mode 100644 config/nvim/after/ftplugin/toml.lua create mode 100644 config/nvim/after/ftplugin/typescript.lua create mode 100644 config/nvim/after/ftplugin/typescriptreact.lua create mode 100644 config/nvim/after/ftplugin/typst.lua create mode 100644 config/nvim/after/ftplugin/yaml.lua create mode 100644 config/nvim/init.lua create mode 100644 config/nvim/lsp/astro.lua create mode 100644 config/nvim/lsp/basedpyright.lua create mode 100644 config/nvim/lsp/clangd.lua create mode 100644 config/nvim/lsp/emmet_ls.lua create mode 100644 config/nvim/lsp/luals.lua create mode 100644 config/nvim/lsp/nixd.lua create mode 100644 config/nvim/lsp/tailwindcss.lua create mode 100644 config/nvim/lsp/ts_ls.lua create mode 100644 config/nvim/lua/config/autocmds.lua create mode 100644 config/nvim/lua/config/keymaps.lua create mode 100644 config/nvim/lua/config/lazy.lua create mode 100644 config/nvim/lua/config/lsp.lua create mode 100644 config/nvim/lua/config/options.lua create mode 100644 config/nvim/lua/config/telescope/multigrep.lua create mode 100644 config/nvim/lua/plugins/autotag.lua create mode 100644 config/nvim/lua/plugins/blink.lua create mode 100644 config/nvim/lua/plugins/colorscheme.lua create mode 100644 config/nvim/lua/plugins/comment.lua create mode 100644 config/nvim/lua/plugins/fzf.lua create mode 100644 config/nvim/lua/plugins/gitsigns.lua create mode 100644 config/nvim/lua/plugins/obsidian.lua create mode 100644 config/nvim/lua/plugins/oil.lua create mode 100644 config/nvim/lua/plugins/snacks.lua create mode 100644 config/nvim/lua/plugins/treesitter.lua create mode 100644 config/nvim/plugin/floaterm.lua create mode 100644 config/p10k-config create mode 100644 config/spacemacs create mode 100644 config/zathurarc create mode 100644 flake.lock create mode 100644 flake.nix create mode 100755 misc/camera.desktop create mode 100644 misc/nsxiv.desktop create mode 100644 system/audio.nix create mode 100644 system/boot.nix create mode 100644 system/configuration.nix create mode 100644 system/devtools.nix create mode 100644 system/filesystems.nix create mode 100644 system/flatpak.nix create mode 100644 system/fontconfig.nix create mode 100644 system/hardware-configuration.nix create mode 100644 system/localisation.nix create mode 100644 user/docs.nix create mode 100644 user/editors.nix create mode 100644 user/home.nix create mode 100644 user/music.nix create mode 100644 user/shells.nix create mode 100644 user/subs/alacritty.nix create mode 100644 user/subs/emacs.nix create mode 100644 user/subs/ghostty.nix create mode 100644 user/subs/git.nix create mode 100644 user/subs/mpv.nix create mode 100644 user/subs/neovim.nix create mode 100644 user/subs/sioyek.nix create mode 100644 user/subs/sxhkd.nix create mode 100644 user/subs/tmux.nix create mode 100644 user/subs/zed.nix create mode 100644 user/terminals.nix create mode 100644 user/termtools.nix create mode 100644 user/theming.nix create mode 100644 user/utils.nix diff --git a/bin/books b/bin/books new file mode 100755 index 0000000..a627188 --- /dev/null +++ b/bin/books @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +BOOKS="/ar1/Books" + +file_name="$(find "$BOOKS" -type f -printf "%f\n" | sed 's/\.[^.]*$//' | rofi -dmenu -i -p "Books:" -theme ~/.config/rofi/menu.rasi)" + +if [ ! -z "$file_name" ]; then + file_path="$(find "$BOOKS" -type f -name "$file_name.*")" + extension="${file_path#*.}" + if [ "$extension" == "epub" ]; then + ebook-viewer --detach "$file_path" >/dev/null 2>&1 + else + xdg-open "$file_path" >/dev/null 2>&1 + fi +fi diff --git a/bin/boomer b/bin/boomer new file mode 100755 index 0000000000000000000000000000000000000000..833d12b30e9cead7ab69bfece68aba4c2228998e GIT binary patch literal 331760 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

HK;dMO0+9Jn(Wru}xDAm2 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∨|vPQG}vmXDNA;o)e*!xRci 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 a`|3rWfDc>Mf7V4jVwdTTN~OR@&1 | \ + fold --width=$(tput cols) | \ + less --quit-if-one-screen -RX +} + +def $1 diff --git a/bin/stm b/bin/stm new file mode 100755 index 0000000..6f9b88c --- /dev/null +++ b/bin/stm @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +session_name="$1" +tmux has-session -t $session_name &> /dev/null + +if [ $? != 0 ]; then + case "$session_name" in + + webdev) + explorer="$COURSES/Angela Yu - The Complete 2022 Web Development Bootcamp" + webdev_dir="$DEVDIR/web/webproj" + + tmux new-session -s "webdev" -d -n "Explorer" -c "$explorer" "nnn" + tmux new-window -t "webdev" -d -n "Editor" -c "$webdev_dir" "$EDITOR" + tmux new-window -t "webdev" -d -n "Terminal" -c "$webdev_dir" + tmux split-window -h -t "webdev:Terminal" -c "$webdev_dir" + ;; + + media) + kvardir="/ar1/Kvar/Running Man" + moviesdir="/ar1/Movies" + tvseriesdir="/ar1/TV Series" + + tmux new-session -s "media" -d -n "Running Man" -c "$kvardir" "nnn" + tmux new-window -t "media" -d -n "Movies" -c "$moviesdir" "nnn" + tmux new-window -t "media" -d -n "TV Series" -c "$tvseriesdir" "nnn" + ;; + + *) + tmux new-session -s "$session_name" + ;; + esac +fi + +if [[ -z $session_name ]]; then + session_name="main" + tmux new-session -s "$session_name" +fi + +tmux attach -t "$session_name" diff --git a/bin/tmux-sessionizer b/bin/tmux-sessionizer new file mode 100755 index 0000000..a47780b --- /dev/null +++ b/bin/tmux-sessionizer @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +switch_to() { + if [[ -z $TMUX ]]; then + tmux attach-session -t $1 + else + tmux switch-client -t $1 + fi +} + +has_session() { + tmux list-sessions | grep -q "^$1:" +} + +hydrate() { + if [ -f $2/.tmux-sessionizer ]; then + tmux send-keys -t $1 "source $2/.tmux-sessionizer" c-M + elif [ -f $HOME/.tmux-sessionizer ]; then + tmux send-keys -t $1 "source $HOME/.tmux-sessionizer" c-M + fi +} + +if [[ $# -eq 1 ]]; then + selected=$1 +else + # If someone wants to make this extensible, i'll accept + # PR + selected=$(find ~/dev ~/dev/probe ~/dev/gitlab ~/Documents -mindepth 1 -maxdepth 1 -type d | fzf) +fi + +if [[ -z $selected ]]; then + exit 0 +fi + +selected_name=$(basename "$selected" | tr . _) +tmux_running=$(pgrep tmux) + +if [[ -z $TMUX ]] && [[ -z $tmux_running ]]; then + tmux new-session -s $selected_name -c $selected + hydrate $selected_name $selected + exit 0 +fi + +if ! has_session $selected_name; then + tmux new-session -ds $selected_name -c $selected + hydrate $selected_name $selected +fi + +switch_to $selected_name diff --git a/bin/touchpad-toggle-xinput b/bin/touchpad-toggle-xinput new file mode 100755 index 0000000..c0e7d62 --- /dev/null +++ b/bin/touchpad-toggle-xinput @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +TPAD_ID=$(xinput | awk '/Touchpad/ {print $6}' | awk -F = '{print $2}') +is_enabled=$(xinput list-props $TPAD_ID | awk '/Device Enabled/ {print $4}') + +if [[ $is_enabled == 0 ]]; then + xinput enable "$TPAD_ID" + status="Enabled" +else + xinput disable "$TPAD_ID" + status="Disabled" +fi + +notify-send "Touchpad" "$status" -i "touchpad" diff --git a/config/dracula.toml b/config/dracula.toml new file mode 100644 index 0000000..0a56c29 --- /dev/null +++ b/config/dracula.toml @@ -0,0 +1,76 @@ +# Dracula theme for Alacritty +# https://draculatheme.com/alacritty +# +# Color palette +# https://spec.draculatheme.com +# +# Instructions +# https://github.com/alacritty/alacritty/blob/master/extra/man/alacritty.5.scd + +[colors.primary] + +background = "#282a36" +foreground = "#f8f8f2" +bright_foreground = "#ffffff" + +[colors.cursor] + +text = "#282a36" +cursor = "#f8f8f2" + +[colors.vi_mode_cursor] + +text = "CellBackground" +cursor = "CellForeground" + +[colors.selection] + +text = "CellForeground" +background = "#44475a" + +[colors.normal] + +black = "#21222c" +red = "#ff5555" +green = "#50fa7b" +yellow = "#f1fa8c" +blue = "#bd93f9" +magenta = "#ff79c6" +cyan = "#8be9fd" +white = "#f8f8f2" + +[colors.bright] + +black = "#6272a4" +red = "#ff6e6e" +green = "#69ff94" +yellow = "#ffffa5" +blue = "#d6acff" +magenta = "#ff92df" +cyan = "#a4ffff" +white = "#ffffff" + +[colors.search.matches] + +foreground = "#44475a" +background = "#50fa7b" + +[colors.search.focused_match] + +foreground = "#44475a" +background = "#ffb86c" + +[colors.footer_bar] + +background = "#282a36" +foreground = "#f8f8f2" + +[colors.hints.start] + +foreground = "#282a36" +background = "#f1fa8c" + +[colors.hints.end] + +foreground = "#f1fa8c" +background = "#282a36" diff --git a/config/ghostty-dracula b/config/ghostty-dracula new file mode 100644 index 0000000..02ace5c --- /dev/null +++ b/config/ghostty-dracula @@ -0,0 +1,22 @@ +palette = 0=#21222c +palette = 1=#ff5555 +palette = 2=#50fa7b +palette = 3=#f1fa8c +palette = 4=#bd93f9 +palette = 5=#ff79c6 +palette = 6=#8be9fd +palette = 7=#f8f8f2 +palette = 8=#6272a4 +palette = 9=#ff6e6e +palette = 10=#69ff94 +palette = 11=#ffffa5 +palette = 12=#d6acff +palette = 13=#ff92df +palette = 14=#a4ffff +palette = 15=#ffffff +background = #282a36 +foreground = #f8f8f2 +cursor-color = #f8f8f2 +cursor-text = #282a36 +selection-foreground = #f8f8f2 +selection-background = #44475a diff --git a/config/ideavimrc b/config/ideavimrc new file mode 100644 index 0000000..0f5eb66 --- /dev/null +++ b/config/ideavimrc @@ -0,0 +1,8 @@ +set clipboard^=unnamedplus,unnamed +set hlsearch +set ignorecase +set smartcase +set incsearch +set ideajoin +set scrolloff=8 +set sidescrolloff=8 diff --git a/config/mpd.conf b/config/mpd.conf new file mode 100644 index 0000000..4eaf80f --- /dev/null +++ b/config/mpd.conf @@ -0,0 +1,19 @@ +log_level "verbose" +auto_update "yes" +group "audio" + +audio_output { + type "pipewire" + name "Pipewire Pulse" +} + +audio_output { + type "fifo" + name "FIFO" + path "/tmp/mpd.fifo" + format "44100:16:2" +} + +follow_outside_symlinks "yes" +follow_inside_symlinks "yes" +filesystem_charset "UTF-8" diff --git a/config/nvim/after/ftplugin/astro.lua b/config/nvim/after/ftplugin/astro.lua new file mode 100644 index 0000000..3c844d9 --- /dev/null +++ b/config/nvim/after/ftplugin/astro.lua @@ -0,0 +1 @@ +vim.opt_local.tabstop = 2 diff --git a/config/nvim/after/ftplugin/html.lua b/config/nvim/after/ftplugin/html.lua new file mode 100644 index 0000000..3c844d9 --- /dev/null +++ b/config/nvim/after/ftplugin/html.lua @@ -0,0 +1 @@ +vim.opt_local.tabstop = 2 diff --git a/config/nvim/after/ftplugin/javascript.lua b/config/nvim/after/ftplugin/javascript.lua new file mode 100644 index 0000000..13efb08 --- /dev/null +++ b/config/nvim/after/ftplugin/javascript.lua @@ -0,0 +1,2 @@ +vim.opt_local.tabstop = 2 + diff --git a/config/nvim/after/ftplugin/javascriptreact.lua b/config/nvim/after/ftplugin/javascriptreact.lua new file mode 100644 index 0000000..3c844d9 --- /dev/null +++ b/config/nvim/after/ftplugin/javascriptreact.lua @@ -0,0 +1 @@ +vim.opt_local.tabstop = 2 diff --git a/config/nvim/after/ftplugin/json.lua b/config/nvim/after/ftplugin/json.lua new file mode 100644 index 0000000..2f1df5c --- /dev/null +++ b/config/nvim/after/ftplugin/json.lua @@ -0,0 +1,3 @@ +vim.opt.expandtab = true +vim.opt.smartindent = true +vim.opt.shiftwidth = 2 diff --git a/config/nvim/after/ftplugin/lua.lua b/config/nvim/after/ftplugin/lua.lua new file mode 100644 index 0000000..3c844d9 --- /dev/null +++ b/config/nvim/after/ftplugin/lua.lua @@ -0,0 +1 @@ +vim.opt_local.tabstop = 2 diff --git a/config/nvim/after/ftplugin/markdown.lua b/config/nvim/after/ftplugin/markdown.lua new file mode 100644 index 0000000..da15724 --- /dev/null +++ b/config/nvim/after/ftplugin/markdown.lua @@ -0,0 +1,15 @@ +vim.opt.expandtab = true +vim.opt.smartindent = true +vim.opt.shiftwidth = 4 +vim.opt.wrap = true + +vim.opt.linebreak = true +vim.opt.signcolumn = 'no' +vim.opt.number = false +vim.opt.expandtab = true +vim.opt.smartindent = true +vim.opt.shiftwidth = 2 +vim.opt.fillchars = { eob = ' ', fold = ' ' } + +vim.o.list = true +vim.o.conceallevel = 2 diff --git a/config/nvim/after/ftplugin/nix.lua b/config/nvim/after/ftplugin/nix.lua new file mode 100644 index 0000000..2f1df5c --- /dev/null +++ b/config/nvim/after/ftplugin/nix.lua @@ -0,0 +1,3 @@ +vim.opt.expandtab = true +vim.opt.smartindent = true +vim.opt.shiftwidth = 2 diff --git a/config/nvim/after/ftplugin/oil.lua b/config/nvim/after/ftplugin/oil.lua new file mode 100644 index 0000000..e5396c2 --- /dev/null +++ b/config/nvim/after/ftplugin/oil.lua @@ -0,0 +1,2 @@ +vim.opt_local.number = false +vim.opt_local.relativenumber = false diff --git a/config/nvim/after/ftplugin/python.lua b/config/nvim/after/ftplugin/python.lua new file mode 100644 index 0000000..650db5c --- /dev/null +++ b/config/nvim/after/ftplugin/python.lua @@ -0,0 +1,3 @@ +vim.opt.expandtab = true +vim.opt.smartindent = true +vim.opt.shiftwidth = 4 diff --git a/config/nvim/after/ftplugin/toml.lua b/config/nvim/after/ftplugin/toml.lua new file mode 100644 index 0000000..2f1df5c --- /dev/null +++ b/config/nvim/after/ftplugin/toml.lua @@ -0,0 +1,3 @@ +vim.opt.expandtab = true +vim.opt.smartindent = true +vim.opt.shiftwidth = 2 diff --git a/config/nvim/after/ftplugin/typescript.lua b/config/nvim/after/ftplugin/typescript.lua new file mode 100644 index 0000000..3c844d9 --- /dev/null +++ b/config/nvim/after/ftplugin/typescript.lua @@ -0,0 +1 @@ +vim.opt_local.tabstop = 2 diff --git a/config/nvim/after/ftplugin/typescriptreact.lua b/config/nvim/after/ftplugin/typescriptreact.lua new file mode 100644 index 0000000..3c844d9 --- /dev/null +++ b/config/nvim/after/ftplugin/typescriptreact.lua @@ -0,0 +1 @@ +vim.opt_local.tabstop = 2 diff --git a/config/nvim/after/ftplugin/typst.lua b/config/nvim/after/ftplugin/typst.lua new file mode 100644 index 0000000..e53652a --- /dev/null +++ b/config/nvim/after/ftplugin/typst.lua @@ -0,0 +1,2 @@ +vim.opt_local.wrap = true +vim.opt_local.tabstop = 2 diff --git a/config/nvim/after/ftplugin/yaml.lua b/config/nvim/after/ftplugin/yaml.lua new file mode 100644 index 0000000..2f1df5c --- /dev/null +++ b/config/nvim/after/ftplugin/yaml.lua @@ -0,0 +1,3 @@ +vim.opt.expandtab = true +vim.opt.smartindent = true +vim.opt.shiftwidth = 2 diff --git a/config/nvim/init.lua b/config/nvim/init.lua new file mode 100644 index 0000000..57dfa7a --- /dev/null +++ b/config/nvim/init.lua @@ -0,0 +1,7 @@ +vim.loader.enable() + +require 'config.lazy' +require 'config.options' +require 'config.keymaps' +require 'config.autocmds' +require 'config.lsp' diff --git a/config/nvim/lsp/astro.lua b/config/nvim/lsp/astro.lua new file mode 100644 index 0000000..9106456 --- /dev/null +++ b/config/nvim/lsp/astro.lua @@ -0,0 +1,9 @@ +return { + cmd = { 'astro-ls', '--stdio' }, + filetypes = { 'astro' }, + init_options = { + typescript = { + tsdk = 'node_modules/typescript/lib', + }, + }, +} diff --git a/config/nvim/lsp/basedpyright.lua b/config/nvim/lsp/basedpyright.lua new file mode 100644 index 0000000..e6ea9a3 --- /dev/null +++ b/config/nvim/lsp/basedpyright.lua @@ -0,0 +1,12 @@ +return { + cmd = { 'basedpyright-langserver', '--stdio' }, + filetypes = { 'python' }, + settings = { + basedpyright = { + analysis = { + typeCheckingMode = 'off', + reportUnusedVariable = false, + }, + }, + }, +} diff --git a/config/nvim/lsp/clangd.lua b/config/nvim/lsp/clangd.lua new file mode 100644 index 0000000..28c7c2c --- /dev/null +++ b/config/nvim/lsp/clangd.lua @@ -0,0 +1,4 @@ +return { + cmd = { 'clangd' }, + filetypes = { 'c', 'cpp' }, +} diff --git a/config/nvim/lsp/emmet_ls.lua b/config/nvim/lsp/emmet_ls.lua new file mode 100644 index 0000000..b198b2d --- /dev/null +++ b/config/nvim/lsp/emmet_ls.lua @@ -0,0 +1,13 @@ +return { + cmd = { 'emmet-language-server', '--stdio' }, + filetypes = { + 'typescript', + 'javascriptreact', + 'typescriptreact', + 'vue', + 'astro', + 'php', + 'html', + 'css', + }, +} diff --git a/config/nvim/lsp/luals.lua b/config/nvim/lsp/luals.lua new file mode 100644 index 0000000..642fae1 --- /dev/null +++ b/config/nvim/lsp/luals.lua @@ -0,0 +1,23 @@ +return { + cmd = { 'lua-language-server' }, + filetypes = { 'lua' }, + settings = { + Lua = { + runtime = { + version = 'LuaJIT', + }, + workspace = { + checkThirdParty = false, + library = { + vim.env.VIMRUNTIME, + }, + }, + diagnostics = { + globals = { 'vim' }, + }, + telemetry = { + enable = false, + }, + }, + }, +} diff --git a/config/nvim/lsp/nixd.lua b/config/nvim/lsp/nixd.lua new file mode 100644 index 0000000..7fc6b44 --- /dev/null +++ b/config/nvim/lsp/nixd.lua @@ -0,0 +1,4 @@ +return { + cmd = { 'nixd' }, + filetypes = { 'nix' }, +} diff --git a/config/nvim/lsp/tailwindcss.lua b/config/nvim/lsp/tailwindcss.lua new file mode 100644 index 0000000..163b09a --- /dev/null +++ b/config/nvim/lsp/tailwindcss.lua @@ -0,0 +1,14 @@ +return { + cmd = { 'tailwindcss-language-server', '--stdio' }, + filetypes = { + 'typescript', + 'javascriptreact', + 'typescriptreact', + 'svelte', + 'vue', + 'astro', + 'php', + 'html', + 'css', + }, +} diff --git a/config/nvim/lsp/ts_ls.lua b/config/nvim/lsp/ts_ls.lua new file mode 100644 index 0000000..2f7c59e --- /dev/null +++ b/config/nvim/lsp/ts_ls.lua @@ -0,0 +1,4 @@ +return { + cmd = { 'typescript-language-server', '--stdio' }, + filetypes = { 'typescript', 'javascript', 'javascriptreact', 'typescriptreact' }, +} diff --git a/config/nvim/lua/config/autocmds.lua b/config/nvim/lua/config/autocmds.lua new file mode 100644 index 0000000..3b47d3a --- /dev/null +++ b/config/nvim/lua/config/autocmds.lua @@ -0,0 +1,24 @@ +vim.api.nvim_create_autocmd('TextYankPost', { + desc = 'Highlight when yanking (copying) text', + group = vim.api.nvim_create_augroup('highlight-yank', { clear = true }), + callback = function() + vim.highlight.on_yank() + end, +}) + +vim.api.nvim_create_autocmd('TermOpen', { + group = vim.api.nvim_create_augroup('custom-term-open', { clear = true }), + callback = function() + vim.opt.number = false + vim.opt.relativenumber = false + end, +}) + +vim.api.nvim_create_autocmd('LspAttach', { + callback = function(args) + local client = vim.lsp.get_client_by_id(args.data.client_id) + if client then + client.server_capabilities.semanticTokensProvider = nil + end + end, +}) diff --git a/config/nvim/lua/config/keymaps.lua b/config/nvim/lua/config/keymaps.lua new file mode 100644 index 0000000..4bac7cb --- /dev/null +++ b/config/nvim/lua/config/keymaps.lua @@ -0,0 +1,56 @@ +---@diagnostic disable: unused-local +local key = vim.keymap + +key.set('n', 'q', ':q', { desc = '[q]uit' }) +key.set('n', 'fs', ':w', { desc = '[f]ile [s]ave' }) +key.set('n', 'fr', ':e', { desc = '[f]ile [r]efresh' }) +key.set('n', 'fx', ':source %', { desc = '[f]ile e[x]ecute' }) + +key.set('v', 'er', ':lua', { desc = '[f]ile [s]ave' }) + +key.set('n', 'bx', ':source %', { desc = 'e[x]ecute buffer' }) +key.set('n', 'bx', ':source %', { desc = 'e[x]ecute buffer' }) +key.set('n', 'bd', ':bdelete', { desc = '[b]uffer [d]elete' }) +key.set('n', 'bp', ':bprevious', { desc = '[b]uffer [p]revious' }) +key.set('n', 'bn', ':bnext', { desc = '[b]uffer [n]ext' }) + +key.set('n', 'j', 'gj') +key.set('n', 'k', 'gk') + +key.set('v', '<', '', '>gv') + +key.set('n', 'n', 'nzzzv') +key.set('n', 'N', 'nzzzv') + +key.set('v', 'p', '"_dP') + +key.set({ 'i', 's' }, '', function() + if vim.snippet then + vim.snippet.stop() + end + return '' +end) + +key.set('n', 'ws', ':split', { desc = '[w]indow [s]plit horizontally' }) +key.set('n', 'wv', ':vsplit', { desc = '[w]indow split [v]ertically' }) +key.set('n', 'wh', '', { desc = 'move focus to left window' }) +key.set('n', 'wj', '', { desc = 'move focus to bottom window' }) +key.set('n', 'wk', '', { desc = 'move focus to top window' }) +key.set('n', 'wl', '', { desc = 'move focus to right window' }) +key.set('n', 'wc', 'c', { desc = '[w]indow [c]lose' }) +key.set('n', 'wo', 'o', { desc = '[w]indow make it [o]pen wide' }) + +key.set('n', '', ':cnext', { desc = 'quickfix next' }) +key.set('n', '', ':cprev', { desc = 'quickfix previous' }) + +key.set('t', '', '', { desc = 'easier terminal normal mode' }) + +local job_id = 0 +key.set('n', 'to', function() + vim.cmd.vnew() + vim.cmd.term() + vim.cmd.wincmd 'J' + vim.api.nvim_win_set_height(0, 13) + job_id = vim.bo.channel +end, { desc = '[t]erminal [o]pen' }) diff --git a/config/nvim/lua/config/lazy.lua b/config/nvim/lua/config/lazy.lua new file mode 100644 index 0000000..2c3fc10 --- /dev/null +++ b/config/nvim/lua/config/lazy.lua @@ -0,0 +1,40 @@ +-- Bootstrap lazy.nvim +local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim' +if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = 'https://github.com/folke/lazy.nvim.git' + local out = vim.fn.system { 'git', 'clone', '--filter=blob:none', '--branch=stable', lazyrepo, lazypath } + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { 'Failed to clone lazy.nvim:\n', 'ErrorMsg' }, + { out, 'WarningMsg' }, + { '\nPress any key to exit...' }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end +end +vim.opt.rtp:prepend(lazypath) + +-- Make sure to setup `mapleader` and `maplocalleader` before +-- loading lazy.nvim so that mappings are correct. +-- This is also a good place to setup other settings (vim.opt) +vim.g.mapleader = ' ' +vim.g.maplocalleader = ' ' + +-- Setup lazy.nvim +require('lazy').setup { + spec = { + { + 'tpope/vim-fugitive', + config = function() + vim.keymap.set('n', 'gd', ':0G', { desc = '[g]it [d]ashboard' }) + end, + }, + + { 'chrisbra/csv.vim', ft = 'csv' }, + { import = 'plugins' }, + }, + change_detection = { + notify = false, + }, +} diff --git a/config/nvim/lua/config/lsp.lua b/config/nvim/lua/config/lsp.lua new file mode 100644 index 0000000..49b43ca --- /dev/null +++ b/config/nvim/lua/config/lsp.lua @@ -0,0 +1,58 @@ +vim.api.nvim_create_autocmd('LspAttach', { + group = vim.api.nvim_create_augroup('UserLspAttach', { clear = true }), + callback = function(args) + local client = assert(vim.lsp.get_client_by_id(args.data.client_id)) + + local opts = { noremap = true, silent = true } + local k = vim.keymap + + k.set('n', 'gd', function() vim.lsp.buf.definition() end, { desc = '[g]oto [d]efinition' }) + k.set('n', 'lt', ':checkhealth vim.lsp', opts) + k.set('n', 'lr', vim.lsp.buf.rename, opts) + k.set('n', 'la', vim.lsp.buf.code_action, opts) + k.set('n', 'gr', vim.lsp.buf.references, opts) + k.set('n', '[d', function() vim.diagnostic.jump({ count = -1, float = true }) end, opts) + k.set('n', ']d', function() vim.diagnostic.jump({ count = 1, float = true }) end, opts) + + -- Auto-formatting (with Editorconfig) + if client:supports_method 'textDocument/willSaveWaitUntil' and client:supports_method 'textDocument/formatting' then + vim.api.nvim_create_autocmd('BufWritePre', { + group = vim.api.nvim_create_augroup('UserLspAttach', { clear = false }), + buffer = args.buf, + callback = function() + vim.lsp.buf.format { bufnr = args.buf, id = client.id, timeout_ms = 1000 } + end, + }) + end + end, +}) +vim.o.completeopt = 'menuone,noinsert,popup,fuzzy,noselect' +vim.o.winborder = 'rounded' -- rounded borders in floating windows + +-- Diagnostics +vim.diagnostic.config { + severity_sort = true, + signs = true, + underline = true, + virtual_text = true, + -- virtual_lines = true, +} + +-- Configs +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities.textDocument.completion.completionItem.snippetSupport = true + +vim.lsp.config('*', { + capabilities = capabilities, +}) + +vim.lsp.enable({ + "astro", + "basedpyright", + "clangd", + "emmet_ls", + "luals", + "nixd", + "tailwindcss", + "ts_ls", +}) diff --git a/config/nvim/lua/config/options.lua b/config/nvim/lua/config/options.lua new file mode 100644 index 0000000..26b422d --- /dev/null +++ b/config/nvim/lua/config/options.lua @@ -0,0 +1,30 @@ +local set = vim.opt + +set.cole = 0 +set.tabstop = 4 +set.shiftwidth = 0 +set.wrap = false +set.number = true +set.softtabstop = -1 +set.smarttab = true +set.expandtab = false +set.ignorecase = true +set.smartcase = true +set.updatetime = 100 +set.redrawtime = 10000 +set.timeoutlen = 300 +set.hlsearch = true +set.clipboard = 'unnamedplus' +set.signcolumn = 'yes:1' +set.foldcolumn = '0' +set.list = true +set.undofile = true +set.cmdheight = 1 +set.fillchars = { eob = ' ', fold = ' ' } +set.listchars = { tab = '│ ', trail = '·', nbsp = '␣' } + +vim.o.foldenable = true +vim.o.foldlevel = 99 +vim.o.foldmethod = 'expr' +vim.o.foldexpr = 'v:lua.vim.treesitter.foldexpr()' +vim.o.foldtext = '' diff --git a/config/nvim/lua/config/telescope/multigrep.lua b/config/nvim/lua/config/telescope/multigrep.lua new file mode 100644 index 0000000..320e864 --- /dev/null +++ b/config/nvim/lua/config/telescope/multigrep.lua @@ -0,0 +1,57 @@ +local pickers = require 'telescope.pickers' +local finders = require 'telescope.finders' +local make_entry = require 'telescope.make_entry' +local conf = require('telescope.config').values + +local M = {} + +local live_multigrep = function(opts) + opts = opts or {} + opts.cwd = opts.cwd or vim.uv.cwd() + + local finder = finders.new_async_job { + command_generator = function(prompt) + if not prompt or prompt == '' then + return nil + end + + local pieces = vim.split(prompt, ' ') + local args = { 'rg' } + if pieces[1] then + table.insert(args, '-e') + table.insert(args, pieces[1]) + end + + if pieces[2] then + table.insert(args, '-g') + table.insert(args, pieces[2]) + end + + return vim + .iter({ + args, + { '--no-heading', '--with-filename', '--line-number', '--column', '--smart-case' }, + }) + :flatten() + :totable() + end, + entry_maker = make_entry.gen_from_vimgrep(opts), + cwd = opts.cwd, + } + + pickers + .new(opts, { + debounce = 100, + prompt_title = 'Multi Grep', + finder = finder, + previewer = conf.grep_previewer(opts), + sorter = require('telescope.sorters').empty(), + }) + :find() +end + +M.setup = function() + return live_multigrep +end + +return M diff --git a/config/nvim/lua/plugins/autotag.lua b/config/nvim/lua/plugins/autotag.lua new file mode 100644 index 0000000..bcbd0eb --- /dev/null +++ b/config/nvim/lua/plugins/autotag.lua @@ -0,0 +1,7 @@ +return { + { + 'windwp/nvim-ts-autotag', + dependencies = { 'nvim-treesitter/nvim-treesitter' }, + opts = {}, + }, +} diff --git a/config/nvim/lua/plugins/blink.lua b/config/nvim/lua/plugins/blink.lua new file mode 100644 index 0000000..9258ddc --- /dev/null +++ b/config/nvim/lua/plugins/blink.lua @@ -0,0 +1,23 @@ +return { + 'saghen/blink.cmp', + dependencies = { 'rafamadriz/friendly-snippets' }, + build = 'cargo build --release', + opts = { + -- 'default' (recommended) for mappings similar to built-in completions (C-y to accept) + -- 'super-tab' for mappings similar to vscode (tab to accept) + -- 'enter' for enter to accept + -- 'none' for no mappings + -- All presets have the following mappings: + -- C-space: Open menu or open docs if already open + -- C-n/C-p or Up/Down: Select next/previous item + -- C-e: Hide menu + -- C-k: Toggle signature help (if signature.enabled = true) + -- See :h blink-cmp-config-keymap for defining your own keymap + keymap = { preset = 'enter' }, + appearance = { + nerd_font_variant = 'mono' + }, + completion = { documentation = { auto_show = true } }, + }, + opts_extend = { "sources.default" } +} diff --git a/config/nvim/lua/plugins/colorscheme.lua b/config/nvim/lua/plugins/colorscheme.lua new file mode 100644 index 0000000..71e58de --- /dev/null +++ b/config/nvim/lua/plugins/colorscheme.lua @@ -0,0 +1,12 @@ +return { + { + 'Mofiqul/dracula.nvim', + lazy = false, + priority = 1000, + config = function() + require('dracula').setup {} + + vim.cmd.colorscheme 'dracula' + end, + }, +} diff --git a/config/nvim/lua/plugins/comment.lua b/config/nvim/lua/plugins/comment.lua new file mode 100644 index 0000000..584d320 --- /dev/null +++ b/config/nvim/lua/plugins/comment.lua @@ -0,0 +1,17 @@ +return { + { + 'numToStr/Comment.nvim', + dependencies = { + 'JoosepAlviste/nvim-ts-context-commentstring', + }, + config = function() + require('ts_context_commentstring').setup { + enable_autocmd = false, + } + + require('Comment').setup { + pre_hook = require('ts_context_commentstring.integrations.comment_nvim').create_pre_hook(), + } + end, + }, +} diff --git a/config/nvim/lua/plugins/fzf.lua b/config/nvim/lua/plugins/fzf.lua new file mode 100644 index 0000000..0fc70d1 --- /dev/null +++ b/config/nvim/lua/plugins/fzf.lua @@ -0,0 +1,47 @@ +return { + 'ibhagwan/fzf-lua', + dependencies = { + 'nvim-tree/nvim-web-devicons', + }, + config = function() + local key = vim.keymap + local fzf = require('fzf-lua') + + fzf.setup { + 'telescope', + winopts = { + preview = { + layout = 'vertical', + vertical = 'down:60%' + }, + width = 0.95 + } + } + + local search_nvim_conf = function() + fzf.files { + cwd = vim.fn.stdpath 'config' + } + end + + key.set('n', '', fzf.buffers, { desc = 'search buffers' }) + + -- key.set('n', 'sf', fzf.files, { desc = '[s]earch [f]iles' }) + key.set('n', 'sl', fzf.blines, { desc = '[s]earch buffer [l]ines' }) + key.set('n', 'sh', fzf.helptags, { desc = '[s]earch [h]elp' }) + key.set('n', 'sk', fzf.keymaps, { desc = '[s]earch [k]eymaps' }) + key.set('n', 'sn', search_nvim_conf, { desc = '[s]earch [n]vim config files' }) + key.set('n', 'ss', fzf.builtin, { desc = '[s]earch [s]earchables' }) + + key.set('n', 'sf', fzf.files, { desc = '[s]earch [f]iles' }) + key.set('n', 'pf', fzf.files, { desc = '[p]roject [f]iles' }) + key.set('n', 'pg', fzf.live_grep_native, { desc = '[p]roject [g]rep' }) + + key.set('n', 'gc', fzf.git_commits, { desc = '[g]it [c]ommits' }) + key.set('n', 'gb', fzf.git_branches, { desc = '[g]it [b]ranches' }) + key.set('n', 'gt', fzf.git_status, { desc = '[g]it [s]tatus' }) + + key.set('n', 'ld', fzf.lsp_workspace_diagnostics, { desc = '[L]SP [d]iagnostics' }) + key.set('n', 'ls', fzf.lsp_document_symbols, { desc = '[L]SP [s]ymbols' }) + end +} diff --git a/config/nvim/lua/plugins/gitsigns.lua b/config/nvim/lua/plugins/gitsigns.lua new file mode 100644 index 0000000..5357f5a --- /dev/null +++ b/config/nvim/lua/plugins/gitsigns.lua @@ -0,0 +1,15 @@ +return { + 'lewis6991/gitsigns.nvim', + config = function () + require('gitsigns').setup { + signs = { + add = { text = '┃' }, + change = { text = '┃' }, + delete = { text = '_' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + untracked = { text = '┆' }, + }, + } + end, +} diff --git a/config/nvim/lua/plugins/obsidian.lua b/config/nvim/lua/plugins/obsidian.lua new file mode 100644 index 0000000..df4cf92 --- /dev/null +++ b/config/nvim/lua/plugins/obsidian.lua @@ -0,0 +1,19 @@ +return { + 'obsidian-nvim/obsidian.nvim', + version = '*', + lazy = true, + event = { + 'BufReadPre ' .. vim.fn.expand '~' .. '/Documents/obsidian/*.md', + }, + dependencies = { + 'nvim-lua/plenary.nvim', + }, + opts = { + workspaces = { + { + name = 'personal', + path = '~/Documents/obsidian' + } + }, + }, +} diff --git a/config/nvim/lua/plugins/oil.lua b/config/nvim/lua/plugins/oil.lua new file mode 100644 index 0000000..8cba704 --- /dev/null +++ b/config/nvim/lua/plugins/oil.lua @@ -0,0 +1,16 @@ +return { + { + 'stevearc/oil.nvim', + config = function() + vim.keymap.set('n', 'fe', ':Oil', { desc = '[f]ile [e]xplorer' }) + vim.keymap.set('n', '-', ':Oil', { desc = 'file explorer' }) + require('oil').setup { + default_file_explorer = true, + delete_to_trash = true, + view_options = { + show_hidden = true, + }, + } + end, + }, +} diff --git a/config/nvim/lua/plugins/snacks.lua b/config/nvim/lua/plugins/snacks.lua new file mode 100644 index 0000000..7750319 --- /dev/null +++ b/config/nvim/lua/plugins/snacks.lua @@ -0,0 +1,13 @@ +return { + { + 'folke/snacks.nvim', + priority = 1000, + config = function() + require('snacks').setup { + quickfile = { + enable = true, + }, + } + end, + }, +} diff --git a/config/nvim/lua/plugins/treesitter.lua b/config/nvim/lua/plugins/treesitter.lua new file mode 100644 index 0000000..4e77071 --- /dev/null +++ b/config/nvim/lua/plugins/treesitter.lua @@ -0,0 +1,38 @@ +---@diagnostic disable: missing-fields +return { + { + 'nvim-treesitter/nvim-treesitter', + build = ':TSUpdate', + config = function() + require('nvim-treesitter.configs').setup { + ensure_installed = { + 'lua', + 'python', + 'c', + 'javascript', + 'typescript', + 'astro', + }, + auto_install = false, + -- ignore_install = {}, + highlight = { + enable = true, + ---@diagnostic disable-next-line: unused-local + disable = function(lang, buf) + local max_filesize = 100 * 1024 + ---@diagnostic disable-next-line: undefined-field + local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf)) + if ok and stats and stats.size > max_filesize then + return true + end + end, + additional_vim_regex_highlighting = false, + }, + indent = { + enable = true, + disable = { 'python', 'c' }, + }, + } + end, + }, +} diff --git a/config/nvim/plugin/floaterm.lua b/config/nvim/plugin/floaterm.lua new file mode 100644 index 0000000..86505ed --- /dev/null +++ b/config/nvim/plugin/floaterm.lua @@ -0,0 +1,51 @@ +local state = { + floating = { + buf = -1, + win = -1, + }, +} + +local function create_floating_window(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 col = math.floor((vim.o.columns - width) / 2) + local row = math.floor((vim.o.lines - height) / 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 + + local win_config = { + relative = 'editor', + width = width, + height = height, + col = col, + row = row, + style = 'minimal', + border = 'rounded', + } + + local win = vim.api.nvim_open_win(buf, true, win_config) + + return { buf = buf, win = win } +end + +local toggle_terminal = function() + if not vim.api.nvim_win_is_valid(state.floating.win) then + state.floating = create_floating_window { buf = state.floating.buf } + if vim.bo[state.floating.buf].buftype ~= 'terminal' then + vim.cmd.term() + end + else + vim.api.nvim_win_hide(state.floating.win) + end +end + +vim.api.nvim_create_user_command('Floaterm', toggle_terminal, {}) + +vim.keymap.set({ 'n', 't' }, '', toggle_terminal, { desc = '[t]oggle [t]erminal' }) diff --git a/config/p10k-config b/config/p10k-config new file mode 100644 index 0000000..6a9360a --- /dev/null +++ b/config/p10k-config @@ -0,0 +1,199 @@ +# Generated by Powerlevel10k configuration wizard on 2024-12-04 at 03:24 PST. +# Based on romkatv/powerlevel10k/config/p10k-pure.zsh, checksum 07533. +# Wizard options: nerdfont-v3 + powerline, large icons, pure, snazzy, 2 lines, sparse, +# transient_prompt, instant_prompt=quiet. +# Type `p10k configure` to generate another config. +# +# Config file for Powerlevel10k with the style of Pure (https://github.com/sindresorhus/pure). +# +# Differences from Pure: +# +# - Git: +# - `@c4d3ec2c` instead of something like `v1.4.0~11` when in detached HEAD state. +# - No automatic `git fetch` (the same as in Pure with `PURE_GIT_PULL=0`). +# +# Apart from the differences listed above, the replication of Pure prompt is exact. This includes +# even the questionable parts. For example, just like in Pure, there is no indication of Git status +# being stale; prompt symbol is the same in command, visual and overwrite vi modes; when prompt +# doesn't fit on one line, it wraps around with no attempt to shorten it. +# +# If you like the general style of Pure but not particularly attached to all its quirks, type +# `p10k configure` and pick "Lean" style. This will give you slick minimalist prompt while taking +# advantage of Powerlevel10k features that aren't present in Pure. + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return + + # Prompt colors. + local grey='242' + local red='#FF5C57' + local yellow='#F3F99D' + local blue='#57C7FF' + local magenta='#FF6AC1' + local cyan='#9AEDFE' + local white='#F1F1F0' + + # Left prompt segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + context # user@host + dir # current directory + vcs # git status + command_execution_time # previous command duration + # =========================[ Line #2 ]========================= + newline # \n + virtualenv # python virtual environment + prompt_char # prompt symbol + ) + + # Right prompt segments. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + # command_execution_time # previous command duration + # virtualenv # python virtual environment + # context # user@host + # time # current time + # =========================[ Line #2 ]========================= + newline # \n + ) + + # Basic style options that define the overall prompt look. + typeset -g POWERLEVEL9K_BACKGROUND= # transparent background + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol + typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION= # no segment icons + + # Add an empty line before each prompt except the first. This doesn't emulate the bug + # in Pure that makes prompt drift down whenever you use the Alt-C binding from fzf or similar. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true + + # Magenta prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS}_FOREGROUND=$magenta + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS}_FOREGROUND=$red + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode is the same as in command mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='❮' + # Prompt symbol in overwrite vi mode is the same as in command mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=false + + # Grey Python Virtual Environment. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=$grey + # Don't show Python version. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + + # Blue current directory. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=$blue + + # Context format when root: user@host. The first part white, the rest grey. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE="%F{$white}%n%f%F{$grey}@%m%f" + # Context format when not root: user@host. The whole thing grey. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE="%F{$grey}%n@%m%f" + # Don't show context unless root or in SSH. + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_CONTENT_EXPANSION= + + # Show previous command duration only if it's >= 5s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=5 + # Don't show fractional seconds. Thus, 7s rather than 7.3s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Yellow previous command duration. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=$yellow + + # Grey Git prompt. This makes stale prompts indistinguishable from up-to-date ones. + typeset -g POWERLEVEL9K_VCS_FOREGROUND=$grey + + # Disable async loading indicator to make directories that aren't Git repositories + # indistinguishable from large Git repositories without known state. + typeset -g POWERLEVEL9K_VCS_LOADING_TEXT= + + # Don't wait for Git status even for a millisecond, so that prompt always updates + # asynchronously when Git state changes. + typeset -g POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS=0 + + # Cyan ahead/behind arrows. + typeset -g POWERLEVEL9K_VCS_{INCOMING,OUTGOING}_CHANGESFORMAT_FOREGROUND=$cyan + # Don't show remote branch, current tag or stashes. + typeset -g POWERLEVEL9K_VCS_GIT_HOOKS=(vcs-detect-changes git-untracked git-aheadbehind) + # Don't show the branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= + # When in detached HEAD state, show @commit where branch normally goes. + typeset -g POWERLEVEL9K_VCS_COMMIT_ICON='@' + # Don't show staged, unstaged, untracked indicators. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED}_ICON= + # Show '*' when there are staged, unstaged or untracked files. + typeset -g POWERLEVEL9K_VCS_DIRTY_ICON='*' + # Show '⇣' if local branch is behind remote. + typeset -g POWERLEVEL9K_VCS_INCOMING_CHANGES_ICON=':⇣' + # Show '⇡' if local branch is ahead of remote. + typeset -g POWERLEVEL9K_VCS_OUTGOING_CHANGES_ICON=':⇡' + # Don't show the number of commits next to the ahead/behind arrows. + typeset -g POWERLEVEL9K_VCS_{COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=1 + # Remove space between '⇣' and '⇡' and all trailing spaces. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${${${P9K_CONTENT/⇣* :⇡/⇣⇡}// }//:/ }' + + # Grey current time. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=$grey + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands rather than the end times of + # their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/config/spacemacs b/config/spacemacs new file mode 100644 index 0000000..f57d23b --- /dev/null +++ b/config/spacemacs @@ -0,0 +1,542 @@ +;; -*- mode: emacs-lisp; lexical-binding: t -*- +;; This file is loaded by Spacemacs at startup. +;; It must be stored in your home directory. + +(defun dotspacemacs/layers () + "Layer configuration: +This function should only modify configuration layer settings." + (setq-default + dotspacemacs-distribution 'spacemacs + dotspacemacs-enable-lazy-installation 'unused + dotspacemacs-ask-for-lazy-installation t + + ;; List of additional paths where to look for configuration layers. + ;; Paths must have a trailing slash (i.e. "~/.mycontribs/") + dotspacemacs-configuration-layer-path '() + dotspacemacs-configuration-layers + '(yaml + html + shell-scripts + + ;; Spacemacs + spacemacs-project + spacemacs-defaults + spacemacs-org + spacemacs-evil + + ;; Fonts + emoji + unicode-fonts + + ;; editing + better-defaults + compleseus + auto-completion + multiple-cursors + prettier + + ;; tools + pdf + git + (shell :variables + shell-default-shell 'vterm + shell-default-term-shell "/home/dpv/.nix-profile/bin/zsh" + spacemacs-vterm-history-file-location "~/.local/share/zsh/zsh_history") + + ;; apps + hackernews + + ;; development + (lsp :variables + lsp-headerline-breadcrumb-enable nil) + emacs-lisp + c-c++ + lua + go + php + react + markdown + (python :variables python-backend 'lsp python-lsp-server 'pyright) + (javascript :variables + javascript-backend 'lsp) + (typescript :variables + typescript-backend 'lsp) + (docker :variables + docker-dockerfile-backend 'lsp) + + ;; Custom + dat-utils + dat-tabs + dat-notetaking + dat-emms) + + dotspacemacs-additional-packages '(doom-themes org-modern persistent-scratch autothemer) + + ;; A list of packages that cannot be updated. + dotspacemacs-frozen-packages '() + + ;; A list of packages that will not be installed and loaded. + dotspacemacs-excluded-packages + '(vi-tilde-fringe) + + ;; Defines the behaviour of Spacemacs when installing packages. + ;; Possible values are `used-only', `used-but-keep-unused' and `all'. + ;; `used-only' installs only explicitly used packages and deletes any unused + ;; packages as well as their unused dependencies. `used-but-keep-unused' + ;; installs only the used packages but won't delete unused ones. `all' + ;; installs *all* packages supported by Spacemacs and never uninstalls them. + ;; (default is `used-only') + dotspacemacs-install-packages 'used-only)) + +(defun dotspacemacs/init () + "Initialization: +This function is called at the very beginning of Spacemacs startup, +before layer configuration. +It should only modify the values of Spacemacs settings." + ;; This setq-default sexp is an exhaustive list of all the supported + ;; spacemacs settings. + (setq-default + ;; If non-nil then enable support for the portable dumper. You'll need to + ;; compile Emacs 27 from source following the instructions in file + ;; EXPERIMENTAL.org at to root of the git repository. + ;; + ;; WARNING: pdumper does not work with Native Compilation, so it's disabled + ;; regardless of the following setting when native compilation is in effect. + ;; + ;; (default nil) + dotspacemacs-enable-emacs-pdumper nil + + ;; Name of executable file pointing to emacs 27+. This executable must be + ;; in your PATH. + ;; (default "emacs") + dotspacemacs-emacs-pdumper-executable-file "emacs" + + ;; Name of the Spacemacs dump file. This is the file will be created by the + ;; portable dumper in the cache directory under dumps sub-directory. + ;; To load it when starting Emacs add the parameter `--dump-file' + ;; when invoking Emacs 27.1 executable on the command line, for instance: + ;; ./emacs --dump-file=$HOME/.emacs.d/.cache/dumps/spacemacs-27.1.pdmp + ;; (default (format "spacemacs-%s.pdmp" emacs-version)) + dotspacemacs-emacs-dumper-dump-file (format "spacemacs-%s.pdmp" emacs-version) + + ;; Maximum allowed time in seconds to contact an ELPA repository. + ;; (default 5) + dotspacemacs-elpa-timeout 5 + + ;; Set `gc-cons-threshold' and `gc-cons-percentage' when startup finishes. + ;; This is an advanced option and should not be changed unless you suspect + ;; performance issues due to garbage collection operations. + ;; (default '(100000000 0.1)) + dotspacemacs-gc-cons '(100000000 0.1) + + ;; Set `read-process-output-max' when startup finishes. + ;; This defines how much data is read from a foreign process. + ;; Setting this >= 1 MB should increase performance for lsp servers + ;; in emacs 27. + ;; (default (* 1024 1024)) + dotspacemacs-read-process-output-max (* 1024 1024) + + ;; If non-nil then Spacelpa repository is the primary source to install + ;; a locked version of packages. If nil then Spacemacs will install the + ;; latest version of packages from MELPA. Spacelpa is currently in + ;; experimental state please use only for testing purposes. + ;; (default nil) + dotspacemacs-use-spacelpa nil + + ;; If non-nil then verify the signature for downloaded Spacelpa archives. + ;; (default t) + dotspacemacs-verify-spacelpa-archives t + + ;; If non-nil then spacemacs will check for updates at startup + ;; when the current branch is not `develop'. Note that checking for + ;; new versions works via git commands, thus it calls GitHub services + ;; whenever you start Emacs. (default nil) + dotspacemacs-check-for-update nil + + ;; If non-nil, a form that evaluates to a package directory. For example, to + ;; use different package directories for different Emacs versions, set this + ;; to `emacs-version'. (default 'emacs-version) + dotspacemacs-elpa-subdirectory 'emacs-version + + ;; One of `vim', `emacs' or `hybrid'. + ;; `hybrid' is like `vim' except that `insert state' is replaced by the + ;; `hybrid state' with `emacs' key bindings. The value can also be a list + ;; with `:variables' keyword (similar to layers). Check the editing styles + ;; section of the documentation for details on available variables. + ;; (default 'vim) + dotspacemacs-editing-style 'vim + + ;; If non-nil show the version string in the Spacemacs buffer. It will + ;; appear as (spacemacs version)@(emacs version) + ;; (default t) + dotspacemacs-startup-buffer-show-version t + dotspacemacs-startup-banner 'official + dotspacemacs-startup-banner-scale 'auto + dotspacemacs-startup-lists '((recents . 5) + (projects . 7)) + dotspacemacs-startup-buffer-responsive t + dotspacemacs-show-startup-list-numbers t + dotspacemacs-startup-buffer-multi-digit-delay 0.4 + dotspacemacs-startup-buffer-show-icons nil + + ;; Default major mode for a new empty buffer. Possible values are mode + ;; names such as `text-mode'; and `nil' to use Fundamental mode. + ;; (default `text-mode') + dotspacemacs-new-empty-buffer-major-mode 'text-mode + + ;; Default major mode of the scratch buffer (default `text-mode') + dotspacemacs-scratch-mode 'text-mode + + ;; If non-nil, *scratch* buffer will be persistent. Things you write down in + ;; *scratch* buffer will be saved and restored automatically. + dotspacemacs-scratch-buffer-persistent nil + + ;; If non-nil, `kill-buffer' on *scratch* buffer + ;; will bury it instead of killing. + dotspacemacs-scratch-buffer-unkillable nil + + ;; Initial message in the scratch buffer, such as "Welcome to Spacemacs!" + ;; (default nil) + dotspacemacs-initial-scratch-message nil + + ;; List of themes, the first of the list is loaded when spacemacs starts. + ;; Press `SPC T n' to cycle to the next theme in the list (works great + ;; with 2 themes variants, one dark and one light). A theme from external + ;; package can be defined with `:package', or a theme can be defined with + ;; `:location' to download the theme package, refer the themes section in + ;; DOCUMENTATION.org for the full theme specifications. + dotspacemacs-themes '(doom-dracula + modus-operandi-deuteranopia) + + ;; Set the theme for the Spaceline. Supported themes are `spacemacs', + ;; `all-the-icons', `custom', `doom', `vim-powerline' and `vanilla'. The + ;; first three are spaceline themes. `doom' is the doom-emacs mode-line. + ;; `vanilla' is default Emacs mode-line. `custom' is a user defined themes, + ;; refer to the DOCUMENTATION.org for more info on how to create your own + ;; spaceline theme. Value can be a symbol or list with additional properties. + ;; (default '(spacemacs :separator wave :separator-scale 1.5)) + dotspacemacs-mode-line-theme 'doom + + ;; If non-nil the cursor color matches the state color in GUI Emacs. + ;; (default t) + dotspacemacs-colorize-cursor-according-to-state t + + ;; Default font or prioritized list of fonts. This setting has no effect when + ;; running Emacs in terminal. The font set here will be used for default and + ;; fixed-pitch faces. The `:size' can be specified as + ;; a non-negative integer (pixel size), or a floating-point (point size). + ;; Point size is recommended, because it's device independent. (default 10.0) + dotspacemacs-default-font '("Iosevka Nerd Font" + :size 15.0 + :weight medium) + + dotspacemacs-leader-key "SPC" + dotspacemacs-emacs-command-key "SPC" + dotspacemacs-ex-command-key ":" + dotspacemacs-emacs-leader-key "M-m" + dotspacemacs-major-mode-leader-key "," + dotspacemacs-major-mode-emacs-leader-key (if window-system "" "C-M-m") + + dotspacemacs-distinguish-gui-tab nil + dotspacemacs-default-layout-name "Default" + dotspacemacs-display-default-layout nil + dotspacemacs-auto-resume-layouts nil + dotspacemacs-auto-generate-layout-names nil + + dotspacemacs-large-file-size 1 + dotspacemacs-auto-save-file-location 'cache + dotspacemacs-max-rollback-slots 5 + dotspacemacs-enable-paste-transient-state nil + + dotspacemacs-which-key-delay 0.4 + + ;; Which-key frame position. Possible values are `right', `bottom' and + ;; `right-then-bottom'. right-then-bottom tries to display the frame to the + ;; right; if there is insufficient space it displays it at the bottom. + ;; It is also possible to use a posframe with the following cons cell + ;; `(posframe . position)' where position can be one of `center', + ;; `top-center', `bottom-center', `top-left-corner', `top-right-corner', + ;; `top-right-corner', `bottom-left-corner' or `bottom-right-corner' + ;; (default 'bottom) + dotspacemacs-which-key-position 'bottom + + ;; Control where `switch-to-buffer' displays the buffer. If nil, + ;; `switch-to-buffer' displays the buffer in the current window even if + ;; another same-purpose window is available. If non-nil, `switch-to-buffer' + ;; displays the buffer in a same-purpose window even if the buffer can be + ;; displayed in the current window. (default nil) + dotspacemacs-switch-to-buffer-prefers-purpose nil + + ;; Whether side windows (such as those created by treemacs or neotree) + ;; are kept or minimized by `spacemacs/toggle-maximize-window' (SPC w m). + ;; (default t) + dotspacemacs-maximize-window-keep-side-windows t + + ;; If nil, no load-hints enabled. If t, enable the `load-hints' which will + ;; put the most likely path on the top of `load-path' to reduce walking + ;; through the whole `load-path'. It's an experimental feature to speedup + ;; Spacemacs on Windows. Refer the FAQ.org "load-hints" session for details. + dotspacemacs-enable-load-hints nil + + ;; If t, enable the `package-quickstart' feature to avoid full package + ;; loading, otherwise no `package-quickstart' attemption (default nil). + ;; Refer the FAQ.org "package-quickstart" section for details. + dotspacemacs-enable-package-quickstart nil + dotspacemacs-loading-progress-bar nil + dotspacemacs-fullscreen-at-startup nil + dotspacemacs-fullscreen-use-non-native nil + dotspacemacs-maximized-at-startup t + + ;; If non-nil the frame is undecorated when Emacs starts up. Combine this + ;; variable with `dotspacemacs-maximized-at-startup' to obtain fullscreen + ;; without external boxes. Also disables the internal border. (default nil) + dotspacemacs-undecorated-at-startup nil + + ;; A value from the range (0..100), in increasing opacity, which describes + ;; the transparency level of a frame when it's active or selected. + ;; Transparency can be toggled through `toggle-transparency'. (default 90) + dotspacemacs-active-transparency 90 + + ;; A value from the range (0..100), in increasing opacity, which describes + ;; the transparency level of a frame when it's inactive or deselected. + ;; Transparency can be toggled through `toggle-transparency'. (default 90) + dotspacemacs-inactive-transparency 70 + + ;; A value from the range (0..100), in increasing opacity, which describes the + ;; transparency level of a frame background when it's active or selected. Transparency + ;; can be toggled through `toggle-background-transparency'. (default 90) + dotspacemacs-background-transparency 90 + + ;; If non-nil show the titles of transient states. (default t) + dotspacemacs-show-transient-state-title t + + ;; If non-nil show the color guide hint for transient state keys. (default t) + dotspacemacs-show-transient-state-color-guide t + + ;; If non-nil unicode symbols are displayed in the mode line. + ;; If you use Emacs as a daemon and wants unicode characters only in GUI set + ;; the value to quoted `display-graphic-p'. (default t) + dotspacemacs-mode-line-unicode-symbols t + dotspacemacs-smooth-scrolling t + dotspacemacs-scroll-bar-while-scrolling nil + + dotspacemacs-line-numbers '(:relative t :size-limit-kb 1000) + dotspacemacs-folding-method 'evil + dotspacemacs-smartparens-strict-mode nil + + ;; If non-nil smartparens-mode will be enabled in programming modes. + ;; (default t) + dotspacemacs-activate-smartparens-mode t + + ;; If non-nil pressing the closing parenthesis `)' key in insert mode passes + ;; over any automatically added closing parenthesis, bracket, quote, etc... + ;; This can be temporary disabled by pressing `C-q' before `)'. (default nil) + dotspacemacs-smart-closing-parenthesis nil + + ;; Select a scope to highlight delimiters. Possible values are `any', + ;; `current', `all' or `nil'. Default is `all' (highlight any scope and + ;; emphasis the current one). (default 'all) + dotspacemacs-highlight-delimiters 'all + + ;; If non-nil, start an Emacs server if one is not already running. + ;; (default nil) + dotspacemacs-enable-server nil + + ;; Set the emacs server socket location. + ;; If nil, uses whatever the Emacs default is, otherwise a directory path + ;; like \"~/.emacs.d/server\". It has no effect if + ;; `dotspacemacs-enable-server' is nil. + ;; (default nil) + dotspacemacs-server-socket-dir nil + + ;; If non-nil, advise quit functions to keep server open when quitting. + ;; (default nil) + dotspacemacs-persistent-server nil + + ;; List of search tool executable names. Spacemacs uses the first installed + ;; tool of the list. Supported tools are `rg', `ag', `pt', `ack' and `grep'. + ;; (default '("rg" "ag" "pt" "ack" "grep")) + dotspacemacs-search-tools '("rg" "ag" "pt" "ack" "grep") + + ;; The backend used for undo/redo functionality. Possible values are + ;; `undo-fu', `undo-redo' and `undo-tree' see also `evil-undo-system'. + ;; Note that saved undo history does not get transferred when changing + ;; your undo system. The default is currently `undo-fu' as `undo-tree' + ;; is not maintained anymore and `undo-redo' is very basic." + dotspacemacs-undo-system 'undo-fu + dotspacemacs-frame-title-format "%F - %a" + dotspacemacs-icon-title-format nil + dotspacemacs-show-trailing-whitespace t + dotspacemacs-whitespace-cleanup nil + dotspacemacs-use-clean-aindent-mode t + dotspacemacs-use-SPC-as-y nil + dotspacemacs-swap-number-row nil + dotspacemacs-zone-out-when-idle nil + dotspacemacs-pretty-docs nil + dotspacemacs-home-shorten-agenda-source nil + dotspacemacs-byte-compile nil)) + +(defun dotspacemacs/user-env () + (spacemacs/load-spacemacs-env)) + +(defun dotspacemacs/user-init () + ;; (add-to-list 'custom-theme-load-path "~/.emacs.d/private/themes/") + (setq-default git-magit-status-fullscreen t)) + +(defun dotspacemacs/user-load ()) + +(defun dotspacemacs/user-config () + ;; Custom functions + (setq-default indent-tabs-mode t) + (setq-default tab-width 4) + (defvaralias 'c-basic-offset 'tab-width) + + (setq initial-buffer-choice (lambda () (get-buffer "*scratch*"))) + + (tab-bar-mode -1) + + ;; Configure packages + (with-eval-after-load 'projectile + (setq projectile-project-search-path '("~/dev" "~/dev/gitlab") + projectile-require-project-root nil)) + + (with-eval-after-load 'doom-modeline + (setq doom-modeline-icon nil)) + + ;; Enable truncating lines + (add-hook 'hack-local-variables-hook #'spacemacs/toggle-truncate-lines-on) + + ;; More themes + (use-package doom-themes + :ensure t + :config + (setq doom-themes-enable-bold t + doom-themes-enable-italic t) + (doom-themes-org-config)) + + ;; Cleaning up Dired + (setf dired-kill-when-opening-new-dired-buffer t) + (add-hook 'dired-mode-hook #'dired-hide-details-mode) + + ;; Evil collection + (with-eval-after-load 'emms (evil-collection-emms-setup)) + (with-eval-after-load 'pdf-view (evil-collection-pdf-setup)) + (with-eval-after-load 'ibuffer (evil-collection-ibuffer-setup)) + + ;; Custom keybinds + (spacemacs/set-leader-keys "ks" 'nil) + (spacemacs/set-leader-keys "ks" 'bookmark-set) + (spacemacs/set-leader-keys "kv" 'bookmark-save) + (spacemacs/set-leader-keys "pp" (lambda () + (interactive) + (dat-tabs/create-project-tab) + (tab-bar-mode -1))) + (spacemacs/set-leader-keys "gd" 'magit-status) + (define-key evil-normal-state-map (kbd "C-`") 'spacemacs/shell-pop-vterm) + (spacemacs/set-leader-keys "l" nil) + (spacemacs/set-leader-keys "ld" 'consult-lsp-diagnostics)) + + +;; Do not write anything past this comment. This is where Emacs will +;; auto-generate custom variable definitions. +(defun dotspacemacs/emacs-custom-settings () + "Emacs custom settings. +This is an auto-generated function, do not modify its content directly, use +Emacs customize menu instead. +This function is called at the very end of Spacemacs initialization." + (custom-set-variables + ;; custom-set-variables was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + '(custom-safe-themes + '("bbb13492a15c3258f29c21d251da1e62f1abb8bbd492386a673dcfab474186af" default)) + '(ignored-local-variable-values '((origami-fold-style . triple-braces))) + '(package-selected-packages + '(ac-php-core ace-jump-helm-line ace-link add-node-modules-path + aggressive-indent all-the-icons auto-compile + auto-highlight-symbol auto-yasnippet bui catppuccin-theme + centaur-tabs centered-cursor-mode clean-aindent-mode closql + code-cells column-enforce-mode company company-c-headers + company-emoji company-php company-phpactor company-shell + company-web compleseus-spacemacs-help composer consult + consult-lsp consult-yasnippet counsel counsel-css + cpp-auto-include cython-mode dap-mode define-word devdocs + diminish dired-quick-sort disable-mouse disaster dotenv-mode + drag-stuff drupal-mode dumb-jump eat edit-indirect elisp-def + elisp-demos elisp-slime-nav emacsql embark embark-consult + emmet-mode emoji-cheat-sheet-plus emr esh-help + eshell-prompt-extras eshell-z eval-sexp-fu evil-anzu evil-args + evil-cleverparens evil-collection evil-easymotion evil-escape + evil-evilified-state evil-exchange evil-goggles + evil-iedit-state evil-indent-plus evil-lion evil-lisp-state + evil-matchit evil-mc evil-nerd-commenter evil-numbers + evil-surround evil-textobj-line evil-tutor evil-unimpaired + evil-visual-mark-mode evil-visualstar expand-region eyebrowse + fancy-battery fish-mode flycheck flycheck-bashate flycheck-elsa + flycheck-package flycheck-pos-tip font-utils forge geben + gendoxy ggtags gh-md ghub git-link git-messenger git-modes + git-timemachine gitignore-templates go-eldoc go-fill-struct + go-gen-test go-guru go-impl go-mode go-rename go-tag godoctor + golden-ratio google-c-style google-translate haml-mode helm + helm-ag helm-comint helm-core helm-css-scss helm-descbinds + helm-git-grep helm-ls-git helm-make helm-mode-manager helm-org + helm-projectile helm-purpose helm-swoop helm-themes helm-xref + hide-comnt highlight-indentation highlight-numbers + highlight-parentheses hl-todo holy-mode htmlize hungry-delete + hybrid-mode impatient-mode indent-guide info+ insert-shebang + inspector ivy js-doc js2-mode js2-refactor json-mode + json-navigator json-reformat json-snatcher link-hint + live-py-mode livid-mode llama load-env-vars lorem-ipsum + lsp-docker lsp-mode lsp-origami lsp-pyright lsp-treemacs lsp-ui + lua-mode macrostep magit magit-section marginalia markdown-mode + markdown-toc multi-line multi-term multi-vterm multiple-cursors + mwim nameless nerd-icons nodejs-repl npm-mode open-junk-file + orderless org-superstar origami overseer package-lint paradox + password-generator pcache pcre2el pdf-tools pdf-view-restore + persistent-scratch persistent-soft php-auto-yasnippets + php-extras php-mode php-runtime phpactor phpunit + pip-requirements pipenv pippel poetry popwin pos-tip powerline + prettier-js pug-mode py-isort pydoc pyenv-mode pylookup pytest + pythonic pyvenv quickrun rainbow-delimiters reformatter request + restart-emacs rjsx-mode sass-mode scss-mode shell-pop shfmt + simple-httpd skewer-mode slim-mode smeargle space-doc spaceline + spacemacs-purpose-popwin spacemacs-whitespace-cleanup + sphinx-doc string-edit-at-point string-inflection swiper + symbol-overlay symon tablist tagedit term-cursor terminal-here + toc-org transient treemacs-evil treemacs-icons-dired + treemacs-magit treemacs-persp treemacs-projectile treepy + typescript-mode ucs-utils undo-fu undo-fu-session unfill + unicode-fonts uuidgen vertico vi-tilde-fringe + volatile-highlights vterm vundo web-beautify + web-completion-data web-mode wfnames wgrep winum with-editor + writeroom-mode ws-butler xcscope yaml yasnippet + yasnippet-snippets)) + '(safe-local-variable-values + '((js2-basic-offset . 2) (web-mode-indent-style . 2) + (web-mode-block-padding . 2) (web-mode-script-padding . 2) + (web-mode-style-padding . 2) (typescript-backend . tide) + (typescript-backend . lsp) (javascript-backend . tide) + (javascript-backend . tern) (javascript-backend . lsp)))) + (custom-set-faces + ;; custom-set-faces was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + ;; '(company-tooltip-selection ((t (:background "#ffffff" :foreground "#43242B" :weight bold)))) + ;; '(dired-directory ((t (:inherit bold :background "#1f1f28" :foreground "#4f97d7")))) + ;; '(font-lock-comment-face ((t (:foreground "#727169" :background "#1f1f28" :slant italic)))) + ;; '(minibuffer-prompt ((t (:inherit bold :background "#1f1f28" :foreground "#E6C384")))) + '(org-block ((t (:inherit shadow :extend t :background "#010F1D")))) + '(org-block-begin-line ((t (:inherit org-meta-line :extend t :background "#1f1f28" :foreground "#7FB4CA" :slant italic)))) + '(org-block-end-line ((t (:inherit org-meta-line :extend t :background "#1f1f28" :foreground "#FF5D62" :slant italic)))) + '(org-level-1 ((t (:inherit outline-1 :height 1.7)))) + '(org-level-2 ((t (:inherit outline-2 :height 1.5)))) + '(org-level-3 ((t (:inherit outline-3 :height 1.3)))) + '(org-level-4 ((t (:inherit outline-4 :height 1.2)))) + '(org-level-5 ((t (:inherit outline-5 :height 1.1)))) + '(org-level-6 ((t (:inherit outline-6 :height 1.1)))) + '(org-level-7 ((t (:inherit outline-7 :height 1.1)))) + '(org-level-8 ((t (:inherit outline-8 :height 1.1)))) + '(org-level-9 ((t (:inherit outline-9 :height 1.1))))) + ) diff --git a/config/zathurarc b/config/zathurarc new file mode 100644 index 0000000..832cb77 --- /dev/null +++ b/config/zathurarc @@ -0,0 +1,77 @@ +map i recolor +map h navigate previous +map l navigate next +map navigate previous +map navigate next +map J zoom out +map K zoom in + +set font "Iosudo Bold 10" + +set window-height 3000 +set window-width 3000 +set window-title-basename true +set window-title-page true + +set adjust-open "width" + +set selection-clipboard clipboard +set selection-notification false + +set statusbar-basename true + +set guioptions n + +set scroll-page-aware true + +set scroll-full-overlap 0.01 + +set scroll-step 100 + +####### COLOR SCHEME ####### +set notification-error-bg rgba(255,85,85,1) # Red +set notification-error-fg rgba(248,248,242,1) # Foreground +set notification-warning-bg rgba(255,184,108,1) # Orange +set notification-warning-fg rgba(68,71,90,1) # Selection +set notification-bg rgba(40,42,54,1) # Background +set notification-fg rgba(248,248,242,1) # Foreground + +set completion-bg rgba(40,42,54,1) # Background +set completion-fg rgba(98,114,164,1) # Comment +set completion-group-bg rgba(40,42,54,1) # Background +set completion-group-fg rgba(98,114,164,1) # Comment +set completion-highlight-bg rgba(68,71,90,1) # Selection +set completion-highlight-fg rgba(248,248,242,1) # Foreground + +set index-bg rgba(40,42,54,1) # Background +set index-fg rgba(248,248,242,1) # Foreground +set index-active-bg rgba(68,71,90,1) # Current Line +set index-active-fg rgba(248,248,242,1) # Foreground + +set inputbar-bg rgba(40,42,54,1) # Background +set inputbar-fg rgba(248,248,242,1) # Foreground +set statusbar-bg rgba(40,42,54,1) # Background +set statusbar-fg rgba(248,248,242,1) # Foreground + +set highlight-color rgba(255,184,108,0.5) # Orange +set highlight-active-color rgba(255,121,198,0.5) # Pink + +set default-bg rgba(40,42,54,1) # Background +set default-fg rgba(248,248,242,1) # Foreground + +set render-loading true +set render-loading-fg rgba(40,42,54,1) # Background +set render-loading-bg rgba(248,248,242,1) # Foreground + +# +# Recolor mode settings +# + +set recolor-lightcolor rgba(40,42,54,1) # Background +set recolor-darkcolor rgba(248,248,242,1) # Foreground + +# +# Startup options +# +set adjust-open width +# set recolor true diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..2f973ae --- /dev/null +++ b/flake.lock @@ -0,0 +1,91 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1747688838, + "narHash": "sha256-FZq4/3OtGV/cti9Vccsy2tGSUrxTO4hkDF9oeGRTen4=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "45c2985644b60ab64de2a2d93a4d132ecb87cf66", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "zen-browser", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1747565775, + "narHash": "sha256-B6jmKHUEX1jxxcdoYHl7RVaeohtAVup8o3nuVkzkloA=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "97118a310eb8e13bc1b9b12d67267e55b7bee6c8", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1747542820, + "narHash": "sha256-GaOZntlJ6gPPbbkTLjbd8BMWaDYafhuuYRNrxCGnPJw=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "292fa7d4f6519c074f0a50394dbbe69859bb6043", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "nixpkgs": "nixpkgs", + "zen-browser": "zen-browser" + } + }, + "zen-browser": { + "inputs": { + "home-manager": "home-manager_2", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1747658502, + "narHash": "sha256-7SunK8XumGZz+ITBmOMVEHqrCFtP0hAyydftLkXqnw0=", + "owner": "0xc000022070", + "repo": "zen-browser-flake", + "rev": "d4005e943d4276023fb81d598811c9ab04d141d0", + "type": "github" + }, + "original": { + "owner": "0xc000022070", + "repo": "zen-browser-flake", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..41ddd95 --- /dev/null +++ b/flake.nix @@ -0,0 +1,29 @@ +{ + description = "Dat's flake"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + zen-browser = { + url = "github:0xc000022070/zen-browser-flake"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { self, nixpkgs, ... } @ inputs: + { + nixosConfigurations = { + datNix = nixpkgs.lib.nixosSystem { + specialArgs = { + inherit inputs; + }; + modules = [ + ./system/configuration.nix + ]; + }; + }; + }; +} diff --git a/misc/camera.desktop b/misc/camera.desktop new file mode 100755 index 0000000..6566b94 --- /dev/null +++ b/misc/camera.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=MPV Camera +Icon=camera +Exec=mpv av://v4l2:/dev/video0 --profile=low-latency --untimed --no-osc --cache=no --profile=low-latency +Comment=Camera App Using MPV +Terminal=false +StartupWMClass=cheese diff --git a/misc/nsxiv.desktop b/misc/nsxiv.desktop new file mode 100644 index 0000000..01ae286 --- /dev/null +++ b/misc/nsxiv.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Type=Application +Name=nsxiv +GenericName=Image Viewer +Exec=nsxiv -ab %F +MimeType=image/bmp;image/gif;image/jpeg;image/jpg;image/png;image/tiff;image/x-bmp;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-tga;image/x-xpixmap;image/webp;image/heic;image/svg+xml;application/postscript;image/jp2;image/jxl;image/avif;image/heif; +NoDisplay=true +Icon=nsxiv diff --git a/system/audio.nix b/system/audio.nix new file mode 100644 index 0000000..6d4f310 --- /dev/null +++ b/system/audio.nix @@ -0,0 +1,12 @@ +{ + services = { + pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + + pulseaudio.enable = false; + }; +} diff --git a/system/boot.nix b/system/boot.nix new file mode 100644 index 0000000..f8878f3 --- /dev/null +++ b/system/boot.nix @@ -0,0 +1,23 @@ +{ + boot = { + loader = { + systemd-boot.enable = false; + efi.canTouchEfiVariables = false; + efi.efiSysMountPoint = "/boot"; + grub = { + efiSupport = true; + efiInstallAsRemovable = true; + extraEntriesBeforeNixOS = false; + configurationLimit = 8; + device = "nodev"; + extraEntries = '' + menuentry "Windows 10" { + search --fs-uuid --no-floppy --set=root E00B-A178 + chainloader ($root)/EFI/Microsoft/Boot/bootmgfw.efi + } + ''; + }; + }; + supportedFilesystems = [ "ntfs" ]; + }; +} diff --git a/system/configuration.nix b/system/configuration.nix new file mode 100644 index 0000000..2ecebc2 --- /dev/null +++ b/system/configuration.nix @@ -0,0 +1,147 @@ +{ pkgs, inputs, options, ... }: + +{ + imports = [ # Include the results of the hardware scan. + ./hardware-configuration.nix + ./boot.nix + ./filesystems.nix + ./flatpak.nix + ./audio.nix + ./devtools.nix + ./fontconfig.nix + ./localisation.nix + inputs.home-manager.nixosModules.home-manager + ]; + + ### NETWORKING + networking = { + hostName = "dpv"; + networkmanager.enable = true; + timeServers = options.networking.timeServers.default ++ [ "time.google.com" ]; + }; + + ### SERVICES + services = { + xserver = { + enable = true; + + displayManager.lightdm.enable = true; + desktopManager.cinnamon.enable = true; + + xkb.layout = "us"; + xkb.variant = ""; + }; + + ntp.enable = true; + + ## Daemons + printing.enable = true; + openssh.enable = true; + + ### Clipboard + greenclip = { + enable = true; + package = pkgs.haskellPackages.greenclip; + }; + + envfs.enable = true; + gvfs.enable = true; + tumbler.enable = true; + }; + + xdg.portal = { + extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + config.common.default = "gtk"; + }; + + ### HARDWARE + hardware = { + graphics = { + enable = true; + extraPackages = with pkgs; [ intel-media-driver ]; + }; + }; + + ### SECURITY + security.rtkit.enable = true; + + ### USERS + users = { + groups.libvirtd.members = [ "dpv" ]; + users.dpv = { + isNormalUser = true; + description = "dpv"; + extraGroups = [ "networkmanager" "wheel" "libvirtd" ]; + shell = pkgs.zsh; + packages = [ ]; + }; + }; + + ### PROGRAMS + programs = { + firefox.enable = false; + ssh.startAgent = true; + zsh.enable = true; + xfconf.enable = true; + thunar = { + enable = true; + plugins = [ + pkgs.xfce.thunar-archive-plugin + pkgs.xfce.thunar-volman + pkgs.xfce.thunar-media-tags-plugin + ]; + }; + }; + + flatpak.enable = true; + + ### UNFREE PACKAGES + nixpkgs.config.allowUnfree = true; + + ### PACKAGES TO INSTALL IN A SYSTEM + environment.systemPackages = with pkgs; [ + fastfetch btop htop wget fzf ripgrep + obsidian metasploit google-chrome home-manager + xclip sqlite lsd gpick nsxiv pulseaudio + mpc brightnessctl sdcv speedcrunch screenkey bitwarden-desktop + keepassxc rustup gcc gnumake clang-tools nodejs pnpm + imagemagick pandoc nixd dbeaver-bin gdu sl pavucontrol + ffmpeg ffmpegthumbnailer p7zip rar unrar zip unzip dig nix-du + nh graphviz libnotify + + inputs.zen-browser.packages.${pkgs.system}.default + ]; + + ### ENV + environment.variables = { + EDITOR = "nvim"; + }; + + ### DEV + devtools.postgres.enable = true; + devtools.virtualisation.enable = true; + devtools.docker.enable = true; + + ### HOME MANAGER + home-manager = { + extraSpecialArgs = { inherit inputs; }; + users = { + dpv = import ../user/home.nix; + }; + }; + + ### MORE NIX + nix = { + gc = { + automatic = true; + dates = "daily"; + options = "--delete-older-than 10d"; + }; + settings = { + auto-optimise-store = true; + experimental-features = [ "nix-command" "flakes" ]; + }; + }; + + system.stateVersion = "24.11"; +} diff --git a/system/devtools.nix b/system/devtools.nix new file mode 100644 index 0000000..22ca85d --- /dev/null +++ b/system/devtools.nix @@ -0,0 +1,69 @@ +{ config, pkgs, lib, ... }: + +let + inherit (lib) mkOption mkIf mkMerge types; + cfg = config.devtools; +in +{ + options.devtools = { + postgres.enable = mkOption { + default = false; + type = types.bool; + }; + virtualisation.enable = mkOption { + default = false; + type = types.bool; + }; + docker.enable = mkOption { + default = false; + type = types.bool; + }; + }; + + config = { + services.postgresql = { + enable = cfg.postgres.enable; + package = pkgs.postgresql_17; + ensureDatabases = [ "dpv" ]; + ensureUsers = [ + { + name = "dpv"; + ensureDBOwnership = true; + } + ]; + authentication = lib.mkForce '' + # Generated file; do not edit! + # TYPE DATABASE USER ADDRESS METHOD + local all all trust + host all all 127.0.0.1/32 trust + host all all ::1/128 trust + ''; + }; + + virtualisation = mkMerge [ + (mkIf cfg.virtualisation.enable { + libvirtd = { + enable = true; + qemu = { + swtpm.enable = true; + ovmf.enable = true; + ovmf.packages = [ pkgs.OVMFFull.fd ]; + }; + }; + spiceUSBRedirection.enable = true; + }) + + (mkIf cfg.docker.enable { + docker = { + enable = true; + rootless = { + enable = true; + setSocketVariable = true; + }; + }; + }) + ]; + + programs.virt-manager.enable = cfg.virtualisation.enable; + }; +} diff --git a/system/filesystems.nix b/system/filesystems.nix new file mode 100644 index 0000000..5dd7d7a --- /dev/null +++ b/system/filesystems.nix @@ -0,0 +1,14 @@ +{ + fileSystems = { + "/ar1" = { + device = "/dev/disk/by-uuid/AEDEBC24DEBBE2AF"; + fsType = "ntfs-3g"; + options = [ "rw" "uid=1000" ]; + }; + "/win" = { + device = "/dev/disk/by-uuid/DA820CCE820CB155"; + fsType = "ntfs-3g"; + options = [ "rw" "uid=1000" ]; + }; + }; +} diff --git a/system/flatpak.nix b/system/flatpak.nix new file mode 100644 index 0000000..15fc933 --- /dev/null +++ b/system/flatpak.nix @@ -0,0 +1,26 @@ +{ config, pkgs, lib, ... }: + +let + cfg = config.flatpak; +in +{ + options.flatpak = { + enable = lib.mkOption { + default = false; + type = lib.types.bool; + }; + }; + + config = lib.mkIf cfg.enable { + services.flatpak.enable = true; + systemd.services = { + flatpak-repo = { + wantedBy = [ "multi-user.target" ]; + path = [ pkgs.flatpak ]; + script = '' + flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo + ''; + }; + }; + }; +} diff --git a/system/fontconfig.nix b/system/fontconfig.nix new file mode 100644 index 0000000..458fd8c --- /dev/null +++ b/system/fontconfig.nix @@ -0,0 +1,15 @@ +{ pkgs, ... }: +{ + fonts.packages = with pkgs; [ + inter + nerd-fonts.iosevka + nerd-fonts.symbols-only + ]; + fonts.fontconfig = { + defaultFonts = { + serif = [ "Liberation Serif" ]; + sansSerif = [ "Inter" "SF Pro Display" ]; + monospace = [ "Iosevka Nerd Font" ]; + }; + }; +} diff --git a/system/hardware-configuration.nix b/system/hardware-configuration.nix new file mode 100644 index 0000000..844b9ae --- /dev/null +++ b/system/hardware-configuration.nix @@ -0,0 +1,40 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "nvme" "usbhid" "sd_mod" "rtsx_usb_sdmmc" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/740252ff-39d8-416e-8f04-73e837810417"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/A717-5D98"; + fsType = "vfat"; + options = [ "fmask=0077" "dmask=0077" ]; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/33b020e2-7859-49d2-85e4-b0c8a778ab1d"; } + ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.wlo1.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/system/localisation.nix b/system/localisation.nix new file mode 100644 index 0000000..efe8d94 --- /dev/null +++ b/system/localisation.nix @@ -0,0 +1,19 @@ +{ + time.timeZone = "Asia/Manila"; + time.hardwareClockInLocalTime = true; + + i18n = { + defaultLocale = "en_US.UTF-8"; + extraLocaleSettings = { + LC_ADDRESS = "en_US.UTF-8"; + LC_IDENTIFICATION = "en_US.UTF-8"; + LC_MEASUREMENT = "en_US.UTF-8"; + LC_MONETARY = "en_US.UTF-8"; + LC_NAME = "en_US.UTF-8"; + LC_NUMERIC = "en_US.UTF-8"; + LC_PAPER = "en_US.UTF-8"; + LC_TELEPHONE = "en_US.UTF-8"; + LC_TIME = "en_US.UTF-8"; + }; + }; +} diff --git a/user/docs.nix b/user/docs.nix new file mode 100644 index 0000000..82b3f51 --- /dev/null +++ b/user/docs.nix @@ -0,0 +1,44 @@ +{ config, pkgs, lib, ... }: + +let + cfg = config.docs; +in +{ + imports = [ ./subs/sioyek.nix ]; + + options.docs = { + zathura.enable = lib.mkOption { + default = false; + type = lib.types.bool; + }; + sioyek.enable = lib.mkOption { + default = false; + type = lib.types.bool; + }; + libreoffice.enable = lib.mkOption { + default = false; + type = lib.types.bool; + }; + foliate.enable = lib.mkOption { + default = false; + type = lib.types.bool; + }; + }; + + config = { + subs.sioyek.enable = cfg.sioyek.enable; + + programs.zathura = { + enable = cfg.zathura.enable; + extraConfig = builtins.readFile ../config/zathurarc; + }; + + programs.foliate = { + enable = cfg.foliate.enable; + }; + + home.packages = lib.mkIf cfg.libreoffice.enable [ + pkgs.libreoffice-fresh + ]; + }; +} diff --git a/user/editors.nix b/user/editors.nix new file mode 100644 index 0000000..97db205 --- /dev/null +++ b/user/editors.nix @@ -0,0 +1,40 @@ +{ config, lib, ... }: + +let + inherit (lib) mkOption types; + + cfg = config.editors; +in +{ + imports = [ + ./subs/zed.nix + ./subs/neovim.nix + ./subs/emacs.nix + ]; + + options.editors = { + emacs.enable = mkOption { + default = false; + type = types.bool; + }; + neovim.enable = mkOption { + default = false; + type = types.bool; + }; + zed.enable = mkOption { + default = false; + type = types.bool; + }; + vscode.enable = mkOption { + default = false; + type = types.bool; + }; + }; + + config = { + subs.zed.enable = cfg.zed.enable; + subs.neovim.enable = cfg.neovim.enable; + subs.emacs.enable = cfg.emacs.enable; + programs.vscode.enable = cfg.vscode.enable; + }; +} diff --git a/user/home.nix b/user/home.nix new file mode 100644 index 0000000..0938bc7 --- /dev/null +++ b/user/home.nix @@ -0,0 +1,102 @@ +{ config, pkgs, lib, ... }: + +{ + imports = [ + ./shells.nix + ./music.nix + ./theming.nix + ./terminals.nix + ./termtools.nix + ./editors.nix + ./docs.nix + ./utils.nix + ./subs/mpv.nix + ./subs/git.nix + ]; + + nixpkgs.config.allowUnfree = true; + + home = { + username = "dpv"; + homeDirectory = "/home/dpv"; + stateVersion = "24.11"; + }; + + home.packages = with pkgs; [ + qbittorrent yt-dlp typst obs-studio krita + jetbrains.idea-community astro-language-server + basedpyright emmet-language-server lua-language-server + tailwindcss-language-server typescript-language-server + ripcord abaddon netcat-gnu nmap nerd-fonts.jetbrains-mono + nerd-fonts.fira-code + ]; + + home.file = { + ".ideavimrc".source = ../config/ideavimrc; + ".local/bin/books".source = ../bin/books; + ".local/bin/clipboard".source = ../bin/clipboard; + ".local/bin/define".source = ../bin/define; + ".local/bin/keyboard-toggle".source = ../bin/keyboard-toggle; + ".local/bin/show_colors".source = ../bin/show_colors; + ".local/bin/show_def".source = ../bin/show_def; + ".local/bin/stm".source = ../bin/stm; + ".local/bin/tmux-sessionizer".source = ../bin/tmux-sessionizer; + ".local/bin/touchpad-toggle-xinput".source = ../bin/touchpad-toggle-xinput; + ".local/share/applications/camera.desktop".source = ../misc/camera.desktop; + ".local/share/applications/nsxiv.desktop".source = ../misc/nsxiv.desktop; + }; + + home.activation.createDirs = lib.hm.dag.entryAfter [ "writeBoundary" ] '' + mkdir -p "${config.home.homeDirectory}/dev/gitlab" + mkdir -p "${config.home.homeDirectory}/Documents/org" + mkdir -p "${config.home.homeDirectory}/.local/src" + ''; + + ### SESSION ENV + home.sessionPath = [ + "$HOME/.local/bin" + ]; + + home.sessionVariables = { + "GTK_THEME" = "Adwaita:dark"; + }; + + ### DOCK + theming.dock.enable = true; + theming.dock.autostart = true; + + music = { + enable = true; + directory = "/ar1/Music"; + ncmpcpp.enable = true; + rmpc.enable = true; + }; + + editors = { + neovim.enable = true; + emacs.enable = true; + vscode.enable = true; + zed.enable = true; + }; + + terminals.ghostty.enable = true; + terminals.alacritty.enable = true; + + shells.fish.enable = false; + + termtools.tmux.enable = true; + termtools.zoxide.enable = true; + + docs.zathura.enable = true; + docs.sioyek.enable = true; + docs.libreoffice.enable = true; + docs.foliate.enable = true; + + utils.rofi.enable = true; + utils.sxhkd.enable = true; + utils.flameshot.enable = true; + + programs.vesktop.enable = true; + + programs.home-manager.enable = true; +} diff --git a/user/music.nix b/user/music.nix new file mode 100644 index 0000000..1c9668f --- /dev/null +++ b/user/music.nix @@ -0,0 +1,101 @@ +{ config, lib, ... }: + +let + inherit (lib) mkIf mkOption types; + + cfg = config.music; +in +{ + options.music = { + enable = mkOption { + default = false; + type = types.bool; + description = ''Enables MPD server''; + }; + directory = mkOption { + default = "~/Music"; + type = types.str; + description = ''Path to your music directory''; + }; + ncmpcpp.enable = mkOption { + default = false; + type = types.bool; + description = ''Enables NCMPCPP (MPD Client)''; + }; + rmpc.enable = mkOption { + default = false; + type = types.bool; + description = '' + Enables RMPC (Rusty Music Player Client) (another MPD Client) + ''; + }; + }; + + config = { + services.mpd = { + enable = cfg.enable; + musicDirectory = cfg.directory; + extraConfig = builtins.readFile ../config/mpd.conf; + }; + + programs = mkIf cfg.enable { + ncmpcpp = { + enable = cfg.ncmpcpp.enable; + bindings = [ + { key = "k"; command = "scroll_up"; } + { key = "j"; command = "scroll_down"; } + { key = "l"; command = "next_column"; } + { key = "l"; command = "slave_screen"; } + { key = "h"; command = "previous_column"; } + { key = "h"; command = "master_screen"; } + { key = "G"; command = "move_end"; } + { key = "g"; command = "move_home"; } + { key = "alt-l"; command = "show_lyrics"; } + ]; + settings = { + ncmpcpp_directory = "~/.config/ncmpcpp"; + system_encoding = "utf-8"; + visualizer_output_name = "my_fifo"; + visualizer_type = "ellipse"; + visualizer_in_stereo = "yes"; + visualizer_look = "▀▋"; + visualizer_color = "blue, cyan, green, yellow, magenta, red, black"; + playlist_display_mode = "columns"; + media_library_primary_tag = "album_artist"; + media_library_hide_album_dates = true; + playlist_shorten_total_times = "yes"; + playlist_editor_display_mode = "columns"; + lyrics_fetchers = "genius, internet"; + browser_display_mode = "columns"; + search_engine_display_mode = "columns"; + autocenter_mode = "yes"; + mouse_support = "yes"; + centered_cursor = "yes"; + follow_now_playing_lyrics = "yes"; + display_bitrate = "no"; + external_editor = "vim"; + progressbar_elapsed_color = "white"; + progressbar_color = "black"; + user_interface = "alternative"; + header_visibility = "no"; + statusbar_visibility = "yes"; + titles_visibility = "yes"; + progressbar_look = "━━"; + statusbar_color = "white"; + enable_window_title = "yes"; + now_playing_prefix = "$b$1"; + now_playing_suffix = "$8$/b"; + song_list_format = "$1 $2%A$8 - $8%t $R $3%l "; + song_status_format = "$b$7♫ $2%a $8- $3%b $8- $8%t "; + song_window_title_format = " {%A} - {%t}"; + song_columns_list_format = "(23)[white]{a} (26)[yellow]{t|f} (40)[green]{b} (4)[blue]{l}"; + startup_slave_screen = "playlist"; + startup_slave_screen_focus = "yes"; + locked_screen_width_part = "50"; + }; + }; + + rmpc.enable = cfg.rmpc.enable; + }; + }; +} diff --git a/user/shells.nix b/user/shells.nix new file mode 100644 index 0000000..3996a44 --- /dev/null +++ b/user/shells.nix @@ -0,0 +1,81 @@ +{ config, pkgs, lib, ... }: + +let + inherit (lib) mkIf mkOption mkMerge types; + + cfg = config.shells; + aliases = { + "ls" = "lsd --color=never"; + "ll" = "lsd -la --color=never"; + "llt" = "lsd --tree --color=never"; + "cp" = "cp --verbose"; + "rm" = "rm --verbose"; + "mv" = "mv --verbose"; + "mkdir" = "mkdir --verbose"; + "v" = "nvim"; + "music" = "ncmpcpp"; + "tls" = "tmux ls"; + "tkl" = "tmux kill-session -t"; + "tch" = "tmux attach"; + "ytmusic" = "yt-dlp -f 'ba' -x --audio-format mp3 -o '%(id)s.%(ext)s'"; + "ytvid" = "yt-dlp -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'"; + }; + +in +{ + options.shells = { + fish.enable = mkOption { + default = false; + type = types.bool; + description = ''Enables FISH''; + }; + + zsh.enable = mkOption { + default = true; + type = types.bool; + description = ''Enables ZSH''; + }; + }; + + config = { + programs.fish = { + enable = cfg.fish.enable; + shellAliases = aliases; + plugins = [ + { name = "hydro"; src = pkgs.fishPlugins.hydro.src; } + ]; + functions = { + __fish_command_not_found_handler = { + body = "__fish_default_command_not_found_handler $argv[1]"; + onEvent = "fish_command_not_found"; + }; + + su = "command su --shell=/usr/bin/fish $argv"; + }; + }; + + programs.zsh = { + enable = cfg.zsh.enable; + enableCompletion = true; + defaultKeymap = "emacs"; + shellAliases = aliases; + autosuggestion.enable = true; + syntaxHighlighting.enable = true; + history.path = "${config.xdg.dataHome}/zsh/zsh_history"; + initContent = '' + [ -f ~/.p10k.zsh ]; source ~/.p10k.zsh + ''; + plugins = [ + { + name = "powerlevel10k"; + src = pkgs.zsh-powerlevel10k; + file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme"; + } + ]; + }; + + home.file.".p10k.zsh" = mkIf cfg.zsh.enable { + source = ../config/p10k-config; + }; + }; +} diff --git a/user/subs/alacritty.nix b/user/subs/alacritty.nix new file mode 100644 index 0000000..4281339 --- /dev/null +++ b/user/subs/alacritty.nix @@ -0,0 +1,52 @@ +{ config, lib, ... }: + +let + cfg = config.subs.alacritty; +in +{ + options.subs.alacritty.enable = lib.mkOption { + default = false; + type = lib.types.bool; + }; + + config = lib.mkIf cfg.enable { + programs.alacritty = { + enable = true; + settings = { + general.live_config_reload = true; + general.import = [ + "~/.config/alacritty/themes/dracula.toml" + ]; + colors.draw_bold_text_with_bright_colors = true; + font = { + size = 15; + normal = { + family = "Iosevka Nerd Font"; + style = "Medium"; + }; + italic = { + style = "Medium Italic"; + }; + bold = { + style = "ExtraBold"; + }; + bold_italic = { + style = "ExtraBold Italic"; + }; + }; + scrolling = { + history = 100000; + multiplier = 3; + }; + window = { + decorations = "full"; + dynamic_padding = false; + dynamic_title = true; + startup_mode = "Maximized"; + padding.x = 0; + padding.y = 0; + }; + }; + }; + }; +} diff --git a/user/subs/emacs.nix b/user/subs/emacs.nix new file mode 100644 index 0000000..7914e68 --- /dev/null +++ b/user/subs/emacs.nix @@ -0,0 +1,25 @@ +{ config, pkgs, lib, ... }: + +let + cfg = config.subs.emacs; +in +{ + options.subs.emacs.enable = lib.mkOption { + default = false; + type = lib.types.bool; + }; + + config = lib.mkIf cfg.enable { + programs.emacs.enable = true; + services.emacs = { + enable = true; + package = pkgs.emacs; + client.enable = true; + client.arguments = [ "-ca" ]; + startWithUserSession = "graphical"; + }; + home.file = { + ".spacemacs".source = ../../config/spacemacs; + }; + }; +} diff --git a/user/subs/ghostty.nix b/user/subs/ghostty.nix new file mode 100644 index 0000000..be3e2ce --- /dev/null +++ b/user/subs/ghostty.nix @@ -0,0 +1,47 @@ +{ config, lib, ... }: + +let + cfg = config.subs.ghostty; +in +{ + options.subs.ghostty.enable = lib.mkOption { + default = false; + type = lib.types.bool; + }; + + config = lib.mkIf cfg.enable { + programs.ghostty = { + enable = true; + enableZshIntegration = true; + settings = { + font-family = "Iosevka Nerd Font"; + font-size = 14; + theme = "ghostty-dracula"; + clipboard-read = "allow"; + clipboard-write = "allow"; + window-padding-x = 0; + window-padding-y = 0; + window-theme = "system"; + window-decoration = true; + window-padding-balance = true; + window-new-tab-position = "end"; + gtk-single-instance = true; + gtk-titlebar = true; + gtk-titlebar-hide-when-maximized = true; + gtk-adwaita = false; + gtk-wide-tabs = false; + confirm-close-surface = false; + keybind = [ + "ctrl+shift+h=goto_split:left" + "ctrl+shift+j=goto_split:down" + "ctrl+shift+k=goto_split:up" + "ctrl+shift+l=goto_split:right" + "ctrl+alt+h=new_split:left" + "ctrl+alt+j=new_split:down" + "ctrl+alt+k=new_split:up" + "ctrl+alt+l=new_split:right" + ]; + }; + }; + }; +} diff --git a/user/subs/git.nix b/user/subs/git.nix new file mode 100644 index 0000000..b04051f --- /dev/null +++ b/user/subs/git.nix @@ -0,0 +1,42 @@ +{ + programs.git = { + enable = true; + userName = "datsudo"; + userEmail = "76833632+datsudo@users.noreply.github.com"; + includes = [ + { + condition = "gitdir:~/dev/gitlab/"; + contents = { + user = { + name = "datsudo"; + email = "11058167-Datsudo@users.noreply.gitlab.com"; + }; + }; + } + ]; + extraConfig = { + init.defaultBranch = "main"; + column.ui = "auto"; + branch.sort = "-committerdate"; + tag.sort = "version:refname"; + user.signingkey = "~/.ssh/id_ed25519.pub"; + diff = { + algorithm = "histogram"; + colorMoved = "plain"; + mnemonicPrefix = true; + renames = true; + }; + push.autoSetupRemote = true; + fetch = { + prune = true; + pruneTags = true; + all = true; + }; + gpg = { + format = "ssh"; + }; + help.autocorrect = "prompt"; + commit.verbose = true; + }; + }; +} diff --git a/user/subs/mpv.nix b/user/subs/mpv.nix new file mode 100644 index 0000000..ca9424b --- /dev/null +++ b/user/subs/mpv.nix @@ -0,0 +1,16 @@ +{ + programs.mpv = { + enable = true; + bindings = { + "ALT+k" = "add sub-scale +0.1"; + "ALT+j" = "add sub-scale -0.1"; + }; + config = { + "sub-scale" = "0.60"; + "interpolation" = true; + "tscale" = "oversample"; + "sub-auto" = "fuzzy"; + "force-window" = "yes"; + }; + }; +} diff --git a/user/subs/neovim.nix b/user/subs/neovim.nix new file mode 100644 index 0000000..bd0f958 --- /dev/null +++ b/user/subs/neovim.nix @@ -0,0 +1,29 @@ +{ config, lib, ... }: + +let + cfg = config.subs.neovim; +in +{ + options.subs.neovim.enable = lib.mkOption { + default = false; + type = lib.types.bool; + }; + + config = lib.mkIf cfg.enable { + programs.neovim = { + enable = true; + defaultEditor = true; + viAlias = true; + vimAlias = true; + vimdiffAlias = true; + }; + + home.file = { + ".config/nvim/init.lua".source = ../../config/nvim/init.lua; + ".config/nvim/after" = { source = ../../config/nvim/after; recursive = true; }; + ".config/nvim/lsp" = { source = ../../config/nvim/lsp; recursive = true; }; + ".config/nvim/lua" = { source = ../../config/nvim/lua; recursive = true; }; + ".config/nvim/plugin" = { source = ../../config/nvim/plugin; recursive = true; }; + }; + }; +} diff --git a/user/subs/sioyek.nix b/user/subs/sioyek.nix new file mode 100644 index 0000000..f3163aa --- /dev/null +++ b/user/subs/sioyek.nix @@ -0,0 +1,44 @@ +{ config, lib, ... }: + +let + cfg = config.subs.sioyek; +in +{ + options.subs.sioyek.enable = lib.mkOption { + default = false; + type = lib.types.bool; + }; + + config = lib.mkIf cfg.enable { + programs.sioyek = { + enable = true; + bindings = { + "add_highlight" = ""; + "overview_definition" = ""; + "toggle_dark_mode" = ""; + "fit_to_page_width" = ""; + "quit" = ""; + "next_page" = "l"; + "previous_page" = "h"; + "toggle_custom_color" = "i"; + "fit_to_page_width_ratio" = "="; + "close_window" = "q"; + }; + config = { + "ui_font" = "Inter"; + "font_size" = "15"; + "status_bar_font_size" = "10"; + "fit_to_page_width_ratio" = "1.0"; + "should_launch_new_window" = "1"; + "show_document_name_in_statusbar" = "1"; + "super_fast_search" = "1"; + "collapsed_toc" = "1"; + "sort_bookmarks_by_location" = "1"; + "create_table_of_contents_if_not_exists" = "0"; + "dark_mode_background_color" = "0.114 0.125 0.129"; + "custom_background_color" = "0.114 0.125 0.129"; + "startup_commands" = "fit_to_page_width_ratio,toggle_custom_color"; + }; + }; + }; +} diff --git a/user/subs/sxhkd.nix b/user/subs/sxhkd.nix new file mode 100644 index 0000000..a4c0283 --- /dev/null +++ b/user/subs/sxhkd.nix @@ -0,0 +1,56 @@ +{ config, pkgs, lib, ... }: + +let + cfg = config.subs.sxhkd; +in +{ + options.subs.sxhkd.enable = lib.mkOption { + default = false; + type = lib.types.bool; + }; + + config = lib.mkIf cfg.enable { + services.sxhkd = { + enable = true; + keybindings = { + "super + Return" = "alacritty"; + "super + b" = "zen-beta"; + "super + f" = "thunar"; + "super + m" = "emacsclient -ca ''"; + "super + t" = "flatpak run eu.betterbird.Betterbird"; + "super + c" = "speedcrunch"; + "super + ctrl + 1" = "/home/dpv/.local/bin/books"; + "XF86MonBrightness{Up,Down}" = "brightnessctl {-q set 3%+,--min-val=2 -q set 3%-}"; + "super + ctrl + {equal,minus}" = "brightnessctl {-q set 3%+,--min-val=2 -q set 3%-}"; + "XF86PowerOff" = "~/.config/rofi/scripts/powermenu.sh"; + "XF86Audio{Raise,Lower}Volume" = "pactl set-sink-volume @DEFAULT_SINK@ {+5%,-5%}"; + "XF86Audio{Mic,_}Mute" = "pactl {set-source-mute @DEFAULT_SOURCE@,set-sink-mute @DEFAULT_SINK@} toggle"; + "XF86Audio{Prev,Next}" = "mpc -q {prev,next}"; + "XF86Audio{Stop,Play}" = "mpc {stop,toggle}"; + "super + ctrl + {comma,period,slash}" = "mpc {-q prev,-q next,toggle}"; + "alt + space" = "/home/dpv/.config/rofi/scripts/launcher.sh"; + "super + shift + d" = "/home/dpv/.local/bin/define"; + "super + ctrl + shift + 7" = "/home/dpv/.local/bin/keyboard-toggle"; + "super + ctrl + shift + 6" = "/home/dpv/.local/bin/touchpad-toggle-xinput"; + "super + shift + F8" = "setxkbmap -option 'caps:escape' && notify-send 'Caps' 'Remapped to Esc'"; + "super + z" = "rofi -modi 'Clipboard:greenclip print' -show Clipboard -run-command '{cmd}' -theme ~/.config/rofi/menu.rasi"; + "super + ctrl + shift + k" = "screenkey"; + "ctrl + Print" = "flameshot gui"; + "super + shift + p" = "flameshot gui"; + "Print" = "flameshot full"; + "ctrl + alt + n" = "/home/dpv/.config/rofi/scripts/powermenu.sh"; + }; + }; + + systemd.user.services.sxhkd-daemon = { + Unit = { Description = "SXHKD Daemon."; }; + Install = { + WantedBy = [ "graphical-session.target" "default.target" ]; + }; + Service = { + ExecStart = "${pkgs.sxhkd}/bin/sxhkd -m 1"; + Restart = "always"; + }; + }; + }; +} diff --git a/user/subs/tmux.nix b/user/subs/tmux.nix new file mode 100644 index 0000000..a580a2a --- /dev/null +++ b/user/subs/tmux.nix @@ -0,0 +1,64 @@ +{ config, pkgs, lib, ... }: + +let + cfg = config.subs.tmux; +in +{ + options.subs.tmux = { + enable = lib.mkOption { + default = false; + type = lib.types.bool; + }; + }; + + config = lib.mkIf cfg.enable { + programs.tmux = { + enable = true; + package = pkgs.tmux; + baseIndex = 1; + mouse = true; + prefix = "C-Space"; + terminal = "alacritty"; + plugins = with pkgs.tmuxPlugins; [ + { + plugin = yank; + extraConfig = '' + bind-key -T copy-mode-vi v send-keys -X begin-selection + bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle + bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel + ''; + } + { + plugin = tmux-fzf; + extraConfig = '' + TMUX_FZF_LAUNCH_KEY="z" + TMUX_FZF_PREVIEW=0 + TMUX_FZF_ORDER="session|window|pane|command|keybinding" + ''; + } + { + plugin = dracula; + extraConfig = '' + set -g @dracula-plugins "cwd ssh-session" + set -g @dracula-show-left-icon "#S" + set -g @dracula-show-powerline false + set -g @dracula-border-contrast true + ''; + } + ]; + extraConfig = '' + set -sg escape-time 10 + set -g focus-events on + set -sa terminal-features ",alacritty:RGB" + set -g status-position top + set -g status-left-length 50 + set -g mode-keys vi + bind-key h select-pane -L + bind-key j select-pane -D + bind-key k select-pane -U + bind-key l select-pane -R + bind-key -r f run-shell "tmux neww ~/.local/bin/tmux-sessionizer" + ''; + }; + }; +} diff --git a/user/subs/zed.nix b/user/subs/zed.nix new file mode 100644 index 0000000..6578548 --- /dev/null +++ b/user/subs/zed.nix @@ -0,0 +1,132 @@ +{ config, lib, ... }: + +let + cfg = config.subs.zed; +in +{ + options = { + subs.zed.enable = lib.mkOption { + default = false; + type = lib.types.bool; + }; + }; + + config = lib.mkIf cfg.enable { + programs.zed-editor = { + enable = true; + extensions = [ + "kanagawa-themes" "modus-themes" "material-icon-theme" + "toml" "php" "dockerfile" "vue" "sql" "svelte" "scss" "lua" + "astro" "graphql" "ini" "emmet" + ]; + + userKeymaps = [ + { + context = "Workspace"; + bindings = { + "alt-`" = "workspace::ToggleLeftDock"; + "alt-~" = "workspace::ToggleRightDock"; + "ctrl-`" = "workspace::ToggleBottomDock"; + "alt-h" = "workspace::ActivatePaneLeft"; + "alt-j" = "workspace::ActivatePaneDown"; + "alt-k" = "workspace::ActivatePaneUp"; + "alt-l" = "workspace::ActivatePaneRight"; + }; + } + { + context = "Editor"; + bindings = { + "ctrl-w" = "pane::CloseActiveItem"; + }; + } + { + context = "VimControl && !menu"; + bindings = { + "ctrl-w" = "pane::CloseActiveItem"; + }; + } + { + context = "Editor || Pane"; + bindings = { + "ctrl-alt-h" = "pane::SplitLeft"; + "ctrl-alt-j" = "pane::SplitDown"; + "ctrl-alt-k" = "pane::SplitUp"; + "ctrl-alt-l" = "pane::SplitRight"; + }; + } + ]; + + userSettings = { + vim_mode = true; + base_keymap = "VSCode"; + diagnostics = { + include_warnings = false; + inline.enabled = true; + }; + tab_size = 4; + hard_tabs = true; + git.inline_blame.enabled = false; + ui_font_family = "Inter"; + ui_font_size = 16; + buffer_font_family = "Iosevka Nerd Font"; + buffer_font_fallbacks = [ "Symbols Nerd Font" "Noto Color Emoji" ]; + buffer_font_weight = 500; + buffer_font_size = 18; + buffer_line_height.custom = 1.3; + terminal = { + font_family = "Iosevka Nerd Font"; + font_weight = 500; + font_size = 16; + font_fallbacks = [ "Symbols Nerd Font" "Noto Color Emoji" ]; + working_directory = "current_project_directory"; + toolbar.breadcrumbs = false; + env = { + "ZED" = "1"; + }; + }; + icon_theme = "Material Icon Theme"; + theme = { + mode = "dark"; + light = "Modus Operandi Deuteranopia"; + dark = "Kanagawa"; + }; + toolbar.quick_actions = false; + tab_bar.show = false; + scrollbar = { + show = "never"; + git_diff = false; + }; + gutter = { + code_actions = true; + runnables = true; + folds = false; + line_numbers = true; + }; + inlay_hints = { + enabled = true; + show_type_hints = true; + }; + telemetry = { + diagnostics = false; + metrics = false; + }; + languages = { + CSS.tab_size = 2; + HTML.tab_size = 2; + Astro.tab_size = 2; + JavaScript.tab_size = 2; + TypeScript.tab_size = 2; + TSX.tab_size = 2; + JSON.hard_tabs = false; + JSON.tab_size = 2; + YAML.hard_tabs = false; + YAML.tab_size = 2; + JSONC.hard_tabs = false; + JSONC.tab_size = 2; + TOML.tab_size = 2; + Python.hard_tabs = false; + }; + }; + }; + }; +} diff --git a/user/terminals.nix b/user/terminals.nix new file mode 100644 index 0000000..4d8bd29 --- /dev/null +++ b/user/terminals.nix @@ -0,0 +1,33 @@ +{ config, lib, ... }: + +let + inherit (lib) mkIf mkOption types; + cfg = config.terminals; +in +{ + imports = [ + ./subs/ghostty.nix + ./subs/alacritty.nix + ]; + + options.terminals = { + ghostty.enable = mkOption { + default = false; + type = types.bool; + }; + alacritty.enable = mkOption { + default = false; + type = types.bool; + }; + }; + + config = { + subs.ghostty.enable = cfg.ghostty.enable; + subs.alacritty.enable = cfg.alacritty.enable; + + home.file = { + ".config/alacritty/themes/dracula.toml".source = mkIf cfg.alacritty.enable ../config/dracula.toml; + ".config/ghostty/themes/ghostty-dracula".source = mkIf cfg.ghostty.enable ../config/ghostty-dracula; + }; + }; +} diff --git a/user/termtools.nix b/user/termtools.nix new file mode 100644 index 0000000..fdefffb --- /dev/null +++ b/user/termtools.nix @@ -0,0 +1,28 @@ +{ config, lib, ... }: + +let + inherit (lib) mkOption types; + cfg = config.termtools; +in +{ + imports = [ ./subs/tmux.nix ]; + options.termtools = { + tmux.enable = mkOption { + default = false; + type = types.bool; + }; + zoxide.enable = mkOption { + default = false; + type = types.bool; + }; + }; + + config = { + subs.tmux.enable = cfg.tmux.enable; + programs.zoxide = { + enable = cfg.zoxide.enable; + enableZshIntegration = true; + options = [ "--cmd cd" ]; + }; + }; +} diff --git a/user/theming.nix b/user/theming.nix new file mode 100644 index 0000000..bad9bc9 --- /dev/null +++ b/user/theming.nix @@ -0,0 +1,63 @@ +{ config, pkgs, lib, ... }: + +let + cfg = config.theming.dock; +in +{ + options.theming.dock = { + enable = lib.mkOption { + default = false; + type = lib.types.bool; + }; + autostart = lib.mkOption { + default = false; + type = lib.types.bool; + }; + }; + + config = { + home.pointerCursor = { + x11.enable = true; + name = "Bibata-Modern-Classic"; + package = pkgs.bibata-cursors; + gtk.enable = true; + size = 20; + }; + + gtk = { + enable = true; + cursorTheme = { + name = "Bibata-Modern-Classic"; + package = pkgs.bibata-cursors; + size = 20; + }; + iconTheme = { + name = "Tela-dark"; + package = pkgs.tela-icon-theme; + }; + gtk3 = { + extraConfig.gtk-application-prefer-dark-theme = true; + }; + gtk4 = { + extraConfig.gtk-application-prefer-dark-theme = true; + }; + }; + + qt = { + enable = true; + platformTheme.name = "gtk"; + style.name = "adwaita-dark"; + }; + + home.packages = lib.mkIf cfg.enable [ + pkgs.plank pkgs.libwnck pkgs.bamf + ]; + + xdg.autostart = lib.mkIf cfg.autostart { + enable = true; + entries = [ + "${pkgs.plank}/share/applications/plank.desktop" + ]; + }; + }; +} diff --git a/user/utils.nix b/user/utils.nix new file mode 100644 index 0000000..3ecc2fa --- /dev/null +++ b/user/utils.nix @@ -0,0 +1,41 @@ +{ config, lib, ... }: + +let + cfg = config.utils; +in +{ + imports = [ ./subs/sxhkd.nix ]; + + options.utils = { + rofi.enable = lib.mkOption { + default = false; + type = lib.types.bool; + }; + sxhkd.enable = lib.mkOption { + default = false; + type = lib.types.bool; + }; + flameshot.enable = lib.mkOption { + default = false; + type = lib.types.bool; + }; + }; + + config = { + programs.rofi.enable = cfg.rofi.enable; + + subs.sxhkd.enable = cfg.sxhkd.enable; + + services.flameshot = { + enable = cfg.flameshot.enable; + settings = { + General = { + savePathFixed = false; + saveAfterCopy = true; + showStartupLaunchMessage = false; + useJpgForClipboard = true; + }; + }; + }; + }; +}