diff --git a/.bashrc b/.bashrc index 7eb3502..c58984d 100644 --- a/.bashrc +++ b/.bashrc @@ -172,9 +172,15 @@ alias edit-vim='cd ~/.config/nvim && vim .' hostname=$(cat ~/hostname) if [[ $hostname == "arch-bepis" ]]; then export SSH_AUTH_SOCK=/home/wholteza/.bitwarden-ssh-agent.sock +elif [[ $hostname == "surface" ]]; then + export SSH_AUTH_SOCK=/home/wholteza/.bitwarden-ssh-agent.sock +elif [[ $hostname == "printer" ]]; then + export SSH_AUTH_SOCK=/home/wholteza/.bitwarden-ssh-agent.sock elif [[ $hostname == "bepis-laptop" ]]; then export PATH="$PATH:/opt/nvim-linux-x86_64/bin" export SSH_AUTH_SOCK=/home/wholteza/snap/bitwarden/current/.bitwarden-ssh-agent.sock +elif [[ $hostname == "printer" ]]; then + export SSH_AUTH_SOCK=/home/wholteza/.bitwarden-ssh-agent.sock elif [[ $hostname == "dev1" ]]; then export PATH="$PATH:/opt/nvim-linux-x86_64/bin" fi @@ -198,10 +204,12 @@ export ompPath="$HOME/.config/oh-my-posh/theme.omp.json" ### Start oh my posh eval "$(oh-my-posh init bash --config $ompPath)" - +eval "$(fnm env --use-on-cd --shell bash)" if [ -d "$HOME/.cargo/env" ]; then . "$HOME/.cargo/env" fi export PATH="$HOME/.local/bin:$PATH" +export PATH=/home/$USER/.fnm:$PATH +eval "$(fnm env --use-on-cd --version-file-strategy=recursive)" diff --git a/.config/alacritty/alacritty.toml b/.config/alacritty/alacritty.toml index 21f9dcb..a4c7c3f 100644 --- a/.config/alacritty/alacritty.toml +++ b/.config/alacritty/alacritty.toml @@ -68,4 +68,4 @@ color = "#f5e0dc" size = 16.0 [font.normal] -family = "Fira Code Nerd Font" +family = "JetBrainsMono Nerd Font" diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua index d0224f0..f00e1c5 100644 --- a/.config/nvim/init.lua +++ b/.config/nvim/init.lua @@ -2,8 +2,8 @@ -- external requirements -- - use nvm and install @vue/typescript-plugin globally -- then ts_ls will use it for vue parsing. It is already in the arch install script. -local nvm_bin = os.getenv 'NVM_BIN' -local vue_typescript_plugin_path = nvm_bin .. '/../lib/node_modules/@vue/typescript-plugin' +local home = os.getenv 'HOME' +local vue_typescript_plugin_path = home .. '/node_modules/@vue/typescript-plugin' -- "sh" to [s]earch the [h]elp documentation. diff --git a/.config/nvim/lazy-lock.json b/.config/nvim/lazy-lock.json index 307455c..89bfa5c 100644 --- a/.config/nvim/lazy-lock.json +++ b/.config/nvim/lazy-lock.json @@ -8,7 +8,7 @@ "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, "gitsigns.nvim": { "branch": "main", "commit": "f780609807eca1f783a36a8a31c30a48fbe150c5" }, "indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" }, - "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, + "lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" }, "lazydev.nvim": { "branch": "main", "commit": "258d2a5ef4a3e3d6d9ba9da72c9725c53e9afcbd" }, "mason-lspconfig.nvim": { "branch": "main", "commit": "a1067cf84b4ff81b66d2bf4d01f4cbdb5de40bd0" }, "mason-nvim-dap.nvim": { "branch": "main", "commit": "86389a3dd687cfaa647b6f44731e492970034baa" }, @@ -24,7 +24,7 @@ "nvim-lint": { "branch": "master", "commit": "0864f81c681e15d9bdc1156fe3a17bd07db5a3ed" }, "nvim-lspconfig": { "branch": "master", "commit": "ef73a4f2a1ddf0439eb97b46de2aab265ddba1cd" }, "nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" }, - "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, + "nvim-treesitter": { "branch": "main", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, "nvim-web-devicons": { "branch": "master", "commit": "6e51ca170563330e063720449c21f43e27ca0bc1" }, "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, "telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" }, diff --git a/.config/requirements/install-arch.sh b/.config/requirements/install-arch.sh index e63f78d..6918435 100755 --- a/.config/requirements/install-arch.sh +++ b/.config/requirements/install-arch.sh @@ -1,15 +1,38 @@ #!/bin/bash # Installs requirements for my arch setup. +set -e + +sudo pacman -Suy archlinux-keyring +sudo pacman -Suy + sudo pacman -S \ neovim \ fd \ tmux \ nvm \ telegram-desktop \ - signal-desktop + signal-desktop \ + alacritty \ + rofi \ + ttf-jetbrains-mono-nerd + +if [ ! -d /home/wholteza/repos/yay ]; then + cd ~ + mkdir -p repos + sudo pacman -S --needed git base-devel + git clone https://aur.archlinux.org/yay.git + cd yay + makepkg -si +fi yay -S \ - librewolf-bin + librewolf-bin \ + fnm \ + oh-my-posh + +fnm install 24 +fnm use 24 + +npm install -npm install -g @vue/typescript-plugin diff --git a/.config/screenlayout/apply-screen-layout.sh b/.config/screenlayout/apply-screen-layout.sh index 36c0c27..6e0d2cb 100755 --- a/.config/screenlayout/apply-screen-layout.sh +++ b/.config/screenlayout/apply-screen-layout.sh @@ -5,6 +5,10 @@ if [[ $hostname == "bepis" ]]; then $(~/.config/screenlayout/desktop.sh) elif [[ $hostname == "arch-bepis" ]]; then $(~/.config/screenlayout/arch-bepis-desktop-sway.sh) +elif [[ $hostname == "printer" ]]; then + $(~/.config/screenlayout/printer.sh) +elif [[ $hostname == "surface" ]]; then + $(~/.config/screenlayout/surface.sh) elif [[ $hostname == "bepis-laptop" ]]; then $(~/.config/screenlayout/laptop.sh) fi diff --git a/.config/screenlayout/printer.sh b/.config/screenlayout/printer.sh new file mode 100755 index 0000000..26d2194 --- /dev/null +++ b/.config/screenlayout/printer.sh @@ -0,0 +1 @@ +swaymsg output HDMI-A-3 mode 2560x1440 bg ~/.config/feh/wallpaper.png stretch scale 1.2 diff --git a/.config/screenlayout/surface.sh b/.config/screenlayout/surface.sh new file mode 100755 index 0000000..eba495a --- /dev/null +++ b/.config/screenlayout/surface.sh @@ -0,0 +1 @@ +swaymsg output eDP-1 mode 2256x1504 bg ~/.config/feh/wallpaper.png stretch scale 1.2 diff --git a/.config/sway/autostart b/.config/sway/autostart new file mode 100644 index 0000000..6e15529 --- /dev/null +++ b/.config/sway/autostart @@ -0,0 +1,15 @@ +# Autostart +## Screen configuration +exec_always export hostname="$(cat /etc/hostname)" && ~/.config/screenlayout/apply-screen-layout.sh +## Applications +exec --no-startup-id blueman-applet +exec --no-startup-id bitwarden-desktop +exec --no-startup-id sunshine +## Lock screen when idle, also shut down screens +exec swayidle -w \ + timeout 600 $swaylock \ + timeout 630 'swaymsg "output * power off"' \ + resume 'swaymsg "output * power on"' +## Start XDG autostart .desktop files using dex. See also +### https://wiki.archlinux.org/index.php/XDG_Autostart +exec --no-startup-id dex --autostart --environment i3 diff --git a/.config/sway/bar b/.config/sway/bar new file mode 100644 index 0000000..e3c1838 --- /dev/null +++ b/.config/sway/bar @@ -0,0 +1,16 @@ +# BAR +bar { + swaybar_command waybar + colors { + background $base + statusline $text + focused_statusline $text + focused_separator $base + + # target border bg text + focused_workspace $base $mauve $crust + active_workspace $base $surface2 $text + inactive_workspace $base $base $text + urgent_workspace $base $red $crust + } +} diff --git a/.config/sway/catppuccin-mocha b/.config/sway/catppuccin-mocha-colors similarity index 100% rename from .config/sway/catppuccin-mocha rename to .config/sway/catppuccin-mocha-colors diff --git a/.config/sway/config b/.config/sway/config index ac94c9b..eeb662a 100644 --- a/.config/sway/config +++ b/.config/sway/config @@ -1,214 +1,21 @@ -include catppuccin-mocha -#USER-SET VARIABLES -#Wallpaper path -set $wallpaper_path '/home/wholteza/.config/feh/wallpaper.png' +# Imports +## Color varibles for theme +include variables +include catppuccin-mocha-colors +include autostart +include keybinds +include bar +include window +include workspaces +include input -set $nord-aurora-red #bf616a -set $nord-aurora-orange #d08770 -set $nord-aurora-yellow #ebcb8b -set $nord-aurora-green #a3be8c -set $nord-aurora-purple #b48ead +# Settings that are either too small to have their own file, or that i cannot think of a name for. -set $nord-frost-1 #8fbcbb -set $nord-frost-2 #88c0d0 -set $nord-frost-3 #81a1c1 -set $nord-frost-4 #5e81ac +## FONT +font pango:JetBrainsMono Nerd Font 14 -set $nord-snow-1 #d8dee9 -set $nord-snow-2 #e5e9f0 -set $nord-snow-3 #eceff4 - -set $nord-polar-1 #2e3440 -set $nord-polar-2 #3b4252 -set $nord-polar-3 #434c5e -set $nord-polar-4 #4c566a - -#i3-bar colors -set $bg-color #2f343f -set $inactive-bg-color #2f343f -set $text-color #0DA321 -set $inactive-text-color #505254 -set $urgent-bg-color #E53935 - -exec_always export hostname="$(cat /etc/hostname)" && ~/.config/screenlayout/apply-screen-layout.sh -exec_always export hostname="$(cat /etc/hostname)" && ~/.config/keyboard/apply-keyboard-layout.sh - -set $mod Mod4 - -font pango:DejaVu 14 -# This font is widely installed, provides lots of unicode glyphs, right-to-left -# text rendering and scalability on retina/hidpi displays (thanks to pango). - -# Start XDG autostart .desktop files using dex. See also -# https://wiki.archlinux.org/index.php/XDG_Autostart -exec --no-startup-id dex --autostart --environment i3 - -# The combination of xss-lock, nm-applet and pactl is a popular choice, so -# they are included here as an example. Modify as you see fit. - -# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the -# screen before suspend. Use loginctl lock-session to lock your screen. -exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork - -# NetworkManager is the most popular way to manage wireless networks on Linux, -# and nm-applet is a desktop environment-independent system tray GUI for it. -# exec --no-startup-id nm-applet - -# Use pactl to adjust volume in PulseAudio. -set $refresh_i3status killall -SIGUSR1 i3status -# bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status -# bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status -# bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status -# bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status - -# Use Mouse+$mod to drag floating windows to their wanted position -floating_modifier $mod - -# move tiling windows via drag & drop by left-clicking into the title bar, -# or left-clicking anywhere into the window while holding the floating modifier. -#tiling_drag modifier titlebar - -# start a terminal -bindsym $mod+Return exec alacritty --config-file /home/wholteza/.config/alacritty/alacritty.toml - -# kill focused window -bindsym $mod+Shift+q kill - -# start dmenu (a program launcher) -bindsym $mod+d exec --no-startup-id "rofi -theme catppuccin-default -combi-modi window,drun,ssh -font 'pango:monospace 18' -show combi" -# A more modern dmenu replacement is rofi: -# bindcode $mod+40 exec "rofi -modi drun,run -show drun" -# There also is i3-dmenu-desktop which only displays applications shipping a -# .desktop file. It is a wrapper around dmenu, so you need that installed. -# bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop - -# change focus -bindsym $mod+j focus left -bindsym $mod+k focus down -bindsym $mod+l focus up -bindsym $mod+odiaeresis focus right - -# alternatively, you can use the cursor keys: -bindsym $mod+Left focus left -bindsym $mod+Down focus down -bindsym $mod+Up focus up -bindsym $mod+Right focus right - -# move focused window -bindsym $mod+Shift+j move left -bindsym $mod+Shift+k move down -bindsym $mod+Shift+l move up -bindsym $mod+Shift+odiaeresis move right - -# move focused workspace between monitors -bindsym $mod+Ctrl+greater move workspace to output right -bindsym $mod+Ctrl+less move workspace to output left - -# alternatively, you can use the cursor keys: -bindsym $mod+Shift+Left move left -bindsym $mod+Shift+Down move down -bindsym $mod+Shift+Up move up -bindsym $mod+Shift+Right move right - -# split in horizontal orientation -bindsym $mod+v split h - -# split in vertical orientation -bindsym $mod+h split v - -# enter fullscreen mode for the focused container -bindsym $mod+f fullscreen toggle - -# change container layout (stacked, tabbed, toggle split) -bindsym $mod+s layout stacking -bindsym $mod+w layout tabbed -bindsym $mod+e layout toggle split - -# toggle tiling / floating -bindsym $mod+Shift+space floating toggle - -# change focus between tiling / floating windows -bindsym $mod+space focus mode_toggle - -# focus the parent container -bindsym $mod+a focus parent - -# focus the child container -#bindsym $mod+d focus child - -# Define names for default workspaces for which we configure key bindings later on. -# We use variables to avoid repeating the names in multiple places. -set $ws1 "1: Whatever" -set $ws2 "2: Social" -set $ws3 "3: Development" -set $ws4 "4: Browsing" -set $ws5 "5: Games" -set $ws6 "6" -set $ws7 "7" -set $ws8 "8" -set $ws9 "9: VPN" -set $ws10 "10: Terminals" - -# switch to workspace -bindsym $mod+1 workspace number $ws1 -bindsym $mod+2 workspace number $ws2 -bindsym $mod+3 workspace number $ws3 -bindsym $mod+4 workspace number $ws4 -bindsym $mod+5 workspace number $ws5 -bindsym $mod+6 workspace number $ws6 -bindsym $mod+7 workspace number $ws7 -bindsym $mod+8 workspace number $ws8 -bindsym $mod+9 workspace number $ws9 -bindsym $mod+0 workspace number $ws10 - -# move focused container to workspace -bindsym $mod+Shift+1 move container to workspace number $ws1 -bindsym $mod+Shift+2 move container to workspace number $ws2 -bindsym $mod+Shift+3 move container to workspace number $ws3 -bindsym $mod+Shift+4 move container to workspace number $ws4 -bindsym $mod+Shift+5 move container to workspace number $ws5 -bindsym $mod+Shift+6 move container to workspace number $ws6 -bindsym $mod+Shift+7 move container to workspace number $ws7 -bindsym $mod+Shift+8 move container to workspace number $ws8 -bindsym $mod+Shift+9 move container to workspace number $ws9 -bindsym $mod+Shift+0 move container to workspace number $ws10 - -# Brightness -bindsym XF86MonBrightnessUp exec --no-startup-id brightnessctl set +5% -bindsym XF86MonBrightnessDown exec --no-startup-id brightnessctl set 5%- - -# Volume -bindsym XF86AudioMute exec amixer sset 'Master' toggle -bindsym XF86AudioLowerVolume exec amixer sset 'Master' 5%- -bindsym XF86AudioRaiseVolume exec amixer sset 'Master' 5%+ - -# Reload sway (reload configuration file) -bindsym $mod+Shift+c reload -# restart i3 inplace (preserves your layout/session, can be used to upgrade i3) -bindsym $mod+Shift+r restart -# exit i3 (logs you out of your X session) -bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'" - -# resize window (you can also use the mouse for that) -mode "resize" { - bindsym j resize shrink width 10 px or 10 ppt - bindsym k resize grow height 10 px or 10 ppt - bindsym l resize shrink height 10 px or 10 ppt - bindsym odiaeresis resize grow width 10 px or 10 ppt - - bindsym Left resize shrink width 10 px or 10 ppt - bindsym Down resize grow height 10 px or 10 ppt - bindsym Up resize shrink height 10 px or 10 ppt - bindsym Right resize grow width 10 px or 10 ppt - - bindsym Return mode "default" - bindsym Escape mode "default" - bindsym $mod+r mode "default" -} - -bindsym $mod+r mode "resize" - -# target title bg text indicator border +## Sway colors +### target title bg text indicator border client.focused $lavender $base $text $rosewater $lavender client.focused_inactive $overlay0 $base $text $rosewater $overlay0 client.unfocused $overlay0 $base $text $rosewater $overlay0 @@ -216,113 +23,4 @@ client.urgent $peach $base $peach $overlay0 $peach client.placeholder $overlay0 $base $text $overlay0 $overlay0 client.background $base -# bar -bar { - colors { - background $base - statusline $text - focused_statusline $text - focused_separator $base - # target border bg text - focused_workspace $base $mauve $crust - active_workspace $base $surface2 $text - inactive_workspace $base $base $text - urgent_workspace $base $red $crust - } -} - - -#KEYBINDS -bindsym $mod+Shift+z exec /home/wholteza/.config/i3/lock -b=0x8 -n -bindsym Control+Mod1+s exec /home/wholteza/.config/passmenu/passmenu -bindsym $mod+Shift+p exec arandr -bindsym $mod+p exec /home/wholteza/.config/screenlayout/screenmenu.sh -bindsym --release Print exec grim -g "$(slurp -d)" "/home/wholteza/Pictures/$(date)_fullscreen.png" -bindsym --release $mod+Shift+s exec grim -g "$(slurp -d)" - | wl-copy -t image/png -bindsym --release $mod+Ctrl+s exec grim -g "$(slurp -d)" "/home/wholteza/Pictures/$(date)_selection.png" -bindsym --release Control+Mod1+i exec grim -g "$(slurp -d)" "/home/wholteza/Pictures/$(date)_selection.png" - - -title_align center -default_border normal - -# hide_edge_borders vertical -bindsym Control+Shift+x [class="^.*"] border toggle -for_window [class="plasma.emojier"] floating enable -for_window [class="Solaar"] floating enable -for_window [class="Arandr"] floating enable -for_window [class="OVPN"] floating enable - -for_window [title="Bitwarden"] floating enable -for_window [title="Bitwarden"] resize set width 500 px height 700 px - -for_window [title="Extension.*"] floating enable -for_window [title="Extension.*"] resize set width 500 px height 700 px - -for_window [title="Alacritty"] border none -for_window [title=".*Mozilla Firefox"] border none -for_window [title=".*LibreWolf"] border none - -for_window [title="Bolt Launcher"] floating enable -for_window [title="Bolt Launcher"] border none -for_window [title="RuneLite.*"] floating enable -for_window [title="RuneLite.*"] border none -for_window [title="RuneLite.*"] resize set width 2440 px height 1420 px - -for_window [class="steam"] \ - fullscreen disable; \ - floating enable; \ - border pixel 0; \ - resize set $display_w $display_h; \ - move absolute position 0 0; \ - -# Assigning application to workspaces -## 1: is reserved for whatever -## 2: Social -assign [class="TelegramDesktop"] $ws2 -assign [class="Caprine"] $ws2 -assign [class="discord"] $ws2 -assign [class="Signal"] $ws2 -## 3: Development -assign [class="Code"] $ws3 -## 4: Browsing -assign [class="firefox"] $ws4 -assign [class="Firefox"] $ws4 -## 5: Games -assign [class="Moonlight"] $ws5 -assign [class="steam"] $ws5 -assign [class="dota2"] $ws5 - - -## Set keyboard layout -input * { - xkb_layout "se" -} - -## Remove pointer acceleration -input "type:pointer" { - accel_profile "flat" - pointer_accel 0 -} - -# NOTE: Screens are managed by apply-screen-layout.sh - -## Run secondary sceen in 1080p -# output HDMI-A-3 mode 3440x1440@99.99Hz pos 1080 237 bg /home/wholteza/.config/feh/wallpaper.png fit #1b1f28 -# output DP-2 mode 1920x1080 pos 0 0 transform 270 bg /home/wholteza/.config/feh/wallpaper.png fit #1b1f28 - -## Run only primary screen in 2k not sure if this actually works with 99.99Hz -#output HDMI-A-3 mode 2560x1440@99.99Hz pos 1440 475 bg /home/wholteza/.config/feh/wallpaper.png fit #1b1f28 - -## Main setup with ultrawide and portrait secondary screen -#output HDMI-A-3 mode 3440x1440@99.99Hz pos 1440 475 bg /home/wholteza/.config/feh/wallpaper.png fit #1b1f28 -#output DP-2 mode 2560x1440 pos 0 0 transform 270 bg /home/wholteza/.config/feh/wallpaper.png fit #1b1f28 - -## Main -##output HDMI-A-3 mode 3440x1440@99.99Hz bg /home/wholteza/.config/feh/wallpaper.png fit #1b1f28 - -# Autostart applications -exec --no-startup-id blueman-applet -exec --no-startup-id bitwarden-desktop -exec --no-startup-id sunshine diff --git a/.config/sway/input b/.config/sway/input new file mode 100644 index 0000000..c71a376 --- /dev/null +++ b/.config/sway/input @@ -0,0 +1,17 @@ +# Input configuration +## Default to swedish qwerty +input * { + xkb_layout "se" +} +## Bind backspace to capslock +input "*" xkb_options caps:backspace +## Set colemak layout on surface laptop +input 1118:2478:Microsoft_Surface_045E:09AE_Keyboard xkb_layout colemak-se +## Set colemak layout on printer desktop +input 9494:26:CM_Storm_Keyboard_--_QuickFire_XT xkb_layout colemak-se +## Remove pointer acceleration +input "type:pointer" { + accel_profile "flat" + pointer_accel 0 +} + diff --git a/.config/sway/keybinds b/.config/sway/keybinds new file mode 100644 index 0000000..33b0c98 --- /dev/null +++ b/.config/sway/keybinds @@ -0,0 +1,144 @@ +# KEYBINDS +# Use Mouse+$mod to drag floating windows to their wanted position +floating_modifier $mod + +## Start a terminal +bindsym $mod+Return exec alacritty --config-file /home/wholteza/.config/alacritty/alacritty.toml + +## Kill focused window +bindsym $mod+Shift+q kill + +## Start program launcher +bindsym $mod+d exec --no-startup-id "rofi -theme catppuccin-default -combi-modi window,drun,ssh -font 'pango:monospace 18' -show combi" + +## Change focus +bindsym $mod+j focus left +bindsym $mod+k focus down +bindsym $mod+l focus up +bindsym $mod+odiaeresis focus right + +## Alternatively, you can use the cursor keys: +bindsym $mod+Left focus left +bindsym $mod+Down focus down +bindsym $mod+Up focus up +bindsym $mod+Right focus right + +## Move focused window +bindsym $mod+Shift+j move left +bindsym $mod+Shift+k move down +bindsym $mod+Shift+l move up +bindsym $mod+Shift+odiaeresis move right + +## Move focused workspace between monitors +bindsym $mod+Ctrl+greater move workspace to output right +bindsym $mod+Ctrl+less move workspace to output left + +## Alternatively, you can use the cursor keys: +bindsym $mod+Shift+Left move left +bindsym $mod+Shift+Down move down +bindsym $mod+Shift+Up move up +bindsym $mod+Shift+Right move right + +## Split in horizontal orientation +bindsym $mod+v split h + +## Split in vertical orientation +bindsym $mod+h split v + +## Enter fullscreen mode for the focused container +bindsym $mod+f fullscreen toggle + +## Change container layout (stacked, tabbed, toggle split) +bindsym $mod+s layout stacking +bindsym $mod+w layout tabbed +bindsym $mod+e layout toggle split + +## Toggle tiling / floating +bindsym $mod+Shift+space floating toggle + +## Change focus between tiling / floating windows +bindsym $mod+space focus mode_toggle + +## Focus the parent container +bindsym $mod+a focus parent + +## Focus the child container +# bindsym $mod+d focus child + +## Lock session +bindsym $mod+Shift+z exec $swaylock + +## Open passmenu password manager (deprecated) +bindsym Control+Mod1+s exec /home/wholteza/.config/passmenu/passmenu + +## Open screenmenu to manually apply a screen layout +bindsym $mod+p exec /home/wholteza/.config/screenlayout/screenmenu.sh + +## Printscreen binds (requires grim, slurp and wl-copy) +bindsym --release Print exec grim -g "$(slurp -d)" "/home/wholteza/Pictures/$(date)_fullscreen.png" +bindsym --release $mod+Shift+s exec grim -g "$(slurp -d)" - | wl-copy -t image/png +bindsym --release $mod+Ctrl+s exec grim -g "$(slurp -d)" "/home/wholteza/Pictures/$(date)_selection.png" +bindsym --release Control+Mod1+i exec grim -g "$(slurp -d)" "/home/wholteza/Pictures/$(date)_selection.png" + +## hide_edge_borders vertical +bindsym Control+Shift+x [class="^.*"] border toggle + +## resize window (you can also use the mouse for that) +mode "resize" { + bindsym j resize shrink width 10 px or 10 ppt + bindsym k resize grow height 10 px or 10 ppt + bindsym l resize shrink height 10 px or 10 ppt + bindsym h resize grow width 10 px or 10 ppt + + bindsym Left resize shrink width 10 px or 10 ppt + bindsym Down resize grow height 10 px or 10 ppt + bindsym Up resize shrink height 10 px or 10 ppt + bindsym Right resize grow width 10 px or 10 ppt + + bindsym Return mode "default" + bindsym Escape mode "default" + bindsym $mod+r mode "default" +} +bindsym $mod+r mode "resize" + +## switch to workspace +bindsym $mod+1 workspace number $ws1 +bindsym $mod+2 workspace number $ws2 +bindsym $mod+3 workspace number $ws3 +bindsym $mod+4 workspace number $ws4 +bindsym $mod+5 workspace number $ws5 +bindsym $mod+6 workspace number $ws6 +bindsym $mod+7 workspace number $ws7 +bindsym $mod+8 workspace number $ws8 +bindsym $mod+9 workspace number $ws9 +bindsym $mod+0 workspace number $ws10 + +## move focused container to workspace +bindsym $mod+Shift+1 move container to workspace number $ws1 +bindsym $mod+Shift+2 move container to workspace number $ws2 +bindsym $mod+Shift+3 move container to workspace number $ws3 +bindsym $mod+Shift+4 move container to workspace number $ws4 +bindsym $mod+Shift+5 move container to workspace number $ws5 +bindsym $mod+Shift+6 move container to workspace number $ws6 +bindsym $mod+Shift+7 move container to workspace number $ws7 +bindsym $mod+Shift+8 move container to workspace number $ws8 +bindsym $mod+Shift+9 move container to workspace number $ws9 +bindsym $mod+Shift+0 move container to workspace number $ws10 + +## Brightness +bindsym XF86MonBrightnessUp exec --no-startup-id brightnessctl set +5% +bindsym XF86MonBrightnessDown exec --no-startup-id brightnessctl set 5%- + +## Volume +bindsym XF86AudioMute exec amixer sset 'Master' toggle +bindsym XF86AudioLowerVolume exec amixer sset 'Master' 5%- +bindsym XF86AudioRaiseVolume exec amixer sset 'Master' 5%+ + +## Reload sway (reload configuration file) +bindsym $mod+Shift+c reload + +## restart i3 inplace (preserves your layout/session, can be used to upgrade i3) +bindsym $mod+Shift+r restart + +## exit i3 (logs you out of your X session) +bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'" diff --git a/.config/sway/variables b/.config/sway/variables new file mode 100644 index 0000000..7fe7f3f --- /dev/null +++ b/.config/sway/variables @@ -0,0 +1,18 @@ +# Variables +set $mod Mod4 + +set $wallpaper_path '/home/wholteza/.config/feh/wallpaper.png' +set $swaylock 'swaylock -fkL -s stretch -i /home/wholteza/.config/feh/wallpaper.png' + +## Define names for default workspaces for which we configure key bindings later on. +### Search up nerd font icons to get more icons +set $ws1 "1:  Term" +set $ws2 "2: 󰭹 Social" +set $ws3 "3:  Dev" +set $ws4 "4: 󰈹 Browse" +set $ws5 "5: 󰓓 Games" +set $ws6 "6" +set $ws7 "7" +set $ws8 "8" +set $ws9 "9: " +set $ws10 "10: " diff --git a/.config/sway/window b/.config/sway/window new file mode 100644 index 0000000..0c3ed35 --- /dev/null +++ b/.config/sway/window @@ -0,0 +1,29 @@ +# Default window settings +title_align center +default_border normal + + +# Application specific window settings +for_window [class="plasma.emojier"] floating enable +for_window [class="Solaar"] floating enable +for_window [class="Arandr"] floating enable +for_window [class="OVPN"] floating enable +for_window [title="Bitwarden"] floating enable +for_window [title="Bitwarden"] resize set width 500 px height 700 px +for_window [title="Extension.*"] floating enable +for_window [title="Extension.*"] resize set width 500 px height 700 px +for_window [title="Alacritty"] border none +for_window [title=".*Mozilla Firefox"] border none +for_window [title=".*LibreWolf"] border none +for_window [title="Bolt Launcher"] floating enable +for_window [title="Bolt Launcher"] border none +for_window [title="RuneLite.*"] floating enable +for_window [title="RuneLite.*"] border none +for_window [title="RuneLite.*"] resize set width 2440 px height 1420 px +for_window [class="steam"] \ + fullscreen disable; \ + floating enable; \ + border pixel 0; \ + resize set $display_w $display_h; \ + move absolute position 0 0; \ + diff --git a/.config/sway/workspaces b/.config/sway/workspaces new file mode 100644 index 0000000..733d82e --- /dev/null +++ b/.config/sway/workspaces @@ -0,0 +1,14 @@ +# Assigning application to workspaces +assign [class="TelegramDesktop"] $ws2 +assign [class="Caprine"] $ws2 +assign [class="discord"] $ws2 +assign [class="Signal"] $ws2 +## 3: Development +assign [class="Code"] $ws3 +## 4: Browsing +assign [class="firefox"] $ws4 +assign [class="Firefox"] $ws4 +## 5: Games +assign [class="Moonlight"] $ws5 +assign [class="steam"] $ws5 +assign [class="dota2"] $ws5 diff --git a/.config/waybar/config.jsonc b/.config/waybar/config.jsonc new file mode 100644 index 0000000..efdc81b --- /dev/null +++ b/.config/waybar/config.jsonc @@ -0,0 +1,191 @@ +// -*- mode: jsonc -*- +{ + "position": "bottom", // Waybar position (top|bottom|left|right) + "height": 16, // Waybar height (to be removed for auto height) + "spacing": 4, // Gaps between modules (4px) + "modules-left": [ + "sway/workspaces", + "sway/mode", + "sway/scratchpad", + "custom/media" + ], + "modules-center": [ + ], + "modules-right": [ + "mpd", + "idle_inhibitor", + "pulseaudio", + "network", + "power-profiles-daemon", + "cpu", + "memory", + "temperature", + "backlight", + "battery", + "clock", + "tray", + ], + "keyboard-state": { + "numlock": true, + "capslock": true, + "format": "{name} {icon}", + "format-icons": { + "locked": "", + "unlocked": "" + } + }, + "sway/mode": { + "format": "{}" + }, + "sway/scratchpad": { + "format": "{icon} {count}", + "show-empty": false, + "format-icons": ["", ""], + "tooltip": true, + "tooltip-format": "{app}: {title}" + }, + "mpd": { + "format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ", + "format-disconnected": "Disconnected ", + "format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ", + "unknown-tag": "N/A", + "interval": 5, + "consume-icons": { + "on": " " + }, + "random-icons": { + "off": " ", + "on": " " + }, + "repeat-icons": { + "on": " " + }, + "single-icons": { + "on": "1 " + }, + "state-icons": { + "paused": "", + "playing": "" + }, + "tooltip-format": "MPD (connected)", + "tooltip-format-disconnected": "MPD (disconnected)" + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "", + "deactivated": "" + } + }, + "tray": { + // "icon-size": 21, + "spacing": 10, + // "icons": { + // "blueman": "bluetooth", + // "TelegramDesktop": "$HOME/.local/share/icons/hicolor/16x16/apps/telegram.png" + // } + }, + "clock": { + // "timezone": "America/New_York", + "tooltip-format": "{:%Y %B}\n{calendar}", + "format-alt": "{:%Y-%m-%d}" + }, + "cpu": { + "format": "{usage}% ", + "tooltip": false + }, + "memory": { + "format": "{}% " + }, + "temperature": { + // "thermal-zone": 2, + // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input", + "critical-threshold": 80, + // "format-critical": "{temperatureC}°C {icon}", + "format": "{temperatureC}°C {icon}", + "format-icons": ["", "", ""] + }, + "backlight": { + // "device": "acpi_video1", + "format": "{percent}% {icon}", + "format-icons": ["", "", "", "", "", "", "", "", ""] + }, + "battery": { + "states": { + // "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "{capacity}% {icon}", + "format-full": "{capacity}% {icon}", + "format-charging": "{capacity}% ", + "format-plugged": "{capacity}% ", + "format-alt": "{time} {icon}", + // "format-good": "", // An empty format will hide the module + // "format-full": "", + "format-icons": ["", "", "", "", ""] + }, + "power-profiles-daemon": { + "format": "{icon}", + "tooltip-format": "Power profile: {profile}\nDriver: {driver}", + "tooltip": true, + "format-icons": { + "default": "", + "performance": "", + "balanced": "", + "power-saver": "" + } + }, + "network": { + // "interface": "wlp2*", // (Optional) To force the use of this interface + "format-wifi": "{essid} ({signalStrength}%) ", + "format-ethernet": "{ipaddr}/{cidr} ", + "tooltip-format": "{ifname} via {gwaddr} ", + "format-linked": "{ifname} (No IP) ", + "format-disconnected": "Disconnected ⚠", + "format-alt": "{ifname}: {ipaddr}/{cidr}" + }, + "pulseaudio": { + // "scroll-step": 1, // %, can be a float + "format": "{volume}% {icon} {format_source}", + "format-bluetooth": "{volume}% {icon} {format_source}", + "format-bluetooth-muted": " {icon} {format_source}", + "format-muted": " {format_source}", + "format-source": "{volume}% ", + "format-source-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + }, + "on-click": "pavucontrol" + }, + "custom/media": { + "format": "{icon} {text}", + "return-type": "json", + "max-length": 40, + "format-icons": { + "spotify": "", + "default": "🎜" + }, + "escape": true, + "exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder + // "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name + }, + "custom/power": { + "format" : "⏻ ", + "tooltip": false, + "menu": "on-click", + "menu-file": "$HOME/.config/waybar/power_menu.xml", // Menu file in resources folder + "menu-actions": { + "shutdown": "shutdown", + "reboot": "reboot", + "suspend": "systemctl suspend", + "hibernate": "systemctl hibernate" + } + } +} diff --git a/.config/waybar/power_menu.xml b/.config/waybar/power_menu.xml new file mode 100644 index 0000000..39942c3 --- /dev/null +++ b/.config/waybar/power_menu.xml @@ -0,0 +1,29 @@ + + + + + + Suspend + + + + + Hibernate + + + + + Shutdown + + + + + + + + Reboot + + + + + diff --git a/.config/waybar/style.css b/.config/waybar/style.css new file mode 100644 index 0000000..0f85a55 --- /dev/null +++ b/.config/waybar/style.css @@ -0,0 +1,324 @@ +* { + font-family: "JetBrainsMono Nerd Font", FontAwesome, Roboto, Helvetica, Arial, sans-serif; + font-size: 16px; +} + +window#waybar { + background-color: #1e1e2e; + color: #ffffff; + transition-property: background-color; + transition-duration: .5s; +} + +window#waybar.hidden { + opacity: 0.2; +} + +button { + /* Use box-shadow instead of border so the text isn't offset */ + box-shadow: inset 0 -3px transparent; + /* Avoid rounded borders under each button name */ + border: none; + border-radius: 0; +} + +/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ +button:hover { + background: inherit; + box-shadow: inset 0 -3px #ffffff; +} + +/* you can set a style on hover for any module like this */ +#pulseaudio:hover { + background-color: #a37800; +} + +#workspaces button { + padding: 0 8px; + background-color: transparent; + color: #cdd6f1; +} + +#workspaces button:hover { + background: rgba(0, 0, 0, 0.2); +} + +#workspaces button.focused, +#workspaces button.active { + background-color: #a6e3a1; + color: #1e1e2e; + /* box-shadow: inset 0 -3px #ffffff; */ +} + +#workspaces button.urgent { + background-color: #f38ba8; + color: #1e1e2e; +} + +#mode { + background-color: #f38ba8; + color: #1e1e2e; + padding: 0 10px; + font-weight: 800; +} + +#clock, +#battery, +#cpu, +#memory, +#disk, +#temperature, +#backlight, +#network, +#pulseaudio, +#wireplumber, +#custom-media, +#tray, +#idle_inhibitor, +#scratchpad, +#power-profiles-daemon, +#mpd { + padding: 0 10px; + color: #1e1e2e; +} + +#power { + color: hotpink; +} + +#window, +#workspaces { + margin: 0 4px; +} + +/* If workspaces is the leftmost module, omit left margin */ +.modules-left>widget:first-child>#workspaces { + margin-left: 0; +} + +/* If workspaces is the rightmost module, omit right margin */ +.modules-right>widget:last-child>#workspaces { + margin-right: 0; +} + +#clock { + background-color: #eba0ac; + color: #1e1e2e; +} + +#battery { + background-color: #89b4fa; + color: #1e1e2e; + padding-right: 14px; +} + +#battery.charging, +#battery.plugged { + color: #1e1e2e; + background-color: #f9e2af; +} + +@keyframes blink { + to { + background-color: #ffffff; + color: #000000; + } +} + +/* Using steps() instead of linear as a timing function to limit cpu usage */ +#battery.critical:not(.charging) { + background-color: #f53c3c; + color: #ffffff; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: steps(12); + animation-iteration-count: infinite; + animation-direction: alternate; +} + +#power-profiles-daemon { + padding-right: 15px; +} + +#power-profiles-daemon.performance { + background-color: #f53c3c; + color: #ffffff; +} + +#power-profiles-daemon.balanced { + background-color: #2980b9; + color: #ffffff; +} + +#power-profiles-daemon.power-saver { + background-color: #2ecc71; + color: #000000; +} + +label:focus { + background-color: #000000; +} + +#cpu { + padding-right: 14px; + background-color: #f2cdcd; +} + +#memory { + padding-right: 14px; + background-color: #89dceb; +} + +#disk { + background-color: #964B00; +} + +#backlight { + background-color: #a6e3a1; + padding-right: 14px; +} + +#network { + padding-right: 18px; + background-color: #89b4fa; +} + +#network.disconnected { + background-color: #f53c3c; +} + +#pulseaudio { + padding-right: 14px; + background-color: #a6e3a1; +} + +#pulseaudio.muted { + background-color: #f38ba8; +} + +#wireplumber { + background-color: #fff0f5; + color: #000000; +} + +#wireplumber.muted { + background-color: #f53c3c; +} + +#custom-media { + background-color: #66cc99; + color: #2a5c45; + min-width: 100px; +} + +#custom-media.custom-spotify { + background-color: #66cc99; +} + +#custom-media.custom-vlc { + background-color: #ffa000; +} + +#temperature { + padding-right: 14px; + background-color: #fab387; +} + +#temperature.critical { + background-color: #f38ba8; +} + +#tray { + background-color: transparent; + border: 1px solid #f9e2af; +} + +#tray>.passive { + -gtk-icon-effect: dim; +} + +#tray>.needs-attention { + -gtk-icon-effect: highlight; + background-color: #eb4d4b; +} + +#idle_inhibitor { + background-color: #181825; + padding: 3px 14px 3px 6px; + color: #cdd6f4; +} + +#idle_inhibitor.activated { + background-color: #181825; + color: #f38ba8; +} + +#mpd { + background-color: #66cc99; + color: #2a5c45; +} + +#mpd.disconnected { + background-color: #f53c3c; +} + +#mpd.stopped { + background-color: #90b1b1; +} + +#mpd.paused { + background-color: #51a37a; +} + +#language { + background: #00b093; + color: #740864; + padding: 0 5px; + margin: 0 5px; + min-width: 16px; +} + +#keyboard-state { + background: #97e1ad; + color: #000000; + padding: 0 0px; + margin: 0 5px; + min-width: 16px; +} + +#keyboard-state>label { + padding: 0 5px; +} + +#keyboard-state>label.locked { + background: rgba(0, 0, 0, 0.2); +} + +#scratchpad { + background: rgba(0, 0, 0, 0.2); +} + +#scratchpad.empty { + background-color: transparent; +} + +#privacy { + padding: 0; +} + +#privacy-item { + padding: 0 5px; + color: white; +} + +#privacy-item.screenshare { + background-color: #cf5700; +} + +#privacy-item.audio-in { + background-color: #1ca000; +} + +#privacy-item.audio-out { + background-color: #0069d4; +} diff --git a/.config/yadm/bootstrap##default b/.config/yadm/bootstrap##default new file mode 100755 index 0000000..e69de29 diff --git a/.config/yadm/bootstrap##distro.arch b/.config/yadm/bootstrap##distro.arch new file mode 100755 index 0000000..b4d8aba --- /dev/null +++ b/.config/yadm/bootstrap##distro.arch @@ -0,0 +1,38 @@ +#!/bin/bash +# Installs requirements for my arch setup. + +set -e + +sudo pacman -Suy archlinux-keyring +sudo pacman -Suy + +sudo pacman -S \ + neovim \ + fd \ + tmux \ + nvm \ + telegram-desktop \ + signal-desktop \ + alacritty \ + rofi \ + ttf-jetbrains-mono-nerd \ + less + +if [ ! -d /home/wholteza/repos/yay ]; then + cd ~ + mkdir -p repos + sudo pacman -S --needed git base-devel + git clone https://aur.archlinux.org/yay.git + cd yay + makepkg -si +fi + +yay -S \ + fnm \ + oh-my-posh + +fnm install 24 +fnm use 24 + +npm install + diff --git a/.config/yadm/bootstrap##distro.ubuntu b/.config/yadm/bootstrap##distro.ubuntu new file mode 100644 index 0000000..d4227b8 --- /dev/null +++ b/.config/yadm/bootstrap##distro.ubuntu @@ -0,0 +1,112 @@ +graphical=false +for arg in "$@"; do + if [[ $arg == "--graphical" ]]; then + graphical=true + break + fi +done + +sudo apt update + +sudo apt install \ + unzip \ + feh \ + wget \ + curl \ + neofetch \ + bashtop \ + htop \ + build-essential \ + cmake \ + pkg-config \ + python3 \ + wireguard \ + -y + +# Dependencies for cargo +sudo snap install rustup --classic +rustup default stable +rustup update +# Oh my posh +curl -s https://ohmyposh.dev/install.sh | bash -s +# Node version manager +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" +nvm install 22 +nvm use 22 +npm install +# Install nvim +curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.tar.gz +sudo rm -rf /opt/nvim +sudo rm -rf /opt/nvim-linux-x86_64 +sudo tar -C /opt -xzf nvim-linux-x86_64.tar.gz + +if $graphical; then +sudo apt install \ + i3 \ + i3blocks \ + i3lock \ + suckless-tools \ + arandr \ + scrot \ + gnupg2 \ + gnupg-agent \ + dirmngr \ + cryptsetup \ + scdaemon \ + pcscd \ + secure-delete \ + hopenpgp-tools \ + yubikey-personalization \ + solaar \ + cifs-utils \ + rofi \ + brightnessctl \ + libfreetype6-dev \ + libfontconfig1-dev \ + libxcb-xfixes0-dev \ + libxkbcommon-dev \ + dunst \ + nvme-cli \ + -y + +# Remove ibus since it causes issues with my custom keyboard layout +sudo apt remove ibus + +sudo systemctl enable bluetooth.service + +# Used for scrot +mkdir ~/Screenshots + +sudo snap install caprine +sudo snap install telegram-desktop +sudo snap install discord +sudo snap install firefox +sudo snap install signal-desktop +sudo snap install code --classic +sudo snap install moonlight +sudo snap install heroic +sudo snap install freecad +sudo snap install thunderbird + + +# Cargo packages +## Alacritty needs to be installed with cargo to get the version that supports toml configurations +cargo install alacritty +cargo install battop + +# Access to brightness devices for brightnessctl +sudo usermod -aG video wholteza + +# Decrypt and move VPN wireguard key +gpg --decrypt /home/wholteza/.config/wireguard/got58-got80.conf.gpg > /home/wholteza/.config/wireguard/got58-got80.conf && sudo mv /home/wholteza/.config/wireguard/got58-got80.conf /etc/wireguard/ovpn.conf + +# Xorg configs +sudo cp /home/wholteza/.config/X11/xorg.conf.d/* /etc/X11/xorg.conf.d/ + + +fi + + +source ~/.bashrc +echo Done! diff --git a/.tmux.conf b/.tmux.conf index b23cd44..85cc848 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1,6 +1,5 @@ -#unbind C-b -#set -g prefix C-t -#bind C-t send-prefix +set -g prefix C-b +bind C-b send-prefix set -g mouse on diff --git a/.xkb/symbols/colemak-se b/.xkb/symbols/colemak-se new file mode 100644 index 0000000..5ad1e5b --- /dev/null +++ b/.xkb/symbols/colemak-se @@ -0,0 +1,37 @@ +// Colemak-SE symbols for xkb on X.org Server 7.x +// 2018, github.com/motform/colemak-se. GPL3. +// Only remaps keys that diff. + +partial alphanumeric_keys +xkb_symbols "colemak" { + + include "se(basic)" + + name[Group1]="Swedish (Colemak)"; + + // top row + key { [ f, F ] }; + key { [ p, P ] }; + key { [ g, G ] }; + key { [ j, J ] }; + key { [ l, L ] }; + key { [ u, U ] }; + key { [ y, Y ] }; + key { [ odiaeresis, Odiaeresis ] }; + key { [ aring, Aring ] }; + + // home row + key { [ r, R ] }; + key { [ s, S ] }; + key { [ t, T ] }; + key { [ d, D ] }; + key { [ h, H ] }; + key { [ n, N ] }; + key { [ e, E ] }; + key { [ i, I ] }; + key { [ o, O ] }; + + // bottom row + key { [ k, K ] }; + +}; diff --git a/package.json b/package.json index 70feebb..0c4c99a 100644 --- a/package.json +++ b/package.json @@ -7,5 +7,9 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", - "license": "ISC" + "license": "ISC", + "dependencies": { + "@vue/typescript-plugin": "^3.2.2", + "neovim": "^5.4.0" + } }