18
ansible.cfg
Normal file
18
ansible.cfg
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
[defaults]
|
||||||
|
inventory = inventory.ini
|
||||||
|
interpreter_python = auto_silent
|
||||||
|
callbacks_enabled = timer, profile_tasks, default
|
||||||
|
display_skipped_hosts = no
|
||||||
|
deprecation_warnings = False
|
||||||
|
host_key_checking = False
|
||||||
|
gathering = smart
|
||||||
|
retry_files_enabled = False
|
||||||
|
|
||||||
|
[privilege_escalation]
|
||||||
|
become = True
|
||||||
|
become_method = sudo
|
||||||
|
become_user = root
|
||||||
|
become_ask_pass = False
|
||||||
|
|
||||||
|
[connection]
|
||||||
|
pipelining = True
|
||||||
45
bootstrap.sh
Executable file
45
bootstrap.sh
Executable file
@@ -0,0 +1,45 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
echo "=== Arch Linux Hyprland Setup Bootstrap ==="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if running as root
|
||||||
|
if [ "$EUID" -eq 0 ]; then
|
||||||
|
echo "Error: Do not run as root. Run as a normal user."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Step 1: Setup sudo access for package installation
|
||||||
|
echo "[1/4] Setting up sudo access..."
|
||||||
|
if ! sudo -n true 2>/dev/null; then
|
||||||
|
echo "$USER ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/local > /dev/null
|
||||||
|
echo "NOPASSWD sudo configured."
|
||||||
|
else
|
||||||
|
echo "Sudo access available."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Step 2: Install base requirements (git, ansible)
|
||||||
|
echo "[2/4] Installing base requirements (git, ansible)..."
|
||||||
|
sudo pacman -Sy --noconfirm git ansible
|
||||||
|
|
||||||
|
# Step 3: Clone or update the repo
|
||||||
|
echo "[3/4] Setting up archsetup..."
|
||||||
|
if [ -d "$HOME/archsetup/.git" ]; then
|
||||||
|
echo "Updating archsetup..."
|
||||||
|
cd "$HOME/archsetup"
|
||||||
|
git pull
|
||||||
|
else
|
||||||
|
echo "Cloning archsetup..."
|
||||||
|
git clone https://github.com/YOUR_USERNAME/archsetup.git "$HOME/archsetup"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Step 4: Run the playbook
|
||||||
|
echo "[4/4] Running Ansible playbook..."
|
||||||
|
cd "$HOME/archsetup"
|
||||||
|
ansible-playbook site.yml
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=== Setup complete! ==="
|
||||||
|
echo "Logout and login again for shell changes to take effect."
|
||||||
|
echo "Restart Hyprland (Super + Shift + Q) to apply new configuration."
|
||||||
364
dotfiles/hypr/.config/hypr/hyprland.conf
Normal file
364
dotfiles/hypr/.config/hypr/hyprland.conf
Normal file
@@ -0,0 +1,364 @@
|
|||||||
|
|
||||||
|
# #######################################################################################
|
||||||
|
# AUTOGENERATED HYPRLAND CONFIG.
|
||||||
|
# EDIT THIS CONFIG ACCORDING TO THE WIKI INSTRUCTIONS.
|
||||||
|
# #######################################################################################
|
||||||
|
|
||||||
|
autogenerated = 0 # remove this line to remove the warning
|
||||||
|
|
||||||
|
# This is an example Hyprland config file.
|
||||||
|
# Refer to the wiki for more information.
|
||||||
|
# https://wiki.hypr.land/Configuring/
|
||||||
|
|
||||||
|
# Please note not all available settings / options are set here.
|
||||||
|
# For a full list, see the wiki
|
||||||
|
|
||||||
|
# You can split this configuration into multiple files
|
||||||
|
# Create your files separately and then link them to this file like this:
|
||||||
|
# source = ~/.config/hypr/myColors.conf
|
||||||
|
|
||||||
|
|
||||||
|
################
|
||||||
|
### MONITORS ###
|
||||||
|
################
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Monitors/
|
||||||
|
monitor=,preferred,auto,auto
|
||||||
|
|
||||||
|
|
||||||
|
###################
|
||||||
|
### MY PROGRAMS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Keywords/
|
||||||
|
|
||||||
|
# Set programs that you use
|
||||||
|
$terminal = kitty
|
||||||
|
$fileManager = dolphin
|
||||||
|
$menu = wofi -S drun
|
||||||
|
$browser = firefox
|
||||||
|
|
||||||
|
|
||||||
|
#################
|
||||||
|
### AUTOSTART ###
|
||||||
|
#################
|
||||||
|
|
||||||
|
# Autostart necessary processes (like notifications daemons, status bars, etc.)
|
||||||
|
# Or execute your favorite apps at launch like this:
|
||||||
|
|
||||||
|
exec-once = $terminal
|
||||||
|
exec-once = nm-applet &
|
||||||
|
exec-once = waybar & hyprpaper & firefox
|
||||||
|
exec-once = kanshi
|
||||||
|
|
||||||
|
#############################
|
||||||
|
### ENVIRONMENT VARIABLES ###
|
||||||
|
#############################
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Environment-variables/
|
||||||
|
|
||||||
|
env = XCURSOR_SIZE,24
|
||||||
|
env = HYPRCURSOR_SIZE,24
|
||||||
|
|
||||||
|
|
||||||
|
###################
|
||||||
|
### PERMISSIONS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Permissions/
|
||||||
|
# Please note permission changes here require a Hyprland restart and are not applied on-the-fly
|
||||||
|
# for security reasons
|
||||||
|
|
||||||
|
# ecosystem {
|
||||||
|
# enforce_permissions = 1
|
||||||
|
# }
|
||||||
|
|
||||||
|
# permission = /usr/(bin|local/bin)/grim, screencopy, allow
|
||||||
|
# permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow
|
||||||
|
# permission = /usr/(bin|local/bin)/hyprpm, plugin, allow
|
||||||
|
|
||||||
|
|
||||||
|
#####################
|
||||||
|
### LOOK AND FEEL ###
|
||||||
|
#####################
|
||||||
|
|
||||||
|
# Refer to https://wiki.hypr.land/Configuring/Variables/
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Variables/#general
|
||||||
|
general {
|
||||||
|
gaps_in = 5
|
||||||
|
gaps_out = 20
|
||||||
|
|
||||||
|
border_size = 2
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Variables/#variable-types for info about colors
|
||||||
|
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
|
||||||
|
col.inactive_border = rgba(595959aa)
|
||||||
|
|
||||||
|
# Set to true enable resizing windows by clicking and dragging on borders and gaps
|
||||||
|
resize_on_border = false
|
||||||
|
|
||||||
|
# Please see https://wiki.hypr.land/Configuring/Tearing/ before you turn this on
|
||||||
|
allow_tearing = false
|
||||||
|
|
||||||
|
layout = dwindle
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Variables/#decoration
|
||||||
|
decoration {
|
||||||
|
rounding = 10
|
||||||
|
rounding_power = 2
|
||||||
|
|
||||||
|
# Change transparency of focused and unfocused windows
|
||||||
|
active_opacity = 1.0
|
||||||
|
inactive_opacity = 1.0
|
||||||
|
|
||||||
|
shadow {
|
||||||
|
enabled = true
|
||||||
|
range = 4
|
||||||
|
render_power = 3
|
||||||
|
color = rgba(1a1a1aee)
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Variables/#blur
|
||||||
|
blur {
|
||||||
|
enabled = true
|
||||||
|
size = 3
|
||||||
|
passes = 1
|
||||||
|
|
||||||
|
vibrancy = 0.1696
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Variables/#animations
|
||||||
|
animations {
|
||||||
|
enabled = yes, please :)
|
||||||
|
|
||||||
|
# Default curves, see https://wiki.hypr.land/Configuring/Animations/#curves
|
||||||
|
# NAME, X0, Y0, X1, Y1
|
||||||
|
bezier = easeOutQuint, 0.23, 1, 0.32, 1
|
||||||
|
bezier = easeInOutCubic, 0.65, 0.05, 0.36, 1
|
||||||
|
bezier = linear, 0, 0, 1, 1
|
||||||
|
bezier = almostLinear, 0.5, 0.5, 0.75, 1
|
||||||
|
bezier = quick, 0.15, 0, 0.1, 1
|
||||||
|
|
||||||
|
# Default animations, see https://wiki.hypr.land/Configuring/Animations/
|
||||||
|
# NAME, ONOFF, SPEED, CURVE, [STYLE]
|
||||||
|
animation = global, 1, 10, default
|
||||||
|
animation = border, 1, 5.39, easeOutQuint
|
||||||
|
animation = windows, 1, 4.79, easeOutQuint
|
||||||
|
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
|
||||||
|
animation = windowsOut, 1, 1.49, linear, popin 87%
|
||||||
|
animation = fadeIn, 1, 1.73, almostLinear
|
||||||
|
animation = fadeOut, 1, 1.46, almostLinear
|
||||||
|
animation = fade, 1, 3.03, quick
|
||||||
|
animation = layers, 1, 3.81, easeOutQuint
|
||||||
|
animation = layersIn, 1, 4, easeOutQuint, fade
|
||||||
|
animation = layersOut, 1, 1.5, linear, fade
|
||||||
|
animation = fadeLayersIn, 1, 1.79, almostLinear
|
||||||
|
animation = fadeLayersOut, 1, 1.39, almostLinear
|
||||||
|
animation = workspaces, 1, 1.94, almostLinear, fade
|
||||||
|
animation = workspacesIn, 1, 1.21, almostLinear, fade
|
||||||
|
animation = workspacesOut, 1, 1.94, almostLinear, fade
|
||||||
|
animation = zoomFactor, 1, 7, quick
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ref https://wiki.hypr.land/Configuring/Workspace-Rules/
|
||||||
|
# "Smart gaps" / "No gaps when only"
|
||||||
|
# uncomment all if you wish to use that.
|
||||||
|
# workspace = w[tv1], gapsout:0, gapsin:0
|
||||||
|
# workspace = f[1], gapsout:0, gapsin:0
|
||||||
|
# windowrule {
|
||||||
|
# name = no-gaps-wtv1
|
||||||
|
# match:float = false
|
||||||
|
# match:workspace = w[tv1]
|
||||||
|
#
|
||||||
|
# border_size = 0
|
||||||
|
# rounding = 0
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# windowrule {
|
||||||
|
# name = no-gaps-f1
|
||||||
|
# match:float = false
|
||||||
|
# match:workspace = f[1]
|
||||||
|
#
|
||||||
|
# border_size = 0
|
||||||
|
# rounding = 0
|
||||||
|
# }
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Dwindle-Layout/ for more
|
||||||
|
dwindle {
|
||||||
|
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||||
|
preserve_split = true # You probably want this
|
||||||
|
}
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Master-Layout/ for more
|
||||||
|
master {
|
||||||
|
new_status = master
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Variables/#misc
|
||||||
|
misc {
|
||||||
|
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
|
||||||
|
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#############
|
||||||
|
### INPUT ###
|
||||||
|
#############
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Variables/#input
|
||||||
|
input {
|
||||||
|
kb_layout = us
|
||||||
|
kb_variant =
|
||||||
|
kb_model =
|
||||||
|
kb_options = caps:ctrl_modifier
|
||||||
|
kb_rules =
|
||||||
|
|
||||||
|
follow_mouse = 1
|
||||||
|
|
||||||
|
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||||
|
|
||||||
|
touchpad {
|
||||||
|
natural_scroll = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Gestures
|
||||||
|
gesture = 3, horizontal, workspace
|
||||||
|
|
||||||
|
# Example per-device config
|
||||||
|
# See https://wiki.hypr.land/Configuring/Keywords/#per-device-input-configs for more
|
||||||
|
device {
|
||||||
|
name = epic-mouse-v1
|
||||||
|
sensitivity = -0.5
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
###################
|
||||||
|
### KEYBINDINGS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Keywords/
|
||||||
|
$mainMod = SUPER # Sets "Windows" key as main modifier
|
||||||
|
|
||||||
|
# Example binds, see https://wiki.hypr.land/Configuring/Binds/ for more
|
||||||
|
bind = $mainMod, Return, exec, $terminal
|
||||||
|
bind = $mainMod SHIFT, Q, killactive,
|
||||||
|
# bind = $mainMod, M, exec, command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch exit
|
||||||
|
bind = $mainMod, E, exec, $fileManager
|
||||||
|
bind = $mainMod, B, exec, $browser
|
||||||
|
bind = $mainMod, Space, togglefloating,
|
||||||
|
bind = $mainMod, F, fullscreen,
|
||||||
|
bind = $mainMod, d, exec, $menu
|
||||||
|
bind = $mainMod Shift, R, exec, reload
|
||||||
|
bind = $mainMod, P, pseudo, # dwindle
|
||||||
|
# bind = $mainMod, J, layoutmsg, togglesplit # dwindle
|
||||||
|
|
||||||
|
# Move focus with mainMod + arrow keys / hjlk
|
||||||
|
bind = $mainMod, left, movefocus, l
|
||||||
|
bind = $mainMod, right, movefocus, r
|
||||||
|
bind = $mainMod, up, movefocus, u
|
||||||
|
bind = $mainMod, down, movefocus, d
|
||||||
|
bind = $mainMod, H, movefocus, l
|
||||||
|
bind = $mainMod, L, movefocus, r
|
||||||
|
bind = $mainMod, K, movefocus, u
|
||||||
|
bind = $mainMod, J, movefocus, d
|
||||||
|
|
||||||
|
# Move window with mainMod + arrow keys / hjlk
|
||||||
|
bind = $mainMod Shift, H, movewindow, l
|
||||||
|
bind = $mainMod Shift, L, movewindow, r
|
||||||
|
bind = $mainMod Shift, K, movewindow, u
|
||||||
|
bind = $mainMod Shift, J, movewindow, d
|
||||||
|
|
||||||
|
|
||||||
|
# Switch workspaces with mainMod + [0-9]
|
||||||
|
bind = $mainMod, 1, workspace, 1
|
||||||
|
bind = $mainMod, 2, workspace, 2
|
||||||
|
bind = $mainMod, 3, workspace, 3
|
||||||
|
bind = $mainMod, 4, workspace, 4
|
||||||
|
bind = $mainMod, 5, workspace, 5
|
||||||
|
bind = $mainMod, 6, workspace, 6
|
||||||
|
bind = $mainMod, 7, workspace, 7
|
||||||
|
bind = $mainMod, 8, workspace, 8
|
||||||
|
bind = $mainMod, 9, workspace, 9
|
||||||
|
bind = $mainMod, 0, workspace, 10
|
||||||
|
|
||||||
|
# Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||||
|
bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
||||||
|
bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
||||||
|
bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
||||||
|
bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
||||||
|
bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
||||||
|
bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
||||||
|
bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
||||||
|
bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
||||||
|
bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
||||||
|
bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
||||||
|
|
||||||
|
# Example special workspace (scratchpad)
|
||||||
|
bind = $mainMod, S, togglespecialworkspace, magic
|
||||||
|
bind = $mainMod SHIFT, S, movetoworkspace, special:magic
|
||||||
|
|
||||||
|
# Scroll through existing workspaces with mainMod + scroll
|
||||||
|
bind = $mainMod, mouse_down, workspace, e+1
|
||||||
|
bind = $mainMod, mouse_up, workspace, e-1
|
||||||
|
|
||||||
|
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
|
bindm = $mainMod, mouse:272, movewindow
|
||||||
|
bindm = $mainMod, mouse:273, resizewindow
|
||||||
|
|
||||||
|
# Laptop multimedia keys for volume and LCD brightness
|
||||||
|
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
|
||||||
|
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
||||||
|
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
||||||
|
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
||||||
|
bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+
|
||||||
|
bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-
|
||||||
|
|
||||||
|
# Requires playerctl
|
||||||
|
bindl = , XF86AudioNext, exec, playerctl next
|
||||||
|
bindl = , XF86AudioPause, exec, playerctl play-pause
|
||||||
|
bindl = , XF86AudioPlay, exec, playerctl play-pause
|
||||||
|
bindl = , XF86AudioPrev, exec, playerctl previous
|
||||||
|
|
||||||
|
##############################
|
||||||
|
### WINDOWS AND WORKSPACES ###
|
||||||
|
##############################
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Window-Rules/ for more
|
||||||
|
# See https://wiki.hypr.land/Configuring/Workspace-Rules/ for workspace rules
|
||||||
|
|
||||||
|
# Example windowrules that are useful
|
||||||
|
|
||||||
|
windowrule {
|
||||||
|
# Ignore maximize requests from all apps. You'll probably like this.
|
||||||
|
name = suppress-maximize-events
|
||||||
|
match:class = .*
|
||||||
|
|
||||||
|
suppress_event = maximize
|
||||||
|
}
|
||||||
|
|
||||||
|
windowrule {
|
||||||
|
# Fix some dragging issues with XWayland
|
||||||
|
name = fix-xwayland-drags
|
||||||
|
match:class = ^$
|
||||||
|
match:title = ^$
|
||||||
|
match:xwayland = true
|
||||||
|
match:float = true
|
||||||
|
match:fullscreen = false
|
||||||
|
match:pin = false
|
||||||
|
|
||||||
|
no_focus = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# Hyprland-run windowrule
|
||||||
|
windowrule {
|
||||||
|
name = move-hyprland-run
|
||||||
|
|
||||||
|
match:class = hyprland-run
|
||||||
|
|
||||||
|
move = 20 monitor_h-120
|
||||||
|
float = yes
|
||||||
|
}
|
||||||
24
dotfiles/starship/.config/starship/config.toml
Normal file
24
dotfiles/starship/.config/starship/config.toml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
$formatters
|
||||||
|
format = """
|
||||||
|
[─](bold green)
|
||||||
|
[❯](bold green) """
|
||||||
|
add_newline = true
|
||||||
|
|
||||||
|
[character]
|
||||||
|
success_symbol = "[❯](bold green)"
|
||||||
|
error_symbol = "[❯](bold red)"
|
||||||
|
|
||||||
|
[directory]
|
||||||
|
home_symbol = "~"
|
||||||
|
truncation_length = 3
|
||||||
|
truncate_to_repo = true
|
||||||
|
|
||||||
|
[git]
|
||||||
|
branch_symbol = " "
|
||||||
|
stash_count_symbol = " "
|
||||||
|
format = "on [$symbol$branch]($style)$completions"
|
||||||
|
style = "bold purple"
|
||||||
|
|
||||||
|
[docker_context]
|
||||||
|
format = "via [$symbol$context]($style) "
|
||||||
|
style = "blue bold"
|
||||||
318
dotfiles/zellij/.config/zellij/config.kdl
Normal file
318
dotfiles/zellij/.config/zellij/config.kdl
Normal file
@@ -0,0 +1,318 @@
|
|||||||
|
// If you'd like to override the default keybindings completely, be sure to change "keybinds" to "keybinds clear-defaults=true"
|
||||||
|
keybinds {
|
||||||
|
normal clear-defaults=true {
|
||||||
|
bind "F1" {SwitchToMode "Tab"; }
|
||||||
|
bind "F2" {SwitchToMode "Pane"; }
|
||||||
|
bind "F5" {SwitchToMode "Session"; }
|
||||||
|
bind "F6" {SwitchToMode "Search"; }
|
||||||
|
bind "F7" {SwitchToMode "Scroll"; }
|
||||||
|
bind "F8" {SwitchToMode "Resize"; }
|
||||||
|
bind "F9" {SwitchToMode "Move"; }
|
||||||
|
bind "F12" {SwitchToMode "Locked"; }
|
||||||
|
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
|
||||||
|
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
|
||||||
|
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
|
||||||
|
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
|
||||||
|
bind "Alt n" { NewPane; }
|
||||||
|
bind "Alt t" { NewTab; }
|
||||||
|
bind "Alt w" { ToggleFloatingPanes; }
|
||||||
|
bind "Alt =" "Alt +" { Resize "Increase"; }
|
||||||
|
bind "Alt -" { Resize "Decrease"; }
|
||||||
|
|
||||||
|
}
|
||||||
|
tab {
|
||||||
|
bind "Ctrl t" { SwitchToMode "Normal"; }
|
||||||
|
bind "r" { SwitchToMode "RenameTab"; TabNameInput 0; }
|
||||||
|
bind "h" "Left" "Up" "k" { GoToPreviousTab; }
|
||||||
|
bind "l" "Right" "Down" "j" { GoToNextTab; }
|
||||||
|
bind "n" { NewTab; SwitchToMode "Normal"; }
|
||||||
|
bind "x" { CloseTab; SwitchToMode "Normal"; }
|
||||||
|
bind "s" { ToggleActiveSyncTab; SwitchToMode "Normal"; }
|
||||||
|
bind "1" { GoToTab 1; SwitchToMode "Normal"; }
|
||||||
|
bind "2" { GoToTab 2; SwitchToMode "Normal"; }
|
||||||
|
bind "3" { GoToTab 3; SwitchToMode "Normal"; }
|
||||||
|
bind "4" { GoToTab 4; SwitchToMode "Normal"; }
|
||||||
|
bind "5" { GoToTab 5; SwitchToMode "Normal"; }
|
||||||
|
bind "6" { GoToTab 6; SwitchToMode "Normal"; }
|
||||||
|
bind "7" { GoToTab 7; SwitchToMode "Normal"; }
|
||||||
|
bind "8" { GoToTab 8; SwitchToMode "Normal"; }
|
||||||
|
bind "9" { GoToTab 9; SwitchToMode "Normal"; }
|
||||||
|
bind "Tab" { ToggleTab; }
|
||||||
|
}
|
||||||
|
locked {
|
||||||
|
bind "F12" { SwitchToMode "Normal"; }
|
||||||
|
}
|
||||||
|
resize {
|
||||||
|
bind "Ctrl n" { SwitchToMode "Normal"; }
|
||||||
|
bind "h" "Left" { Resize "Increase Left"; }
|
||||||
|
bind "j" "Down" { Resize "Increase Down"; }
|
||||||
|
bind "k" "Up" { Resize "Increase Up"; }
|
||||||
|
bind "l" "Right" { Resize "Increase Right"; }
|
||||||
|
bind "H" { Resize "Decrease Left"; }
|
||||||
|
bind "J" { Resize "Decrease Down"; }
|
||||||
|
bind "K" { Resize "Decrease Up"; }
|
||||||
|
bind "L" { Resize "Decrease Right"; }
|
||||||
|
bind "=" "+" { Resize "Increase"; }
|
||||||
|
bind "-" { Resize "Decrease"; }
|
||||||
|
}
|
||||||
|
pane {
|
||||||
|
bind "Ctrl p" { SwitchToMode "Normal"; }
|
||||||
|
bind "h" "Left" { MoveFocus "Left"; }
|
||||||
|
bind "l" "Right" { MoveFocus "Right"; }
|
||||||
|
bind "j" "Down" { MoveFocus "Down"; }
|
||||||
|
bind "k" "Up" { MoveFocus "Up"; }
|
||||||
|
bind "p" { SwitchFocus; }
|
||||||
|
bind "n" { NewPane; SwitchToMode "Normal"; }
|
||||||
|
bind "d" { NewPane "Down"; SwitchToMode "Normal"; }
|
||||||
|
bind "r" { NewPane "Right"; SwitchToMode "Normal"; }
|
||||||
|
bind "x" { CloseFocus; SwitchToMode "Normal"; }
|
||||||
|
bind "f" { ToggleFocusFullscreen; SwitchToMode "Normal"; }
|
||||||
|
bind "z" { TogglePaneFrames; SwitchToMode "Normal"; }
|
||||||
|
bind "w" { ToggleFloatingPanes; SwitchToMode "Normal"; }
|
||||||
|
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }
|
||||||
|
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0;}
|
||||||
|
}
|
||||||
|
move {
|
||||||
|
bind "Ctrl h" { SwitchToMode "Normal"; }
|
||||||
|
bind "n" "Tab" { MovePane; }
|
||||||
|
bind "h" "Left" { MovePane "Left"; }
|
||||||
|
bind "j" "Down" { MovePane "Down"; }
|
||||||
|
bind "k" "Up" { MovePane "Up"; }
|
||||||
|
bind "l" "Right" { MovePane "Right"; }
|
||||||
|
bind "shift h" { MoveTab "Left"; }
|
||||||
|
bind "shift l" { MoveTab "Right"; }
|
||||||
|
}
|
||||||
|
scroll {
|
||||||
|
bind "Ctrl s" { SwitchToMode "Normal"; }
|
||||||
|
bind "e" { EditScrollback; SwitchToMode "Normal"; }
|
||||||
|
bind "s" { SwitchToMode "EnterSearch"; SearchInput 0; }
|
||||||
|
bind "Ctrl c" { ScrollToBottom; SwitchToMode "Normal"; }
|
||||||
|
bind "j" "Down" { ScrollDown; }
|
||||||
|
bind "k" "Up" { ScrollUp; }
|
||||||
|
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
|
||||||
|
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
|
||||||
|
bind "d" { HalfPageScrollDown; }
|
||||||
|
bind "u" { HalfPageScrollUp; }
|
||||||
|
// uncomment this and adjust key if using copy_on_select=false
|
||||||
|
// bind "Alt c" { Copy; }
|
||||||
|
}
|
||||||
|
search {
|
||||||
|
bind "Ctrl s" { SwitchToMode "Normal"; }
|
||||||
|
bind "Ctrl c" { ScrollToBottom; SwitchToMode "Normal"; }
|
||||||
|
bind "j" "Down" { ScrollDown; }
|
||||||
|
bind "k" "Up" { ScrollUp; }
|
||||||
|
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
|
||||||
|
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
|
||||||
|
bind "d" { HalfPageScrollDown; }
|
||||||
|
bind "u" { HalfPageScrollUp; }
|
||||||
|
bind "n" { Search "down"; }
|
||||||
|
bind "p" { Search "up"; }
|
||||||
|
bind "c" { SearchToggleOption "CaseSensitivity"; }
|
||||||
|
bind "w" { SearchToggleOption "Wrap"; }
|
||||||
|
bind "o" { SearchToggleOption "WholeWord"; }
|
||||||
|
}
|
||||||
|
entersearch {
|
||||||
|
bind "Ctrl c" "Esc" { SwitchToMode "Scroll"; }
|
||||||
|
bind "Enter" { SwitchToMode "Search"; }
|
||||||
|
}
|
||||||
|
renametab {
|
||||||
|
bind "Ctrl c" { SwitchToMode "Normal"; }
|
||||||
|
bind "Esc" { UndoRenameTab; SwitchToMode "Tab"; }
|
||||||
|
}
|
||||||
|
renamepane {
|
||||||
|
bind "Ctrl c" { SwitchToMode "Normal"; }
|
||||||
|
bind "Esc" { UndoRenamePane; SwitchToMode "Pane"; }
|
||||||
|
}
|
||||||
|
session {
|
||||||
|
bind "Ctrl o" { SwitchToMode "Normal"; }
|
||||||
|
bind "Ctrl s" { SwitchToMode "Scroll"; }
|
||||||
|
bind "d" { Detach; }
|
||||||
|
}
|
||||||
|
tmux {
|
||||||
|
bind "[" { SwitchToMode "Scroll"; }
|
||||||
|
bind "Ctrl b" { Write 2; SwitchToMode "Normal"; }
|
||||||
|
bind "\"" { NewPane "Down"; SwitchToMode "Normal"; }
|
||||||
|
bind "%" { NewPane "Right"; SwitchToMode "Normal"; }
|
||||||
|
bind "z" { ToggleFocusFullscreen; SwitchToMode "Normal"; }
|
||||||
|
bind "c" { NewTab; SwitchToMode "Normal"; }
|
||||||
|
bind "," { SwitchToMode "RenameTab"; }
|
||||||
|
bind "p" { GoToPreviousTab; SwitchToMode "Normal"; }
|
||||||
|
bind "n" { GoToNextTab; SwitchToMode "Normal"; }
|
||||||
|
bind "Left" { MoveFocus "Left"; SwitchToMode "Normal"; }
|
||||||
|
bind "Right" { MoveFocus "Right"; SwitchToMode "Normal"; }
|
||||||
|
bind "Down" { MoveFocus "Down"; SwitchToMode "Normal"; }
|
||||||
|
bind "Up" { MoveFocus "Up"; SwitchToMode "Normal"; }
|
||||||
|
bind "h" { MoveFocus "Left"; SwitchToMode "Normal"; }
|
||||||
|
bind "l" { MoveFocus "Right"; SwitchToMode "Normal"; }
|
||||||
|
bind "j" { MoveFocus "Down"; SwitchToMode "Normal"; }
|
||||||
|
bind "k" { MoveFocus "Up"; SwitchToMode "Normal"; }
|
||||||
|
bind "o" { FocusNextPane; }
|
||||||
|
bind "d" { Detach; }
|
||||||
|
}
|
||||||
|
shared_except "locked" {
|
||||||
|
bind "Ctrl g" { SwitchToMode "Locked"; }
|
||||||
|
bind "Ctrl q" { Quit; }
|
||||||
|
bind "Alt n" { NewPane; }
|
||||||
|
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
|
||||||
|
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
|
||||||
|
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
|
||||||
|
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
|
||||||
|
bind "Alt =" "Alt +" { Resize "Increase"; }
|
||||||
|
bind "Alt -" { Resize "Decrease"; }
|
||||||
|
}
|
||||||
|
shared_except "normal" "locked" {
|
||||||
|
bind "Enter" "Esc" { SwitchToMode "Normal"; }
|
||||||
|
}
|
||||||
|
shared_except "pane" "locked" {
|
||||||
|
bind "Ctrl p" { SwitchToMode "Pane"; }
|
||||||
|
}
|
||||||
|
shared_except "resize" "locked" {
|
||||||
|
bind "Ctrl n" { SwitchToMode "Resize"; }
|
||||||
|
}
|
||||||
|
shared_except "scroll" "locked" {
|
||||||
|
bind "Ctrl s" { SwitchToMode "Scroll"; }
|
||||||
|
}
|
||||||
|
shared_except "session" "locked" {
|
||||||
|
bind "Ctrl o" { SwitchToMode "Session"; }
|
||||||
|
}
|
||||||
|
shared_except "tab" "locked" {
|
||||||
|
bind "Ctrl t" { SwitchToMode "Tab"; }
|
||||||
|
}
|
||||||
|
shared_except "move" "locked" {
|
||||||
|
bind "Ctrl h" { SwitchToMode "Move"; }
|
||||||
|
}
|
||||||
|
shared_except "tmux" "locked" {
|
||||||
|
bind "Ctrl b" { SwitchToMode "Tmux"; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
tab-bar { path "tab-bar"; }
|
||||||
|
status-bar { path "status-bar"; }
|
||||||
|
strider { path "strider"; }
|
||||||
|
compact-bar { path "compact-bar"; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
|
||||||
|
// eg. when terminal window with an active zellij session is closed
|
||||||
|
// Options:
|
||||||
|
// - detach (Default)
|
||||||
|
// - quit
|
||||||
|
//
|
||||||
|
// on_force_close "quit"
|
||||||
|
|
||||||
|
// Send a request for a simplified ui (without arrow fonts) to plugins
|
||||||
|
// Options:
|
||||||
|
// - true
|
||||||
|
// - false (Default)
|
||||||
|
//
|
||||||
|
// simplified_ui true
|
||||||
|
|
||||||
|
// Choose the path to the default shell that zellij will use for opening new panes
|
||||||
|
// Default: $SHELL
|
||||||
|
//
|
||||||
|
// default_shell "fish"
|
||||||
|
|
||||||
|
// Toggle between having pane frames around the panes
|
||||||
|
// Options:
|
||||||
|
// - true (default)
|
||||||
|
// - false
|
||||||
|
//
|
||||||
|
// pane_frames true
|
||||||
|
|
||||||
|
// Define color themes for Zellij
|
||||||
|
// For more examples, see: https://github.com/zellij-org/zellij/tree/main/example/themes
|
||||||
|
// Once these themes are defined, one of them should to be selected in the "theme" section of this file
|
||||||
|
//
|
||||||
|
//
|
||||||
|
themes {
|
||||||
|
tokyo-night-dark {
|
||||||
|
fg 169 177 214
|
||||||
|
bg 26 27 38
|
||||||
|
black 56 62 90
|
||||||
|
red 249 51 87
|
||||||
|
green 158 206 106
|
||||||
|
yellow 224 175 104
|
||||||
|
blue 122 162 247
|
||||||
|
magenta 187 154 247
|
||||||
|
cyan 42 195 222
|
||||||
|
white 192 202 245
|
||||||
|
orange 255 158 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Choose the theme that is specified in the themes section.
|
||||||
|
// Default: default
|
||||||
|
//
|
||||||
|
theme "tokyo-night-dark"
|
||||||
|
|
||||||
|
// The name of the default layout to load on startup
|
||||||
|
// Default: "default"
|
||||||
|
//
|
||||||
|
// default_layout "compact"
|
||||||
|
|
||||||
|
// Choose the mode that zellij uses when starting up.
|
||||||
|
// Default: normal
|
||||||
|
//
|
||||||
|
// default_mode "locked"
|
||||||
|
|
||||||
|
// Toggle enabling the mouse mode.
|
||||||
|
// On certain configurations, or terminals this could
|
||||||
|
// potentially interfere with copying text.
|
||||||
|
// Options:
|
||||||
|
// - true (default)
|
||||||
|
// - false
|
||||||
|
//
|
||||||
|
// mouse_mode false
|
||||||
|
|
||||||
|
// Configure the scroll back buffer size
|
||||||
|
// This is the number of lines zellij stores for each pane in the scroll back
|
||||||
|
// buffer. Excess number of lines are discarded in a FIFO fashion.
|
||||||
|
// Valid values: positive integers
|
||||||
|
// Default value: 10000
|
||||||
|
//
|
||||||
|
// scroll_buffer_size 10000
|
||||||
|
|
||||||
|
// Provide a command to execute when copying text. The text will be piped to
|
||||||
|
// the stdin of the program to perform the copy. This can be used with
|
||||||
|
// terminal emulators which do not support the OSC 52 ANSI control sequence
|
||||||
|
// that will be used by default if this option is not set.
|
||||||
|
// Examples:
|
||||||
|
//
|
||||||
|
// copy_command "xclip -selection clipboard" // x11
|
||||||
|
// copy_command "wl-copy" // wayland
|
||||||
|
// copy_command "pbcopy" // osx
|
||||||
|
|
||||||
|
// Choose the destination for copied text
|
||||||
|
// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
|
||||||
|
// Does not apply when using copy_command.
|
||||||
|
// Options:
|
||||||
|
// - system (default)
|
||||||
|
// - primary
|
||||||
|
//
|
||||||
|
// copy_clipboard "primary"
|
||||||
|
|
||||||
|
// Enable or disable automatic copy (and clear) of selection when releasing mouse
|
||||||
|
// Default: true
|
||||||
|
//
|
||||||
|
// copy_on_select false
|
||||||
|
|
||||||
|
// Path to the default editor to use to edit pane scrollbuffer
|
||||||
|
// Default: $EDITOR or $VISUAL
|
||||||
|
//
|
||||||
|
// scrollback_editor "/usr/bin/nvim"
|
||||||
|
|
||||||
|
// When attaching to an existing session with other users,
|
||||||
|
// should the session be mirrored (true)
|
||||||
|
// or should each user have their own cursor (false)
|
||||||
|
// Default: false
|
||||||
|
//
|
||||||
|
// mirror_session true
|
||||||
|
|
||||||
|
// The folder in which Zellij will look for layouts
|
||||||
|
//
|
||||||
|
// layout_dir "/path/to/my/layout_dir"
|
||||||
|
|
||||||
|
// The folder in which Zellij will look for themes
|
||||||
|
//
|
||||||
|
// theme_dir "/path/to/my/theme_dir"
|
||||||
25
dotfiles/zsh/.zshrc
Normal file
25
dotfiles/zsh/.zshrc
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
# ~/.zshrc - Zsh configuration
|
||||||
|
|
||||||
|
# Source .zprofile for login shell environment
|
||||||
|
[[ -f ~/.zprofile ]] && emulate sh -c 'source ~/.zprofile'
|
||||||
|
|
||||||
|
# Enable powerlevel10k instant prompt
|
||||||
|
#if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
|
||||||
|
# source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
|
||||||
|
#fi
|
||||||
|
|
||||||
|
# Basic options
|
||||||
|
setopt HIST_IGNORE_DUPS
|
||||||
|
setopt HIST_IGNORE_SPACE
|
||||||
|
setopt AUTO_CD
|
||||||
|
setopt CORRECT
|
||||||
|
|
||||||
|
# Key bindings
|
||||||
|
bindkey -v
|
||||||
|
|
||||||
|
# Completion
|
||||||
|
autoload -Uz compinit
|
||||||
|
compinit
|
||||||
|
|
||||||
|
# Plugins (loaded via oh-my-zsh)
|
||||||
|
# plugins=(git docker python node npm)
|
||||||
2
inventory.ini
Normal file
2
inventory.ini
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
[localhost]
|
||||||
|
ansible_connection=local
|
||||||
4
requirements.yml
Normal file
4
requirements.yml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
collections:
|
||||||
|
- name: kewlfft.aur
|
||||||
|
version: 0.13.0
|
||||||
6
roles/ai/tasks/main.yaml
Normal file
6
roles/ai/tasks/main.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# tasks file for ai
|
||||||
|
- name: Install AI development tools
|
||||||
|
pacman:
|
||||||
|
name:
|
||||||
|
- opencode
|
||||||
|
state: present
|
||||||
3
roles/common/handlers/main.yaml
Normal file
3
roles/common/handlers/main.yaml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
- name: Update font cache
|
||||||
|
ansible.builtin.command: fc-cache -fv
|
||||||
|
changed_when: false
|
||||||
138
roles/common/tasks/main.yml
Normal file
138
roles/common/tasks/main.yml
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
# tasks file for common
|
||||||
|
- name: Install base development tools
|
||||||
|
become: true
|
||||||
|
pacman:
|
||||||
|
name:
|
||||||
|
- base-devel
|
||||||
|
- git
|
||||||
|
- curl
|
||||||
|
- wget
|
||||||
|
- rsync
|
||||||
|
- unzip
|
||||||
|
- zip
|
||||||
|
- less
|
||||||
|
- man
|
||||||
|
- texinfo
|
||||||
|
- which
|
||||||
|
- zsh
|
||||||
|
- stow
|
||||||
|
- ansible
|
||||||
|
- zoxide
|
||||||
|
- atuin
|
||||||
|
- broot
|
||||||
|
- bottom
|
||||||
|
- hyperfine
|
||||||
|
- tokei
|
||||||
|
- git-delta
|
||||||
|
- yazi
|
||||||
|
- tealdeer
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Install Rust toolchain and Python uv
|
||||||
|
become: true
|
||||||
|
pacman:
|
||||||
|
name:
|
||||||
|
- rust
|
||||||
|
- eza
|
||||||
|
- bat
|
||||||
|
- ripgrep
|
||||||
|
- fd
|
||||||
|
- starship
|
||||||
|
- cargo
|
||||||
|
- cargo-binstall
|
||||||
|
- uv
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Install Fonts
|
||||||
|
become: true
|
||||||
|
pacman:
|
||||||
|
name:
|
||||||
|
- ttf-dejavu
|
||||||
|
- ttf-liberation
|
||||||
|
- ttf-jetbrains-mono-nerd
|
||||||
|
- adobe-source-han-sans-jp-fonts
|
||||||
|
state: present
|
||||||
|
notify: Update font cache
|
||||||
|
|
||||||
|
- name: Ensure ttf-joypixels is installed from AUR
|
||||||
|
kewlfft.aur.aur:
|
||||||
|
name: ttf-joypixels
|
||||||
|
use: paru
|
||||||
|
state: present
|
||||||
|
notify: Update font cache
|
||||||
|
|
||||||
|
- name: Install AUR helper (paru)
|
||||||
|
shell: |
|
||||||
|
command -v paru >/dev/null 2>&1 && exit 0 || (
|
||||||
|
cd /tmp
|
||||||
|
rm -rf paru
|
||||||
|
git clone https://aur.archlinux.org/paru.git
|
||||||
|
cd paru
|
||||||
|
makepkg -si --noconfirm
|
||||||
|
cd ~
|
||||||
|
rm -rf /tmp/paru
|
||||||
|
)
|
||||||
|
register: paru_install
|
||||||
|
changed_when: "'Installing' in paru_install.stdout or 'Compiling' in paru_install.stdout"
|
||||||
|
|
||||||
|
- name: Install oh-my-zsh
|
||||||
|
shell: |
|
||||||
|
[ -d ~/.oh-my-zsh ] && exit 0 || sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended
|
||||||
|
args:
|
||||||
|
creates: ~/.oh-my-zsh
|
||||||
|
|
||||||
|
- name: Check current shell
|
||||||
|
become: true
|
||||||
|
getent:
|
||||||
|
database: passwd
|
||||||
|
key: "{{ user }}"
|
||||||
|
register: user_info
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Set zsh as default shell
|
||||||
|
become: true
|
||||||
|
shell: chsh -s /bin/zsh {{ user }}
|
||||||
|
when: user_info.ansible_facts.getent_passwd[user][-1] != '/bin/zsh'
|
||||||
|
|
||||||
|
- name: Setup shell profile configuration
|
||||||
|
blockinfile:
|
||||||
|
path: "{{ lookup('env', 'HOME') }}/.profile"
|
||||||
|
marker: "# {mark} ANSIBLE MANAGED BLOCK"
|
||||||
|
create: yes
|
||||||
|
mode: '0644'
|
||||||
|
content: |
|
||||||
|
# ~/.profile - POSIX compatible environment
|
||||||
|
|
||||||
|
# Rust and cargo binaries
|
||||||
|
export PATH="$HOME/.cargo/bin:$HOME/.local/bin:$PATH"
|
||||||
|
|
||||||
|
# XDG Base Directory
|
||||||
|
export XDG_CONFIG_HOME="$HOME/.config"
|
||||||
|
export XDG_DATA_HOME="$HOME/.local/share"
|
||||||
|
export XDG_CACHE_HOME="$HOME/.cache"
|
||||||
|
|
||||||
|
export EDITOR="emacs -nw"
|
||||||
|
|
||||||
|
- name: Setup zprofile for Zsh compatibility
|
||||||
|
copy:
|
||||||
|
dest: "{{ lookup('env', 'HOME') }}/.zprofile"
|
||||||
|
content: |
|
||||||
|
# ~/.zprofile - Sourced by Zsh for login shells
|
||||||
|
# Source .profile for POSIX-compatible environment
|
||||||
|
emulate sh -c 'source ~/.profile'
|
||||||
|
|
||||||
|
# Initialize zoxide for smart cd
|
||||||
|
eval "$(zoxide init zsh)"
|
||||||
|
|
||||||
|
# Initialize atuin for shell history
|
||||||
|
eval "$(atuin init zsh)"
|
||||||
|
owner: "{{ lookup('env', 'USER') }}"
|
||||||
|
mode: '0644'
|
||||||
|
|
||||||
|
- name: Setup shell plugins in zshrc
|
||||||
|
blockinfile:
|
||||||
|
path: "{{ lookup('env', 'HOME') }}/.zshrc"
|
||||||
|
marker: "# {mark} ANSIBLE MANAGED BLOCK"
|
||||||
|
content: |
|
||||||
|
# Source .zprofile for login shell environment
|
||||||
|
[[ -f ~/.zprofile ]] && emulate sh -c 'source ~/.zprofile'
|
||||||
53
roles/cs_student/tasks/main.yml
Normal file
53
roles/cs_student/tasks/main.yml
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
# tasks file for cs_student
|
||||||
|
- name: Install CS student tools
|
||||||
|
become: true
|
||||||
|
pacman:
|
||||||
|
name:
|
||||||
|
- neovim
|
||||||
|
- emacs
|
||||||
|
- python
|
||||||
|
- nodejs
|
||||||
|
- npm
|
||||||
|
- texlive-bin
|
||||||
|
- texlive-basic
|
||||||
|
- jupyter-nbconvert
|
||||||
|
- docker
|
||||||
|
- code
|
||||||
|
- github-cli
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Install LazyVim
|
||||||
|
shell: |
|
||||||
|
[ -d ~/.config/lazyvim ] && rm -rf ~/.config/lazyvim
|
||||||
|
git clone https://github.com/LazyVim/starter ~/.config/lazyvim
|
||||||
|
rm -rf ~/.config/lazyvim/.git
|
||||||
|
args:
|
||||||
|
creates: ~/.config/lazyvim
|
||||||
|
|
||||||
|
- name: Configure neovim to use LazyVim
|
||||||
|
shell: |
|
||||||
|
ln -sf ~/.config/lazyvim ~/.config/nvim
|
||||||
|
args:
|
||||||
|
creates: ~/.config/nvim
|
||||||
|
|
||||||
|
- name: Install Spacemacs
|
||||||
|
shell: |
|
||||||
|
[ -d ~/.emacs.d ] && rm -rf ~/.emacs.d
|
||||||
|
git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d -b develop
|
||||||
|
args:
|
||||||
|
creates: ~/.emacs.d
|
||||||
|
|
||||||
|
- name: Setup shell aliases
|
||||||
|
lineinfile:
|
||||||
|
path: "{{ lookup('env', 'HOME') }}/.zshrc"
|
||||||
|
line: "{{ item }}"
|
||||||
|
create: yes
|
||||||
|
loop:
|
||||||
|
- alias ls='eza --icons --group-directories-first'
|
||||||
|
- alias ll='eza -la --icons --group-directories-first'
|
||||||
|
- alias cat='bat --style=auto'
|
||||||
|
- alias find='fd'
|
||||||
|
- alias top='btm'
|
||||||
|
- alias tre='broot --sizes'
|
||||||
|
- alias e='emacs -nw'
|
||||||
|
- alias vim='nvim'
|
||||||
11
roles/ctf/tasks/main.yml
Normal file
11
roles/ctf/tasks/main.yml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# tasks file for ctf
|
||||||
|
- name: Install CTF tools (official repos)
|
||||||
|
become: true
|
||||||
|
pacman:
|
||||||
|
name:
|
||||||
|
- wireshark-qt
|
||||||
|
- nmap
|
||||||
|
- openbsd-netcat
|
||||||
|
- binwalk
|
||||||
|
- gobuster
|
||||||
|
state: present
|
||||||
24
roles/devops/tasks/main.yml
Normal file
24
roles/devops/tasks/main.yml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# tasks file for devops
|
||||||
|
- name: Install DevOps tools
|
||||||
|
become: true
|
||||||
|
pacman:
|
||||||
|
name:
|
||||||
|
- docker
|
||||||
|
- kubectl
|
||||||
|
- terraform
|
||||||
|
- ansible
|
||||||
|
- helm
|
||||||
|
- k9s
|
||||||
|
- pulumi
|
||||||
|
- kubectx
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Setup shell aliases
|
||||||
|
lineinfile:
|
||||||
|
path: "{{ lookup('env', 'HOME') }}/.zshrc"
|
||||||
|
line: "{{ item }}"
|
||||||
|
create: yes
|
||||||
|
loop:
|
||||||
|
- alias kc='kubectl'
|
||||||
|
- alias kctx='kubectx'
|
||||||
|
- alias kns='kubens'
|
||||||
23
roles/dotfiles/tasks/main.yml
Normal file
23
roles/dotfiles/tasks/main.yml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# tasks file for dotfiles
|
||||||
|
- name: Ensure stow is installed
|
||||||
|
become: true
|
||||||
|
pacman:
|
||||||
|
name:
|
||||||
|
- stow
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Remove existing config files before stowing
|
||||||
|
shell: |
|
||||||
|
[ -L ~/.config/hypr/hyprland.conf ] || rm -f ~/.config/hypr/hyprland.conf
|
||||||
|
[ -L ~/.config/starship ] || rm -rf ~/.config/starship
|
||||||
|
[ -L ~/.config/zellij ] || rm -rf ~/.config/zellij
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Create symlinks with stow
|
||||||
|
shell: |
|
||||||
|
cd {{ lookup('env', 'HOME') }}/archsetup/dotfiles
|
||||||
|
stow -t ~ hypr starship zellij
|
||||||
|
args:
|
||||||
|
executable: /bin/bash
|
||||||
|
creates: "{{ lookup('env', 'HOME') }}/.config/starship"
|
||||||
|
chdir: "{{ lookup('env', 'HOME') }}/archsetup/dotfiles"
|
||||||
81
roles/hyprland/tasks/main.yml
Normal file
81
roles/hyprland/tasks/main.yml
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
# tasks file for hyprland
|
||||||
|
- name: Install Hyprland and desktop components (official repos)
|
||||||
|
become: true
|
||||||
|
pacman:
|
||||||
|
name:
|
||||||
|
- waybar
|
||||||
|
- wofi
|
||||||
|
- kitty
|
||||||
|
- swaync
|
||||||
|
- fastfetch
|
||||||
|
- hyprpaper
|
||||||
|
- hyprlock
|
||||||
|
- pavucontrol
|
||||||
|
- brightnessctl
|
||||||
|
- playerctl
|
||||||
|
- grim
|
||||||
|
- wl-clipboard
|
||||||
|
- xdg-desktop-portal-hyprland
|
||||||
|
- zellij
|
||||||
|
- veracrypt
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Install basic Linux tools
|
||||||
|
become: true
|
||||||
|
pacman:
|
||||||
|
name:
|
||||||
|
- fzf
|
||||||
|
- jq
|
||||||
|
- yq
|
||||||
|
- shellcheck
|
||||||
|
- dust
|
||||||
|
- ffmpeg
|
||||||
|
- sxiv
|
||||||
|
- pandoc
|
||||||
|
- p7zip
|
||||||
|
- entr
|
||||||
|
- less
|
||||||
|
- man
|
||||||
|
- texinfo
|
||||||
|
- which
|
||||||
|
- iw
|
||||||
|
- network-manager-applet
|
||||||
|
- udiskie
|
||||||
|
- ntfs-3g
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Install Bluetooth support
|
||||||
|
become: true
|
||||||
|
pacman:
|
||||||
|
name:
|
||||||
|
- bluez
|
||||||
|
- bluez-utils
|
||||||
|
- bluedevil
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Install printing support
|
||||||
|
become: true
|
||||||
|
pacman:
|
||||||
|
name:
|
||||||
|
- cups
|
||||||
|
- cups-pdf
|
||||||
|
- system-config-printer
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Enable services
|
||||||
|
become: true
|
||||||
|
systemd:
|
||||||
|
name: "{{ item }}"
|
||||||
|
enabled: yes
|
||||||
|
loop:
|
||||||
|
- bluetooth
|
||||||
|
- cups
|
||||||
|
- docker
|
||||||
|
- udisks2
|
||||||
|
|
||||||
|
- name: Add user to docker group
|
||||||
|
become: true
|
||||||
|
user:
|
||||||
|
name: "{{ user }}"
|
||||||
|
groups: docker
|
||||||
|
append: yes
|
||||||
15
site.yml
Normal file
15
site.yml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
- hosts: localhost
|
||||||
|
connection: local
|
||||||
|
vars:
|
||||||
|
aur_helper: paru
|
||||||
|
user: "{{ ansible_user_id }}"
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- { role: common, tags: ['common'] }
|
||||||
|
- { role: dotfiles, tags: ['dotfiles'] }
|
||||||
|
- { role: cs_student, tags: ['cs_student'] }
|
||||||
|
- { role: devops, tags: ['devops'] }
|
||||||
|
- { role: ctf, tags: ['ctf'] }
|
||||||
|
- { role: hyprland, tags: ['hyprland'] }
|
||||||
|
- { role: ai, tags: ['ai'] }
|
||||||
Reference in New Issue
Block a user