diff --git a/.config/alacritty.yml b/.config/alacritty.yml index c16e722..939552d 100644 --- a/.config/alacritty.yml +++ b/.config/alacritty.yml @@ -14,14 +14,14 @@ # Any items in the `env` entry below will be added as # environment variables. Some entries may override variables # set by alacritty itself. -#env: +env: # TERM variable # # This value is used to set the `$TERM` environment variable for # each instance of Alacritty. If it is not present, alacritty will # check the local terminfo database and use `alacritty` if it is # available, otherwise `xterm-256color` is used. - #TERM: alacritty + TERM: alacritty window: # Window dimensions (changes require restart) @@ -157,7 +157,7 @@ font: #style: Bold Italic # Point size - size: 14.0 + #size: 11.0 # Offset is the extra space around each character. `offset.y` can be thought # of as modifying the line spacing, and `offset.x` as modifying the letter diff --git a/.config/awesome/rc.lua b/.config/awesome/rc.lua new file mode 100644 index 0000000..d0c0c44 --- /dev/null +++ b/.config/awesome/rc.lua @@ -0,0 +1,654 @@ +-- If LuaRocks is installed, make sure that packages installed through it are +-- found (e.g. lgi). If LuaRocks is not installed, do nothing. +pcall(require, "luarocks.loader") + +-- Standard awesome library +local gears = require("gears") +local awful = require("awful") +require("awful.autofocus") +-- Widget and layout library +local wibox = require("wibox") +-- Theme handling library +local beautiful = require("beautiful") +-- Notification library +local naughty = require("naughty") +local menubar = require("menubar") +local hotkeys_popup = require("awful.hotkeys_popup") + +-- {{{ Error handling +if awesome.startup_errors then + naughty.notify{ + preset = naughty.config.presets.critical, + title = "Oops, there were errors during startup!", + text = awesome.startup_errors + } +end + +-- Handle runtime errors after startup +do + local in_error = false + + awesome.connect_signal( + "debug::error", + function(err) + -- Make sure we don't go into an endless error loop + if in_error then + return + end + in_error = true + + naughty.notify{ + preset = naughty.config.presets.critical, + title = "Oops, an error happened!", + text = tostring(err) + } + in_error = false + end + ) +end +-- }}} + +-- {{{ Variable definitions +-- Themes define colours, icons, font and wallpapers. +beautiful.init(gears.filesystem.get_configuration_dir() .. "theme.lua") + +terminal = "alacritty" +editor = os.getenv("EDITOR") or "nvim" +editor_cmd = terminal .. " -e " .. editor + +browser = "firefox" +files = "thunar" + +lock = "i3lock -ftni" .. gears.filesystem.get_configuration_dir() .. "wallpapers/debian11.png" + +modkey = "Mod4" + +awful.layout.layouts = { + awful.layout.suit.tile, + awful.layout.suit.max, +} +-- }}} + +-- Menubar configuration +menubar.utils.terminal = terminal -- Set the terminal for applications that require it +-- }}} + +-- {{{ Wibar +-- Create a textclock widget +mytextclock = wibox.widget.textclock() + +-- Create a wibox for each screen and add it +local taglist_buttons = gears.table.join( + awful.button( + {}, + 1, + function(t) + t:view_only() + end + ), + awful.button( + {modkey}, + 1, + function(t) + if client.focus then + client.focus:move_to_tag(t) + end + end + ) +) + +local tasklist_buttons = gears.table.join( + awful.button( + {}, + 1, + function(c) + c.minimized = false + c:emit_signal("request::activate", "tasklist", {raise = true}) + end + ), + awful.button( + {}, + 3, + function() + awful.menu.client_list({theme = {width = 250}}) + end + ) +) + +local function set_wallpaper(s) + if beautiful.wallpaper then + local wallpaper = beautiful.wallpaper + -- If wallpaper is a function, call it with the screen + if type(wallpaper) == "function" then + wallpaper = wallpaper(s) + end + gears.wallpaper.maximized(wallpaper, s, true) + end +end + +-- Re-set wallpaper when a screen's geometry changes (e.g. different resolution) +screen.connect_signal("property::geometry", set_wallpaper) + +awful.screen.connect_for_each_screen( + function(s) + -- Wallpaper + set_wallpaper(s) + + -- Each screen has its own tag table. + awful.tag( + {"TTY", "WEB", "DEV", "SBX", "GAM", "DOC", "GFX", "SRV", "ETC"}, + s, + awful.layout.layouts[1] + ) + + -- Create a taglist widget + s.mytaglist = awful.widget.taglist{ + screen = s, + filter = awful.widget.taglist.filter.all, + buttons = taglist_buttons + } + + -- Create a tasklist widget + s.mytasklist = awful.widget.tasklist{ + screen = s, + filter = awful.widget.tasklist.filter.currenttags, + buttons = tasklist_buttons + } + + -- Create the wibox + s.mywibox = awful.wibar{position = "top", screen = s} + + -- Add widgets to the wibox + s.mywibox:setup{ + layout = wibox.layout.align.horizontal, + { + -- Left widgets + layout = wibox.layout.fixed.horizontal, + s.mytaglist + }, + s.mytasklist, -- Middle widget + { + -- Right widgets + layout = wibox.layout.fixed.horizontal, + wibox.widget.systray(), + mytextclock + }, + } + end +) +-- }}} + +-- {{{ Key bindings +globalkeys = gears.table.join( + awful.key( + {modkey}, + "s", + hotkeys_popup.show_help, + {description = "show help", group = "awesome"} + ), + awful.key( + {modkey}, + "j", + function() + awful.client.focus.byidx(1) + end, + {description = "focus next by index", group = "client"} + ), + awful.key( + {modkey}, + "k", + function() + awful.client.focus.byidx(-1) + end, + {description = "focus previous by index", group = "client"} + ), + -- Layout manipulation + awful.key( + {modkey, "Shift"}, + "j", + function() + awful.client.swap.byidx(1) + end, + {description = "swap with next client by index", group = "client"} + ), + awful.key( + {modkey, "Shift"}, + "k", + function() + awful.client.swap.byidx(-1) + end, + {description = "swap with previous client by index", group = "client"} + ), + awful.key( + {modkey, "Control"}, + "j", + function() + awful.screen.focus_relative(1) + end, + {description = "focus the next screen", group = "screen"} + ), + awful.key( + {modkey, "Control"}, + "k", + function() + awful.screen.focus_relative(-1) + end, + {description = "focus the previous screen", group = "screen"} + ), + awful.key( + {modkey}, + "u", + awful.client.urgent.jumpto, + {description = "jump to urgent client", group = "client"} + ), + -- Standard program + awful.key( + {modkey}, + "Return", + function() + awful.spawn(terminal, {tag = mouse.screen.selected_tag}) + end, + {description = "open a terminal", group = "launcher"} + ), + awful.key( + {modkey}, + "e", + function() + awful.spawn(files, {tag = mouse.screen.selected_tag}) + end, + {description = "open file manager", group = "launcher"} + ), + awful.key( + {modkey}, + "b", + function() + awful.spawn(browser, {tag = mouse.screen.selected_tag}) + end, + {description = "open browser", group = "launcher"} + ), + awful.key( + {modkey}, + "l", + function() + awful.spawn(lock) + end, + {description = "lock screen", group = "awesome"} + ), + awful.key( + {modkey, "Shift"}, + "r", + awesome.restart, + {description = "reload awesome", group = "awesome"} + ), + awful.key( + {modkey, "Shift"}, + "q", + awesome.quit, + {description = "quit awesome", group = "awesome"} + ), + awful.key( + {modkey}, + "t", + function() + awful.layout.set(awful.layout.layouts[1]) + end, + {description = "set tiling layout", group = "layout"} + ), + awful.key( + {modkey}, + "m", + function() + awful.layout.set(awful.layout.layouts[2]) + end, + {description = "set max layout", group = "layout"} + ), + -- Menubar + awful.key( + {modkey}, + "r", + function() + menubar.show() + end, + {description = "show the menubar", group = "launcher"} + ), + -- Shortcuts + awful.key( + {}, + "XF86AudioRaiseVolume", + function() + awful.spawn("set-vol +2") + end, + {description = "raise volume", group = "shortcut"} + ), + awful.key( + {}, + "XF86AudioLowerVolume", + function() + awful.spawn("set-vol -2") + end, + {description = "lower volume", group = "shortcut"} + ), + awful.key( + {}, + "XF86AudioMute", + function() + awful.spawn("pactl set-sink-mute 0 toggle") + end, + {description = "mute volume", group = "shortcut"} + ), + awful.key( + {}, + "XF86AudioPlay", + function() + awful.spawn("playerctl play-pause") + end, + {description = "play/pause media", group = "shortcut"} + ), + awful.key( + {}, + "XF86AudioPrev", + function() + awful.spawn("playerctl previous") + end, + {description = "previous media", group = "shortcut"} + ), + awful.key( + {}, + "XF86AudioNext", + function() + awful.spawn("playerctl next") + end, + {description = "next media", group = "shortcut"} + ), + awful.key( + {}, + "XF86MonBrightnessUp", + function() + awful.spawn("set-light +10") + end, + {description = "raise brightness", group = "shortcut"} + ), + awful.key( + {}, + "XF86MonBrightnessDown", + function() + awful.spawn("set-light -10") + end, + {description = "lower brightness", group = "shortcut"} + ) +) + +clientkeys = + gears.table.join( + awful.key( + {modkey}, + "f", + function(c) + c.fullscreen = not c.fullscreen + c:raise() + end, + {description = "toggle fullscreen", group = "client"} + ), + awful.key( + {modkey, "Shift"}, + "c", + function(c) + c:kill() + end, + {description = "close", group = "client"} + ), + awful.key( + {modkey}, + "space", + awful.client.floating.toggle, + {description = "toggle floating", group = "client"} + ), + awful.key( + {modkey}, + "o", + function(c) + c:move_to_screen() + end, + {description = "move to screen", group = "client"} + ) +) + +-- Bind all key numbers to tags. +-- Be careful: we use keycodes to make it work on any keyboard layout. +-- This should map on the top row of your keyboard, usually 1 to 9. +for i = 1, 9 do + globalkeys = gears.table.join( + globalkeys, + -- View tag only. + awful.key( + {modkey}, + "#" .. i + 9, + function() + local screen = awful.screen.focused() + local tag = screen.tags[i] + if tag then + tag:view_only() + end + end, + {description = "view tag #" .. i, group = "tag"} + ), + -- Move client to tag. + awful.key( + {modkey, "Shift"}, + "#" .. i + 9, + function() + if client.focus then + local tag = client.focus.screen.tags[i] + if tag then + client.focus:move_to_tag(tag) + end + end + end, + {description = "move focused client to tag #" .. i, group = "tag"} + ) + ) +end + +clientbuttons = gears.table.join( + awful.button( + {}, + 1, + function(c) + c:emit_signal("request::activate", "mouse_click", {raise = true}) + end + ), + awful.button( + {modkey}, + 1, + function(c) + c:emit_signal("request::activate", "mouse_click", {raise = true}) + awful.mouse.client.move(c) + end + ), + awful.button( + {modkey}, + 3, + function(c) + c:emit_signal("request::activate", "mouse_click", {raise = true}) + awful.mouse.client.resize(c) + end + ) +) + +-- Set keys +root.keys(globalkeys) +-- }}} + +-- {{{ Rules +-- Rules to apply to new clients (through the "manage" signal). +awful.rules.rules = { + -- All clients will match this rule. + { + rule = {}, + properties = { + border_width = beautiful.border_width, + border_color = beautiful.border_normal, + focus = awful.client.focus.filter, + maximized = false, + raise = true, + keys = clientkeys, + buttons = clientbuttons, + screen = awful.screen.preferred, + placement = awful.placement.no_overlap + awful.placement.no_offscreen + } + }, + -- Floating clients. + { + rule_any = { + instance = { + "DTA", -- Firefox addon DownThemAll. + "copyq", -- Includes session name in class. + "pinentry" + }, + class = { + "Arandr", + "Blueman-manager", + "Gpick", + "Kruler", + "MessageWin", -- kalarm. + "Sxiv", + "Tor Browser", -- Needs a fixed window size to avoid fingerprinting by screen size. + "Wpa_gui", + "veromix", + "xtightvncviewer" + }, + -- Note that the name property shown in xprop might be set slightly after creation + -- of the client and the name shown there might not match defined rules here. + name = { + "Event Tester" -- xev. + }, + role = { + "AlarmWindow", -- Thunderbird's calendar. + "ConfigManager", -- Thunderbird's about:config. + "pop-up" -- e.g. Google Chrome's (detached) Developer Tools. + } + }, + properties = {floating = true} + }, + -- Add titlebars to normal clients and dialogs + { + rule_any = { + type = {"dialog"} + }, + properties = {titlebars_enabled = true} + } + + -- Set Firefox to always map on the tag named "2" on screen 1. + -- { rule = { class = "Firefox" }, + -- properties = { screen = 1, tag = "2" } }, +} +-- }}} + +-- {{{ Signals +-- Signal function to execute when a new client appears. +client.connect_signal( + "manage", + function(c) + -- Set the windows at the slave, + -- i.e. put it at the end of others instead of setting it master. + -- if not awesome.startup then awful.client.setslave(c) end + + if awesome.startup and + not c.size_hints.user_position and + not c.size_hints.program_position then + -- Prevent clients from being unreachable after screen count changes. + awful.placement.no_offscreen(c) + end + end +) + +-- Add a titlebar if titlebars_enabled is set to true in the rules. +client.connect_signal( + "request::titlebars", + function(c) + -- buttons for the titlebar + local buttons = + gears.table.join( + awful.button( + {}, + 1, + function() + c:emit_signal("request::activate", "titlebar", {raise = true}) + awful.mouse.client.move(c) + end + ), + awful.button( + {}, + 3, + function() + c:emit_signal("request::activate", "titlebar", {raise = true}) + awful.mouse.client.resize(c) + end + ) + ) + + awful.titlebar(c):setup { + { + -- Left + awful.titlebar.widget.iconwidget(c), + buttons = buttons, + layout = wibox.layout.fixed.horizontal + }, + { + -- Middle + { + -- Title + align = "center", + widget = awful.titlebar.widget.titlewidget(c) + }, + buttons = buttons, + layout = wibox.layout.flex.horizontal + }, + { + -- Right + awful.titlebar.widget.floatingbutton(c), + awful.titlebar.widget.maximizedbutton(c), + awful.titlebar.widget.closebutton(c), + layout = wibox.layout.fixed.horizontal() + }, + layout = wibox.layout.align.horizontal + } + end +) + +-- Enable sloppy focus, so that focus follows mouse. +client.connect_signal( + "mouse::enter", + function(c) + c:emit_signal("request::activate", "mouse_enter", {raise = false}) + end +) + +client.connect_signal( + "focus", + function(c) + c.border_color = beautiful.border_focus + end +) +client.connect_signal( + "unfocus", + function(c) + c.border_color = beautiful.border_normal + end +) +-- }}} + +apps = { + "/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1", + "xset dpms 300 15", -- dim screen after 5 min and lock 15 sec after + "xss-lock -- " .. lock, + "picom", + "nm-applet", + "killall cbatticon", + "cbatticon BAT0 -i symbolic", + "numlockx", +} + +for _, app in ipairs(apps) do + awful.spawn.once(app) +end diff --git a/.config/awesome/theme.lua b/.config/awesome/theme.lua new file mode 100644 index 0000000..d84806d --- /dev/null +++ b/.config/awesome/theme.lua @@ -0,0 +1,133 @@ +--------------------------- +-- Default awesome theme -- +--------------------------- + +local theme_assets = require("beautiful.theme_assets") +local xresources = require("beautiful.xresources") +local dpi = xresources.apply_dpi + +local gfs = require("gears.filesystem") +local themes_path = gfs.get_themes_dir() + +local wallpapers_path = gfs.get_configuration_dir() .. "wallpapers/" + +local theme = {} + +theme.font = "sans 8" + +theme.bg_normal = "#222222" +theme.bg_focus = "#535d6c" +theme.bg_urgent = "#ff0000" +theme.bg_minimize = "#444444" +theme.bg_systray = theme.bg_normal + +theme.fg_normal = "#aaaaaa" +theme.fg_focus = "#ffffff" +theme.fg_urgent = "#ffffff" +theme.fg_minimize = "#ffffff" + +theme.useless_gap = dpi(4) +theme.border_width = dpi(2) +theme.border_normal = "#000000" +theme.border_focus = "#e00000" +theme.border_marked = "#91231c" + +-- There are other variable sets +-- overriding the default one when +-- defined, the sets are: +-- taglist_[bg|fg]_[focus|urgent|occupied|empty|volatile] +-- tasklist_[bg|fg]_[focus|urgent] +-- titlebar_[bg|fg]_[normal|focus] +-- tooltip_[font|opacity|fg_color|bg_color|border_width|border_color] +-- mouse_finder_[color|timeout|animate_timeout|radius|factor] +-- prompt_[fg|bg|fg_cursor|bg_cursor|font] +-- hotkeys_[bg|fg|border_width|border_color|shape|opacity|modifiers_fg|label_bg|label_fg|group_margin|font|description_font] +-- Example: +--theme.taglist_bg_focus = "#ff0000" + +-- Generate taglist squares: +local taglist_square_size = dpi(4) +theme.taglist_squares_sel = theme_assets.taglist_squares_sel( + taglist_square_size, theme.fg_normal +) +theme.taglist_squares_unsel = theme_assets.taglist_squares_unsel( + taglist_square_size, theme.fg_normal +) + +-- Variables set for theming notifications: +-- notification_font +-- notification_[bg|fg] +-- notification_[width|height|margin] +-- notification_[border_color|border_width|shape|opacity] + +-- Variables set for theming the menu: +-- menu_[bg|fg]_[normal|focus] +-- menu_[border_color|border_width] +theme.menu_submenu_icon = themes_path.."default/submenu.png" +theme.menu_height = dpi(15) +theme.menu_width = dpi(100) + +-- You can add as many variables as +-- you wish and access them by using +-- beautiful.variable in your rc.lua +--theme.bg_widget = "#cc0000" + +-- Define the image to load +theme.titlebar_close_button_normal = themes_path.."default/titlebar/close_normal.png" +theme.titlebar_close_button_focus = themes_path.."default/titlebar/close_focus.png" + +theme.titlebar_minimize_button_normal = themes_path.."default/titlebar/minimize_normal.png" +theme.titlebar_minimize_button_focus = themes_path.."default/titlebar/minimize_focus.png" + +theme.titlebar_ontop_button_normal_inactive = themes_path.."default/titlebar/ontop_normal_inactive.png" +theme.titlebar_ontop_button_focus_inactive = themes_path.."default/titlebar/ontop_focus_inactive.png" +theme.titlebar_ontop_button_normal_active = themes_path.."default/titlebar/ontop_normal_active.png" +theme.titlebar_ontop_button_focus_active = themes_path.."default/titlebar/ontop_focus_active.png" + +theme.titlebar_sticky_button_normal_inactive = themes_path.."default/titlebar/sticky_normal_inactive.png" +theme.titlebar_sticky_button_focus_inactive = themes_path.."default/titlebar/sticky_focus_inactive.png" +theme.titlebar_sticky_button_normal_active = themes_path.."default/titlebar/sticky_normal_active.png" +theme.titlebar_sticky_button_focus_active = themes_path.."default/titlebar/sticky_focus_active.png" + +theme.titlebar_floating_button_normal_inactive = themes_path.."default/titlebar/floating_normal_inactive.png" +theme.titlebar_floating_button_focus_inactive = themes_path.."default/titlebar/floating_focus_inactive.png" +theme.titlebar_floating_button_normal_active = themes_path.."default/titlebar/floating_normal_active.png" +theme.titlebar_floating_button_focus_active = themes_path.."default/titlebar/floating_focus_active.png" + +theme.titlebar_maximized_button_normal_inactive = themes_path.."default/titlebar/maximized_normal_inactive.png" +theme.titlebar_maximized_button_focus_inactive = themes_path.."default/titlebar/maximized_focus_inactive.png" +theme.titlebar_maximized_button_normal_active = themes_path.."default/titlebar/maximized_normal_active.png" +theme.titlebar_maximized_button_focus_active = themes_path.."default/titlebar/maximized_focus_active.png" + +theme.wallpaper = wallpapers_path .. "landscape.png" + +-- You can use your own layout icons like this: +theme.layout_fairh = themes_path.."default/layouts/fairhw.png" +theme.layout_fairv = themes_path.."default/layouts/fairvw.png" +theme.layout_floating = themes_path.."default/layouts/floatingw.png" +theme.layout_magnifier = themes_path.."default/layouts/magnifierw.png" +theme.layout_max = themes_path.."default/layouts/maxw.png" +theme.layout_fullscreen = themes_path.."default/layouts/fullscreenw.png" +theme.layout_tilebottom = themes_path.."default/layouts/tilebottomw.png" +theme.layout_tileleft = themes_path.."default/layouts/tileleftw.png" +theme.layout_tile = themes_path.."default/layouts/tilew.png" +theme.layout_tiletop = themes_path.."default/layouts/tiletopw.png" +theme.layout_spiral = themes_path.."default/layouts/spiralw.png" +theme.layout_dwindle = themes_path.."default/layouts/dwindlew.png" +theme.layout_cornernw = themes_path.."default/layouts/cornernww.png" +theme.layout_cornerne = themes_path.."default/layouts/cornernew.png" +theme.layout_cornersw = themes_path.."default/layouts/cornersww.png" +theme.layout_cornerse = themes_path.."default/layouts/cornersew.png" + +-- Generate Awesome icon: +theme.awesome_icon = theme_assets.awesome_icon( + theme.menu_height, theme.bg_focus, theme.fg_focus +) + +-- Define the icon theme for application icons. If not set then the icons +-- from /usr/share/icons and /usr/share/icons/hicolor will be used. +theme.icon_theme = nil + +return theme + +-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80 diff --git a/.config/awesome/wallpapers b/.config/awesome/wallpapers new file mode 120000 index 0000000..114c16e --- /dev/null +++ b/.config/awesome/wallpapers @@ -0,0 +1 @@ +../wallpapers \ No newline at end of file diff --git a/.config/nvim/ftplugin/html.vim b/.config/nvim/ftplugin/html.vim new file mode 100644 index 0000000..ce69247 --- /dev/null +++ b/.config/nvim/ftplugin/html.vim @@ -0,0 +1,3 @@ +" variables +setlocal shiftwidth=2 +setlocal tabstop=2 diff --git a/.config/nvim/ftplugin/python.vim b/.config/nvim/ftplugin/python.vim new file mode 100644 index 0000000..cae2eb2 --- /dev/null +++ b/.config/nvim/ftplugin/python.vim @@ -0,0 +1,5 @@ +" variables +let g:black_linelength=79 + +" keybindings +nnoremap :Black diff --git a/.config/nvim/ftplugin/yaml.vim b/.config/nvim/ftplugin/yaml.vim new file mode 100644 index 0000000..071756e --- /dev/null +++ b/.config/nvim/ftplugin/yaml.vim @@ -0,0 +1,7 @@ +" variables +setlocal shiftwidth=2 +setlocal tabstop=2 + +" packages + +" keybindings diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim index b32c429..3473659 100644 --- a/.config/nvim/init.vim +++ b/.config/nvim/init.vim @@ -1,5 +1,5 @@ " variables -set path+='**' +set path+=**, set expandtab set smartindent set shiftwidth=4 @@ -9,59 +9,20 @@ set ignorecase set smartcase set list set mouse=a -set cc=81 +set cc=80 +set suffixes+=.pyc +set foldmethod=indent +set nofoldenable +set foldlevel=99 + +au BufWrite * :%s/\s\+$//e " packages so ~/.config/nvim/epitech_header.vim packadd! nvim-treesitter lua require('nvim-treesitter.configs').setup{highlight = {enable = true}} +packadd! black -"packadd! nvim-lspconfig -"lua <e', 'lua vim.diagnostic.open_float()', opts) -" vim.api.nvim_set_keymap('n', '[d', 'lua vim.diagnostic.goto_prev()', opts) -" vim.api.nvim_set_keymap('n', ']d', 'lua vim.diagnostic.goto_next()', opts) -" vim.api.nvim_set_keymap('n', 'q', 'lua vim.diagnostic.setloclist()', opts) -" -" -- Use an on_attach function to only map the following keys -" -- after the language server attaches to the current buffer -" local on_attach = function(client, bufnr) -" -- Enable completion triggered by -" vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') -" -" -- Mappings. -" -- See `:help vim.lsp.*` for documentation on any of the below functions -" vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', 'lua vim.lsp.buf.declaration()', opts) -" vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', 'lua vim.lsp.buf.definition()', opts) -" vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', 'lua vim.lsp.buf.hover()', opts) -" vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', 'lua vim.lsp.buf.implementation()', opts) -" vim.api.nvim_buf_set_keymap(bufnr, 'n', '', 'lua vim.lsp.buf.signature_help()', opts) -" vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) -" vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) -" vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) -" vim.api.nvim_buf_set_keymap(bufnr, 'n', 'D', 'lua vim.lsp.buf.type_definition()', opts) -" vim.api.nvim_buf_set_keymap(bufnr, 'n', 'rn', 'lua vim.lsp.buf.rename()', opts) -" vim.api.nvim_buf_set_keymap(bufnr, 'n', 'ca', 'lua vim.lsp.buf.code_action()', opts) -" vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', 'lua vim.lsp.buf.references()', opts) -" vim.api.nvim_buf_set_keymap(bufnr, 'n', 'f', 'lua vim.lsp.buf.formatting()', opts) -" end -" -" -- Use a loop to conveniently call 'setup' on multiple servers and -" -- map buffer local keybindings when the language server attaches -" local servers = { 'clangd' } -" for _, lsp in pairs(servers) do -" require('lspconfig')[lsp].setup { -" on_attach = on_attach, -" flags = { -" -- This will be the default in neovim 0.7+ -" debounce_text_changes = 150, -" } -" } -" end -"EOF " keybindings nnoremap :Header diff --git a/.config/nvim/pack/plugins/opt/black/autoload/black.vim b/.config/nvim/pack/plugins/opt/black/autoload/black.vim new file mode 100644 index 0000000..66c5b9c --- /dev/null +++ b/.config/nvim/pack/plugins/opt/black/autoload/black.vim @@ -0,0 +1,223 @@ +python3 << EndPython3 +import collections +import os +import sys +import vim + +def strtobool(text): + if text.lower() in ['y', 'yes', 't', 'true' 'on', '1']: + return True + if text.lower() in ['n', 'no', 'f', 'false' 'off', '0']: + return False + raise ValueError(f"{text} is not convertable to boolean") + +class Flag(collections.namedtuple("FlagBase", "name, cast")): + @property + def var_name(self): + return self.name.replace("-", "_") + + @property + def vim_rc_name(self): + name = self.var_name + if name == "line_length": + name = name.replace("_", "") + return "g:black_" + name + + +FLAGS = [ + Flag(name="line_length", cast=int), + Flag(name="fast", cast=strtobool), + Flag(name="skip_string_normalization", cast=strtobool), + Flag(name="quiet", cast=strtobool), + Flag(name="skip_magic_trailing_comma", cast=strtobool), +] + + +def _get_python_binary(exec_prefix): + try: + default = vim.eval("g:pymode_python").strip() + except vim.error: + default = "" + if default and os.path.exists(default): + return default + if sys.platform[:3] == "win": + return exec_prefix / 'python.exe' + return exec_prefix / 'bin' / 'python3' + +def _get_pip(venv_path): + if sys.platform[:3] == "win": + return venv_path / 'Scripts' / 'pip.exe' + return venv_path / 'bin' / 'pip' + +def _get_virtualenv_site_packages(venv_path, pyver): + if sys.platform[:3] == "win": + return venv_path / 'Lib' / 'site-packages' + return venv_path / 'lib' / f'python{pyver[0]}.{pyver[1]}' / 'site-packages' + +def _initialize_black_env(upgrade=False): + pyver = sys.version_info[:3] + if pyver < (3, 6, 2): + print("Sorry, Black requires Python 3.6.2+ to run.") + return False + + from pathlib import Path + import subprocess + import venv + virtualenv_path = Path(vim.eval("g:black_virtualenv")).expanduser() + virtualenv_site_packages = str(_get_virtualenv_site_packages(virtualenv_path, pyver)) + first_install = False + if not virtualenv_path.is_dir(): + print('Please wait, one time setup for Black.') + _executable = sys.executable + _base_executable = getattr(sys, "_base_executable", _executable) + try: + executable = str(_get_python_binary(Path(sys.exec_prefix))) + sys.executable = executable + sys._base_executable = executable + print(f'Creating a virtualenv in {virtualenv_path}...') + print('(this path can be customized in .vimrc by setting g:black_virtualenv)') + venv.create(virtualenv_path, with_pip=True) + except Exception: + print('Encountered exception while creating virtualenv (see traceback below).') + print(f'Removing {virtualenv_path}...') + import shutil + shutil.rmtree(virtualenv_path) + raise + finally: + sys.executable = _executable + sys._base_executable = _base_executable + first_install = True + if first_install: + print('Installing Black with pip...') + if upgrade: + print('Upgrading Black with pip...') + if first_install or upgrade: + subprocess.run([str(_get_pip(virtualenv_path)), 'install', '-U', 'black'], stdout=subprocess.PIPE) + print('DONE! You are all set, thanks for waiting ✨ 🍰 ✨') + if first_install: + print('Pro-tip: to upgrade Black in the future, use the :BlackUpgrade command and restart Vim.\n') + if virtualenv_site_packages not in sys.path: + sys.path.insert(0, virtualenv_site_packages) + return True + +if _initialize_black_env(): + import black + import time + +def get_target_version(tv): + if isinstance(tv, black.TargetVersion): + return tv + ret = None + try: + ret = black.TargetVersion[tv.upper()] + except KeyError: + print(f"WARNING: Target version {tv!r} not recognized by Black, using default target") + return ret + +def Black(**kwargs): + """ + kwargs allows you to override ``target_versions`` argument of + ``black.FileMode``. + + ``target_version`` needs to be cleaned because ``black.FileMode`` + expects the ``target_versions`` argument to be a set of TargetVersion enums. + + Allow kwargs["target_version"] to be a string to allow + to type it more quickly. + + Using also target_version instead of target_versions to remain + consistent to Black's documentation of the structure of pyproject.toml. + """ + start = time.time() + configs = get_configs() + + black_kwargs = {} + if "target_version" in kwargs: + target_version = kwargs["target_version"] + + if not isinstance(target_version, (list, set)): + target_version = [target_version] + target_version = set(filter(lambda x: x, map(lambda tv: get_target_version(tv), target_version))) + black_kwargs["target_versions"] = target_version + + mode = black.FileMode( + line_length=configs["line_length"], + string_normalization=not configs["skip_string_normalization"], + is_pyi=vim.current.buffer.name.endswith('.pyi'), + magic_trailing_comma=not configs["skip_magic_trailing_comma"], + **black_kwargs, + ) + quiet = configs["quiet"] + + buffer_str = '\n'.join(vim.current.buffer) + '\n' + try: + new_buffer_str = black.format_file_contents( + buffer_str, + fast=configs["fast"], + mode=mode, + ) + except black.NothingChanged: + if not quiet: + print(f'Already well formatted, good job. (took {time.time() - start:.4f}s)') + except Exception as exc: + print(exc) + else: + current_buffer = vim.current.window.buffer + cursors = [] + for i, tabpage in enumerate(vim.tabpages): + if tabpage.valid: + for j, window in enumerate(tabpage.windows): + if window.valid and window.buffer == current_buffer: + cursors.append((i, j, window.cursor)) + vim.current.buffer[:] = new_buffer_str.split('\n')[:-1] + for i, j, cursor in cursors: + window = vim.tabpages[i].windows[j] + try: + window.cursor = cursor + except vim.error: + window.cursor = (len(window.buffer), 0) + if not quiet: + print(f'Reformatted in {time.time() - start:.4f}s.') + +def get_configs(): + filename = vim.eval("@%") + path_pyproject_toml = black.find_pyproject_toml((filename,)) + if path_pyproject_toml: + toml_config = black.parse_pyproject_toml(path_pyproject_toml) + else: + toml_config = {} + + return { + flag.var_name: toml_config.get(flag.name, flag.cast(vim.eval(flag.vim_rc_name))) + for flag in FLAGS + } + + +def BlackUpgrade(): + _initialize_black_env(upgrade=True) + +def BlackVersion(): + print(f'Black, version {black.__version__} on Python {sys.version}.') + +EndPython3 + +function black#Black(...) + let kwargs = {} + for arg in a:000 + let arg_list = split(arg, '=') + let kwargs[arg_list[0]] = arg_list[1] + endfor +python3 << EOF +import vim +kwargs = vim.eval("kwargs") +EOF + :py3 Black(**kwargs) +endfunction + +function black#BlackUpgrade() + :py3 BlackUpgrade() +endfunction + +function black#BlackVersion() + :py3 BlackVersion() +endfunction diff --git a/.config/nvim/pack/plugins/opt/black/plugin/black.vim b/.config/nvim/pack/plugins/opt/black/plugin/black.vim new file mode 100644 index 0000000..3fc11fe --- /dev/null +++ b/.config/nvim/pack/plugins/opt/black/plugin/black.vim @@ -0,0 +1,80 @@ +" black.vim +" Author: Łukasz Langa +" Created: Mon Mar 26 23:27:53 2018 -0700 +" Requires: Vim Ver7.0+ +" Version: 1.2 +" +" Documentation: +" This plugin formats Python files. +" +" History: +" 1.0: +" - initial version +" 1.1: +" - restore cursor/window position after formatting +" 1.2: +" - use autoload script + +if exists("g:load_black") + finish +endif + +if v:version < 700 || !has('python3') + func! __BLACK_MISSING() + echo "The black.vim plugin requires vim7.0+ with Python 3.6 support." + endfunc + command! Black :call __BLACK_MISSING() + command! BlackUpgrade :call __BLACK_MISSING() + command! BlackVersion :call __BLACK_MISSING() + finish +endif + +let g:load_black = "py1.0" +if !exists("g:black_virtualenv") + if has("nvim") + let g:black_virtualenv = "~/.local/share/nvim/black" + else + let g:black_virtualenv = "~/.vim/black" + endif +endif +if !exists("g:black_fast") + let g:black_fast = 0 +endif +if !exists("g:black_linelength") + let g:black_linelength = 88 +endif +if !exists("g:black_skip_string_normalization") + if exists("g:black_string_normalization") + let g:black_skip_string_normalization = !g:black_string_normalization + else + let g:black_skip_string_normalization = 0 + endif +endif +if !exists("g:black_skip_magic_trailing_comma") + if exists("g:black_magic_trailing_comma") + let g:black_skip_magic_trailing_comma = !g:black_magic_trailing_comma + else + let g:black_skip_magic_trailing_comma = 0 + endif +endif +if !exists("g:black_quiet") + let g:black_quiet = 0 +endif +if !exists("g:black_target_version") + let g:black_target_version = "" +endif + +function BlackComplete(ArgLead, CmdLine, CursorPos) + return [ +\ 'target_version=py27', +\ 'target_version=py36', +\ 'target_version=py37', +\ 'target_version=py38', +\ 'target_version=py39', +\ 'target_version=py310', +\ ] +endfunction + +command! -nargs=* -complete=customlist,BlackComplete Black :call black#Black() +command! BlackUpgrade :call black#BlackUpgrade() +command! BlackVersion :call black#BlackVersion() diff --git a/.config/nvim/pack/plugins/opt/nvim-lspconfig b/.config/nvim/pack/plugins/opt/nvim-lspconfig index 0da8c12..3479473 160000 --- a/.config/nvim/pack/plugins/opt/nvim-lspconfig +++ b/.config/nvim/pack/plugins/opt/nvim-lspconfig @@ -1 +1 @@ -Subproject commit 0da8c129dc27e70770c3247c44988bbf0af6b1af +Subproject commit 347947355ba0a15d803cbd61b18f8bb8f401c793 diff --git a/.config/nvim/pack/plugins/opt/nvim-treesitter b/.config/nvim/pack/plugins/opt/nvim-treesitter index b46cb03..36830c4 160000 --- a/.config/nvim/pack/plugins/opt/nvim-treesitter +++ b/.config/nvim/pack/plugins/opt/nvim-treesitter @@ -1 +1 @@ -Subproject commit b46cb0389d92abffa516be487e7ea0610e8ce35b +Subproject commit 36830c4ce838f4e7b19d95d6099af1311f618c26 diff --git a/.config/wallpapers/debian11.png b/.config/wallpapers/debian11.png new file mode 100644 index 0000000..45b736d Binary files /dev/null and b/.config/wallpapers/debian11.png differ diff --git a/.config/zsh/.zsh_aliases b/.config/zsh/.zsh_aliases index 04f7977..15cae3e 100644 --- a/.config/zsh/.zsh_aliases +++ b/.config/zsh/.zsh_aliases @@ -1,10 +1,13 @@ +alias sudo='sudo ' alias pls='sudo ' alias cls='clear && l' alias config="git --git-dir=$HOME/.dotfiles --work-tree=$HOME" -alias wconfig="$EDITOR $HOME/.config/sway" +alias wconfig="$EDITOR $HOME/.config/awesome" alias zshconf="$EDITOR $ZDOTDIR/.zshrc && . $ZDOTDIR/.zshrc" -alias startgui="exec sway 2> $HOME/sway.log" -alias minecraft='DRI_PRIME=1 minecraft-launcher' +alias startgui='startx' alias umnt='sudo umount /mnt -R' alias vi="$EDITOR" alias tmp="cd $(mktemp -d)" + +alias k="kubectl" +alias dc=docker-compose diff --git a/.config/zsh/.zshrc b/.config/zsh/.zshrc index dfb952b..2341303 100644 --- a/.config/zsh/.zshrc +++ b/.config/zsh/.zshrc @@ -2,7 +2,7 @@ # Initialization code that may require console input (password prompts, [y/n] # confirmations, etc.) must go above this block; everything else may go below. if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then - source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" + . "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" fi # Path to your oh-my-zsh installation. @@ -76,7 +76,7 @@ CASE_SENSITIVE="true" # Add wisely, as too many plugins slow down shell startup. plugins=(git) -source $ZSH/oh-my-zsh.sh +. $ZSH/oh-my-zsh.sh # User configuration @@ -96,6 +96,9 @@ source $ZSH/oh-my-zsh.sh # export ARCHFLAGS="-arch x86_64" # To customize prompt, run `p10k configure` or edit ~/.config/zsh/.p10k.zsh. -[[ ! -f ~/.config/zsh/.p10k.zsh ]] || source ~/.config/zsh/.p10k.zsh +[[ ! -f ~/.config/zsh/.p10k.zsh ]] || . ~/.config/zsh/.p10k.zsh +eval "$(pyenv init -)" +pyenv shell 3.10.5 . "$ZDOTDIR"/.zsh_aliases +. "$ZDOTDIR"/.kubectl_aliases diff --git a/.zshenv b/.zshenv index a0e3527..1e9e294 100644 --- a/.zshenv +++ b/.zshenv @@ -1,4 +1,6 @@ -path=(~/bin ~/.local/bin $path) +export PYENV_ROOT="$HOME/.pyenv" + +path=(~/bin ~/.local/bin $PYENV_ROOT/bin $path) export XDG_CACHE_HOME="$HOME/.cache" export XDG_CONFIG_HOME="$HOME/.config" diff --git a/bin/epitest b/bin/epitest index 542cf1e..37f5b2c 100755 --- a/bin/epitest +++ b/bin/epitest @@ -1,2 +1,2 @@ -#!/usr/bin/bash +#!/bin/bash docker run -it --rm -v "$PWD":/tmp epitechcontent/epitest-docker:latest /bin/bash diff --git a/bin/mouse_360 b/bin/mouse_360 index 34c5510..f70b062 100755 --- a/bin/mouse_360 +++ b/bin/mouse_360 @@ -1,4 +1,4 @@ -#!/usr/bin/bash +#!/bin/bash set -e # counts target = 8182 ~ 25cm diff --git a/bin/scanpdf b/bin/scanpdf index 9922b99..b411363 100755 --- a/bin/scanpdf +++ b/bin/scanpdf @@ -1,4 +1,4 @@ -#!/usr/bin/bash +#!/bin/bash set -e usage() { diff --git a/bin/script b/bin/script index 643ad4c..6ca7fcb 100755 --- a/bin/script +++ b/bin/script @@ -1,4 +1,4 @@ -#!/usr/bin/bash +#!/bin/bash usage() { echo "Usage: $0 /dev/pts/{tty_nb}" diff --git a/bin/set-ddc-light b/bin/set-ddc-light index 22aa591..fb3b04c 100755 --- a/bin/set-ddc-light +++ b/bin/set-ddc-light @@ -1,4 +1,4 @@ -#!/usr/bin/bash +#!/bin/bash set -e CUR_LIGHT="$(set-light "$@")" diff --git a/bin/set-light b/bin/set-light index 8dddb15..bf9ea01 100755 --- a/bin/set-light +++ b/bin/set-light @@ -1,4 +1,4 @@ -#!/usr/bin/bash +#!/bin/bash set -e shopt -s extglob nullglob @@ -21,7 +21,7 @@ case "${1:0:1}" in exit 1 ;; "+"|"-") - NEW="$((CUR + $1))" + NEW="$((CUR + "$1"))" ;; *) NEW="$1" diff --git a/bin/set-vol b/bin/set-vol index 4eaddf8..a5acac1 100755 --- a/bin/set-vol +++ b/bin/set-vol @@ -1,21 +1,25 @@ -#!/usr/bin/bash +#!/bin/bash set -e -CUR="$(pactl get-sink-volume 0 | awk '$1 == "Volume:" {print substr($5, 1, length($5) - 1)}')" -SHIFT="${1}" +CUR_FILE=/var/tmp/current_volume + +set +e +CUR="$(cat "$CUR_FILE" || echo 50)" +set -e case "${1:0:1}" in '') exit 1 ;; '+'|'-') - NEW="$((CUR - CUR % SHIFT + SHIFT))" + NEW="$((CUR + "$1"))" ;; *) NEW="$1" ;; esac +[ "$NEW" -lt 0 ] && NEW=0 [ "$NEW" -gt 100 ] && NEW=100 pactl set-sink-volume 0 "$NEW"%