From 8ebab2e50e848d31e3b4062c2a7989ae564832da Mon Sep 17 00:00:00 2001 From: 4Lost Date: Sat, 16 Mar 2024 15:22:46 +0100 Subject: [PATCH] neovim -> coc-nvim --- home/TODOS.md | 20 +- home/programs/neovim/default.nix | 1 + home/programs/neovim/lua/plugins/coc.lua | 185 ++++++++++++++++++ home/programs/xmonad/default.nix | 2 +- .../xmonad/src/xmobar/Plugins/Audio.hs | 53 +++++ home/programs/xmonad/src/xmobar/xmobar.hs | 64 ++++++ home/programs/xmonad/src/xmonad.hs | 5 +- 7 files changed, 319 insertions(+), 11 deletions(-) create mode 100644 home/programs/neovim/lua/plugins/coc.lua create mode 100644 home/programs/xmonad/src/xmobar/Plugins/Audio.hs diff --git a/home/TODOS.md b/home/TODOS.md index 24566b7..4197839 100644 --- a/home/TODOS.md +++ b/home/TODOS.md @@ -1,13 +1,14 @@ # Neues +## Kalender + +- inplemantieren +- in Thunderbird übernehmen + ## GHCI - Installieren -## Lockscreen - -- Lockscreen implementieren - ## Ktouch - Installieren? @@ -63,9 +64,6 @@ ## XMonad -- Hotkeys einrichten - - i3 - - mit alsa - Workspaces ## Nautilus @@ -79,8 +77,7 @@ ## Sddm - Profilbild? -- Sperrbild? -- Wann sperren -> XMonad +- Wann sperren -> XMonad? ## Dateien @@ -107,3 +104,8 @@ - Theme declarativ setzen - zweites Profil fixen - uni mail +- privat mail key fixen + +## Lockscreen + +- Optisch anpassen -> ist nur proviorisch bis jetzt diff --git a/home/programs/neovim/default.nix b/home/programs/neovim/default.nix index 9a5e816..8df0b47 100644 --- a/home/programs/neovim/default.nix +++ b/home/programs/neovim/default.nix @@ -27,6 +27,7 @@ in { bufferline-nvim catppuccin-nvim cmp-buffer + coc-nvim cmp-conjure cmp-nvim-lua cmp-nvim-lsp diff --git a/home/programs/neovim/lua/plugins/coc.lua b/home/programs/neovim/lua/plugins/coc.lua new file mode 100644 index 0000000..55df723 --- /dev/null +++ b/home/programs/neovim/lua/plugins/coc.lua @@ -0,0 +1,185 @@ +local M = { + "neoclide/coc.nvim", + branch = "master", + build = "yarn install --frozen-lockfile", +} + +M.config = function() + -- Some servers have issues with backup files, see #649 + vim.opt.backup = false + vim.opt.writebackup = false + + -- Having longer updatetime (default is 4000 ms = 4s) leads to noticeable + -- delays and poor user experience + vim.opt.updatetime = 300 + + -- Always show the signcolumn, otherwise it would shift the text each time + -- diagnostics appeared/became resolved + vim.opt.signcolumn = "yes" + + local keyset = vim.keymap.set + -- Autocomplete + function _G.check_back_space() + local col = vim.fn.col(".") - 1 + return col == 0 or vim.fn.getline("."):sub(col, col):match("%s") ~= nil + end + + -- Use Tab for trigger completion with characters ahead and navigate + -- NOTE: There's always a completion item selected by default, you may want to enable + -- no select by setting `"suggest.noselect": true` in your configuration file + -- NOTE: Use command ':verbose imap ' to make sure Tab is not mapped by + -- other plugins before putting this into your config + local opts = { silent = true, noremap = true, expr = true, replace_keycodes = false } + keyset("i", "", 'coc#pum#visible() ? coc#pum#next(1) : v:lua.check_back_space() ? "" : coc#refresh()', opts) + keyset("i", "", [[coc#pum#visible() ? coc#pum#prev(1) : "\"]], opts) + + -- Make to accept selected completion item or notify coc.nvim to format + -- u breaks current undo, please make your own choice + keyset("i", "", [[coc#pum#visible() ? coc#pum#confirm() : "\u\\=coc#on_enter()\"]], opts) + + -- Use to trigger snippets + keyset("i", "", "(coc-snippets-expand-jump)") + -- Use to trigger completion + keyset("i", "", "coc#refresh()", { silent = true, expr = true }) + + -- Use `[g` and `]g` to navigate diagnostics + -- Use `:CocDiagnostics` to get all diagnostics of current buffer in location list + keyset("n", "[g", "(coc-diagnostic-prev)", { silent = true }) + keyset("n", "]g", "(coc-diagnostic-next)", { silent = true }) + + -- GoTo code navigation + keyset("n", "gd", "(coc-definition)", { silent = true }) + keyset("n", "gy", "(coc-type-definition)", { silent = true }) + keyset("n", "gi", "(coc-implementation)", { silent = true }) + keyset("n", "gr", "(coc-references)", { silent = true }) + + -- Use K to show documentation in preview window + function _G.show_docs() + local cw = vim.fn.expand("") + if vim.fn.index({ "vim", "help" }, vim.bo.filetype) >= 0 then + vim.api.nvim_command("h " .. cw) + elseif vim.api.nvim_eval("coc#rpc#ready()") then + vim.fn.CocActionAsync("doHover") + else + vim.api.nvim_command("!" .. vim.o.keywordprg .. " " .. cw) + end + end + keyset("n", "K", "lua _G.show_docs()", { silent = true }) + + -- Highlight the symbol and its references on a CursorHold event(cursor is idle) + vim.api.nvim_create_augroup("CocGroup", {}) + vim.api.nvim_create_autocmd("CursorHold", { + group = "CocGroup", + command = "silent call CocActionAsync('highlight')", + desc = "Highlight symbol under cursor on CursorHold", + }) + + -- Symbol renaming + keyset("n", "rn", "(coc-rename)", { silent = true }) + + -- Formatting selected code + keyset("x", "f", "(coc-format-selected)", { silent = true }) + keyset("n", "f", "(coc-format-selected)", { silent = true }) + + -- Setup formatexpr specified filetype(s) + vim.api.nvim_create_autocmd("FileType", { + group = "CocGroup", + pattern = "typescript,json", + command = "setl formatexpr=CocAction('formatSelected')", + desc = "Setup formatexpr specified filetype(s).", + }) + + -- Update signature help on jump placeholder + vim.api.nvim_create_autocmd("User", { + group = "CocGroup", + pattern = "CocJumpPlaceholder", + command = "call CocActionAsync('showSignatureHelp')", + desc = "Update signature help on jump placeholder", + }) + + -- Apply codeAction to the selected region + -- Example: `aap` for current paragraph + local opts = { silent = true, nowait = true } + keyset("x", "a", "(coc-codeaction-selected)", opts) + keyset("n", "a", "(coc-codeaction-selected)", opts) + + -- Remap keys for apply code actions at the cursor position. + keyset("n", "ac", "(coc-codeaction-cursor)", opts) + -- Remap keys for apply code actions affect whole buffer. + keyset("n", "as", "(coc-codeaction-source)", opts) + -- Remap keys for applying codeActions to the current buffer + keyset("n", "ac", "(coc-codeaction)", opts) + -- Apply the most preferred quickfix action on the current line. + keyset("n", "qf", "(coc-fix-current)", opts) + + -- Remap keys for apply refactor code actions. + keyset("n", "re", "(coc-codeaction-refactor)", { silent = true }) + keyset("x", "r", "(coc-codeaction-refactor-selected)", { silent = true }) + keyset("n", "r", "(coc-codeaction-refactor-selected)", { silent = true }) + + -- Run the Code Lens actions on the current line + keyset("n", "cl", "(coc-codelens-action)", opts) + + -- Map function and class text objects + -- NOTE: Requires 'textDocument.documentSymbol' support from the language server + keyset("x", "if", "(coc-funcobj-i)", opts) + keyset("o", "if", "(coc-funcobj-i)", opts) + keyset("x", "af", "(coc-funcobj-a)", opts) + keyset("o", "af", "(coc-funcobj-a)", opts) + keyset("x", "ic", "(coc-classobj-i)", opts) + keyset("o", "ic", "(coc-classobj-i)", opts) + keyset("x", "ac", "(coc-classobj-a)", opts) + keyset("o", "ac", "(coc-classobj-a)", opts) + + -- Remap and to scroll float windows/popups + ---@diagnostic disable-next-line: redefined-local + local opts = { silent = true, nowait = true, expr = true } + keyset("n", "", 'coc#float#has_scroll() ? coc#float#scroll(1) : ""', opts) + keyset("n", "", 'coc#float#has_scroll() ? coc#float#scroll(0) : ""', opts) + keyset("i", "", 'coc#float#has_scroll() ? "=coc#float#scroll(1)" : ""', opts) + keyset("i", "", 'coc#float#has_scroll() ? "=coc#float#scroll(0)" : ""', opts) + keyset("v", "", 'coc#float#has_scroll() ? coc#float#scroll(1) : ""', opts) + keyset("v", "", 'coc#float#has_scroll() ? coc#float#scroll(0) : ""', opts) + + -- Use CTRL-S for selections ranges + -- Requires 'textDocument/selectionRange' support of language server + keyset("n", "", "(coc-range-select)", { silent = true }) + keyset("x", "", "(coc-range-select)", { silent = true }) + + -- Add `:Format` command to format current buffer + vim.api.nvim_create_user_command("Format", "call CocAction('format')", {}) + + -- " Add `:Fold` command to fold current buffer + vim.api.nvim_create_user_command("Fold", "call CocAction('fold', )", { nargs = "?" }) + + -- Add `:OR` command for organize imports of the current buffer + vim.api.nvim_create_user_command("OR", "call CocActionAsync('runCommand', 'editor.action.organizeImport')", {}) + + -- Add (Neo)Vim's native statusline support + -- NOTE: Please see `:h coc-status` for integrations with external plugins that + -- provide custom statusline: lightline.vim, vim-airline + vim.opt.statusline:prepend("%{coc#status()}%{get(b:,'coc_current_function','')}") + + -- Mappings for CoCList + -- code actions and coc stuff + ---@diagnostic disable-next-line: redefined-local + local opts = { silent = true, nowait = true } + -- Show all diagnostics + keyset("n", "a", ":CocList diagnostics", opts) + -- Manage extensions + keyset("n", "e", ":CocList extensions", opts) + -- Show commands + keyset("n", "c", ":CocList commands", opts) + -- Find symbol of current document + keyset("n", "o", ":CocList outline", opts) + -- Search workspace symbols + keyset("n", "s", ":CocList -I symbols", opts) + -- Do default action for next item + keyset("n", "j", ":CocNext", opts) + -- Do default action for previous item + keyset("n", "k", ":CocPrev", opts) + -- Resume latest coc list + keyset("n", "p", ":CocListResume", opts) +end + +return M diff --git a/home/programs/xmonad/default.nix b/home/programs/xmonad/default.nix index ba7e1e3..3648c49 100644 --- a/home/programs/xmonad/default.nix +++ b/home/programs/xmonad/default.nix @@ -12,5 +12,5 @@ }; }; - home.packages = with pkgs; [ xmobar maim xdotool ]; + home.packages = with pkgs; [ xmobar maim xdotool xorg.xmessage ]; } diff --git a/home/programs/xmonad/src/xmobar/Plugins/Audio.hs b/home/programs/xmonad/src/xmobar/Plugins/Audio.hs new file mode 100644 index 0000000..dfe10bc --- /dev/null +++ b/home/programs/xmonad/src/xmobar/Plugins/Audio.hs @@ -0,0 +1,53 @@ +----------------------------------------------------------------------------- +-- | +-- Module : Plugins.Audio +-- Copyright : (c) Elias Schröter +-- License : ??? +-- +-- Maintainer : Elias Schröter +-- Stability : unstable +-- Portability : untested +-- +-- A simple plugin to display the Audio status. +-- +-- This plugin needs 7 parameters : The MuteColor UnMuteColor SpeakerMuteIcon SpeakerIcon MicrophoneMuteIcon MicrophoneIcon and the update rate of the plugin +-- in tenth of seconds. +----------------------------------------------------------------------------- + +module Plugins.Audio where + +import Plugins +import System.Process + +-- | Color for Muted +type MuteColor = String +-- | Color for Unmuted +type UnMuteColor = String +-- | The Icon of the muted Speaker +type SpeakerMuteIcon = String +-- | The Icon of the unmuted Speaker +type SpeakerIcon = String +-- | The Icon of the muted Microphone +type MicrophoneMuteIcon = String +-- | The Icon of the unmuted Microphone +type MicrophoneIcon = String + +data Audio = Audio MuteColor UnMuteColor SpeakerMuteIcon SpeakerIcon MicrophoneMuteIcon MicrophoneIcon Int deriving (Read, Show) + +-- | Counts the days to a specific date from today. This function returns the number +-- of days followed by a String +cdw :: Cyear -> Cmonth -> Cday -> String -> IO String +cdw y m d s = do currentTime <- getCurrentTime + let currentDay = utctDay currentTime + let countdownDay = fromGregorian y m d + return $ show (diffDays countdownDay currentDay) ++ s + +getAudio :: MuteColor -> UnMuteColor -> SpeakerMuteIcon -> SpeakerIcon -> MicrophoneMuteIcon -> MicrophoneIcon -> IO String +getAudio mC umC smI sI mmI mI = do + let status = readProcess "pulseaudio-ctl full-status" + let infoList = [w | w <- words status] + +instance Exec Countdown where + alias ( Audio _ _ _ _ _ _ _) = "audio" + run ( Audio mC umC smI sI mmI mI _ ) = getAudio + rate ( Countdown _ _ _ _ _ _ r ) = r diff --git a/home/programs/xmonad/src/xmobar/xmobar.hs b/home/programs/xmonad/src/xmobar/xmobar.hs index bad2ce5..e10bba5 100644 --- a/home/programs/xmonad/src/xmobar/xmobar.hs +++ b/home/programs/xmonad/src/xmobar/xmobar.hs @@ -1,4 +1,8 @@ import Xmobar +--import Xmobar.Run.Exec +--import Xmobar (Command(ComX)) +--import GHC.Real (Integral(rem)) + config :: Config config = @@ -13,6 +17,35 @@ config = , commands = [ Run $ Com "/bin/sh" ["-c", "Status=$(pulseaudio-ctl full-status); Volume=$(cut -d ' ' -f 1 <<<$Status); Mute=$(cut -d ' ' -f 2 <<<$Status); Microphone=$(cut -d ' ' -f 3 <<<$Status); SpeakerColor=\"#a6e3a1\"; MicColor=\"#a6e3a1\"; if [[ $Mute == \"yes\" ]]; then Symbol=\"\xf466\"; SpeakerColor=\"#f38ba8\"; elif [[ $Volume -le 50 ]]; then Symbol=\"\xf027\"; elseSymbol=\"\xf028\"; fi; if [[ $Microphone == \"yes\" ]]; then MicOut=\"\xf036d\"; MicColor=\"#f38ba8\"; else MicOut=\"\xf036c\"; fi; echo \"$Symbol $Volume% $MicOut\""] "audio" 10 + --Run $ Com "/bin/sh" ["-c", "Status=$(pulseaudio-ctl full-status); + -- Volume=$(cut -d ' ' -f 1 <<<$Status); + -- Mute=$(cut -d ' ' -f 2 <<<$Status); + -- Microphone=$(cut -d ' ' -f 3 <<<$Status); + -- SpeakerColor=\"#a6e3a1\"; + -- MicColor=\"#a6e3a1\"; + -- if [[ $Mute == \"yes\" ]]; + -- then + -- Symbol=\"\xf466\"; + -- SpeakerColor=\"#f38ba8\"; + -- elif [[ $Volume -le 50 ]]; + -- then + -- Symbol=\"\xf027\"; + -- else Symbol=\"\xf028\"; + -- fi; + -- + -- if [[ $Microphone == \"yes\" ]]; + -- then + -- MicOut=\"\xf036d\"; + -- MicColor=\"#f38ba8\"; + -- else MicOut=\"\xf036c\"; + -- fi; + -- + -- echo \"$Symbol $Volume% $MicOut\""] "audio" 10 + --Run $ Audio + --[ + -- "--template", "> % >" + -- , "" "" + --] 10 , Run $ Com "/bin/sh" ["-c", "echo \"\xf00e0 $(xbacklight -get)%\""] "backlight" 10 , Run $ Cpu [ @@ -65,6 +98,37 @@ config = , template = "%XMonadLog% }{ %audio% | %backlight% | %cpu% | %memory% | %battery% | %dynnetwork% | %date% " } +--instance Exec Audio where +-- alias (Audio _ _ ) = "audio" +-- start (Audio a r) = startAudio a r +-- where +-- startAudio :: [String] -> Int -> (String -> IO ()) -> IO () +-- startAudio = + --Run $ Com "/bin/sh" ["-c", "Status=$(pulseaudio-ctl full-status); + -- Volume=$(cut -d ' ' -f 1 <<<$Status); + -- Mute=$(cut -d ' ' -f 2 <<<$Status); + -- Microphone=$(cut -d ' ' -f 3 <<<$Status); + -- SpeakerColor=\"#a6e3a1\"; + -- MicColor=\"#a6e3a1\"; + -- if [[ $Mute == \"yes\" ]]; + -- then + -- Symbol=\"\xf466\"; + -- SpeakerColor=\"#f38ba8\"; + -- elif [[ $Volume -le 50 ]]; + -- then + -- Symbol=\"\xf027\"; + -- else Symbol=\"\xf028\"; + -- fi; + -- + -- if [[ $Microphone == \"yes\" ]]; + -- then + -- MicOut=\"\xf036d\"; + -- MicColor=\"#f38ba8\"; + -- else MicOut=\"\xf036c\"; + -- fi; + -- + -- echo \"$Symbol $Volume% $MicOut\""] "audio" 10 + main :: IO () main = xmobar config diff --git a/home/programs/xmonad/src/xmonad.hs b/home/programs/xmonad/src/xmonad.hs index aecb732..bc2df02 100644 --- a/home/programs/xmonad/src/xmonad.hs +++ b/home/programs/xmonad/src/xmonad.hs @@ -28,8 +28,10 @@ myconfig = def } `additionalKeysP` [ + -- Messages + ("M-m w", spawn "xmessage 'Test Message :)'") -- type mod+x then w to pop up 'woohoo!') -- System - ("M-p", spawn "rofi -show \"drun\"") + , ("M-p", spawn "rofi -show \"drun\"") -- Screenshots , ("", spawn "maim --format=png \"/home/$USER/Pictures/screenshot-$(date -u +%Y-%m-%d-%H:%M:%S).png\"") -- Whole Screen to File , ("M-", spawn "maim --format=png --window $(xdotool getactivewindow) \"/home/$USER/Pictures/screenshot-$(date -u +%Y-%m-%d-%H:%M:%S).png\"") -- Focused Window to File @@ -89,6 +91,7 @@ myManageHooks :: ManageHook myManageHooks = composeAll [ isDialog --> doFloat + , className =? "Xmessage" --> doCenterFloat ] myStartupHook :: X ()