Compare commits
22 Commits
7b642b5868
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| dff6abfb84 | |||
| 65a05f9426 | |||
| 5f930c1f23 | |||
| 7f09d83008 | |||
| 4f90def979 | |||
| e9556df285 | |||
| e8275c583d | |||
| 6327828c90 | |||
| f8b0225123 | |||
| bde8785dcd | |||
| 03b64fec0a | |||
| f11fff1617 | |||
| 6e71a5d845 | |||
| 28e11e675d | |||
| fda8049989 | |||
| 81395b1f43 | |||
| fc75826dd4 | |||
| ac437b3b0e | |||
| 892423d1ba | |||
| 40c4600b12 | |||
| 42a17abb3a | |||
| 0b82564494 |
@@ -1,97 +1,22 @@
|
|||||||
# Minimal Dotfiles
|
# dotfiles
|
||||||
|
|
||||||
A deliberately minimal dotfile configuration.
|
A minimal, stable Linux development environment.
|
||||||
|
|
||||||
## Philosophy
|
## Philosophy
|
||||||
|
|
||||||
Over the years I have grown tired of tweaking config files for every component of my desktop.
|
* Prefer simplicity over customisation.
|
||||||
This repository contains only the essentials.
|
* Prefer native tools over plugins.
|
||||||
|
* Change configuration only to remove recurring friction.
|
||||||
|
* If a workaround exists, use it before changing the environment.
|
||||||
|
|
||||||
Start with a minimal **Void Linux** install using the XFCE4 base image.
|
## Install
|
||||||
|
|
||||||
## What's Inside
|
|
||||||
|
|
||||||
```
|
|
||||||
.
|
|
||||||
├── config/
|
|
||||||
│ ├── alacritty/ # Alacritty terminal configuration
|
|
||||||
│ ├── fish/ # Fish shell configuration
|
|
||||||
│ ├── kanata/ # Keyboard remapping
|
|
||||||
│ ├── lf/ # Terminal file manager
|
|
||||||
│ ├── nvim/ # Neovim setup
|
|
||||||
│ └── tmux/ # Tmux configuration
|
|
||||||
├── scripts/
|
|
||||||
│ ├── install_odin # Odin compiler install recipe
|
|
||||||
│ ├── install_php # PHP install recipe
|
|
||||||
│ ├── install_raylib_deps # Raylib dependencies
|
|
||||||
│ └── install_theme # XFCE4 theme setup
|
|
||||||
└── install.sh # Dotfile symlinks and package installation
|
|
||||||
```
|
|
||||||
|
|
||||||
## Prerequisites
|
|
||||||
|
|
||||||
Before running `install.sh`, take care of the following manually:
|
|
||||||
|
|
||||||
- `sudo xbps-install -Su` — sync and update
|
|
||||||
- Set up SSH keys
|
|
||||||
- Clone this repo
|
|
||||||
- Install a Nerd Font
|
|
||||||
|
|
||||||
## Software Installation
|
|
||||||
|
|
||||||
Installs packages and creates config symlinks on top of the XFCE4 base image.
|
|
||||||
|
|
||||||
### Install Options
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# Interactive mode (prompts for confirmation at each step)
|
|
||||||
./install.sh
|
./install.sh
|
||||||
|
|
||||||
# Only create symlinks
|
|
||||||
./install.sh -l
|
|
||||||
|
|
||||||
# Only install packages
|
|
||||||
./install.sh -i
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## What Gets Installed
|
## Structure
|
||||||
|
|
||||||
The script enables `void-repo-nonfree` (and `void-repo-multilib-nonfree` on x86_64), then installs
|
* `config/` — Application configuration
|
||||||
packages via `xbps-install`:
|
* `scripts/` — Installation and utility scripts
|
||||||
|
* `install.sh` — Creates symbolic links
|
||||||
- **CLI Tools**: `wget`, `curl`, `git`, `unzip`, `fzf`, `fd`, `ripgrep`, `bat`, `direnv`, `tree`, `jq`, `lf`, `rsync`, `pfetch`
|
|
||||||
- **Development**: `base-devel`, `make`, `valgrind`, `tree-sitter-cli`, `go`
|
|
||||||
- **Shell**: `fish-shell`
|
|
||||||
- **Terminal**: `alacritty`
|
|
||||||
- **Keyboard**: `kanata`
|
|
||||||
- **Desktop**: `polybar`, `rofi`, `xdotool`, `wmctrl`
|
|
||||||
- **Fonts**: `noto-fonts-ttf`, `noto-fonts-emoji`
|
|
||||||
- **Other**: `ca-certificates`, `gnupg`, `fuse`
|
|
||||||
|
|
||||||
## Symlinks Created
|
|
||||||
|
|
||||||
| Symlink | Target |
|
|
||||||
|---|---|
|
|
||||||
| `~/.config/alacritty` | `./config/alacritty` |
|
|
||||||
| `~/.config/fish` | `./config/fish` |
|
|
||||||
| `~/.config/kanata` | `./config/kanata` |
|
|
||||||
| `~/.config/nvim` | `./config/nvim` |
|
|
||||||
| `~/.config/lf` | `./config/lf` |
|
|
||||||
|
|
||||||
## Scripts
|
|
||||||
|
|
||||||
Self-contained recipes for tooling that goes beyond the core install. Each can be run independently:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
./scripts/install_odin
|
|
||||||
./scripts/install_php
|
|
||||||
./scripts/install_raylib_deps
|
|
||||||
./scripts/install_theme
|
|
||||||
```
|
|
||||||
|
|
||||||
These are not run automatically by `install.sh` — they are opt-in.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
This setup prioritises **stability** and **simplicity** over customisation.
|
|
||||||
Void Linux + XFCE4 + X11 provides a fast, predictable base with minimal moving parts.
|
|
||||||
|
|||||||
Executable
+120
@@ -0,0 +1,120 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "$EUID" -eq 0 ]; then
|
||||||
|
echo "Please run this script as your normal user, not with sudo."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "==> Updating system..."
|
||||||
|
sudo xbps-install -Syu
|
||||||
|
|
||||||
|
echo "==> Installing KDE and desktop essentials..."
|
||||||
|
|
||||||
|
sudo xbps-install -y \
|
||||||
|
kde-plasma \
|
||||||
|
kde-baseapps \
|
||||||
|
NetworkManager \
|
||||||
|
sddm \
|
||||||
|
xorg-minimal \
|
||||||
|
xorg-server-xwayland \
|
||||||
|
mesa-dri \
|
||||||
|
qt6-wayland \
|
||||||
|
kwayland \
|
||||||
|
elogind \
|
||||||
|
pipewire \
|
||||||
|
alsa-pipewire \
|
||||||
|
libspa-bluetooth \
|
||||||
|
bluez \
|
||||||
|
xdg-desktop-portal \
|
||||||
|
xdg-desktop-portal-kde \
|
||||||
|
git \
|
||||||
|
curl \
|
||||||
|
neovim
|
||||||
|
|
||||||
|
echo "==> Disabling conflicting DHCP service..."
|
||||||
|
|
||||||
|
if [ -e /var/service/dhcpcd ]; then
|
||||||
|
sudo sv down dhcpcd || true
|
||||||
|
sudo rm -f /var/service/dhcpcd
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "==> Enabling system services..."
|
||||||
|
|
||||||
|
enable_service() {
|
||||||
|
service="$1"
|
||||||
|
|
||||||
|
if [ ! -e "/var/service/$service" ]; then
|
||||||
|
sudo ln -s "/etc/sv/$service" "/var/service/$service"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
enable_service dbus
|
||||||
|
enable_service NetworkManager
|
||||||
|
enable_service sddm
|
||||||
|
enable_service bluetoothd
|
||||||
|
|
||||||
|
echo "==> Adding user to required groups..."
|
||||||
|
|
||||||
|
sudo usermod -aG network,audio,video,bluetooth "$USER"
|
||||||
|
|
||||||
|
echo "==> Configuring ALSA for PipeWire..."
|
||||||
|
|
||||||
|
sudo mkdir -p /etc/alsa/conf.d
|
||||||
|
|
||||||
|
sudo ln -sf \
|
||||||
|
/usr/share/alsa/alsa.conf.d/50-pipewire.conf \
|
||||||
|
/etc/alsa/conf.d/50-pipewire.conf
|
||||||
|
|
||||||
|
sudo ln -sf \
|
||||||
|
/usr/share/alsa/alsa.conf.d/99-pipewire-default.conf \
|
||||||
|
/etc/alsa/conf.d/99-pipewire-default.conf
|
||||||
|
|
||||||
|
echo "==> Configuring PipeWire PulseAudio compatibility..."
|
||||||
|
|
||||||
|
sudo mkdir -p /etc/pipewire/pipewire.conf.d
|
||||||
|
|
||||||
|
sudo ln -sf \
|
||||||
|
/usr/share/examples/pipewire/20-pipewire-pulse.conf \
|
||||||
|
/etc/pipewire/pipewire.conf.d/20-pipewire-pulse.conf
|
||||||
|
|
||||||
|
echo "==> Enabling PipeWire desktop autostart..."
|
||||||
|
|
||||||
|
mkdir -p "$HOME/.config/autostart"
|
||||||
|
|
||||||
|
ln -sf \
|
||||||
|
/usr/share/applications/pipewire.desktop \
|
||||||
|
"$HOME/.config/autostart/pipewire.desktop"
|
||||||
|
|
||||||
|
echo "==> Reconfiguring packages..."
|
||||||
|
|
||||||
|
sudo xbps-reconfigure -fa
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "========================================"
|
||||||
|
echo " Void KDE bootstrap complete"
|
||||||
|
echo "========================================"
|
||||||
|
echo
|
||||||
|
echo "Installed:"
|
||||||
|
echo " KDE Plasma"
|
||||||
|
echo " SDDM"
|
||||||
|
echo " Plasma Wayland"
|
||||||
|
echo " NetworkManager"
|
||||||
|
echo " PipeWire + WirePlumber"
|
||||||
|
echo " Bluetooth"
|
||||||
|
echo " XWayland"
|
||||||
|
echo " Neovim"
|
||||||
|
echo
|
||||||
|
echo "Enabled services:"
|
||||||
|
sudo sv status dbus NetworkManager bluetoothd sddm
|
||||||
|
echo
|
||||||
|
echo "NOTE: elogind is installed but intentionally"
|
||||||
|
echo "not enabled as a runit service."
|
||||||
|
echo
|
||||||
|
echo "Reboot, then select 'Plasma (Wayland)' in SDDM."
|
||||||
|
echo
|
||||||
|
echo " sudo reboot"
|
||||||
|
echo
|
||||||
|
|
||||||
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
[general]
|
|
||||||
|
|
||||||
[font]
|
|
||||||
size = 12
|
|
||||||
offset = { x = 0, y = 3 }
|
|
||||||
normal = { family = "JetBrainsMono Nerd Font", style = "Regular" }
|
|
||||||
|
|
||||||
[window]
|
|
||||||
# startup_mode = "Maximized"
|
|
||||||
padding.x = 10
|
|
||||||
padding.y = 10
|
|
||||||
|
|
||||||
[cursor]
|
|
||||||
style.shape = "Beam"
|
|
||||||
style.blinking = "Always"
|
|
||||||
|
|
||||||
# Kanagawa Wave Alacritty Colors
|
|
||||||
[colors.primary]
|
|
||||||
background = '#101010'
|
|
||||||
foreground = '#dcd7ba'
|
|
||||||
|
|
||||||
[colors.normal]
|
|
||||||
black = '#090618'
|
|
||||||
red = '#c34043'
|
|
||||||
green = '#76946a'
|
|
||||||
yellow = '#c0a36e'
|
|
||||||
blue = '#7e9cd8'
|
|
||||||
magenta = '#957fb8'
|
|
||||||
cyan = '#6a9589'
|
|
||||||
white = '#c8c093'
|
|
||||||
|
|
||||||
[colors.bright]
|
|
||||||
black = '#727169'
|
|
||||||
red = '#e82424'
|
|
||||||
green = '#98bb6c'
|
|
||||||
yellow = '#e6c384'
|
|
||||||
blue = '#7fb4ca'
|
|
||||||
magenta = '#938aa9'
|
|
||||||
cyan = '#7aa89f'
|
|
||||||
white = '#dcd7ba'
|
|
||||||
|
|
||||||
[colors.selection]
|
|
||||||
background = '#2d4f67'
|
|
||||||
foreground = '#c8c093'
|
|
||||||
|
|
||||||
[[colors.indexed_colors]]
|
|
||||||
index = 16
|
|
||||||
color = '#ffa066'
|
|
||||||
|
|
||||||
[[colors.indexed_colors]]
|
|
||||||
index = 17
|
|
||||||
color = '#ff5d62'
|
|
||||||
@@ -1,116 +0,0 @@
|
|||||||
local awful = require("awful")
|
|
||||||
local gears = require("gears")
|
|
||||||
local wibox = require("wibox")
|
|
||||||
local beautiful = require("beautiful")
|
|
||||||
local colors = require("config.colors")
|
|
||||||
local widgets = require("config.widgets")
|
|
||||||
|
|
||||||
local M = {}
|
|
||||||
|
|
||||||
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),
|
|
||||||
awful.button({ }, 3, awful.tag.viewtoggle)
|
|
||||||
)
|
|
||||||
|
|
||||||
local function set_wallpaper(s)
|
|
||||||
if beautiful.wallpaper then
|
|
||||||
local wp = beautiful.wallpaper
|
|
||||||
if type(wp) == "function" then wp = wp(s) end
|
|
||||||
gears.wallpaper.maximized(wp, s, true)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
screen.connect_signal("property::geometry", set_wallpaper)
|
|
||||||
|
|
||||||
function M.setup()
|
|
||||||
awful.screen.connect_for_each_screen(function(s)
|
|
||||||
set_wallpaper(s)
|
|
||||||
awful.tag({ "1", "2", "3", "4", "5" }, s, awful.layout.layouts[1])
|
|
||||||
|
|
||||||
s.mypromptbox = awful.widget.prompt()
|
|
||||||
s.mylayoutbox = awful.widget.layoutbox(s)
|
|
||||||
s.mylayoutbox:buttons(gears.table.join(
|
|
||||||
awful.button({ }, 1, function() awful.layout.inc(1) end),
|
|
||||||
awful.button({ }, 3, function() awful.layout.inc(-1) end)
|
|
||||||
))
|
|
||||||
|
|
||||||
s.mytaglist = awful.widget.taglist {
|
|
||||||
screen = s, filter = awful.widget.taglist.filter.all, buttons = taglist_buttons,
|
|
||||||
style = { shape = function(cr, w, h) gears.shape.rounded_rect(cr, w, h, 4) end },
|
|
||||||
layout = { spacing = 4, layout = wibox.layout.fixed.horizontal },
|
|
||||||
widget_template = {
|
|
||||||
{ { id = "text_role", widget = wibox.widget.textbox }, left = 10, right = 10, top = 4, bottom = 4, widget = wibox.container.margin },
|
|
||||||
id = "background_role", widget = wibox.container.background,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Per-screen monitor widgets (created here so multi-monitor stays valid)
|
|
||||||
local title = widgets.make_title()
|
|
||||||
local vol = widgets.make_vol()
|
|
||||||
local cpu = widgets.make_cpu()
|
|
||||||
local brightness = widgets.make_brightness()
|
|
||||||
local clock = wibox.widget.textclock("%Y-%m-%d %H:%M")
|
|
||||||
|
|
||||||
local right = wibox.layout.fixed.horizontal()
|
|
||||||
local function push(w) right:add(widgets.padded(w, 4, 4)) end
|
|
||||||
push(wibox.widget.systray()); right:add(widgets.sep())
|
|
||||||
push(vol); right:add(widgets.sep())
|
|
||||||
push(cpu); right:add(widgets.sep())
|
|
||||||
push(clock);
|
|
||||||
push(brightness);
|
|
||||||
push(s.mylayoutbox)
|
|
||||||
|
|
||||||
s.mywibox = awful.wibar {
|
|
||||||
position = "top", screen = s, height = 45, bg = colors.background, fg = colors.white,
|
|
||||||
shape = function(cr, w, h) gears.shape.rounded_rect(cr, w, h, 0) end,
|
|
||||||
}
|
|
||||||
|
|
||||||
s.mywibox:setup {
|
|
||||||
layout = wibox.container.margin, left = 8, right = 8, top = 10, bottom = 10,
|
|
||||||
{
|
|
||||||
layout = wibox.layout.align.horizontal,
|
|
||||||
{ -- Left: workspaces + focused window title
|
|
||||||
layout = wibox.layout.fixed.horizontal,
|
|
||||||
widgets.padded(s.mytaglist, 8, 4), s.mypromptbox,
|
|
||||||
{ title, left = 18, widget = wibox.container.margin },
|
|
||||||
},
|
|
||||||
nil, -- empty center
|
|
||||||
widgets.padded(right, 4, 12),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Overlay for rofi launchers
|
|
||||||
local dim_overlay = wibox({
|
|
||||||
visible = false,
|
|
||||||
ontop = true,
|
|
||||||
type = "splash",
|
|
||||||
bg = "#00000099",
|
|
||||||
})
|
|
||||||
dim_overlay.name = "awesome_dim_overlay"
|
|
||||||
|
|
||||||
awful.screen.connect_for_each_screen(function(s)
|
|
||||||
dim_overlay.screen = s -- adjust if you want it per-screen vs spanning all
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- span the primary screen's geometry (or loop over all screens if you use a multi-monitor dim)
|
|
||||||
local function update_dim_geometry()
|
|
||||||
local geo = screen.primary.geometry
|
|
||||||
dim_overlay:geometry(geo)
|
|
||||||
end
|
|
||||||
update_dim_geometry()
|
|
||||||
screen.connect_signal("property::geometry", update_dim_geometry)
|
|
||||||
|
|
||||||
-- expose functions over awesome-client
|
|
||||||
_G.show_dim = function() dim_overlay.visible = true end
|
|
||||||
_G.hide_dim = function() dim_overlay.visible = false end
|
|
||||||
|
|
||||||
-- Prime the window so X/picom register its type before first real use,
|
|
||||||
-- avoiding a one-time grow animation on the very first show_dim() call
|
|
||||||
dim_overlay.visible = true
|
|
||||||
gears.timer.delayed_call(function()
|
|
||||||
dim_overlay.visible = false
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
return M
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
return {
|
|
||||||
background = "#111111",
|
|
||||||
background_alt = "#1a1a1a",
|
|
||||||
foreground = "#dcd7ba", -- kanagawa foreground
|
|
||||||
accent = "#6a9589", -- black (bright) - muted gray, same role as old #6e6e6e
|
|
||||||
accent_alt = "#7fb4ca", -- blue (normal) - crystalBlue
|
|
||||||
red = "#e82424", -- red (bright) - samuraiRed, vivid
|
|
||||||
green = "#98bb6c", -- green (bright) - springGreen
|
|
||||||
yellow = "#e6c384", -- yellow (bright) - carpYellow
|
|
||||||
disabled = "#6a9589", -- cyan (normal) - muted, low-contrast
|
|
||||||
white = "#ffffff", -- white (normal) - dimmer than foreground
|
|
||||||
}
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
local awful = require("awful")
|
|
||||||
local gears = require("gears")
|
|
||||||
local hotkeys_popup = require("awful.hotkeys_popup")
|
|
||||||
local menubar = require("menubar")
|
|
||||||
|
|
||||||
local M = {}
|
|
||||||
|
|
||||||
M.globalkeys = gears.table.join(
|
|
||||||
awful.key({ modkey }, "s", hotkeys_popup.show_help, { description = "show help", group = "awesome" }),
|
|
||||||
|
|
||||||
-- Directional focus (vim keys)
|
|
||||||
awful.key({ modkey }, "h", function() awful.client.focus.bydirection("left") end, { description = "focus left", group = "client" }),
|
|
||||||
awful.key({ modkey }, "j", function() awful.client.focus.bydirection("down") end, { description = "focus down", group = "client" }),
|
|
||||||
awful.key({ modkey }, "k", function() awful.client.focus.bydirection("up") end, { description = "focus up", group = "client" }),
|
|
||||||
awful.key({ modkey }, "l", function() awful.client.focus.bydirection("right") end, { description = "focus right", group = "client" }),
|
|
||||||
|
|
||||||
-- Directional move (swap clients in the tiling layout)
|
|
||||||
awful.key({ modkey, "Control" }, "h", function() awful.client.swap.bydirection("left") end, { description = "move left", group = "client" }),
|
|
||||||
awful.key({ modkey, "Control" }, "j", function() awful.client.swap.bydirection("down") end, { description = "move down", group = "client" }),
|
|
||||||
awful.key({ modkey, "Control" }, "k", function() awful.client.swap.bydirection("up") end, { description = "move up", group = "client" }),
|
|
||||||
awful.key({ modkey, "Control" }, "l", function() awful.client.swap.bydirection("right") end, { description = "move right", group = "client" }),
|
|
||||||
|
|
||||||
-- Resize the master/other split
|
|
||||||
awful.key({ modkey, "Shift" }, "h", function() awful.tag.incmwfact(-0.05) end, { description = "shrink master", group = "layout" }),
|
|
||||||
awful.key({ modkey, "Shift" }, "l", function() awful.tag.incmwfact( 0.05) end, { description = "grow master", group = "layout" }),
|
|
||||||
|
|
||||||
-- Launching / layout
|
|
||||||
awful.key({ modkey }, "Return", function() awful.spawn(terminal) end, { description = "open a terminal", group = "launcher" }),
|
|
||||||
awful.key({ modkey }, "e", function() awful.spawn("thunar") end, { description = "Filemanager", group = "system" }),
|
|
||||||
awful.key({ modkey }, "w", function() awful.layout.inc(1) end, { description = "next layout", group = "layout" }),
|
|
||||||
|
|
||||||
|
|
||||||
-- screenshooter
|
|
||||||
awful.key({ modkey, "Control" }, "p", function() awful.spawn("xfce4-screenshooter") end, { description = "screenshot", group = "system" }),
|
|
||||||
|
|
||||||
-- Alt tab current workspace windows
|
|
||||||
awful.key({ modkey }, "Tab", function() awful.client.focus.byidx(1) end),
|
|
||||||
|
|
||||||
-- Media keys
|
|
||||||
awful.key({ }, "XF86AudioRaiseVolume", function() awful.spawn.easy_async_with_shell([[sh -c 'pactl set-sink-volume "$(pactl get-default-sink)" +2%']]) end, { description = "volume up", group = "media" }),
|
|
||||||
awful.key({ }, "XF86AudioLowerVolume", function() awful.spawn.easy_async_with_shell([[sh -c 'pactl set-sink-volume "$(pactl get-default-sink)" -2%']]) end, { description = "volume down", group = "media" }),
|
|
||||||
awful.key({ }, "XF86AudioMute", function() awful.spawn.easy_async_with_shell([[sh -c 'pactl set-sink-mute "$(pactl get-default-sink)" toggle']]) end, { description = "toggle mute", group = "media" }),
|
|
||||||
|
|
||||||
-- rofi menus
|
|
||||||
awful.key({ modkey }, "space", function() awful.spawn("/home/jason/.local/bin/runrofi") end, { description = "application launcher", group = "launcher" }),
|
|
||||||
awful.key({ modkey }, "`", function() awful.spawn("/home/jason/.local/bin/powermenu") end, { description = "power menu", group = "system" }),
|
|
||||||
awful.key({ modkey }, "a", function() awful.spawn("/home/jason/.local/bin/audioswitch") end, { description = "audio output", group = "system" }),
|
|
||||||
awful.key({ modkey }, "b", function () awful.spawn("/home/jason/.local/bin/bookmarks") end, {description = "bookmarks", group = "internet"}),
|
|
||||||
|
|
||||||
-- Awesome control
|
|
||||||
awful.key({ modkey, "Control" }, "r", awesome.restart, { description = "reload awesome", group = "awesome" })
|
|
||||||
)
|
|
||||||
|
|
||||||
-- Workspace keys 1..5: Alt+N view, Alt+Shift+N move client to tag
|
|
||||||
for i = 1, 5 do
|
|
||||||
M.globalkeys = gears.table.join(M.globalkeys,
|
|
||||||
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" }),
|
|
||||||
|
|
||||||
awful.key({ modkey, "Control" }, "#" .. 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
|
|
||||||
|
|
||||||
M.clientkeys = gears.table.join(
|
|
||||||
awful.key({ modkey }, "q", function(c) c:kill() end, { description = "kill window", group = "client" }),
|
|
||||||
awful.key({ modkey }, "f", function(c) c.fullscreen = not c.fullscreen; c:raise() end, { description = "toggle fullscreen", group = "client" }),
|
|
||||||
awful.key({ modkey }, "m", function(c) c:swap(awful.client.getmaster()) end, { description = "make master", group = "client" }),
|
|
||||||
awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle, { description = "toggle floating", group = "client" })
|
|
||||||
)
|
|
||||||
|
|
||||||
M.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)
|
|
||||||
)
|
|
||||||
|
|
||||||
return M
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
local awful = require("awful")
|
|
||||||
local beautiful = require("beautiful")
|
|
||||||
local keys = require("config.keys")
|
|
||||||
|
|
||||||
return {
|
|
||||||
{
|
|
||||||
rule = { },
|
|
||||||
properties = {
|
|
||||||
border_width = beautiful.border_width, border_color = beautiful.border_normal,
|
|
||||||
focus = awful.client.focus.filter, raise = true,
|
|
||||||
keys = keys.clientkeys, buttons = keys.clientbuttons,
|
|
||||||
screen = awful.screen.preferred,
|
|
||||||
placement = awful.placement.no_overlap + awful.placement.no_offscreen,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
rule_any = {
|
|
||||||
instance = { "pinentry" },
|
|
||||||
class = { "Arandr", "Blueman-manager", "Gpick", "Pavucontrol" },
|
|
||||||
name = { "Event Tester" },
|
|
||||||
role = { "AlarmWindow", "pop-up" },
|
|
||||||
},
|
|
||||||
properties = { floating = true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
rule = { name = "Sublime Terminal", },
|
|
||||||
properties = { floating = false, },
|
|
||||||
callback = function(c)
|
|
||||||
awful.client.setslave(c)
|
|
||||||
|
|
||||||
local t = c.first_tag
|
|
||||||
if t then
|
|
||||||
t.master_width_factor = 0.67
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
local gears = require("gears")
|
|
||||||
local awful = require("awful")
|
|
||||||
local beautiful = require("beautiful")
|
|
||||||
|
|
||||||
client.connect_signal("manage", function(c)
|
|
||||||
if awesome.startup and not c.size_hints.user_position and not c.size_hints.program_position then
|
|
||||||
awful.placement.no_offscreen(c)
|
|
||||||
end
|
|
||||||
-- New windows open into the stack (to the right); first window becomes master.
|
|
||||||
if not awesome.startup then awful.client.setslave(c) end
|
|
||||||
-- 0 or ie 13 = corner radius
|
|
||||||
c.shape = function(cr, width, height) gears.shape.rounded_rect(cr, width, height, 0) end
|
|
||||||
end)
|
|
||||||
|
|
||||||
client.connect_signal("property::floating", function(c)
|
|
||||||
if c.floating and c.type ~= "notification" then awful.placement.centered(c, { honor_workarea = true }) end
|
|
||||||
end)
|
|
||||||
|
|
||||||
client.connect_signal("manage", function(c)
|
|
||||||
if c.floating and c.type ~= "notification" then awful.placement.centered(c, { honor_workarea = true }) end
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Focus follows mouse (i3-like). Comment out for click-to-focus only.
|
|
||||||
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)
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
local gears = require("gears")
|
|
||||||
local beautiful = require("beautiful")
|
|
||||||
local naughty = require("naughty")
|
|
||||||
local colors = require("config.colors")
|
|
||||||
|
|
||||||
beautiful.init(gears.filesystem.get_themes_dir() .. "default/theme.lua")
|
|
||||||
|
|
||||||
beautiful.useless_gap = 8
|
|
||||||
beautiful.gap_single_client = true
|
|
||||||
beautiful.font = "JetBrainsMono Nerd Font 11"
|
|
||||||
beautiful.border_width = 4
|
|
||||||
beautiful.border_normal = colors.background_alt
|
|
||||||
beautiful.border_focus = colors.accent
|
|
||||||
|
|
||||||
beautiful.taglist_bg_focus = colors.accent
|
|
||||||
beautiful.taglist_fg_focus = colors.background
|
|
||||||
beautiful.taglist_fg_occupied = colors.accent
|
|
||||||
beautiful.taglist_bg_occupied = colors.background
|
|
||||||
beautiful.taglist_fg_empty = colors.white
|
|
||||||
beautiful.taglist_bg_empty = colors.background
|
|
||||||
beautiful.taglist_bg_urgent = colors.red
|
|
||||||
beautiful.taglist_fg_urgent = colors.background
|
|
||||||
|
|
||||||
beautiful.bg_systray = colors.background
|
|
||||||
beautiful.systray_icon_spacing = 4
|
|
||||||
|
|
||||||
-- Notifications, styled to match the wibar/client theme
|
|
||||||
naughty.config.defaults.position = "top_right"
|
|
||||||
naughty.config.defaults.timeout = 5
|
|
||||||
naughty.config.padding = 12
|
|
||||||
naughty.config.defaults.margin = 12
|
|
||||||
naughty.config.defaults.spacing = 8
|
|
||||||
naughty.config.defaults.icon_size = 48
|
|
||||||
naughty.config.defaults.border_width = 3
|
|
||||||
naughty.config.defaults.font = "JetBrainsMono Nerd Font 12"
|
|
||||||
naughty.config.defaults.shape = function(cr, w, h) gears.shape.rounded_rect(cr, w, h, 13) end
|
|
||||||
|
|
||||||
naughty.config.presets.normal = {
|
|
||||||
bg = colors.background, fg = colors.foreground, border_color = colors.accent,
|
|
||||||
border_width = 3, font = "JetBrainsMono Nerd Font 12", timeout = 5,
|
|
||||||
}
|
|
||||||
naughty.config.presets.low = naughty.config.presets.normal
|
|
||||||
naughty.config.presets.critical = {
|
|
||||||
bg = colors.background, fg = colors.red, border_color = colors.red,
|
|
||||||
border_width = 3, font = "JetBrainsMono Nerd Font 12", timeout = 0, -- stays until dismissed
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,118 +0,0 @@
|
|||||||
local awful = require("awful")
|
|
||||||
local gears = require("gears")
|
|
||||||
local wibox = require("wibox")
|
|
||||||
local colors = require("config.colors")
|
|
||||||
|
|
||||||
local M = {}
|
|
||||||
|
|
||||||
-- "ICON value" with ICON tinted accent, like polybar's *-prefix-foreground.
|
|
||||||
function M.label(icon, val)
|
|
||||||
return string.format("<span foreground='%s'>%s</span> %s", colors.white, icon, val or "")
|
|
||||||
end
|
|
||||||
|
|
||||||
-- A slim separator in the disabled color, like polybar's separator.
|
|
||||||
function M.sep()
|
|
||||||
local w = wibox.widget.textbox()
|
|
||||||
w.markup = string.format("<span foreground='%s00'> </span>", colors.disabled)
|
|
||||||
return w
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Wrap a widget in a small margin so bar modules aren't crammed together.
|
|
||||||
function M.padded(w, left, right)
|
|
||||||
return wibox.container.margin(w, left or 8, right or 8)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Focused window title (polybar xwindow / %title%)
|
|
||||||
function M.make_title()
|
|
||||||
local t = wibox.widget.textbox()
|
|
||||||
local function update()
|
|
||||||
local c = client.focus
|
|
||||||
t.markup = c and string.format("<span foreground='%s'>%s</span>", colors.white, gears.string.xml_escape(c.name or "")) or ""
|
|
||||||
end
|
|
||||||
client.connect_signal("focus", update)
|
|
||||||
client.connect_signal("unfocus", update)
|
|
||||||
client.connect_signal("property::name", update)
|
|
||||||
return t
|
|
||||||
end
|
|
||||||
|
|
||||||
-- CPU usage % (two top samples so the reading is accurate)
|
|
||||||
function M.make_cpu()
|
|
||||||
return awful.widget.watch(
|
|
||||||
{ "bash", "-c", [[LANG=C top -bn2 -d0.3 | grep -m2 '^%Cpu' | tail -1 | awk '{printf "%.0f", 100 - $8}']] },
|
|
||||||
3, function(w, out) w.markup = M.label("<span font_size='large'> </span>", out:gsub("%s+$", "") .. "%") end)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Volume: click to mute, scroll to adjust, right-click for the mixer.
|
|
||||||
-- Keeps its own refresh() so button presses update instantly instead of
|
|
||||||
-- waiting on the polling timer.
|
|
||||||
function M.make_vol()
|
|
||||||
local w = wibox.widget.textbox()
|
|
||||||
|
|
||||||
local vol_script = [[
|
|
||||||
sink=$(LANG=C pactl get-default-sink 2>/dev/null)
|
|
||||||
m=$(LANG=C pactl get-sink-mute "$sink" 2>/dev/null | grep -oE 'yes|no')
|
|
||||||
v=$(LANG=C pactl get-sink-volume "$sink" 2>/dev/null | grep -oE '[0-9]+%' | head -n1)
|
|
||||||
echo "$m $v"
|
|
||||||
]]
|
|
||||||
local function shell_quote(s) return "'" .. s:gsub("'", "'\\''") .. "'" end
|
|
||||||
local vol_cmd = "sh -c " .. shell_quote(vol_script)
|
|
||||||
|
|
||||||
local function refresh()
|
|
||||||
awful.spawn.easy_async_with_shell(vol_cmd, function(out)
|
|
||||||
local muted, pct = out:match("(%a+)%s+(%d+)%%")
|
|
||||||
if muted == nil and pct == nil then
|
|
||||||
w.markup = string.format("<span foreground='%s'><span font_size='large'></span> n/a</span>", colors.disabled)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
muted = muted == "yes"
|
|
||||||
pct = pct or "0"
|
|
||||||
w.markup = muted and string.format("<span foreground='%s'>MUTE</span>", colors.yellow) or M.label("<span font_size='large'></span>", pct .. "%")
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
w:buttons(gears.table.join(
|
|
||||||
awful.button({ }, 1, function() awful.spawn("/home/jason/.local/bin/audioswitch") end),
|
|
||||||
awful.button({ }, 3, function() awful.spawn.easy_async_with_shell([[sh -c 'pactl set-sink-mute "$(pactl get-default-sink)" toggle']], function() refresh() end) end),
|
|
||||||
awful.button({ }, 4, function() awful.spawn.easy_async_with_shell([[sh -c 'pactl set-sink-volume "$(pactl get-default-sink)" +2%']], function() refresh() end) end),
|
|
||||||
awful.button({ }, 5, function() awful.spawn.easy_async_with_shell([[sh -c 'pactl set-sink-volume "$(pactl get-default-sink)" -2%']], function() refresh() end) end)
|
|
||||||
))
|
|
||||||
|
|
||||||
gears.timer { timeout = 2, call_now = true, autostart = true, callback = refresh }
|
|
||||||
return w
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Brightness: click to toggle between night (default gamma) and day (boosted).
|
|
||||||
function M.make_brightness()
|
|
||||||
local OUTPUT = "HDMI-A-0"
|
|
||||||
local DAY_CMD = "xrandr --output " .. OUTPUT .. " --set CTM \"1.1,0,0,0,1.1,0,0,0,1.1\" --gamma 1.08:1.08:1.08"
|
|
||||||
local NIGHT_CMD = "xrandr --output " .. OUTPUT .. " --set CTM \"1,0,0,0,1,0,0,0,1\" --gamma 1.0:1.0:1.0"
|
|
||||||
|
|
||||||
local w = wibox.widget.textbox()
|
|
||||||
local is_day = true
|
|
||||||
|
|
||||||
local function render()
|
|
||||||
local icon = is_day and " " or " "
|
|
||||||
|
|
||||||
w.markup = string.format(
|
|
||||||
"<span font_family='JetBrainsMono Nerd Font' foreground='%s' font_size='large'>%s</span>",
|
|
||||||
colors.white, icon
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function apply(day)
|
|
||||||
local cmd = day and DAY_CMD or NIGHT_CMD
|
|
||||||
awful.spawn.easy_async_with_shell(cmd, function()
|
|
||||||
is_day = day
|
|
||||||
render()
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
w:buttons(gears.table.join(
|
|
||||||
awful.button({ }, 1, function() apply(not is_day) end)
|
|
||||||
))
|
|
||||||
|
|
||||||
apply(true)
|
|
||||||
return w
|
|
||||||
end
|
|
||||||
|
|
||||||
return M
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
pcall(require, "luarocks.loader")
|
|
||||||
|
|
||||||
local gears = require("gears")
|
|
||||||
local awful = require("awful")
|
|
||||||
require("awful.autofocus")
|
|
||||||
local naughty = require("naughty")
|
|
||||||
local bling = require("bling")
|
|
||||||
|
|
||||||
-- Global config
|
|
||||||
modkey = "Mod4" -- Alt. Use "Mod4" for the Super/Windows key.
|
|
||||||
terminal = "alacritty"
|
|
||||||
editor = os.getenv("EDITOR") or "nano"
|
|
||||||
|
|
||||||
-- Layouts: suit.tile = master column LEFT, stack column RIGHT.
|
|
||||||
awful.layout.layouts = { awful.layout.suit.tile, awful.layout.suit.max }
|
|
||||||
|
|
||||||
-- Kill xfce4-notifyd on startup (with a short delay + retry, in case it
|
|
||||||
-- hasn't started yet at this point in the session)
|
|
||||||
awful.spawn.easy_async_with_shell("pkill xfce4-notifyd", function() end)
|
|
||||||
gears.timer.start_new(3, function()
|
|
||||||
awful.spawn.easy_async_with_shell("pkill xfce4-notifyd", function() end)
|
|
||||||
return false -- don't repeat
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Error handling
|
|
||||||
if awesome.startup_errors then
|
|
||||||
naughty.notify({ preset = naughty.config.presets.critical, title = "Error during startup", text = awesome.startup_errors })
|
|
||||||
end
|
|
||||||
do
|
|
||||||
local in_error = false
|
|
||||||
awesome.connect_signal("debug::error", function(err)
|
|
||||||
if in_error then return end
|
|
||||||
in_error = true
|
|
||||||
naughty.notify({ preset = naughty.config.presets.critical, title = "An error happened", text = tostring(err) })
|
|
||||||
in_error = false
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Modules (order matters: theme before bar, keys before rules)
|
|
||||||
require("config.theme")
|
|
||||||
local keys = require("config.keys")
|
|
||||||
require("config.bar").setup()
|
|
||||||
root.keys(keys.globalkeys)
|
|
||||||
awful.rules.rules = require("config.rules")
|
|
||||||
require("config.signals")
|
|
||||||
|
|
||||||
-- Wallpaper
|
|
||||||
bling.module.wallpaper.setup {
|
|
||||||
wallpaper = { "/home/jason/Pictures/Wallpapers/farewell.jpg" },
|
|
||||||
position = "fit",
|
|
||||||
background = "#181818",
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,184 @@
|
|||||||
|
# ==============================================================================
|
||||||
|
# ENVIRONMENT VARIABLES
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
export XDG_CONFIG_HOME="$HOME/.config"
|
||||||
|
export XDG_DATA_HOME="$HOME/.local/share"
|
||||||
|
export XDG_CACHE_HOME="$HOME/.cache"
|
||||||
|
export XDG_STATE_HOME="$HOME/.local/state"
|
||||||
|
export GOOGLE_API_KEY="no"
|
||||||
|
export GOOGLE_DEFAULT_CLIENT_ID="no"
|
||||||
|
export GOOGLE_DEFAULT_CLIENT_SECRET="no"
|
||||||
|
|
||||||
|
# Core settings
|
||||||
|
export EDITOR="evi"
|
||||||
|
export VISUAL="evi"
|
||||||
|
export MANPAGER="evi +Man!"
|
||||||
|
export BROWSER="firefox"
|
||||||
|
export COLORTERM="truecolor"
|
||||||
|
|
||||||
|
# Development
|
||||||
|
export DEBUG=1
|
||||||
|
export GOPATH="$HOME/.go"
|
||||||
|
export GOCACHE="$HOME/.go/cache"
|
||||||
|
export GOROOT=/usr/local/go
|
||||||
|
export PATH="/usr/local/go/bin:$GOPATH/bin:$PATH"
|
||||||
|
|
||||||
|
# Direnv
|
||||||
|
eval "$(direnv hook bash)"
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# FZF configuration
|
||||||
|
# ==============================================================================
|
||||||
|
export FZF_DEFAULT_OPTS="
|
||||||
|
--height 40%
|
||||||
|
--layout=reverse
|
||||||
|
--border
|
||||||
|
--ansi
|
||||||
|
--preview-window=down:30%
|
||||||
|
--bind 'ctrl-d:preview-page-down,ctrl-u:preview-page-up'
|
||||||
|
--color=fg:#ffffff,header:#f38ba8,info:#cba6ac,pointer:#f5e0dc
|
||||||
|
--color=marker:#f5e0dc,fg+:#cdd6f4,prompt:#cba6ac,hl+:#f38ba8"
|
||||||
|
|
||||||
|
export FZF_DEFAULT_COMMAND='fdfind --exclude={.git,.cache,.xmake,.zig-cache,build,tmp,node_modules,elpa} --type f -H'
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# PATH CONFIGURATION
|
||||||
|
# ==============================================================================
|
||||||
|
# bash has no fish_add_path (which dedupes + checks existence), so roll a
|
||||||
|
# small helper that does the same thing.
|
||||||
|
add_to_path() {
|
||||||
|
if [ -d "$1" ] && [[ ":$PATH:" != *":$1:"* ]]; then
|
||||||
|
PATH="$1:$PATH"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
add_to_path /var/lib/flatpak/exports/bin
|
||||||
|
add_to_path /usr/local/bin
|
||||||
|
add_to_path /usr/local/go/bin
|
||||||
|
add_to_path "$GOPATH/bin"
|
||||||
|
add_to_path "$HOME/bin"
|
||||||
|
add_to_path "$HOME/.local/bin"
|
||||||
|
add_to_path "$HOME/.local/share/flatpak/exports/bin"
|
||||||
|
add_to_path "$HOME/.npm-global/bin"
|
||||||
|
add_to_path "$HOME/.odin/"
|
||||||
|
|
||||||
|
export PATH
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# AUTO COMPLETE
|
||||||
|
# ==============================================================================
|
||||||
|
if [ -f /usr/share/bash-completion/bash_completion ]; then
|
||||||
|
. /usr/share/bash-completion/bash_completion
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# ALIASES
|
||||||
|
# ==============================================================================
|
||||||
|
# Void linux helpers
|
||||||
|
# System update (sync + update all packages)
|
||||||
|
alias void-update='sudo xbps-install -Su'
|
||||||
|
# Remove orphaned dependencies + clean cache
|
||||||
|
alias void-clean='sudo xbps-remove -Oo'
|
||||||
|
# List explicitly installed (manual) packages
|
||||||
|
alias void-installed='xbps-query -m'
|
||||||
|
# List all installed packages
|
||||||
|
alias void-installedall='xbps-query -l'
|
||||||
|
# Show which package owns a file
|
||||||
|
alias void-owns='xbps-query -o'
|
||||||
|
# Remove a package and its unused deps in one go (usage: purge <pkgname>)
|
||||||
|
alias void-purge='sudo xbps-remove -R'
|
||||||
|
# Install a package (usage: install <pkgname>)
|
||||||
|
alias void-install='sudo xbps-install'
|
||||||
|
# Remove a package (usage: remove <pkgname>)
|
||||||
|
alias void-remove='sudo xbps-remove'
|
||||||
|
# Search for a package
|
||||||
|
alias void-search='xbps-query -Rs'
|
||||||
|
# Show info about a package
|
||||||
|
alias void-query='xbps-query -R'
|
||||||
|
|
||||||
|
# List commands
|
||||||
|
alias ls='ls -lh --color=auto --group-directories-first'
|
||||||
|
alias ll='ls -lAh --color=auto --group-directories-first'
|
||||||
|
alias la='ls -la --color=auto --group-directories-first'
|
||||||
|
alias l='ls -CF --color=auto'
|
||||||
|
alias tree='tree --dirsfirst -C'
|
||||||
|
|
||||||
|
# Safety aliases
|
||||||
|
alias rm='rm -I --preserve-root'
|
||||||
|
alias mv='mv -i'
|
||||||
|
alias cp='cp -i'
|
||||||
|
alias ln='ln -i'
|
||||||
|
|
||||||
|
# System information
|
||||||
|
alias df='df -h'
|
||||||
|
alias du='du -h'
|
||||||
|
alias free='free -h'
|
||||||
|
alias bat='bat --theme="ansi" --paging=never'
|
||||||
|
|
||||||
|
# Application shortcuts
|
||||||
|
alias :q='exit'
|
||||||
|
alias files='thunar .'
|
||||||
|
alias fetch='pfetch'
|
||||||
|
|
||||||
|
# Custom shortcuts
|
||||||
|
alias v='evi'
|
||||||
|
alias vi='evi'
|
||||||
|
alias reload='source ~/.bashrc'
|
||||||
|
alias dots='cd ~/.dotfiles && evi'
|
||||||
|
alias doti='bash ~/.dotfiles/install.sh -i'
|
||||||
|
alias dotl='bash ~/.dotfiles/install.sh -l'
|
||||||
|
alias myip='curl ipinfo.io/ip; echo ""'
|
||||||
|
alias query='xbps-query -Rs'
|
||||||
|
alias commits='git log origin/main..HEAD --oneline'
|
||||||
|
|
||||||
|
## Basic project picker using fzf
|
||||||
|
pp() {
|
||||||
|
local project
|
||||||
|
project=$(
|
||||||
|
find ~/Projects -mindepth 1 -maxdepth 1 -type d |
|
||||||
|
awk -F/ '{print $NF "\t" $0}' |
|
||||||
|
fzf --with-nth=1
|
||||||
|
)
|
||||||
|
|
||||||
|
[ -z "$project" ] && return
|
||||||
|
|
||||||
|
project=$(echo "$project" | cut -f2)
|
||||||
|
cd "$project" && clear
|
||||||
|
}
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# PROMPT
|
||||||
|
# ==============================================================================
|
||||||
|
# bash has no built-in __fish_git_prompt_* equivalent, so we write a small
|
||||||
|
# git-branch function and build PS1 by hand.
|
||||||
|
|
||||||
|
parse_git_branch() {
|
||||||
|
git branch 2>/dev/null | sed -n '/\* /s///p'
|
||||||
|
}
|
||||||
|
|
||||||
|
git_prompt_info() {
|
||||||
|
local branch
|
||||||
|
branch=$(parse_git_branch)
|
||||||
|
[ -z "$branch" ] && return
|
||||||
|
|
||||||
|
local esc=$'\033'
|
||||||
|
local status marker
|
||||||
|
status=$(git status --porcelain 2>/dev/null)
|
||||||
|
|
||||||
|
if [ -n "$status" ]; then
|
||||||
|
if echo "$status" | grep -q '^[MADRC]'; then
|
||||||
|
marker=" ${esc}[33m●${esc}[0m " # staged - yellow ●
|
||||||
|
elif echo "$status" | grep -q '^??'; then
|
||||||
|
marker="" # untracked - no char
|
||||||
|
else
|
||||||
|
marker=" ${esc}[31m+${esc}[0m " # dirty - red +
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
marker=" ${esc}[1;32m${esc}[0m " # clean - green
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " ${esc}[1;35m(${branch})${esc}[0m${marker}"
|
||||||
|
}
|
||||||
|
|
||||||
|
PS1='\[\033[32m\]\u\[\033[0m\]@\[\033[34m\]\h\[\033[0m\]:\[\033[36m\]\w\[\033[0m\]$(git_prompt_info)\$ '
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
let g:netrw_dirhistmax =10
|
||||||
|
let g:netrw_dirhistcnt =1
|
||||||
|
let g:netrw_dirhist_1='/home/jason/Projects/dotfiles'
|
||||||
|
let g:netrw_dirhist_0='/home/jason/Projects/GraveKeeper/src'
|
||||||
|
let g:netrw_dirhist_9='/home/jason/Projects/GraveKeeper'
|
||||||
|
let g:netrw_dirhist_8='/home/jason/.config/kitty/kitty.conf'
|
||||||
|
let g:netrw_dirhist_7='/home/jason/.evi'
|
||||||
|
let g:netrw_dirhist_6='/home/jason/Projects/GraveKeeper'
|
||||||
|
let g:netrw_dirhist_5='/home/jason/.evi'
|
||||||
|
let g:netrw_dirhist_4='/home/jason/.evi/pack'
|
||||||
|
let g:netrw_dirhist_3='/home/jason/.evi'
|
||||||
|
let g:netrw_dirhist_2='/home/jason/.evi/autoload'
|
||||||
@@ -0,0 +1,202 @@
|
|||||||
|
" ============================================================================
|
||||||
|
" EVi Configuration
|
||||||
|
" ============================================================================
|
||||||
|
" General
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
set nocompatible
|
||||||
|
set encoding=utf-8
|
||||||
|
set hidden
|
||||||
|
set history=1000
|
||||||
|
set clipboard=unnamedplus
|
||||||
|
set splitright
|
||||||
|
set splitbelow
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" UI
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
set number
|
||||||
|
set relativenumber
|
||||||
|
set wildmenu
|
||||||
|
set showcmd
|
||||||
|
colorscheme jellybeans
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" Transparent UI
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
augroup VimTransparent
|
||||||
|
autocmd!
|
||||||
|
autocmd ColorScheme * highlight Normal ctermbg=NONE guibg=NONE
|
||||||
|
\ | highlight NonText ctermbg=NONE guibg=NONE
|
||||||
|
\ | highlight LineNr ctermbg=NONE guibg=NONE
|
||||||
|
\ | highlight SignColumn ctermbg=NONE guibg=NONE
|
||||||
|
\ | highlight EndOfBuffer ctermbg=NONE guibg=NONE
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" Status Line
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
set laststatus=2
|
||||||
|
highlight EviStatus cterm=NONE ctermfg=White ctermbg=236
|
||||||
|
set statusline=%#EviStatus#%f\ %m%r\ %=%{&filetype}\ \ %l:%c\ %p%%
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" Editing
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
set tabstop=4
|
||||||
|
set shiftwidth=4
|
||||||
|
set expandtab
|
||||||
|
set smartindent
|
||||||
|
set nowrap
|
||||||
|
set incsearch
|
||||||
|
set hlsearch
|
||||||
|
set ignorecase
|
||||||
|
set smartcase
|
||||||
|
set completeopt=menu,menuone,noselect
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" File Types
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
syntax on
|
||||||
|
filetype plugin indent on
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" fzf
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
if executable('rg')
|
||||||
|
let $FZF_DEFAULT_COMMAND =
|
||||||
|
\ 'rg --files --hidden --follow --glob "!.git/*"'
|
||||||
|
endif
|
||||||
|
|
||||||
|
nnoremap <C-p> :Files<CR>
|
||||||
|
nnoremap <C-o> :Buffers<CR>
|
||||||
|
nnoremap <C-s> :Rg<CR>
|
||||||
|
nnoremap <C-b> :Build<CR>
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" Search
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
nnoremap <Esc><Esc> :nohlsearch<CR>
|
||||||
|
nnoremap n nzzzv
|
||||||
|
nnoremap N Nzzzv
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" Window Navigation
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
nnoremap <C-h> <C-w>h
|
||||||
|
nnoremap <C-j> <C-w>j
|
||||||
|
nnoremap <C-k> <C-w>k
|
||||||
|
nnoremap <C-l> <C-w>l
|
||||||
|
nnoremap <C-x> <C-w>q
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" LSP - OLS
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
packadd lsp
|
||||||
|
call LspOptionsSet(#{
|
||||||
|
\ autoComplete: v:false,
|
||||||
|
\ autoHighlight: v:false,
|
||||||
|
\ autoHighlightDiags: v:true,
|
||||||
|
\ autoPopulateDiags: v:true,
|
||||||
|
\ semanticHighlight: v:false,
|
||||||
|
\ showSignature: v:false,
|
||||||
|
\ completionInPreview: v:false,
|
||||||
|
\ condensedCompletionMenu: v:true,
|
||||||
|
\ })
|
||||||
|
|
||||||
|
if executable('ols')
|
||||||
|
call LspAddServer([#{
|
||||||
|
\ name: 'ols',
|
||||||
|
\ filetype: ['odin'],
|
||||||
|
\ path: 'ols',
|
||||||
|
\ args: ['--stdio'],
|
||||||
|
\ features: #{
|
||||||
|
\ diagnostic: v:false,
|
||||||
|
\ completion: v:true,
|
||||||
|
\ hover: v:true,
|
||||||
|
\ signatureHelp: v:false,
|
||||||
|
\ documentHighlight: v:true,
|
||||||
|
\ semanticHighlight: v:true,
|
||||||
|
\ },
|
||||||
|
\ }])
|
||||||
|
endif
|
||||||
|
|
||||||
|
command! Action LspCodeAction
|
||||||
|
command! Rename LspRename
|
||||||
|
|
||||||
|
autocmd FileType odin setlocal omnifunc=LspOmniFunc
|
||||||
|
inoremap <C-@> <C-X><C-O>
|
||||||
|
nnoremap K :LspHover<CR>
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" Go to Definition
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
function! GotoDefinitionSplit() abort
|
||||||
|
vsplit
|
||||||
|
LspGotoDefinition
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
nnoremap gd :call GotoDefinitionSplit()<CR>
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" Diagnostics
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
function! ToggleDiagnostics() abort
|
||||||
|
for l:win in getwininfo()
|
||||||
|
if get(l:win, 'quickfix', 0)
|
||||||
|
execute l:win.winnr .. 'close'
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
LspDiag show
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
command! Diagnostics call ToggleDiagnostics()
|
||||||
|
nnoremap <C-i> :Diagnostics<CR>
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" Netrw / File Tree
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
let g:netrw_banner = 0
|
||||||
|
let g:netrw_liststyle = 3
|
||||||
|
let g:netrw_browse_split = 0
|
||||||
|
let g:netrw_altv = 1
|
||||||
|
let g:netrw_winsize = 33
|
||||||
|
let g:netrw_keepdir = 0
|
||||||
|
nnoremap <C-e> :Lexplore<CR>
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" Build System
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
function! Build(...) abort
|
||||||
|
" Already in the build terminal → close it.
|
||||||
|
if get(b:, 'build_terminal', 0) && &buftype ==# 'terminal'
|
||||||
|
close
|
||||||
|
echo ''
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !filereadable('build.sh')
|
||||||
|
echohl WarningMsg
|
||||||
|
echo 'No build.sh found in current directory.'
|
||||||
|
echohl None
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
wall
|
||||||
|
|
||||||
|
let l:command = './build.sh'
|
||||||
|
|
||||||
|
if a:0 > 0
|
||||||
|
let l:command .= ' ' .. join(a:000, ' ')
|
||||||
|
endif
|
||||||
|
|
||||||
|
botright vsplit
|
||||||
|
execute 'vertical resize ' .. float2nr(&columns * 0.37)
|
||||||
|
execute 'terminal ++curwin ' .. l:command
|
||||||
|
|
||||||
|
let b:build_terminal = 1
|
||||||
|
tnoremap <buffer> <CR> <Nop>
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
command! -nargs=* Build call Build(<f-args>)
|
||||||
Submodule
+1
Submodule config/evi/pack/downloads/opt/lsp added at 6ab67121fa
Submodule
+1
Submodule config/evi/pack/plugins/start/fzf added at ca4c1b80e3
Submodule
+1
Submodule config/evi/pack/plugins/start/fzf.vim added at d2a59a992a
Submodule
+1
Submodule config/evi/pack/plugins/start/jellybeans added at ef83bf4dc8
+1
Submodule config/evi/pack/plugins/start/vim-polyglot added at f061eddb7c
@@ -1,137 +0,0 @@
|
|||||||
# ==============================================================================
|
|
||||||
# ENVIRONMENT VARIABLES
|
|
||||||
# ==============================================================================
|
|
||||||
# Disable fish greeting
|
|
||||||
set -g fish_greeting
|
|
||||||
set -g fish_prompt_pwd_dir_length 999
|
|
||||||
|
|
||||||
set -gx XDG_CONFIG_HOME $HOME/.config
|
|
||||||
set -gx XDG_DATA_HOME $HOME/.local/share
|
|
||||||
set -gx XDG_CACHE_HOME $HOME/.cache
|
|
||||||
set -gx XDG_STATE_HOME $HOME/.local/state
|
|
||||||
set -gx GOOGLE_API_KEY "no"
|
|
||||||
set -gx GOOGLE_DEFAULT_CLIENT_ID "no"
|
|
||||||
set -gx GOOGLE_DEFAULT_CLIENT_SECRET "no"
|
|
||||||
|
|
||||||
# Core settings
|
|
||||||
set -gx EDITOR "nvim"
|
|
||||||
set -gx VISUAL "nvim"
|
|
||||||
set -gx MANPAGER "nvim +Man!"
|
|
||||||
set -gx BROWSER firefox
|
|
||||||
# set -gx TERM xterm-256color
|
|
||||||
set -gx COLORTERM truecolor
|
|
||||||
set -gx LANG "en_US.UTF-8"
|
|
||||||
set -gx LC_ALL "en_US.UTF-8"
|
|
||||||
|
|
||||||
# Development
|
|
||||||
set -gx DEBUG 1
|
|
||||||
set -gx GOPATH "$HOME/.go"
|
|
||||||
set -gx GOCACHE "$HOME/.go/cache"
|
|
||||||
set -gx GOROOT /usr/local/go
|
|
||||||
set -gx PATH /usr/local/go/bin $GOPATH/bin $PATH
|
|
||||||
|
|
||||||
# Direnv
|
|
||||||
direnv hook fish | source
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
# FZF configuration
|
|
||||||
# ==============================================================================
|
|
||||||
set -gx FZF_DEFAULT_OPTS "
|
|
||||||
--height 40%
|
|
||||||
--layout=reverse
|
|
||||||
--border
|
|
||||||
--ansi
|
|
||||||
--preview-window=down:30%
|
|
||||||
--bind 'ctrl-d:preview-page-down,ctrl-u:preview-page-up'
|
|
||||||
--color=fg:#ffffff,header:#f38ba8,info:#cba6ac,pointer:#f5e0dc
|
|
||||||
--color=marker:#f5e0dc,fg+:#cdd6f4,prompt:#cba6ac,hl+:#f38ba8"
|
|
||||||
|
|
||||||
set -gx FZF_DEFAULT_COMMAND 'fdfind --exclude={.git,.cache,.xmake,.zig-cache,build,tmp,node_modules,elpa} --type f -H'
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
# PATH CONFIGURATION
|
|
||||||
# ==============================================================================
|
|
||||||
# Fish's 'fish_add_path' is smart: it checks if the dir exists and prevents duplicates.
|
|
||||||
fish_add_path /var/lib/flatpak/exports/bin
|
|
||||||
fish_add_path /usr/local/bin
|
|
||||||
fish_add_path /usr/local/go/bin
|
|
||||||
fish_add_path $GOPATH/bin
|
|
||||||
fish_add_path "$HOME/bin"
|
|
||||||
fish_add_path "$HOME/.local/bin"
|
|
||||||
fish_add_path "$HOME/.local/share/flatpak/exports/bin"
|
|
||||||
fish_add_path "$HOME/.npm-global/bin"
|
|
||||||
fish_add_path "$HOME/.odin/"
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
# ALIASES & ABBREVIATIONS
|
|
||||||
# ==============================================================================
|
|
||||||
# List commands
|
|
||||||
alias ls='ls -lh --color=auto --group-directories-first'
|
|
||||||
alias ll='ls -lAh --color=auto --group-directories-first'
|
|
||||||
alias la='ls -la --color=auto --group-directories-first'
|
|
||||||
alias l='ls -CF --color=auto'
|
|
||||||
alias tree='tree --dirsfirst -C'
|
|
||||||
|
|
||||||
# Safety aliases
|
|
||||||
alias rm='rm -I --preserve-root'
|
|
||||||
alias mv='mv -i'
|
|
||||||
alias cp='cp -i'
|
|
||||||
alias ln='ln -i'
|
|
||||||
|
|
||||||
# System information
|
|
||||||
alias df='df -h'
|
|
||||||
alias du='du -h'
|
|
||||||
alias free='free -h'
|
|
||||||
alias bat='bat --theme="ansi" --paging=never'
|
|
||||||
|
|
||||||
# Application shortcuts
|
|
||||||
alias vi='nvim'
|
|
||||||
alias :q='exit'
|
|
||||||
alias lg='lazygit'
|
|
||||||
alias files='thunar .'
|
|
||||||
alias fetch='pfetch'
|
|
||||||
|
|
||||||
# Custom shortcuts
|
|
||||||
alias reload='source ~/.config/fish/config.fish'
|
|
||||||
alias dots='cd ~/.dotfiles && nvim'
|
|
||||||
alias doti='bash ~/.dotfiles/install.sh -i'
|
|
||||||
alias dotl='bash ~/.dotfiles/install.sh -l'
|
|
||||||
alias myip='curl ipinfo.io/ip; echo ""'
|
|
||||||
alias query='xbps-query -Rs'
|
|
||||||
alias commits='git log origin/main..HEAD --oneline'
|
|
||||||
|
|
||||||
|
|
||||||
## Basic project picker using mini sessions and neovim
|
|
||||||
function pp
|
|
||||||
set project (
|
|
||||||
find ~/Projects -mindepth 1 -maxdepth 1 -type d |
|
|
||||||
awk -F/ '{print $NF "\t" $0}' |
|
|
||||||
fzf --with-nth=1
|
|
||||||
)
|
|
||||||
|
|
||||||
if test -z "$project"
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
set project (echo $project | cut -f2)
|
|
||||||
cd $project && clear
|
|
||||||
end
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
# PROMPT COLORS
|
|
||||||
# ==============================================================================
|
|
||||||
set -l user_color (set_color green)
|
|
||||||
set -l host_color (set_color blue)
|
|
||||||
set -l path_color (set_color cyan)
|
|
||||||
|
|
||||||
# Fish's built-in git prompt configuration
|
|
||||||
set -eg ___fish_git_prompt_char_stateseparator
|
|
||||||
set -g __fish_git_prompt_show_informative_status 1
|
|
||||||
set -g __fish_git_prompt_color_branch magenta --bold
|
|
||||||
set -g __fish_git_prompt_color_stagedstate yellow
|
|
||||||
set -g __fish_git_prompt_color_invalidstate red
|
|
||||||
set -g __fish_git_prompt_color_cleanstate green --bold
|
|
||||||
set -g __fish_git_prompt_separator ' '
|
|
||||||
set -g __fish_git_prompt_char_dirtystate '+'
|
|
||||||
set -g __fish_git_prompt_char_stagedstate '●'
|
|
||||||
set -g __fish_git_prompt_char_untrackedfiles ''
|
|
||||||
+19
-12
@@ -2,21 +2,32 @@
|
|||||||
process-unmapped-keys yes
|
process-unmapped-keys yes
|
||||||
)
|
)
|
||||||
|
|
||||||
;; HHKB Classic layout
|
;; HHKB Professional Classic (Linux)
|
||||||
|
;;
|
||||||
|
;; Small key left of Space = Muhenkan
|
||||||
|
;; Large key left of Space = Left Alt
|
||||||
|
;;
|
||||||
|
;; AwesomeWM:
|
||||||
|
;; modkey = "Mod4"
|
||||||
|
|
||||||
(defsrc
|
(defsrc
|
||||||
esc 1 2 3 4 5 6 7 8 9 0 - = \ grv
|
esc 1 2 3 4 5 6 7 8 9 0 - = \ grv
|
||||||
tab q w e r t y u i o p [ ] bspc
|
tab q w e r t y u i o p [ ] bspc
|
||||||
lctl a s d f g h j k l ; ' ret
|
lctl a s d f g h j k l ; ' ret
|
||||||
lsft z x c v b n m , . / rsft
|
lsft z x c v b n m , . / rsft
|
||||||
lmet lalt spc ralt rmet ;; swapped here
|
muhenkan lalt spc ralt rmet
|
||||||
|
)
|
||||||
|
|
||||||
|
(defalias
|
||||||
|
nav (tap-hold 200 200 esc (layer-while-held navigation))
|
||||||
)
|
)
|
||||||
|
|
||||||
(deflayer base
|
(deflayer base
|
||||||
@nav 1 2 3 4 5 6 7 8 9 0 - = \ grv
|
@nav 1 2 3 4 5 6 7 8 9 0 - = \ grv
|
||||||
tab q w e r t y u i o p [ ] bspc
|
tab q w e r t y u i o p [ ] bspc
|
||||||
lctl a s d f g h j k l ; ' ret
|
lctl a s d f g h j k l ; ' ret
|
||||||
lsft z x c v b n m , . / rsft
|
lsft z x c v b n m , . / rsft
|
||||||
lmet lalt spc ralt rmet ;; swapped here
|
lmet lalt spc ralt rmet
|
||||||
)
|
)
|
||||||
|
|
||||||
(deflayer navigation
|
(deflayer navigation
|
||||||
@@ -24,9 +35,5 @@
|
|||||||
tab _ _ _ _ _ _ _ _ _ _ _ _ _
|
tab _ _ _ _ _ _ _ _ _ _ _ _ _
|
||||||
_ _ _ _ _ _ left down up rght _ _ _
|
_ _ _ _ _ _ left down up rght _ _ _
|
||||||
_ _ _ _ _ _ _ _ _ _ _ _
|
_ _ _ _ _ _ _ _ _ _ _ _
|
||||||
_ lalt _ _ _
|
_ lalt _ _ _
|
||||||
)
|
)
|
||||||
|
|
||||||
(defalias
|
|
||||||
nav (tap-hold 200 200 esc (layer-while-held navigation))
|
|
||||||
)
|
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
# ============================================================================
|
||||||
|
# Kitty Configuration
|
||||||
|
# ============================================================================
|
||||||
|
enable_audio_bell no
|
||||||
|
term xterm-256color
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Font
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
font_family JetBrainsMono Nerd Font
|
||||||
|
font_size 12.0
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Window
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
window_padding_width 10
|
||||||
|
window_padding_height 10
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Cursor
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
cursor_shape beam
|
||||||
|
cursor_blink_interval 0.5
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Layout
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
enabled_layouts splits
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Splits
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Vertical split
|
||||||
|
map ctrl+v launch --location=vsplit --cwd=current
|
||||||
|
|
||||||
|
# Close current kitty split
|
||||||
|
map ctrl+q close_window
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Colors
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
foreground #e8e8e8
|
||||||
|
background #121212
|
||||||
|
cursor #D4D4D4
|
||||||
|
cursor_text_color #1F1F1F
|
||||||
|
color0 #1F1F1F
|
||||||
|
color1 #F44747
|
||||||
|
color2 #6A9955
|
||||||
|
color3 #DCDCAA
|
||||||
|
color4 #569CD6
|
||||||
|
color5 #C586C0
|
||||||
|
color6 #56B6C2
|
||||||
|
color7 #D4D4D4
|
||||||
|
color8 #808080
|
||||||
-107
@@ -1,107 +0,0 @@
|
|||||||
# ── Core ─────────────────────────────────────────────────────────────────────
|
|
||||||
set shell bash
|
|
||||||
set shellopts '-eu'
|
|
||||||
set ifs "\n"
|
|
||||||
set scrolloff 8
|
|
||||||
set icons true
|
|
||||||
set period 1
|
|
||||||
set hiddenfiles ".*:*.aux:*.log:*.bbl:*.bcf:*.blg:*.run.xml"
|
|
||||||
set cursorpreviewfmt "\033[7m"
|
|
||||||
|
|
||||||
# ── UI ───────────────────────────────────────────────────────────────────────
|
|
||||||
set drawbox true
|
|
||||||
set ratios 1:2:3
|
|
||||||
set info size:time
|
|
||||||
set sortby natural
|
|
||||||
set dirfirst true
|
|
||||||
|
|
||||||
# ── Preview ──────────────────────────────────────────────────────────────────
|
|
||||||
set previewer ~/.local/bin/lfpreview
|
|
||||||
set cleaner ~/.local/bin/lfcleaner
|
|
||||||
|
|
||||||
# ── Keybindings ──────────────────────────────────────────────────────────────
|
|
||||||
|
|
||||||
# unmap defaults we're replacing
|
|
||||||
map m
|
|
||||||
map d
|
|
||||||
map e
|
|
||||||
map f
|
|
||||||
|
|
||||||
# navigation (vim)
|
|
||||||
map h updir
|
|
||||||
map l open
|
|
||||||
map j down
|
|
||||||
map k up
|
|
||||||
map g top
|
|
||||||
map G bottom
|
|
||||||
map <c-d> half-down
|
|
||||||
map <c-u> half-up
|
|
||||||
|
|
||||||
# enter key — writes selection path and quits (for tmux-lf-helix script)
|
|
||||||
map <enter> select-and-quit
|
|
||||||
|
|
||||||
# go-to shortcuts
|
|
||||||
map gh cd ~
|
|
||||||
map gc cd ~/.config
|
|
||||||
map gd cd ~/Downloads
|
|
||||||
map gb cd ~/bin
|
|
||||||
|
|
||||||
# file operations
|
|
||||||
map dd cut
|
|
||||||
map dD delete
|
|
||||||
map yy copy
|
|
||||||
map p paste
|
|
||||||
map r rename
|
|
||||||
map R bulk-rename
|
|
||||||
|
|
||||||
map . set hidden!
|
|
||||||
map <space> toggle
|
|
||||||
|
|
||||||
# new file/dir
|
|
||||||
map mf push %touch<space>
|
|
||||||
map md push %mkdir<space>-p<space>
|
|
||||||
|
|
||||||
cmd extract ${{
|
|
||||||
lfextract "$f"
|
|
||||||
}}
|
|
||||||
map z extract
|
|
||||||
|
|
||||||
# ── Commands ─────────────────────────────────────────────────────────────────
|
|
||||||
|
|
||||||
cmd select-and-quit &{{
|
|
||||||
if [ -n "$fs" ]; then
|
|
||||||
# if files are toggled/selected use those
|
|
||||||
echo "$fs" > "$lf_selection_path_file"
|
|
||||||
else
|
|
||||||
# otherwise use the hovered file
|
|
||||||
echo "$f" > "$lf_selection_path_file"
|
|
||||||
fi
|
|
||||||
lf -remote "send $id quit"
|
|
||||||
}}
|
|
||||||
|
|
||||||
cmd bulk-rename ${{
|
|
||||||
old=$(mktemp)
|
|
||||||
new=$(mktemp)
|
|
||||||
[ -n "$fs" ] && fs=$(ls)
|
|
||||||
printf '%s\n' "$fs" > "$old"
|
|
||||||
printf '%s\n' "$fs" > "$new"
|
|
||||||
$EDITOR "$new"
|
|
||||||
[ "$(wc -l < "$new")" -ne "$(wc -l < "$old")" ] && exit
|
|
||||||
paste "$old" "$new" | while IFS= read -r names; do
|
|
||||||
src=$(printf '%s' "$names" | cut -f1)
|
|
||||||
dst=$(printf '%s' "$names" | cut -f2)
|
|
||||||
[ "$src" = "$dst" ] && continue
|
|
||||||
mv -- "$src" "$dst"
|
|
||||||
done
|
|
||||||
rm "$old" "$new"
|
|
||||||
lf -remote "send $id unselect"
|
|
||||||
}}
|
|
||||||
|
|
||||||
cmd open ${{
|
|
||||||
case $(file --mime-type -b "$f") in
|
|
||||||
text/*|application/json|application/toml|application/yaml)
|
|
||||||
$EDITOR "$f" ;;
|
|
||||||
*)
|
|
||||||
xdg-open "$f" >/dev/null 2>&1 & ;;
|
|
||||||
esac
|
|
||||||
}}
|
|
||||||
@@ -1,119 +0,0 @@
|
|||||||
require("vim._core.ui2").enable({})
|
|
||||||
map = vim.keymap.set
|
|
||||||
vim.o.termguicolors = true
|
|
||||||
vim.o.nu = true
|
|
||||||
vim.o.swapfile = false
|
|
||||||
vim.o.winborder = "single"
|
|
||||||
vim.o.winblend = 0
|
|
||||||
vim.o.pumblend = 0
|
|
||||||
vim.o.scrolloff = 20
|
|
||||||
vim.o.shiftwidth = 4
|
|
||||||
vim.o.tabstop = 4
|
|
||||||
vim.o.softtabstop = 4
|
|
||||||
vim.o.ignorecase = true
|
|
||||||
vim.o.smartcase = true
|
|
||||||
vim.o.incsearch = true
|
|
||||||
vim.o.hlsearch = true
|
|
||||||
vim.o.mouse = "a"
|
|
||||||
vim.o.path = "**"
|
|
||||||
vim.o.clipboard = "unnamedplus"
|
|
||||||
vim.o.foldenable = true
|
|
||||||
vim.o.foldmethod = "expr"
|
|
||||||
vim.o.foldlevel = 99
|
|
||||||
vim.o.splitright = true
|
|
||||||
vim.o.splitbelow = true
|
|
||||||
vim.o.signcolumn = "yes"
|
|
||||||
vim.o.completeopt = "menu,menuone,noselect,popup,fuzzy"
|
|
||||||
vim.o.undofile = true
|
|
||||||
vim.o.undodir = vim.fn.stdpath("state") .. "/undo"
|
|
||||||
vim.o.errorformat = "%f(%l:%c) %m,%-G%.%#"
|
|
||||||
-- -----------------------------
|
|
||||||
-- @BINDS
|
|
||||||
-- -----------------------------
|
|
||||||
map("t", "<ESC><ESC>", "<C-\\><C-n>")
|
|
||||||
map({"t", "n"}, "<C-h>", "<C-\\><C-n><C-w><C-h>")
|
|
||||||
map({"t", "n"}, "<C-j>", "<C-\\><C-n><C-w><C-j>")
|
|
||||||
map({"t", "n"}, "<C-k>", "<C-\\><C-n><C-w><C-k>")
|
|
||||||
map({"t", "n"}, "<C-l>", "<C-\\><C-n><C-w><C-l>")
|
|
||||||
map({"i", "n"}, "<C- >", "<C-x><C-o>")
|
|
||||||
map("n", '<Esc>', '<Cmd>noh<CR><Esc>')
|
|
||||||
map("v", "J", ":m '>+1<CR>gv=gv")
|
|
||||||
map("v", "K", ":m '<-2<CR>gv=gv")
|
|
||||||
map("v", "<S-Tab>", "<gv")
|
|
||||||
map("v", "<Tab>" , ">gv")
|
|
||||||
map("n", "<C-p>", ":find ")
|
|
||||||
map("n", "<C-e>", ":Lex<CR>")
|
|
||||||
map("n", "<C-backspace>", ":bd<CR>")
|
|
||||||
map("i", "<C-h>", vim.lsp.buf.signature_help)
|
|
||||||
-- -----------------------------
|
|
||||||
-- @PLUGINS
|
|
||||||
-- -----------------------------
|
|
||||||
vim.pack.add({
|
|
||||||
{ src = 'https://github.com/ibhagwan/fzf-lua' },
|
|
||||||
{ src = 'https://github.com/neovim/nvim-lspconfig' },
|
|
||||||
{ src = 'https://github.com/echasnovski/mini.nvim' },
|
|
||||||
{ src = 'https://github.com/nvim-tree/nvim-tree.lua' },
|
|
||||||
{ src = 'https://github.com/romus204/tree-sitter-manager.nvim' },
|
|
||||||
{ src = 'https://github.com/lukas-reineke/indent-blankline.nvim' },
|
|
||||||
{ src = 'https://github.com/rebelot/kanagawa.nvim' },
|
|
||||||
{ src = 'https://github.com/xiyaowong/transparent.nvim' },
|
|
||||||
})
|
|
||||||
|
|
||||||
require("terminal")
|
|
||||||
require("mini.completion").setup()
|
|
||||||
require('mini.statusline').setup()
|
|
||||||
require("mini.surround").setup()
|
|
||||||
require("tree-sitter-manager").setup()
|
|
||||||
require("ibl").setup({
|
|
||||||
indent = { char = "│" },
|
|
||||||
scope = { show_start = false, show_end = false },
|
|
||||||
})
|
|
||||||
vim.cmd.colorscheme('kanagawa')
|
|
||||||
vim.api.nvim_set_hl(0, "WinSeparator", { fg = "#54546D" })
|
|
||||||
|
|
||||||
-- Lsp specific, uses nvim-lspconfigs with the below
|
|
||||||
vim.lsp.enable({ "gopls", "ols" })
|
|
||||||
map("n", "gd", ":lua vim.lsp.buf.definition()<CR>")
|
|
||||||
map("n", "gr", ":lua vim.lsp.buf.rename()<CR>")
|
|
||||||
map("n", "ga", ":lua vim.lsp.buf.code_action()<CR>")
|
|
||||||
|
|
||||||
require("fzf-lua").setup({})
|
|
||||||
map("n", "<C-p>", ":FzfLua files<CR>")
|
|
||||||
map("n", "<C-m>", ":FzfLua buffers<CR>")
|
|
||||||
map("n", "<C-i>", ":FzfLua diagnostics_workspace<CR>")
|
|
||||||
map("n", "<C-f>", ":FzfLua live_grep<CR>")
|
|
||||||
map("n", "<C-b>", ":FzfLua grep_curbuf<CR>")
|
|
||||||
|
|
||||||
require("nvim-tree").setup()
|
|
||||||
map("n", "<C-e>", ":NvimTreeToggle<CR>")
|
|
||||||
-- -----------------------------
|
|
||||||
-- @AUTOCMDS
|
|
||||||
-- -----------------------------
|
|
||||||
-- Terminals should open with insert mode
|
|
||||||
vim.api.nvim_create_autocmd({ "BufEnter", "TermEnter", "WinEnter" }, {
|
|
||||||
pattern = "term://*",
|
|
||||||
callback = function()
|
|
||||||
if vim.bo.buftype == "terminal" then
|
|
||||||
vim.schedule(function()
|
|
||||||
vim.cmd("startinsert")
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
})
|
|
||||||
-- highlights yanked text
|
|
||||||
vim.api.nvim_create_autocmd("TextYankPost", {
|
|
||||||
callback = function()
|
|
||||||
vim.highlight.on_yank({
|
|
||||||
higroup = "IncSearch",
|
|
||||||
timeout = 200,
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
-- removes trailing whitespace on save
|
|
||||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
|
||||||
callback = function()
|
|
||||||
local save_cursor = vim.fn.getpos(".")
|
|
||||||
vim.cmd([[%s/\s\+$//e]])
|
|
||||||
vim.fn.setpos(".", save_cursor)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
local term_buf = nil
|
|
||||||
|
|
||||||
local function open_term_split()
|
|
||||||
vim.cmd('botright vsplit')
|
|
||||||
local win = vim.api.nvim_get_current_win()
|
|
||||||
if term_buf and vim.api.nvim_buf_is_valid(term_buf) then
|
|
||||||
vim.api.nvim_win_set_buf(win, term_buf)
|
|
||||||
else
|
|
||||||
vim.cmd('terminal')
|
|
||||||
term_buf = vim.api.nvim_get_current_buf()
|
|
||||||
end
|
|
||||||
vim.api.nvim_win_set_width(win, math.floor(vim.o.columns * 0.37))
|
|
||||||
vim.cmd('startinsert')
|
|
||||||
end
|
|
||||||
|
|
||||||
local function toggle_term()
|
|
||||||
-- Check if terminal is already visible in a window
|
|
||||||
for _, win in ipairs(vim.api.nvim_list_wins()) do
|
|
||||||
if vim.api.nvim_win_get_buf(win) == term_buf then
|
|
||||||
vim.api.nvim_win_close(win, false)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
open_term_split()
|
|
||||||
end
|
|
||||||
|
|
||||||
local function open_term_fullscreen()
|
|
||||||
if term_buf and vim.api.nvim_buf_is_valid(term_buf) then
|
|
||||||
vim.api.nvim_set_current_buf(term_buf)
|
|
||||||
else
|
|
||||||
vim.cmd('terminal')
|
|
||||||
term_buf = vim.api.nvim_get_current_buf()
|
|
||||||
end
|
|
||||||
vim.cmd('startinsert')
|
|
||||||
end
|
|
||||||
|
|
||||||
local function prev_non_term_buf()
|
|
||||||
local cur = vim.api.nvim_get_current_buf()
|
|
||||||
local bufs = vim.fn.getbufinfo({ buflisted = 1 })
|
|
||||||
local candidates = {}
|
|
||||||
for _, info in ipairs(bufs) do
|
|
||||||
if info.bufnr ~= cur and vim.bo[info.bufnr].buftype ~= 'terminal' then
|
|
||||||
table.insert(candidates, info)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if #candidates == 0 then
|
|
||||||
print('No previous non-terminal buffer')
|
|
||||||
return
|
|
||||||
end
|
|
||||||
table.sort(candidates, function(a, b) return a.lastused > b.lastused end)
|
|
||||||
vim.api.nvim_set_current_buf(candidates[1].bufnr)
|
|
||||||
end
|
|
||||||
|
|
||||||
map('n', '<C-j>', toggle_term, { desc = 'Toggle terminal split' })
|
|
||||||
map('n', '<C-o>', open_term_fullscreen, { desc = 'Open terminal fullscreen' })
|
|
||||||
map('t', '<C-o>', prev_non_term_buf, { desc = 'Exit terminal mode' })
|
|
||||||
map('t', '<C-j>', toggle_term, { desc = 'Toggle terminal split' })
|
|
||||||
map('t', '<C-o>', prev_non_term_buf, { desc = 'Exit terminal mode' })
|
|
||||||
@@ -1,286 +0,0 @@
|
|||||||
#################################
|
|
||||||
# Fading #
|
|
||||||
#################################
|
|
||||||
fading = false;
|
|
||||||
fade-in-step = 0.04;
|
|
||||||
fade-out-step = 0.04;
|
|
||||||
#################################
|
|
||||||
# Corners #
|
|
||||||
#################################
|
|
||||||
# corner-radius = 0;
|
|
||||||
|
|
||||||
#################################
|
|
||||||
# FAST SNAPPY ANIMATIONS #
|
|
||||||
#################################
|
|
||||||
match = "window_type = 'normal'";
|
|
||||||
animations = (
|
|
||||||
|
|
||||||
{
|
|
||||||
|
|
||||||
triggers = ["close"];
|
|
||||||
|
|
||||||
opacity = {
|
|
||||||
|
|
||||||
curve = "cubic-bezier(0,1,1,1)";
|
|
||||||
|
|
||||||
duration = 0.3;
|
|
||||||
|
|
||||||
start = "window-raw-opacity-before";
|
|
||||||
|
|
||||||
end = 0;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
blur-opacity = "opacity";
|
|
||||||
|
|
||||||
shadow-opacity = "opacity";
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
scale-x = {
|
|
||||||
|
|
||||||
curve = "cubic-bezier(0,1.3,1,1)";
|
|
||||||
|
|
||||||
duration = 0.3;
|
|
||||||
|
|
||||||
start = 1;
|
|
||||||
|
|
||||||
end = 0.6;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
scale-y = "scale-x";
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
offset-x = "(1 - scale-x) / 2 * window-width";
|
|
||||||
|
|
||||||
offset-y = "(1 - scale-y) / 2 * window-height";
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
shadow-scale-x = "scale-x";
|
|
||||||
|
|
||||||
shadow-scale-y = "scale-y";
|
|
||||||
|
|
||||||
shadow-offset-x = "offset-x";
|
|
||||||
|
|
||||||
shadow-offset-y = "offset-y";
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
|
|
||||||
triggers = ["open"];
|
|
||||||
|
|
||||||
opacity = {
|
|
||||||
|
|
||||||
curve = "cubic-bezier(0,1,1,1)";
|
|
||||||
|
|
||||||
duration = 0.5;
|
|
||||||
|
|
||||||
start = 0;
|
|
||||||
|
|
||||||
end = "window-raw-opacity";
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
blur-opacity = "opacity";
|
|
||||||
|
|
||||||
shadow-opacity = "opacity";
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
scale-x = {
|
|
||||||
|
|
||||||
curve = "cubic-bezier(0,1.3,1,1)";
|
|
||||||
|
|
||||||
duration = 0.5;
|
|
||||||
|
|
||||||
start = 0.6;
|
|
||||||
|
|
||||||
end = 1;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
scale-y = "scale-x";
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
offset-x = "(1 - scale-x) / 2 * window-width";
|
|
||||||
|
|
||||||
offset-y = "(1 - scale-y) / 2 * window-height";
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
shadow-scale-x = "scale-x";
|
|
||||||
|
|
||||||
shadow-scale-y = "scale-y";
|
|
||||||
|
|
||||||
shadow-offset-x = "offset-x";
|
|
||||||
|
|
||||||
shadow-offset-y = "offset-y";
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
|
|
||||||
triggers = ["geometry"];
|
|
||||||
|
|
||||||
scale-x = {
|
|
||||||
|
|
||||||
curve = "cubic-bezier(0,0,0,1.28)";
|
|
||||||
|
|
||||||
duration = 0.5;
|
|
||||||
|
|
||||||
start = "window-width-before / window-width";
|
|
||||||
|
|
||||||
end = 1;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
scale-x-reverse = {
|
|
||||||
|
|
||||||
curve = "cubic-bezier(0,0,0,1.28)";
|
|
||||||
|
|
||||||
duration = 0.3;
|
|
||||||
|
|
||||||
start = "window-width / window-width-before";
|
|
||||||
|
|
||||||
end = 1;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
scale-y = {
|
|
||||||
|
|
||||||
curve = "cubic-bezier(0,0,0,1.28)";
|
|
||||||
|
|
||||||
duration = 0.5;
|
|
||||||
|
|
||||||
start = "window-height-before / window-height";
|
|
||||||
|
|
||||||
end = 1;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
scale-y-reverse = {
|
|
||||||
|
|
||||||
curve = "cubic-bezier(0,0,0,1.28)";
|
|
||||||
|
|
||||||
duration = 0.5;
|
|
||||||
|
|
||||||
start = "window-height / window-height-before";
|
|
||||||
|
|
||||||
end = 1;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
offset-x = {
|
|
||||||
|
|
||||||
curve = "cubic-bezier(0,0,0,1.28)";
|
|
||||||
|
|
||||||
duration = 0.5;
|
|
||||||
|
|
||||||
start = "window-x-before - window-x";
|
|
||||||
|
|
||||||
end = 0;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
offset-y = {
|
|
||||||
|
|
||||||
curve = "cubic-bezier(0,0,0,1.28)";
|
|
||||||
|
|
||||||
duration = 0.5;
|
|
||||||
|
|
||||||
start = "window-y-before - window-y";
|
|
||||||
|
|
||||||
end = 0;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
shadow-scale-x = "scale-x";
|
|
||||||
|
|
||||||
shadow-scale-y = "scale-y";
|
|
||||||
|
|
||||||
shadow-offset-x = "offset-x";
|
|
||||||
|
|
||||||
shadow-offset-y = "offset-y";
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
)
|
|
||||||
#################################
|
|
||||||
# General Settings #
|
|
||||||
#################################
|
|
||||||
backend = "glx";
|
|
||||||
dithered-present = false;
|
|
||||||
vsync = true;
|
|
||||||
detect-rounded-corners = true;
|
|
||||||
detect-client-opacity = true;
|
|
||||||
detect-transient = true;
|
|
||||||
use-damage = true;
|
|
||||||
log-level = "warn";
|
|
||||||
#################################
|
|
||||||
# Window Rules #
|
|
||||||
#################################
|
|
||||||
rules: (
|
|
||||||
# No rounded corners on dock and desktop
|
|
||||||
{
|
|
||||||
match = "window_type = 'dock' || window_type = 'desktop'";
|
|
||||||
corner-radius = 0;
|
|
||||||
},
|
|
||||||
{
|
|
||||||
match = "class_g = 'Rofi'";
|
|
||||||
animations = (
|
|
||||||
{
|
|
||||||
triggers = ["open", "show"];
|
|
||||||
opacity = {
|
|
||||||
curve = "cubic-bezier(0, 1, 1, 1)";
|
|
||||||
duration = 0.2;
|
|
||||||
start = 0;
|
|
||||||
end = "window-raw-opacity";
|
|
||||||
};
|
|
||||||
shadow-opacity = "opacity";
|
|
||||||
scale-y = {
|
|
||||||
curve = "cubic-bezier(0.2, 0, 0, 1)";
|
|
||||||
duration = 0.2;
|
|
||||||
start = 0.55;
|
|
||||||
end = 1;
|
|
||||||
};
|
|
||||||
shadow-scale-y = "scale-y";
|
|
||||||
},
|
|
||||||
{
|
|
||||||
triggers = ["close", "hide"];
|
|
||||||
opacity = {
|
|
||||||
curve = "cubic-bezier(0, 1, 1, 1)";
|
|
||||||
duration = 0.15;
|
|
||||||
start = "window-raw-opacity-before";
|
|
||||||
end = 0;
|
|
||||||
};
|
|
||||||
shadow-opacity = "opacity";
|
|
||||||
scale-y = {
|
|
||||||
curve = "cubic-bezier(0.2, 0, 0, 1)";
|
|
||||||
duration = 0.15;
|
|
||||||
start = 1;
|
|
||||||
end = 0.55;
|
|
||||||
};
|
|
||||||
shadow-scale-y = "scale-y";
|
|
||||||
},
|
|
||||||
);
|
|
||||||
},
|
|
||||||
{
|
|
||||||
match = "window_type = 'splash' && name = 'awesome_dim_overlay'";
|
|
||||||
animations = ();
|
|
||||||
shadow = false;
|
|
||||||
corner-radius = 0;
|
|
||||||
fade = false;
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
@@ -1,122 +0,0 @@
|
|||||||
* {
|
|
||||||
/* -- Palette, matches colors{} in awesome rc.lua -- */
|
|
||||||
bg0: #111111; /* colors.background */
|
|
||||||
bg1: #1a1a1a; /* colors.background_alt */
|
|
||||||
fg0: #dcd7ba; /* colors.foreground */
|
|
||||||
fg-selected: #ffffff; /* colors.white */
|
|
||||||
accent: #6a9589; /* colors.accent */
|
|
||||||
accent-alt: #727169; /* colors.accent_alt */
|
|
||||||
red: #e82424; /* colors.red */
|
|
||||||
disabled: #6a9589; /* colors.disabled */
|
|
||||||
font: "JetBrainsMono Nerd Font 14";
|
|
||||||
background-color: transparent;
|
|
||||||
text-color: @fg0;
|
|
||||||
}
|
|
||||||
window {
|
|
||||||
transparency: "real";
|
|
||||||
/* Anchor top-center, right below the wibar. */
|
|
||||||
location: north;
|
|
||||||
anchor: north;
|
|
||||||
y-offset: 48px;
|
|
||||||
width: 32em;
|
|
||||||
height: 26em; /* fixed — box size no longer changes with result count */
|
|
||||||
background-color: @bg0;
|
|
||||||
border: 3px;
|
|
||||||
border-color: @accent;
|
|
||||||
border-radius: -1px; /* matches gears.shape.rounded_rect radius in rc.lua */
|
|
||||||
padding: 14px;
|
|
||||||
}
|
|
||||||
mainbox {
|
|
||||||
children: [ inputbar, message, listview, mode-switcher ];
|
|
||||||
spacing: 10px;
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
/* -- Search field -- */
|
|
||||||
inputbar {
|
|
||||||
children: [ prompt, entry ];
|
|
||||||
spacing: 10px;
|
|
||||||
background-color: @bg1;
|
|
||||||
border-radius: 10px;
|
|
||||||
padding: 10px 14px;
|
|
||||||
}
|
|
||||||
prompt {
|
|
||||||
text-color: @accent-alt;
|
|
||||||
}
|
|
||||||
entry {
|
|
||||||
placeholder: "Search";
|
|
||||||
placeholder-color: @disabled;
|
|
||||||
text-color: @fg0;
|
|
||||||
cursor: text;
|
|
||||||
}
|
|
||||||
/* -- List/grid toggle icons, top-right (matches screenshot) -- */
|
|
||||||
mode-switcher {
|
|
||||||
enabled: false; /* flip to true if you use rofi's built-in mode tabs */
|
|
||||||
}
|
|
||||||
/* -- Results -- */
|
|
||||||
listview {
|
|
||||||
lines: 8;
|
|
||||||
columns: 1;
|
|
||||||
spacing: 6px;
|
|
||||||
scrollbar: false;
|
|
||||||
background-color: transparent;
|
|
||||||
fixed-height: true; /* box height stays locked, doesn't shrink/grow with result count */
|
|
||||||
dynamic: false; /* don't resize dynamically as you type either */
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* Rofi tracks row state as a combination of position (normal/alternate,
|
|
||||||
* i.e. even/odd rows for banding) and status (normal/urgent/active/selected).
|
|
||||||
* Each combination needs its own selector or a competing @theme import
|
|
||||||
* (if you have one elsewhere in your rofi config) can still win on states
|
|
||||||
* this file doesn't explicitly cover. Pinning all of them here.
|
|
||||||
*/
|
|
||||||
element {
|
|
||||||
padding: 10px 12px;
|
|
||||||
border-radius: 10px;
|
|
||||||
orientation: horizontal;
|
|
||||||
}
|
|
||||||
element normal.normal,
|
|
||||||
element alternate.normal {
|
|
||||||
background-color: @bg1;
|
|
||||||
text-color: @fg0;
|
|
||||||
}
|
|
||||||
element normal.urgent,
|
|
||||||
element alternate.urgent {
|
|
||||||
background-color: @bg1;
|
|
||||||
text-color: @red;
|
|
||||||
}
|
|
||||||
element normal.active,
|
|
||||||
element alternate.active {
|
|
||||||
background-color: @bg1;
|
|
||||||
text-color: @accent-alt;
|
|
||||||
}
|
|
||||||
element selected.normal {
|
|
||||||
background-color: @accent-alt;
|
|
||||||
text-color: @fg-selected;
|
|
||||||
}
|
|
||||||
element selected.urgent {
|
|
||||||
background-color: @red;
|
|
||||||
text-color: @fg-selected;
|
|
||||||
}
|
|
||||||
element selected.active {
|
|
||||||
background-color: @accent-alt;
|
|
||||||
text-color: @bg0;
|
|
||||||
}
|
|
||||||
element-icon {
|
|
||||||
size: 24px;
|
|
||||||
padding: 0 12px 0 0;
|
|
||||||
vertical-align: 0.5;
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
element-text {
|
|
||||||
vertical-align: 0.5;
|
|
||||||
text-color: inherit;
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
message {
|
|
||||||
background-color: @bg1;
|
|
||||||
border-radius: 10px;
|
|
||||||
padding: 8px 12px;
|
|
||||||
}
|
|
||||||
textbox {
|
|
||||||
text-color: @fg0;
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"folders":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"path": "."
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,435 +0,0 @@
|
|||||||
{
|
|
||||||
"auto_complete":
|
|
||||||
{
|
|
||||||
"selected_items":
|
|
||||||
[
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"buffers":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"contents": "",
|
|
||||||
"settings":
|
|
||||||
{
|
|
||||||
"buffer_size": 0,
|
|
||||||
"line_ending": "Unix"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"build_system": "",
|
|
||||||
"build_system_choices":
|
|
||||||
[
|
|
||||||
],
|
|
||||||
"build_varint": "",
|
|
||||||
"command_palette":
|
|
||||||
{
|
|
||||||
"height": 0.0,
|
|
||||||
"last_filter": "",
|
|
||||||
"selected_items":
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"key",
|
|
||||||
"Preferences: Key Bindings"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"toggle ",
|
|
||||||
"View: Toggle Tabs"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"terminal set",
|
|
||||||
"Preferences: Terminal Settings"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"install pacakge",
|
|
||||||
"Package Control: Install Package"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"remove packa",
|
|
||||||
"Package Control: Remove Package"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"termi",
|
|
||||||
"Terminus: Toggle Panel"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"colo",
|
|
||||||
"UI: Select Color Scheme"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"ui",
|
|
||||||
"UI: Select Color Scheme"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"setting",
|
|
||||||
"Preferences: Settings"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"ke",
|
|
||||||
"Preferences: Key Bindings"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"insta",
|
|
||||||
"Package Control: Install Package"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"remove",
|
|
||||||
"Package Control: Remove Package"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"settin",
|
|
||||||
"Preferences: Settings"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"ui ",
|
|
||||||
"UI: Select Theme"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"keybinds",
|
|
||||||
"Preferences: Key Bindings"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"lsp",
|
|
||||||
"Preferences: LSP Settings"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"keyb",
|
|
||||||
"Preferences: Key Bindings"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"install",
|
|
||||||
"Package Control: Install Package"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"inst",
|
|
||||||
"Package Control: Install Package"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"tab",
|
|
||||||
"View: Toggle Tabs"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"theme",
|
|
||||||
"UI: Customize Color Scheme"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"tabs",
|
|
||||||
"View: Toggle Tabs"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"mini",
|
|
||||||
"View: Toggle Minimap"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"color",
|
|
||||||
"UI: Select Color Scheme"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"Ui",
|
|
||||||
"UI: Select Color Scheme"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"instal",
|
|
||||||
"Package Control: Install Package"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"remove ",
|
|
||||||
"Package Control: Remove Package"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"settings",
|
|
||||||
"Preferences: Settings"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"cust",
|
|
||||||
"UI: Customize Theme"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"custom",
|
|
||||||
"UI: Customize Color Scheme"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"color scheme",
|
|
||||||
"UI: Select Color Scheme"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"ins",
|
|
||||||
"Package Control: Install Package"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"width": 0.0
|
|
||||||
},
|
|
||||||
"console":
|
|
||||||
{
|
|
||||||
"height": 250.0,
|
|
||||||
"history":
|
|
||||||
[
|
|
||||||
"sublime.log_commands(True)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"distraction_free":
|
|
||||||
{
|
|
||||||
"menu_visible": true,
|
|
||||||
"show_minimap": false,
|
|
||||||
"show_open_files": false,
|
|
||||||
"show_tabs": false,
|
|
||||||
"side_bar_visible": false,
|
|
||||||
"status_bar_visible": false
|
|
||||||
},
|
|
||||||
"expanded_folders":
|
|
||||||
[
|
|
||||||
"/home/jason/.dotfiles",
|
|
||||||
"/home/jason/.dotfiles/config",
|
|
||||||
"/home/jason/.dotfiles/config/awesome",
|
|
||||||
"/home/jason/.dotfiles/config/awesome/config",
|
|
||||||
"/home/jason/.dotfiles/config/nvim"
|
|
||||||
],
|
|
||||||
"file_history":
|
|
||||||
[
|
|
||||||
"/home/jason/.dotfiles/config/awesome/config/rules.lua",
|
|
||||||
"/home/jason/.dotfiles/config/awesome/config/theme.lua",
|
|
||||||
"/home/jason/.dotfiles/config/awesome/rc.lua",
|
|
||||||
"/home/jason/.dotfiles/config/nvim/init.lua",
|
|
||||||
"/home/jason/.dotfiles/scripts/installs/install_odin",
|
|
||||||
"/home/jason/.dotfiles/scripts/bin/bookmarks",
|
|
||||||
"/home/jason/.dotfiles/config/alacritty/alacritty.toml",
|
|
||||||
"/home/jason/.dotfiles/scripts/installs/install_php",
|
|
||||||
"/home/jason/.dotfiles/install.sh",
|
|
||||||
"/home/jason/.dotfiles/.gitignore",
|
|
||||||
"/home/jason/.config/sublime-text/Packages/User/Find Results.sublime-settings",
|
|
||||||
"/home/jason/.config/sublime-text/Packages/BetterFindBuffer/Find Results.sublime-settings",
|
|
||||||
"/home/jason/.dotfiles/README.md",
|
|
||||||
"/home/jason/.config/sublime-text/Packages/BetterFindBuffer/BetterFindBuffer.sublime-settings",
|
|
||||||
"/home/jason/.config/sublime-text/Packages/User/BetterFindBuffer.sublime-settings",
|
|
||||||
"/home/jason/.config/sublime-text/Packages/Default/Preferences.sublime-settings",
|
|
||||||
"/home/jason/.config/sublime-text/Packages/User/Default (Linux).sublime-keymap",
|
|
||||||
"/home/jason/.config/sublime-text/Packages/Default/Default (Linux).sublime-keymap",
|
|
||||||
"/home/jason/Projects/octal_cookie/src/machine/cpu.odin",
|
|
||||||
"/home/jason/.dotfiles/config/nvim/nvim-pack-lock.json",
|
|
||||||
"/home/jason/.dotfiles/config/kanata/kanata.kbd"
|
|
||||||
],
|
|
||||||
"find":
|
|
||||||
{
|
|
||||||
"height": 51.0
|
|
||||||
},
|
|
||||||
"find_in_files":
|
|
||||||
{
|
|
||||||
"height": 175.0,
|
|
||||||
"where_history":
|
|
||||||
[
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"find_state":
|
|
||||||
{
|
|
||||||
"case_sensitive": false,
|
|
||||||
"find_history":
|
|
||||||
[
|
|
||||||
],
|
|
||||||
"highlight": true,
|
|
||||||
"in_selection": false,
|
|
||||||
"preserve_case": false,
|
|
||||||
"regex": false,
|
|
||||||
"replace_history":
|
|
||||||
[
|
|
||||||
],
|
|
||||||
"reverse": false,
|
|
||||||
"scrollbar_highlights": true,
|
|
||||||
"show_context": true,
|
|
||||||
"use_buffer2": true,
|
|
||||||
"use_gitignore": true,
|
|
||||||
"whole_word": false,
|
|
||||||
"wrap": true
|
|
||||||
},
|
|
||||||
"groups":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"sheets":
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"selected": true,
|
|
||||||
"semi_transient": false,
|
|
||||||
"settings":
|
|
||||||
{
|
|
||||||
"buffer_size": 0,
|
|
||||||
"regions":
|
|
||||||
{
|
|
||||||
},
|
|
||||||
"selection":
|
|
||||||
[
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"settings":
|
|
||||||
{
|
|
||||||
"lsp_uri": "buffer:156",
|
|
||||||
"syntax": "Packages/Text/Plain text.tmLanguage"
|
|
||||||
},
|
|
||||||
"translation.x": 0.0,
|
|
||||||
"translation.y": 0.0,
|
|
||||||
"zoom_level": 1.0
|
|
||||||
},
|
|
||||||
"stack_index": 0,
|
|
||||||
"stack_multiselect": false,
|
|
||||||
"type": "text"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"incremental_find":
|
|
||||||
{
|
|
||||||
"height": 51.0
|
|
||||||
},
|
|
||||||
"input":
|
|
||||||
{
|
|
||||||
"height": 73.0
|
|
||||||
},
|
|
||||||
"layout":
|
|
||||||
{
|
|
||||||
"cells":
|
|
||||||
[
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"cols":
|
|
||||||
[
|
|
||||||
0.0,
|
|
||||||
1.0
|
|
||||||
],
|
|
||||||
"rows":
|
|
||||||
[
|
|
||||||
0.0,
|
|
||||||
1.0
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"menu_visible": false,
|
|
||||||
"output.LSP Log Panel":
|
|
||||||
{
|
|
||||||
"height": 0.0,
|
|
||||||
"history":
|
|
||||||
[
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"output.buffers":
|
|
||||||
{
|
|
||||||
"height": 1116.0,
|
|
||||||
"history":
|
|
||||||
[
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"output.diagnostics":
|
|
||||||
{
|
|
||||||
"height": 0.0,
|
|
||||||
"history":
|
|
||||||
[
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"output.find_results":
|
|
||||||
{
|
|
||||||
"height": 0.0,
|
|
||||||
"history":
|
|
||||||
[
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"output.mdpopups":
|
|
||||||
{
|
|
||||||
"height": 0.0,
|
|
||||||
"history":
|
|
||||||
[
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"pinned_build_system": "",
|
|
||||||
"project": "dotfiles.sublime-project",
|
|
||||||
"replace":
|
|
||||||
{
|
|
||||||
"height": 98.0
|
|
||||||
},
|
|
||||||
"save_all_on_build": true,
|
|
||||||
"select_file":
|
|
||||||
{
|
|
||||||
"height": 0.0,
|
|
||||||
"last_filter": "",
|
|
||||||
"selected_items":
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"awesomeconfig/",
|
|
||||||
"config/awesome/config/rules.lua"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"awesome/",
|
|
||||||
"config/awesome/rc.lua"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"install_od",
|
|
||||||
"scripts/installs/install_odin"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"ini",
|
|
||||||
"config/nvim/init.lua"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"cpu",
|
|
||||||
"src/machine/cpu.odin"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"nvim",
|
|
||||||
"config/nvim/nvim-pack-lock.json"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"width": 0.0
|
|
||||||
},
|
|
||||||
"select_project":
|
|
||||||
{
|
|
||||||
"height": 657.0,
|
|
||||||
"last_filter": "",
|
|
||||||
"selected_items":
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"",
|
|
||||||
"~/Projects/octal_cookie/octal_cookie.sublime-project"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"gra",
|
|
||||||
"~/Projects/gravekeeper/gravekeeper.sublime-project"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"oc",
|
|
||||||
"~/Projects/octal_cookie/octal_cookie.sublime-project"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"do",
|
|
||||||
"~/.dotfiles/dotfiles.sublime-project"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"width": 499.0
|
|
||||||
},
|
|
||||||
"select_symbol":
|
|
||||||
{
|
|
||||||
"height": 0.0,
|
|
||||||
"last_filter": "",
|
|
||||||
"selected_items":
|
|
||||||
[
|
|
||||||
],
|
|
||||||
"width": 0.0
|
|
||||||
},
|
|
||||||
"selected_group": 0,
|
|
||||||
"settings":
|
|
||||||
{
|
|
||||||
"_vintageous_reset_during_init": true,
|
|
||||||
"lsp_show_inlay_hints": false
|
|
||||||
},
|
|
||||||
"show_minimap": false,
|
|
||||||
"show_open_files": false,
|
|
||||||
"show_tabs": false,
|
|
||||||
"side_bar_visible": true,
|
|
||||||
"side_bar_width": 481.0,
|
|
||||||
"status_bar_visible": true,
|
|
||||||
"template_settings":
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+9
-22
@@ -83,13 +83,9 @@ if [ "$DO_LINKS" = true ]; then
|
|||||||
CREATED=0
|
CREATED=0
|
||||||
SKIPPED=0
|
SKIPPED=0
|
||||||
|
|
||||||
|
link_file "$DOTFILES_DIR/config/bash/bashrc" "$HOME/.bashrc"
|
||||||
link_file "$DOTFILES_DIR/config/kanata" "$HOME/.config/kanata"
|
link_file "$DOTFILES_DIR/config/kanata" "$HOME/.config/kanata"
|
||||||
link_file "$DOTFILES_DIR/config/fish" "$HOME/.config/fish"
|
|
||||||
link_file "$DOTFILES_DIR/config/alacritty" "$HOME/.config/alacritty"
|
link_file "$DOTFILES_DIR/config/alacritty" "$HOME/.config/alacritty"
|
||||||
link_file "$DOTFILES_DIR/config/lf" "$HOME/.config/lf"
|
|
||||||
link_file "$DOTFILES_DIR/config/picom" "$HOME/.config/picom"
|
|
||||||
link_file "$DOTFILES_DIR/config/awesome" "$HOME/.config/awesome"
|
|
||||||
link_file "$DOTFILES_DIR/config/rofi" "$HOME/.config/rofi"
|
|
||||||
link_file "$DOTFILES_DIR/config/nvim" "$HOME/.config/nvim"
|
link_file "$DOTFILES_DIR/config/nvim" "$HOME/.config/nvim"
|
||||||
link_file "$DOTFILES_DIR/scripts/bin" "$HOME/.local/bin"
|
link_file "$DOTFILES_DIR/scripts/bin" "$HOME/.local/bin"
|
||||||
|
|
||||||
@@ -148,22 +144,20 @@ if [ "$DO_INSTALL" = true ]; then
|
|||||||
## INSTALL REQUIRED PACKAGES
|
## INSTALL REQUIRED PACKAGES
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
REQUIRED_PACKAGES=(
|
REQUIRED_PACKAGES=(
|
||||||
|
# system
|
||||||
|
pfetch fuse
|
||||||
# network & download
|
# network & download
|
||||||
wget curl ca-certificates gnupg rsync
|
wget curl ca-certificates gnupg rsync
|
||||||
# core utilities
|
# core utilities
|
||||||
git unzip jq fzf tree direnv make
|
git fd jq fzf ripgrep tree direnv make bat
|
||||||
# modern cli replacements
|
ark unzip p7zip tar gzip bzip2 xz kanata
|
||||||
lf fd ripgrep bat delta lazygit
|
gitu
|
||||||
# shell & terminal
|
|
||||||
fish-shell alacritty
|
|
||||||
# build & dev tools
|
# build & dev tools
|
||||||
base-devel valgrind tree-sitter-cli go
|
alacritty base-devel valgrind tree-sitter-cli go nodejs
|
||||||
# system
|
|
||||||
pfetch fuse
|
|
||||||
# window manager & desktop
|
|
||||||
picom xdotool wmctrl polybar rofi kanata
|
|
||||||
# fonts
|
# fonts
|
||||||
noto-fonts-ttf noto-fonts-emoji
|
noto-fonts-ttf noto-fonts-emoji
|
||||||
|
# kde
|
||||||
|
xdg-desktop-portal xdg-desktop-portal-kde
|
||||||
)
|
)
|
||||||
|
|
||||||
MISSING_PACKAGES=()
|
MISSING_PACKAGES=()
|
||||||
@@ -192,10 +186,3 @@ if [ "$DO_INSTALL" = true ]; then
|
|||||||
echo "✅ Package setup complete."
|
echo "✅ Package setup complete."
|
||||||
echo ""
|
echo ""
|
||||||
fi
|
fi
|
||||||
# TODO: these need to go somewhere!
|
|
||||||
# xfconf-query -c xfce4-session -np '/shutdown/ShowSuspend' -t 'bool' -s 'false'
|
|
||||||
# xfconf-query -c xfce4-session -np '/shutdown/ShowHibernate' -t 'bool' -s 'false'
|
|
||||||
# xfconf-query -c xfce4-session -np '/shutdown/ShowHybridSleep' -t 'bool' -s 'false'
|
|
||||||
# xfconf-query -c xfce4-session -np '/shutdown/ShowSwitchUser' -t 'bool' -s 'false'
|
|
||||||
# xfconf-query -c xfwm4 -p /general/placement_ratio -s 100
|
|
||||||
# xfconf-query -c xfwm4 -p /general/use_compositing -s false
|
|
||||||
|
|||||||
@@ -1,68 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# rofi-audio-switch: pick a PulseAudio/PipeWire sink via rofi
|
|
||||||
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
awesome-client 'show_dim()' >/dev/null 2>&1
|
|
||||||
trap 'awesome-client "hide_dim()" >/dev/null 2>&1' EXIT
|
|
||||||
|
|
||||||
# Get list of sinks: index, name, description
|
|
||||||
mapfile -t sinks < <(pactl list sinks | awk -F': ' '
|
|
||||||
/^Sink #/ { idx=$2 }
|
|
||||||
/Name:/ { name=$2 }
|
|
||||||
/Description:/ { desc=$2; print idx"\t"name"\t"desc }
|
|
||||||
')
|
|
||||||
|
|
||||||
if [ "${#sinks[@]}" -eq 0 ]; then
|
|
||||||
notify-send "Audio Switch" "No sinks found"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
current_sink=$(pactl get-default-sink)
|
|
||||||
|
|
||||||
# Build rofi menu: show description, mark current with a star
|
|
||||||
menu=""
|
|
||||||
for line in "${sinks[@]}"; do
|
|
||||||
name=$(echo "$line" | cut -f2)
|
|
||||||
desc=$(echo "$line" | cut -f3)
|
|
||||||
if [ "$name" = "$current_sink" ]; then
|
|
||||||
menu+="* $desc\n"
|
|
||||||
else
|
|
||||||
menu+=" $desc\n"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
chosen=$(echo -e "$menu" | rofi -dmenu -i -p "Audio Output" -markup-rows \
|
|
||||||
-theme-str 'listview { lines: 3; }' \
|
|
||||||
-theme-str 'window { height: 220px; }')
|
|
||||||
|
|
||||||
[ -z "$chosen" ] && exit 0
|
|
||||||
|
|
||||||
# Strip the leading marker to match description text
|
|
||||||
chosen_desc=$(echo "$chosen" | sed 's/^[* ] //')
|
|
||||||
|
|
||||||
# Find matching sink name for that description
|
|
||||||
target_name=""
|
|
||||||
for line in "${sinks[@]}"; do
|
|
||||||
desc=$(echo "$line" | cut -f3)
|
|
||||||
if [ "$desc" = "$chosen_desc" ]; then
|
|
||||||
target_name=$(echo "$line" | cut -f2)
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z "$target_name" ]; then
|
|
||||||
notify-send "Audio Switch" "Could not resolve selection"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set as default sink
|
|
||||||
pactl set-default-sink "$target_name"
|
|
||||||
|
|
||||||
# Move all currently running streams to the new sink
|
|
||||||
mapfile -t inputs < <(pactl list short sink-inputs | cut -f1)
|
|
||||||
for input in "${inputs[@]}"; do
|
|
||||||
pactl move-sink-input "$input" "$target_name"
|
|
||||||
done
|
|
||||||
|
|
||||||
notify-send "Audio Switch" "Switched to: $chosen_desc"
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# rofi-bookmarks: pick a Chromium bookmark and open it (new tab or new window)
|
|
||||||
|
|
||||||
set -euo pipefail
|
|
||||||
awesome-client 'show_dim()' >/dev/null 2>&1
|
|
||||||
|
|
||||||
BOOKMARKS_FILE="$HOME/.config/chromium/Default/Bookmarks"
|
|
||||||
|
|
||||||
if [ ! -f "$BOOKMARKS_FILE" ]; then
|
|
||||||
notify-send "Bookmarks" "Chromium bookmarks file not found"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Recursively walk the bookmark tree (roots -> bookmark_bar / other / synced)
|
|
||||||
# and emit "title\turl" for every leaf ("type": "url"), skipping folders.
|
|
||||||
list=$(jq -r '
|
|
||||||
def walk_nodes:
|
|
||||||
if .type == "url" then
|
|
||||||
"\(.name)\t\(.url)"
|
|
||||||
elif .children then
|
|
||||||
.children[] | walk_nodes
|
|
||||||
else
|
|
||||||
empty
|
|
||||||
end;
|
|
||||||
.roots | to_entries[] | .value | walk_nodes
|
|
||||||
' "$BOOKMARKS_FILE")
|
|
||||||
|
|
||||||
if [ -z "$list" ]; then
|
|
||||||
notify-send "Bookmarks" "No bookmarks found"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
chosen=$(echo "$list" | awk -F'\t' '{print $1}' | rofi -dmenu -i -p "Bookmarks" \
|
|
||||||
-theme-str 'listview { lines: 5; }' \
|
|
||||||
-theme-str 'window { width: 21%; }' \
|
|
||||||
-theme-str 'window { height: 400px; }')
|
|
||||||
|
|
||||||
[ -z "$chosen" ] && exit 0
|
|
||||||
|
|
||||||
url=$(echo "$list" | awk -F'\t' -v title="$chosen" '$1 == title { print $2; exit }')
|
|
||||||
|
|
||||||
[ -z "$url" ] && exit 0
|
|
||||||
|
|
||||||
# Open in a new tab of the existing Chromium window if one's running,
|
|
||||||
# otherwise this also launches Chromium fresh with that tab.
|
|
||||||
librewolf --new-tab "$url"
|
|
||||||
trap 'awesome-client "hide_dim()" >/dev/null 2>&1' EXIT
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# Nothing to clean for the previewer above, but lf requires this script.
|
|
||||||
exit 0
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
for file in "$@"; do
|
|
||||||
case "$file" in
|
|
||||||
*.tar) tar xvf "$file" ;;
|
|
||||||
*.tar.gz|*.tgz) tar xzvf "$file" ;;
|
|
||||||
*.tar.bz2|*.tbz2) tar xjvf "$file" ;;
|
|
||||||
*.tar.xz|*.txz) tar xJvf "$file" ;;
|
|
||||||
*.zip) unzip "$file" ;;
|
|
||||||
*.rar) unrar x "$file" ;;
|
|
||||||
*.7z) 7z x "$file" ;;
|
|
||||||
*.gz) gunzip "$file" ;;
|
|
||||||
*.bz2) bunzip2 "$file" ;;
|
|
||||||
*.xz) unxz "$file" ;;
|
|
||||||
*) echo "Unknown archive type: $file" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
file="$1"
|
|
||||||
w="$2"
|
|
||||||
h="$3"
|
|
||||||
|
|
||||||
case "$(file -Lb --mime-type "$file")" in
|
|
||||||
text/*|application/json|application/x-empty|inode/x-empty)
|
|
||||||
bat --theme="ansi" --color=always --style=numbers --line-range=:500 --terminal-width="$w" "$file"
|
|
||||||
;;
|
|
||||||
image/*)
|
|
||||||
echo "Image: $file"
|
|
||||||
;;
|
|
||||||
application/pdf)
|
|
||||||
pdftotext -l 10 -nopgbrk -q "$file" - | fold -s -w "$w"
|
|
||||||
;;
|
|
||||||
application/zip|application/x-tar|application/x-rar|application/x-7z-compressed|application/gzip|application/x-bzip2|application/x-xz)
|
|
||||||
echo "Archive: $file"
|
|
||||||
echo
|
|
||||||
case "$file" in
|
|
||||||
*.zip) unzip -l "$file" ;;
|
|
||||||
*.tar|*.tar.*|*.tgz) tar tf "$file" ;;
|
|
||||||
*.rar) unrar l "$file" ;;
|
|
||||||
*.7z) 7z l "$file" ;;
|
|
||||||
*) echo "Archive listing not supported" ;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
file -Lb "$file"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# rofi-power-menu: logout / restart / shutdown via rofi
|
|
||||||
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
awesome-client 'show_dim()' >/dev/null 2>&1
|
|
||||||
trap 'awesome-client "hide_dim()" >/dev/null 2>&1' EXIT
|
|
||||||
|
|
||||||
options=" Logout\n Restart\n Shutdown"
|
|
||||||
|
|
||||||
chosen=$(echo -e "$options" | rofi -dmenu -i -p "Power" -markup-rows \
|
|
||||||
-theme-str 'listview { lines: 3; }' \
|
|
||||||
-theme-str 'window { height: 240px; }')
|
|
||||||
|
|
||||||
[ -z "$chosen" ] && exit 0
|
|
||||||
|
|
||||||
case "$chosen" in
|
|
||||||
*Logout*)
|
|
||||||
loginctl terminate-session ${XDG_SESSION_ID-}
|
|
||||||
;;
|
|
||||||
*Restart*)
|
|
||||||
loginctl reboot
|
|
||||||
;;
|
|
||||||
*Shutdown*)
|
|
||||||
loginctl poweroff
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
awesome-client 'show_dim()'
|
|
||||||
rofi -show drun "$@"
|
|
||||||
awesome-client 'hide_dim()'
|
|
||||||
@@ -5,10 +5,11 @@
|
|||||||
# Builds from source - recommended method on Linux
|
# Builds from source - recommended method on Linux
|
||||||
# ---------------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------------
|
||||||
set -e
|
set -e
|
||||||
ODIN_DIR="$HOME/odin"
|
ODIN_DIR="$HOME/.odin"
|
||||||
|
|
||||||
echo "Installing Odin build dependencies..."
|
echo "Installing Odin build dependencies..."
|
||||||
sudo xbps-install -Sy llvm18 llvm18-devel clang18 libstdc++-devel
|
sudo xbps-install -Sy llvm18 llvm18-devel clang18 libstdc++-devel git-lfs
|
||||||
|
git lfs install
|
||||||
|
|
||||||
echo "Cloning Odin repository..."
|
echo "Cloning Odin repository..."
|
||||||
git clone https://github.com/odin-lang/Odin "$ODIN_DIR"
|
git clone https://github.com/odin-lang/Odin "$ODIN_DIR"
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------------
|
||||||
# Golang install recipe
|
# PHP install recipe
|
||||||
# Fetches the void php version
|
# Fetches the void php version and composer package
|
||||||
# then installs composer with php
|
|
||||||
# ---------------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------------
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user