Merge remote-tracking branch 'refs/remotes/origin/main'
This commit is contained in:
@@ -1,23 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
sudo pacman -S --needed \
|
|
||||||
nodejs \
|
|
||||||
npm \
|
|
||||||
starship \
|
|
||||||
fastfetch \
|
|
||||||
tree-sitter-cli \
|
|
||||||
ruff \
|
|
||||||
python-ruff \
|
|
||||||
chromium \
|
|
||||||
selene \
|
|
||||||
opencode \
|
|
||||||
tmux \
|
|
||||||
yazi \
|
|
||||||
zoxide \
|
|
||||||
fzf \
|
|
||||||
locate
|
|
||||||
|
|
||||||
npm install -g vscode-js-debug
|
|
||||||
npm install -g eslint_d
|
|
||||||
ya pkg add yazi-rs/plugins:git
|
|
||||||
sudo updatedb
|
|
||||||
@@ -1,18 +1,21 @@
|
|||||||
# setup ist ein Kommando-Target (keine Datei) und soll immer ausgeführt werden.
|
# setup ist ein Kommando-Target (keine Datei) und soll immer ausgeführt werden.
|
||||||
.PHONY: basic
|
.PHONY: basic
|
||||||
|
|
||||||
basic:
|
termn:
|
||||||
bash .install_skripte/install_basic_pcks.sh
|
bash _install_skripte_install_terminal_pcks.sh
|
||||||
|
stow term
|
||||||
|
basic: term
|
||||||
|
bash _install_skripte_install_basic_pcks.sh
|
||||||
stow nvim
|
stow nvim
|
||||||
bash .install_skripte/nextcloud.sh
|
bash _install_skripte/nextcloud.sh
|
||||||
hypr: basic
|
hypr: basic
|
||||||
bash .install_skripte/install_hypr_pcks.sh
|
bash _install_skripte_install_hypr_pcks.sh
|
||||||
stow hypr
|
stow hypr
|
||||||
bash hypr/.config/hypr/scripts/ensure-env.sh
|
bash hypr/.config/hypr/scripts/ensure-env.sh
|
||||||
bash hypr/.config/hypr/scripts/portal-host-override.sh
|
bash hypr/.config/hypr/scripts/portal-host-override.sh
|
||||||
bash hypr/.config/hypr/scripts/fix_dolphin_file_associations.sh
|
bash hypr/.config/hypr/scripts/fix_dolphin_file_associations.sh
|
||||||
kreation: basic
|
kreation: basic
|
||||||
bash .install_skripte/install_kreation_pcks.sh
|
bash _install_skripte_install_kreation_pcks.sh
|
||||||
stow kreation
|
stow kreation
|
||||||
bunters-monster: basic hypr kreation
|
bunters-monster: basic hypr kreation
|
||||||
.install_skripte/buntes-monster-links.sh
|
_install_skripte/buntes-monster-links.sh
|
||||||
|
|||||||
Executable
+41
@@ -0,0 +1,41 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
sudo pacman -S --needed \
|
||||||
|
firefox \
|
||||||
|
nextcloud-client \
|
||||||
|
cups \
|
||||||
|
wine \
|
||||||
|
wine-mono \
|
||||||
|
wine-gecko \
|
||||||
|
winetricks \
|
||||||
|
thunderbird \
|
||||||
|
ktouch \
|
||||||
|
ktorrent \
|
||||||
|
pipewire \
|
||||||
|
pipewire-session-manager \
|
||||||
|
qpwgraph \
|
||||||
|
cifs-utils \
|
||||||
|
rbw \
|
||||||
|
sddm
|
||||||
|
|
||||||
|
yay -S \
|
||||||
|
catppuccin-sddm-theme-mocha
|
||||||
|
|
||||||
|
echo "
|
||||||
|
[General]
|
||||||
|
Numlock=on
|
||||||
|
|
||||||
|
[Theme]
|
||||||
|
ThemeDir=/usr/share/sddm/themes # Standardverzeichnis für Designvorlagen
|
||||||
|
Current=catppuccin-mocha-blue # Standardthema
|
||||||
|
CursorTheme=breeze_cursors # Mausthema
|
||||||
|
FacesDir=/usr/share/sddm/faces # Verzeichnis für Avatarbilder
|
||||||
|
|
||||||
|
[Users]
|
||||||
|
MaximumUID=1100
|
||||||
|
HideUsers=mathieu
|
||||||
|
" | sudo tee /etc/sddm.conf
|
||||||
|
|
||||||
|
sudo systemctl disable gdm
|
||||||
|
sudo systemctl enable sddm
|
||||||
|
|
||||||
@@ -16,9 +16,12 @@ sudo pacman -S --needed \
|
|||||||
wl-clipboard \
|
wl-clipboard \
|
||||||
swaync \
|
swaync \
|
||||||
hyprshot \
|
hyprshot \
|
||||||
ttf-jetbrains-mono-nerd \
|
rofi
|
||||||
ttf-font-awesome
|
|
||||||
|
|
||||||
yay -S --needed \
|
yay -S --needed \
|
||||||
hyprshutdown \
|
hyprshutdown \
|
||||||
hyprtile
|
hyprtile
|
||||||
|
|
||||||
|
# Install hyprltm (network manager)
|
||||||
|
curl -s https://raw.githubusercontent.com/hyprltm/hyprltm-net/main/setup.sh | bash
|
||||||
|
echo 'fish_add_path -m $HOME/.local/bin' >> ~/.config/fish/config.fish
|
||||||
+25
-17
@@ -34,31 +34,39 @@ sudo pacman -S --needed \
|
|||||||
fish \
|
fish \
|
||||||
vim \
|
vim \
|
||||||
nvim \
|
nvim \
|
||||||
firefox \
|
|
||||||
nextcloud-client \
|
|
||||||
openssh \
|
openssh \
|
||||||
rclone \
|
rclone \
|
||||||
rsync \
|
rsync \
|
||||||
unison \
|
unison \
|
||||||
stow \
|
stow \
|
||||||
cups \
|
nodejs \
|
||||||
wine \
|
npm \
|
||||||
wine-mono \
|
starship \
|
||||||
wine-gecko \
|
fastfetch \
|
||||||
winetricks \
|
tree-sitter-cli \
|
||||||
thunderbird \
|
|
||||||
ktouch \
|
|
||||||
strawberry \
|
|
||||||
ktorrent \
|
|
||||||
python \
|
python \
|
||||||
python-pip \
|
python-pip \
|
||||||
pipewire \
|
|
||||||
pipewire-session-manager \
|
|
||||||
qpwgraph \
|
|
||||||
cifs-utils \
|
|
||||||
rbw \
|
|
||||||
extra/ttf-jetbrains-mono-nerd \
|
extra/ttf-jetbrains-mono-nerd \
|
||||||
unzip
|
unzip \
|
||||||
|
ruff \
|
||||||
|
python-ruff \
|
||||||
|
chromium \
|
||||||
|
selene \
|
||||||
|
opencode \
|
||||||
|
tmux \
|
||||||
|
yazi \
|
||||||
|
zoxide \
|
||||||
|
fzf \
|
||||||
|
locate \
|
||||||
|
ttf-jetbrains-mono-nerd \
|
||||||
|
ttf-font-awesome
|
||||||
|
|
||||||
# fish as standard terminal
|
# fish as standard terminal
|
||||||
chsh -s /usr/bin/fish
|
chsh -s /usr/bin/fish
|
||||||
|
|
||||||
|
git clone https://github.com/jimeh/tmuxifier.git ~/.tmuxifier
|
||||||
|
|
||||||
|
npm install -g vscode-js-debug
|
||||||
|
npm install -g eslint_d
|
||||||
|
ya pkg add yazi-rs/plugins:git
|
||||||
|
sudo updatedb
|
||||||
@@ -304,6 +304,7 @@ bind = $mainMod SHIFT, SPACE, exec, nwg-drawer
|
|||||||
bind = $mainMod, P, pseudo, # dwindle
|
bind = $mainMod, P, pseudo, # dwindle
|
||||||
bind = $mainMod, J, togglesplit, # dwindle
|
bind = $mainMod, J, togglesplit, # dwindle
|
||||||
bind = $mainMod, I, exec, firefox &
|
bind = $mainMod, I, exec, firefox &
|
||||||
|
bind = $mainMod, n, exec, ~/.local/bin/hyprltm-net
|
||||||
|
|
||||||
# Move focus with mainMod + WASD or Vim-style
|
# Move focus with mainMod + WASD or Vim-style
|
||||||
bind = $mainMod, a, movefocus, l
|
bind = $mainMod, a, movefocus, l
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
#
|
||||||
|
# ~/.bashrc
|
||||||
|
#
|
||||||
|
|
||||||
|
# If not running interactively, don't do anything
|
||||||
|
[[ $- != *i* ]] && return
|
||||||
|
|
||||||
|
alias ls='ls --color=auto'
|
||||||
|
alias grep='grep --color=auto'
|
||||||
|
PS1='[\u@\h \W]\$ '
|
||||||
|
export PATH="$HOME/.local/bin:$PATH"
|
||||||
|
|
||||||
|
# Tmuxifier
|
||||||
|
export PATH="$HOME/.tmuxifier/bin:$PATH"
|
||||||
|
eval "$(tmuxifier init -)"
|
||||||
@@ -121,3 +121,10 @@ alias zi=__zoxide_zi
|
|||||||
# ~/.config/fish/config.fish):
|
# ~/.config/fish/config.fish):
|
||||||
#
|
#
|
||||||
# zoxide init fish | source
|
# zoxide init fish | source
|
||||||
|
fish_add_path -m $HOME/.local/bin
|
||||||
|
|
||||||
|
# Tmuxifier
|
||||||
|
if test -d $HOME/.tmuxifier
|
||||||
|
fish_add_path -m $HOME/.tmuxifier/bin
|
||||||
|
tmuxifier init - | source
|
||||||
|
end
|
||||||
|
|||||||
@@ -92,3 +92,13 @@ vim.keymap.set("n", "<A-j>", ":m .+1<CR>==", { desc = "Move line down" })
|
|||||||
vim.keymap.set("n", "<A-k>", ":m .-2<CR>==", { desc = "Move line up" })
|
vim.keymap.set("n", "<A-k>", ":m .-2<CR>==", { desc = "Move line up" })
|
||||||
vim.keymap.set("v", "<A-j>", ":m '>+1<CR>gv=gv", { desc = "Move selection down" })
|
vim.keymap.set("v", "<A-j>", ":m '>+1<CR>gv=gv", { desc = "Move selection down" })
|
||||||
vim.keymap.set("v", "<A-k>", ":m '<-2<CR>gv=gv", { desc = "Move selection up" })
|
vim.keymap.set("v", "<A-k>", ":m '<-2<CR>gv=gv", { desc = "Move selection up" })
|
||||||
|
|
||||||
|
-- Folding keymaps
|
||||||
|
vim.keymap.set("n", "za", "za", { desc = "Toggle fold under cursor" })
|
||||||
|
vim.keymap.set("n", "zA", "zA", { desc = "Toggle fold recursively" })
|
||||||
|
vim.keymap.set("n", "zR", "zR", { desc = "Open all folds" })
|
||||||
|
vim.keymap.set("n", "zM", "zM", { desc = "Close all folds" })
|
||||||
|
vim.keymap.set("n", "zo", "zo", { desc = "Open fold under cursor" })
|
||||||
|
vim.keymap.set("n", "zc", "zc", { desc = "Close fold under cursor" })
|
||||||
|
vim.keymap.set("n", "zO", "zO", { desc = "Open all folds under cursor" })
|
||||||
|
vim.keymap.set("n", "zC", "zC", { desc = "Close all folds under cursor" })
|
||||||
|
|||||||
@@ -10,20 +10,45 @@
|
|||||||
- vim.go.* for global option shorthand
|
- vim.go.* for global option shorthand
|
||||||
]]
|
]]
|
||||||
|
|
||||||
|
-- ============================================================================
|
||||||
|
-- TREESITTER (Built-in Neovim 0.10+ features)
|
||||||
|
-- ============================================================================
|
||||||
|
-- Enable Treesitter syntax highlighting (native in Neovim 0.10+)
|
||||||
|
-- This replaces the old nvim-treesitter highlight module
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
pattern = "*",
|
||||||
|
callback = function()
|
||||||
|
if vim.bo.buftype == "" and vim.bo.filetype ~= "" then
|
||||||
|
pcall(vim.treesitter.start)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
desc = "Enable Treesitter highlighting",
|
||||||
|
})
|
||||||
|
|
||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
-- FOLDING SETTINGS (Code folding)
|
-- FOLDING SETTINGS (Code folding)
|
||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
-- Foldmethod determines how code blocks are detected and folded
|
-- NOTE: In Neovim 0.10+, Treesitter folding must be set per-buffer via FileType autocmd
|
||||||
-- "expr" means folds are based on expressions (we use treesitter for this)
|
-- Setting it globally causes the foldexpr to evaluate before Treesitter attaches
|
||||||
vim.opt.foldmethod = "expr"
|
|
||||||
|
|
||||||
-- Foldexpr is the expression used to determine fold level
|
|
||||||
-- v:lua.vim.treesitter.foldexpr() uses Treesitter to calculate folds
|
|
||||||
vim.opt.foldexpr = "v:lua.vim.treesitter.foldexpr()"
|
|
||||||
|
|
||||||
-- Foldlevel: Higher number = more folds are open by default
|
-- Foldlevel: Higher number = more folds are open by default
|
||||||
-- 99 means almost all folds are open when opening a file
|
-- 1-2 means you'll see folds by default; 99 means all folds are open
|
||||||
vim.opt.foldlevel = 99
|
vim.opt.foldlevel = 99
|
||||||
|
vim.opt.foldlevelstart = 99
|
||||||
|
|
||||||
|
-- Setup Treesitter folding for each buffer after filetype is detected
|
||||||
|
-- This ensures the parser is loaded before foldexpr evaluates
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
pattern = "*",
|
||||||
|
callback = function()
|
||||||
|
-- Only set folding for file buffers with Treesitter support
|
||||||
|
if vim.bo.buftype == "" then
|
||||||
|
vim.wo.foldmethod = "expr"
|
||||||
|
vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()"
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
desc = "Setup Treesitter folding per filetype",
|
||||||
|
})
|
||||||
|
|
||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
-- LINE NUMBERS
|
-- LINE NUMBERS
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ return {
|
|||||||
settings = {
|
settings = {
|
||||||
Lua = {
|
Lua = {
|
||||||
runtime = { version = "LuaJIT" },
|
runtime = { version = "LuaJIT" },
|
||||||
|
diagnostics = { globals = { "vim" } },
|
||||||
workspace = { library = vim.api.nvim_get_runtime_file("", true) },
|
workspace = { library = vim.api.nvim_get_runtime_file("", true) },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ return {
|
|||||||
typescriptreact = { "eslint_d" },
|
typescriptreact = { "eslint_d" },
|
||||||
vue = { "eslint_d" },
|
vue = { "eslint_d" },
|
||||||
python = { "ruff" },
|
python = { "ruff" },
|
||||||
lua = { "selene" },
|
-- lua = { "selene" }, -- Disabled: lua_ls provides diagnostics
|
||||||
sh = { "shellcheck" },
|
sh = { "shellcheck" },
|
||||||
bash = { "shellcheck" },
|
bash = { "shellcheck" },
|
||||||
json = { "jsonlint" },
|
json = { "jsonlint" },
|
||||||
|
|||||||
@@ -2,14 +2,34 @@ return {
|
|||||||
"kylechui/nvim-surround",
|
"kylechui/nvim-surround",
|
||||||
version = "*",
|
version = "*",
|
||||||
event = "VeryLazy",
|
event = "VeryLazy",
|
||||||
|
init = function()
|
||||||
|
-- Disable default keymaps (we'll set custom ones)
|
||||||
|
vim.g.nvim_surround_no_mappings = true
|
||||||
|
end,
|
||||||
config = function()
|
config = function()
|
||||||
require("nvim-surround").setup({
|
require("nvim-surround").setup({
|
||||||
keymaps = {
|
-- Configuration for surrounds, aliases, etc. can go here
|
||||||
add = "S", -- Add surrounding
|
})
|
||||||
delete = "SD", -- Delete surrounding
|
-- Set custom keymaps (v4 method)
|
||||||
change = "SC", -- Change surrounding
|
-- Add surrounding: Siw" -> surround word with quotes, Siw) -> (surround word)
|
||||||
change_line = "SCL", -- Change surrounding on current line
|
vim.keymap.set("n", "S", "<Plug>(nvim-surround-normal)", {
|
||||||
},
|
desc = "Add surrounding",
|
||||||
|
})
|
||||||
|
-- Delete surrounding: SD" -> remove quotes, SD) -> remove parentheses
|
||||||
|
vim.keymap.set("n", "SD", "<Plug>(nvim-surround-delete)", {
|
||||||
|
desc = "Delete surrounding",
|
||||||
|
})
|
||||||
|
-- Change surrounding: SC"' -> change quotes to single quotes, SC)] -> change parens to brackets
|
||||||
|
vim.keymap.set("n", "SC", "<Plug>(nvim-surround-change)", {
|
||||||
|
desc = "Change surrounding",
|
||||||
|
})
|
||||||
|
-- Change surrounding on current line
|
||||||
|
vim.keymap.set("n", "SCL", "<Plug>(nvim-surround-change-line)", {
|
||||||
|
desc = "Change surrounding on current line",
|
||||||
|
})
|
||||||
|
-- Visual mode: select text and press S" -> surround selection with quotes
|
||||||
|
vim.keymap.set("v", "S", "<Plug>(nvim-surround-visual)", {
|
||||||
|
desc = "Add surrounding in visual mode",
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,24 @@
|
|||||||
return {
|
return {
|
||||||
"nvim-treesitter/nvim-treesitter",
|
"nvim-treesitter/nvim-treesitter",
|
||||||
branch = "master",
|
|
||||||
build = ":TSUpdate",
|
build = ":TSUpdate",
|
||||||
event = { "BufReadPost", "BufNewFile" },
|
event = { "BufReadPost", "BufNewFile" },
|
||||||
config = function()
|
config = function()
|
||||||
-- Ensure nvim-treesitter queries are preferred over runtime queries
|
-- In the latest nvim-treesitter (post-refactor), the plugin only handles
|
||||||
-- This fixes the "except*" syntax error with updated parsers
|
-- parser installation. Highlighting, folding, and indenting are handled
|
||||||
vim.opt.runtimepath:prepend(vim.fn.stdpath("data") .. "/lazy/nvim-treesitter")
|
-- by native Neovim Treesitter integration.
|
||||||
|
|
||||||
local ok, configs = pcall(require, "nvim-treesitter.configs")
|
-- CRITICAL: Add nvim-treesitter/runtime to runtimepath so queries are found
|
||||||
if ok then
|
local ts_runtime = vim.fn.stdpath("data") .. "/lazy/nvim-treesitter/runtime"
|
||||||
configs.setup({
|
vim.opt.runtimepath:prepend(ts_runtime)
|
||||||
auto_install = true,
|
|
||||||
ensure_installed = {
|
-- Setup nvim-treesitter (minimal config for parser installation)
|
||||||
|
require("nvim-treesitter").setup({
|
||||||
|
-- Parser installation directory (default: stdpath('data')/site)
|
||||||
|
install_dir = vim.fn.stdpath("data") .. "/site",
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Auto-install parsers for these languages when opening a file
|
||||||
|
local ensure_installed = {
|
||||||
"python",
|
"python",
|
||||||
"lua",
|
"lua",
|
||||||
"json",
|
"json",
|
||||||
@@ -26,11 +32,27 @@ return {
|
|||||||
"bash",
|
"bash",
|
||||||
"markdown",
|
"markdown",
|
||||||
"markdown_inline",
|
"markdown_inline",
|
||||||
},
|
}
|
||||||
highlight = { enable = true },
|
|
||||||
indent = { enable = true },
|
-- Install parsers
|
||||||
folding = { enable = true },
|
local ok, install = pcall(require, "nvim-treesitter.install")
|
||||||
})
|
if ok then
|
||||||
|
for _, lang in ipairs(ensure_installed) do
|
||||||
|
vim.schedule(function()
|
||||||
|
install.install({ lang })
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Enable Treesitter-based indenting (natively supported by Neovim)
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
pattern = "*",
|
||||||
|
callback = function()
|
||||||
|
if vim.bo.buftype == "" and vim.bo.filetype ~= "" then
|
||||||
|
vim.bo.indentexpr = "v:lua.vim.treesitter.indentexpr()"
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
desc = "Enable Treesitter indenting",
|
||||||
|
})
|
||||||
|
end,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,353 @@
|
|||||||
|
# Tmuxifier Session Templates
|
||||||
|
|
||||||
|
This directory contains reusable tmux session and window layouts managed by [tmuxifier](https://github.com/jimeh/tmuxifier).
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### 1. Install tmuxifier
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/jimeh/tmuxifier.git ~/.tmuxifier
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Add to tmux (via TPM)
|
||||||
|
|
||||||
|
The `tmux.conf` in this directory already includes the tmuxifier plugin. After starting tmux, press `prefix + I` to install it via TPM.
|
||||||
|
|
||||||
|
### 3. Add to your shell
|
||||||
|
|
||||||
|
The fish config (`~/.config/fish/config.fish`) in this repo already includes tmuxifier initialization. Restart fish or run:
|
||||||
|
|
||||||
|
```fish
|
||||||
|
source ~/.config/fish/config.fish
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Verify installation
|
||||||
|
|
||||||
|
```fish
|
||||||
|
which tmuxifier
|
||||||
|
# Should output: ~/.tmuxifier/bin/tmuxifier
|
||||||
|
|
||||||
|
tmuxifier help
|
||||||
|
# Should show tmuxifier commands
|
||||||
|
```
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
After installing tmuxifier, create and load sessions:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create a new session layout
|
||||||
|
tmuxifier new-session my-project
|
||||||
|
|
||||||
|
# Load a session
|
||||||
|
tmuxifier load-session my-project # or: t s my-project
|
||||||
|
|
||||||
|
# Edit an existing session
|
||||||
|
tmuxifier edit-session my-project # or: t es my-project
|
||||||
|
|
||||||
|
# Create a window layout (for use within existing sessions)
|
||||||
|
tmuxifier new-window my-window
|
||||||
|
tmuxifier load-window my-window # or: t lw my-window
|
||||||
|
```
|
||||||
|
|
||||||
|
## Directory Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
tmuxifier/
|
||||||
|
├── layouts/
|
||||||
|
│ ├── *.session.sh # Full session definitions
|
||||||
|
│ └── *.window.sh # Window-only definitions
|
||||||
|
```
|
||||||
|
|
||||||
|
## Session Template Reference
|
||||||
|
|
||||||
|
### Basic Structure
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Set a custom session root path (must be called before initialize_session)
|
||||||
|
session_root "~/projects/my-project"
|
||||||
|
|
||||||
|
# Create session with specified name if it does not already exist
|
||||||
|
if initialize_session "my-project"; then
|
||||||
|
|
||||||
|
# Create windows
|
||||||
|
new_window "editor"
|
||||||
|
new_window "server"
|
||||||
|
new_window "logs"
|
||||||
|
|
||||||
|
# Select the default active window
|
||||||
|
select_window "editor"
|
||||||
|
|
||||||
|
# Run commands in the selected window
|
||||||
|
run_cmd "cd ~/projects/my-project"
|
||||||
|
|
||||||
|
# Send keys (like typing) to the pane
|
||||||
|
send_keys "nvim ." C-m
|
||||||
|
|
||||||
|
# Finalize session creation and switch/attach to it
|
||||||
|
finalize_and_go_to_session
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
### Commands Reference
|
||||||
|
|
||||||
|
#### Session Commands
|
||||||
|
|
||||||
|
| Command | Description |
|
||||||
|
|---------|-------------|
|
||||||
|
| `session_root "path"` | Set root directory for session (must be first) |
|
||||||
|
| `initialize_session "name"` | Create session if it doesn't exist |
|
||||||
|
| `finalize_and_go_to_session` | Complete creation and attach to session |
|
||||||
|
| `select_window "name"` | Set active window |
|
||||||
|
|
||||||
|
#### Window Commands
|
||||||
|
|
||||||
|
| Command | Description |
|
||||||
|
|---------|-------------|
|
||||||
|
| `new_window "name"` | Create a new window |
|
||||||
|
| `select_window "name"` | Switch to existing window |
|
||||||
|
| `run_cmd "command"` | Execute command in current pane |
|
||||||
|
| `send_keys "keys"` | Send key sequence to pane |
|
||||||
|
| `send_text "text"` | Send raw text to pane |
|
||||||
|
| `split_h [percent]` | Horizontal split (default 50%) |
|
||||||
|
| `split_v [percent]` | Vertical split (default 50%) |
|
||||||
|
| `select_pane [target]` | Select pane (up, down, left, right, left-or-up, right-or-down) |
|
||||||
|
|
||||||
|
#### Pane Target Options
|
||||||
|
|
||||||
|
For `select_pane`:
|
||||||
|
- `up`, `down`, `left`, `right` - Navigate to adjacent pane
|
||||||
|
- `left-or-up`, `right-or-down` - Prefer first direction, fall back to second
|
||||||
|
|
||||||
|
### Key Modifiers
|
||||||
|
|
||||||
|
| Symbol | Meaning |
|
||||||
|
|--------|---------|
|
||||||
|
| `C-m` | Enter/Return key |
|
||||||
|
| `C-c` | Ctrl+C |
|
||||||
|
| `C-d` | Ctrl+D (EOF) |
|
||||||
|
| `M-m` | Alt/Meta+m |
|
||||||
|
| `C-\\` | Ctrl+\\ |
|
||||||
|
|
||||||
|
## Example Templates
|
||||||
|
|
||||||
|
Understanding the pane system is key. Here's a visual breakdown:
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────┐
|
||||||
|
│ Window: "editor" │
|
||||||
|
│ ┌─────────────────────┬───────────────────────────┐ │
|
||||||
|
│ │ Pane 1 (40%) │ Pane 2 (60%) │ │
|
||||||
|
│ │ nvim │ npm run dev │ │
|
||||||
|
│ │ ├───────────────────────────┤ │
|
||||||
|
│ │ │ Pane 3 (50% of pane 2) │ │
|
||||||
|
│ │ │ npm run test │ │
|
||||||
|
│ └─────────────────────┴───────────────────────────┘ │
|
||||||
|
└─────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example 1: Two Panes Side by Side
|
||||||
|
|
||||||
|
```bash
|
||||||
|
session_root "~/projects/app"
|
||||||
|
|
||||||
|
if initialize_session "app"; then
|
||||||
|
new_window "editor"
|
||||||
|
|
||||||
|
# Split horizontally (40% left, 60% right)
|
||||||
|
split_h 40
|
||||||
|
|
||||||
|
# Run command in first pane (left side)
|
||||||
|
run_cmd "cd ~/projects/app && nvim"
|
||||||
|
|
||||||
|
# Move to second pane (right side) and split vertically
|
||||||
|
select_pane right
|
||||||
|
split_v 50
|
||||||
|
|
||||||
|
# Run commands in the new panes
|
||||||
|
run_cmd "npm run dev"
|
||||||
|
select_pane right
|
||||||
|
run_cmd "npm run test"
|
||||||
|
|
||||||
|
select_window "editor"
|
||||||
|
finalize_and_go_to_session
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example 2: Three Panes with Nested Split
|
||||||
|
|
||||||
|
```bash
|
||||||
|
session_root "~/projects/app"
|
||||||
|
|
||||||
|
if initialize_session "app"; then
|
||||||
|
new_window "editor"
|
||||||
|
|
||||||
|
# Create three panes: top (20%), bottom-left (40%), bottom-right (40%)
|
||||||
|
split_v 20 # horizontal split at 20%
|
||||||
|
run_cmd "htop" # top pane: system monitor
|
||||||
|
|
||||||
|
select_pane down # move to bottom
|
||||||
|
split_h 50 # vertical split bottom into left/right
|
||||||
|
run_cmd "npm run dev" # bottom-left
|
||||||
|
select_pane right
|
||||||
|
run_cmd "npm run test" # bottom-right
|
||||||
|
|
||||||
|
select_window "editor"
|
||||||
|
finalize_and_go_to_session
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
Resulting layout:
|
||||||
|
┌─────────────────────────────────────┐
|
||||||
|
│ htop (20%) │
|
||||||
|
├──────────────┬──────────────────────┤
|
||||||
|
│ npm run dev │ npm run test │
|
||||||
|
│ (40%) │ (40%) │
|
||||||
|
└──────────────┴──────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example 3: Multiple Windows with Panes
|
||||||
|
|
||||||
|
```bash
|
||||||
|
session_root "~/projects/webapp"
|
||||||
|
|
||||||
|
if initialize_session "webapp"; then
|
||||||
|
# Window 1: Main workspace with panes
|
||||||
|
new_window "editor"
|
||||||
|
split_h 50
|
||||||
|
run_cmd "cd ~/projects/webapp && nvim"
|
||||||
|
select_pane right
|
||||||
|
run_cmd "cd ~/projects/webapp && npm run dev"
|
||||||
|
|
||||||
|
# Window 2: Server with logs
|
||||||
|
new_window "server"
|
||||||
|
split_v 30
|
||||||
|
run_cmd "cd ~/projects/webapp && python -m http.server 8000"
|
||||||
|
select_pane right
|
||||||
|
run_cmd "cd ~/projects/webapp && tail -f logs/app.log"
|
||||||
|
|
||||||
|
# Window 3: Database
|
||||||
|
new_window "database"
|
||||||
|
run_cmd "docker compose up db"
|
||||||
|
|
||||||
|
# Start on editor window
|
||||||
|
select_window "editor"
|
||||||
|
finalize_and_go_to_session
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example 4: Practical Development Setup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
session_root "~/projects/api"
|
||||||
|
|
||||||
|
if initialize_session "api"; then
|
||||||
|
new_window "code"
|
||||||
|
split_h 60
|
||||||
|
run_cmd "cd ~/projects/api && nvim"
|
||||||
|
select_pane right
|
||||||
|
split_v 50
|
||||||
|
run_cmd "cd ~/projects/api && uvicorn main:app --reload"
|
||||||
|
select_pane right
|
||||||
|
run_cmd "cd ~/projects/api && tail -f logs/api.log"
|
||||||
|
|
||||||
|
new_window "tests"
|
||||||
|
split_h 50
|
||||||
|
run_cmd "cd ~/projects/api && pytest -v"
|
||||||
|
select_pane right
|
||||||
|
run_cmd "cd ~/projects/api && pytest --cov"
|
||||||
|
|
||||||
|
new_window "shell"
|
||||||
|
run_cmd "cd ~/projects/api"
|
||||||
|
|
||||||
|
select_window "code"
|
||||||
|
finalize_and_go_to_session
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example 5: Simple Window Layout (No Panes)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
session_root "~/projects/webapp"
|
||||||
|
|
||||||
|
if initialize_session "webapp"; then
|
||||||
|
# Each window has a single pane
|
||||||
|
new_window "editor"
|
||||||
|
run_cmd "cd ~/projects/webapp && nvim"
|
||||||
|
|
||||||
|
new_window "server"
|
||||||
|
run_cmd "cd ~/projects/webapp && npm run dev"
|
||||||
|
|
||||||
|
new_window "database"
|
||||||
|
run_cmd "docker compose up db"
|
||||||
|
|
||||||
|
new_window "logs"
|
||||||
|
run_cmd "cd ~/projects/webapp && tail -f logs/app.log"
|
||||||
|
|
||||||
|
select_window "editor"
|
||||||
|
finalize_and_go_to_session
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
## Shell Integration
|
||||||
|
|
||||||
|
### Aliases
|
||||||
|
|
||||||
|
Add these to your shell config for convenience:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Bash/Zsh (.bashrc or .zshrc)
|
||||||
|
alias t='tmuxifier'
|
||||||
|
alias ts='tmuxifier load-session'
|
||||||
|
alias tes='tmuxifier edit-session'
|
||||||
|
alias tns='tmuxifier new-session'
|
||||||
|
alias tlw='tmuxifier load-window'
|
||||||
|
|
||||||
|
# Fish (.config/fish/config.fish or conf.d/)
|
||||||
|
alias t 'tmuxifier'
|
||||||
|
alias ts 'tmuxifier load-session'
|
||||||
|
alias tes 'tmuxifier edit-session'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Usage Without Tmux Prefix
|
||||||
|
|
||||||
|
If you want to load sessions from outside tmux (in a regular terminal):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run this in a plain terminal, NOT inside tmux
|
||||||
|
tmuxifier load-session my-project
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tips
|
||||||
|
|
||||||
|
1. **Exit before loading**: Make sure you're not inside tmux when running `load-session`
|
||||||
|
2. **Auto-starting services**: Use `run_cmd` with background processes (`&`) for long-running services
|
||||||
|
3. **Docker containers**: Commands like `docker compose up -d` work well in dedicated windows
|
||||||
|
4. **Custom layouts path**: Set `TMUXIFIER_LAYOUT_PATH` to use a different directory
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export TMUXIFIER_LAYOUT_PATH="$HOME/.config/tmux/layouts"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
**"unknown command" when running tmuxifier?**
|
||||||
|
- tmuxifier is not installed. Run: `git clone https://github.com/jimeh/tmuxifier.git ~/.tmuxifier`
|
||||||
|
- Restart your shell: `source ~/.config/fish/config.fish`
|
||||||
|
- Verify: `which tmuxifier`
|
||||||
|
|
||||||
|
**Session won't load?**
|
||||||
|
- Make sure you're NOT inside tmux when running `load-session`
|
||||||
|
- Make sure tmuxifier is initialized in your shell config
|
||||||
|
- Check that you have tmux installed: `tmux -V`
|
||||||
|
- Verify the layout file exists: `ls ~/.tmuxifier/layouts/`
|
||||||
|
|
||||||
|
**TPM plugin not working?**
|
||||||
|
- Inside tmux, press `prefix + I` (capital I) to install plugins
|
||||||
|
- `prefix` is `Ctrl+Space` by default in this config
|
||||||
|
|
||||||
|
**Commands not running?**
|
||||||
|
- Use `run_cmd` for single commands, not `send_keys`
|
||||||
|
- For interactive commands, consider using `send_keys` instead
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# Example session: demo
|
||||||
|
# Usage: tmuxifier load-session demo
|
||||||
|
# Edit: tmuxifier edit-session demo
|
||||||
|
|
||||||
|
session_root "$HOME"
|
||||||
|
|
||||||
|
if initialize_session "demo"; then
|
||||||
|
new_window "editor"
|
||||||
|
new_window "server"
|
||||||
|
new_window "shell"
|
||||||
|
|
||||||
|
select_window "editor"
|
||||||
|
run_cmd "cd ~ && nvim ."
|
||||||
|
|
||||||
|
select_window "server"
|
||||||
|
run_cmd "echo 'Server ready'"
|
||||||
|
|
||||||
|
select_window "shell"
|
||||||
|
run_cmd "echo 'Shell ready'"
|
||||||
|
|
||||||
|
select_window "editor"
|
||||||
|
finalize_and_go_to_session
|
||||||
|
fi
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
# ── General ───────────────────────────────────────────────────────────────────
|
# ── General ───────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
|
||||||
set -g default-terminal "tmux-256color"
|
set -g default-terminal "tmux-256color"
|
||||||
set -ag terminal-overrides ",xterm-256color:RGB"
|
set -ag terminal-overrides ",xterm-256color:RGB"
|
||||||
|
|
||||||
@@ -31,7 +30,7 @@ bind k select-pane -U
|
|||||||
bind l select-pane -R
|
bind l select-pane -R
|
||||||
|
|
||||||
|
|
||||||
# ── Plugins ───────────────────────────────────────────────────────────────────
|
# ── Plugins ────────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
# Auto-bootstrap TPM if not installed
|
# Auto-bootstrap TPM if not installed
|
||||||
if "test ! -d ~/.config/tmux/plugins/tpm" \
|
if "test ! -d ~/.config/tmux/plugins/tpm" \
|
||||||
@@ -39,12 +38,17 @@ if "test ! -d ~/.config/tmux/plugins/tpm" \
|
|||||||
|
|
||||||
set -g @plugin 'tmux-plugins/tpm'
|
set -g @plugin 'tmux-plugins/tpm'
|
||||||
set -g @plugin 'tmux-plugins/tmux-sensible'
|
set -g @plugin 'tmux-plugins/tmux-sensible'
|
||||||
|
set -g @plugin 'sindrip/tmux-nvim-navigator'
|
||||||
|
set -g @plugin 'jimeh/tmuxifier'
|
||||||
|
|
||||||
# Catppuccin theme
|
# Catppuccin theme
|
||||||
set -g @plugin 'catppuccin/tmux'
|
set -g @plugin 'catppuccin/tmux'
|
||||||
set -g @catppuccin_flavor "mocha"
|
set -g @catppuccin_flavor "mocha"
|
||||||
set -g @catppuccin_window_status_style "rounded"
|
set -g @catppuccin_window_status_style "rounded"
|
||||||
|
|
||||||
|
# Tmuxifier environment
|
||||||
|
set-environment -g TMUXIFIER_LAYOUT_PATH "$HOME/.tmuxifier/layouts"
|
||||||
|
|
||||||
|
|
||||||
# ── Initialize TPM (must be last line before status bar) ──────────────────────
|
# ── Initialize TPM (must be last line before status bar) ──────────────────────
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user