Initial commit - created with claude AI

This commit is contained in:
2025-11-21 20:20:43 +01:00
commit 5ff4bc24b2
13 changed files with 1273 additions and 0 deletions

81
.config/dunst/dunstrc Normal file
View File

@@ -0,0 +1,81 @@
# ╔═══════════════════════════════════════════════════════════════════╗
# ║ HYPRARCH - Dunst Config ║
# ║ Nord Color Scheme ║
# ╚═══════════════════════════════════════════════════════════════════╝
[global]
monitor = 0
follow = mouse
width = 300
height = 300
origin = top-right
offset = 10x50
scale = 0
notification_limit = 5
progress_bar = true
progress_bar_height = 10
progress_bar_frame_width = 1
progress_bar_min_width = 150
progress_bar_max_width = 300
indicate_hidden = yes
transparency = 0
separator_height = 2
padding = 12
horizontal_padding = 12
text_icon_padding = 0
frame_width = 2
frame_color = "#88c0d0"
separator_color = frame
sort = yes
font = JetBrainsMono Nerd Font 10
line_height = 0
markup = full
format = "<b>%s</b>\n%b"
alignment = left
vertical_alignment = center
show_age_threshold = 60
ellipsize = middle
ignore_newline = no
stack_duplicates = true
hide_duplicate_count = false
show_indicators = yes
icon_position = left
min_icon_size = 0
max_icon_size = 32
sticky_history = yes
history_length = 20
browser = /usr/bin/xdg-open
always_run_script = true
title = Dunst
class = Dunst
corner_radius = 8
ignore_dbusclose = false
mouse_left_click = close_current
mouse_middle_click = do_action, close_current
mouse_right_click = close_all
[urgency_low]
background = "#2e3440"
foreground = "#d8dee9"
frame_color = "#4c566a"
timeout = 5
[urgency_normal]
background = "#2e3440"
foreground = "#eceff4"
frame_color = "#88c0d0"
timeout = 10
[urgency_critical]
background = "#2e3440"
foreground = "#eceff4"
frame_color = "#bf616a"
timeout = 0

178
.config/hypr/hyprland.conf Normal file
View File

@@ -0,0 +1,178 @@
# ╔═══════════════════════════════════════════════════════════════════╗
# ║ HYPRARCH - Hyprland Config ║
# ║ https://git.cribdev.com/hyprarch ║
# ╚═══════════════════════════════════════════════════════════════════╝
# ── Monitor ──────────────────────────────────────────────────────────
monitor = ,preferred,auto,1
# ── Startup ──────────────────────────────────────────────────────────
exec-once = waybar
exec-once = swww-daemon
exec-once = nm-applet --indicator
exec-once = blueman-applet
exec-once = dunst
# Set wallpaper after swww starts
exec-once = sleep 1 && swww img ~/Pictures/wallpapers/default.jpg --transition-type grow
# ── Environment Variables ────────────────────────────────────────────
env = XCURSOR_SIZE,24
env = QT_QPA_PLATFORMTHEME,qt5ct
env = QT_QPA_PLATFORM,wayland
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_TYPE,wayland
env = XDG_SESSION_DESKTOP,Hyprland
# ── Input ────────────────────────────────────────────────────────────
input {
kb_layout = us
follow_mouse = 1
sensitivity = 0
touchpad {
natural_scroll = true
}
}
# ── General ──────────────────────────────────────────────────────────
general {
gaps_in = 5
gaps_out = 10
border_size = 2
col.active_border = rgba(88c0d0ee) rgba(81a1c1ee) 45deg
col.inactive_border = rgba(4c566aaa)
layout = dwindle
}
# ── Decoration ───────────────────────────────────────────────────────
decoration {
rounding = 8
blur {
enabled = true
size = 6
passes = 2
new_optimizations = true
}
shadow {
enabled = true
range = 20
render_power = 3
color = rgba(1a1a1aee)
}
}
# ── Animations ───────────────────────────────────────────────────────
animations {
enabled = true
bezier = wind, 0.05, 0.9, 0.1, 1.05
bezier = winIn, 0.1, 1.1, 0.1, 1.1
bezier = winOut, 0.3, -0.3, 0, 1
bezier = liner, 1, 1, 1, 1
animation = windows, 1, 6, wind, slide
animation = windowsIn, 1, 6, winIn, slide
animation = windowsOut, 1, 5, winOut, slide
animation = windowsMove, 1, 5, wind, slide
animation = border, 1, 1, liner
animation = borderangle, 1, 30, liner, loop
animation = fade, 1, 10, default
animation = workspaces, 1, 5, wind
}
# ── Layouts ──────────────────────────────────────────────────────────
dwindle {
pseudotile = true
preserve_split = true
}
master {
new_status = master
}
# ── Gestures ─────────────────────────────────────────────────────────
gestures {
workspace_swipe = true
}
# ── Misc ─────────────────────────────────────────────────────────────
misc {
force_default_wallpaper = 0
disable_hyprland_logo = true
disable_splash_rendering = true
}
# ── Window Rules ─────────────────────────────────────────────────────
windowrulev2 = suppressevent maximize, class:.*
windowrulev2 = float, class:^(pavucontrol)$
windowrulev2 = float, class:^(blueman-manager)$
windowrulev2 = float, class:^(nm-connection-editor)$
windowrulev2 = float, title:^(Picture-in-Picture)$
# ── Keybindings ──────────────────────────────────────────────────────
$mainMod = SUPER
# Applications
bind = $mainMod, Return, exec, kitty
bind = $mainMod, Q, killactive,
bind = $mainMod, M, exit,
bind = $mainMod, E, exec, thunar
bind = $mainMod, V, togglefloating,
bind = $mainMod, D, exec, rofi -show drun
bind = $mainMod, P, pseudo,
bind = $mainMod, J, togglesplit,
bind = $mainMod, F, fullscreen,
bind = $mainMod, L, exec, hyprlock
# Screenshots
bind = $mainMod SHIFT, S, exec, grim -g "$(slurp)" - | wl-copy
bind = , Print, exec, grim -g "$(slurp)" ~/Pictures/screenshots/$(date +%Y%m%d_%H%M%S).png
# Move focus
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
# Switch workspaces
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 workspace
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
# Scroll through workspaces
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
# Move/resize windows with mouse
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
# Volume and brightness
bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume @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 s 10%+
bindel = , XF86MonBrightnessDown, exec, brightnessctl s 10%-

View File

@@ -0,0 +1,52 @@
# ╔═══════════════════════════════════════════════════════════════════╗
# ║ HYPRARCH - Hyprlock Config ║
# ╚═══════════════════════════════════════════════════════════════════╝
background {
monitor =
path = ~/Pictures/wallpapers/default.jpg
blur_passes = 2
blur_size = 6
contrast = 0.8
brightness = 0.7
}
input-field {
monitor =
size = 250, 50
outline_thickness = 2
dots_size = 0.2
dots_spacing = 0.35
dots_center = true
outer_color = rgba(88c0d0ee)
inner_color = rgba(2e3440ee)
font_color = rgb(eceff4)
fade_on_empty = false
placeholder_text = <i>Password...</i>
hide_input = false
position = 0, -120
halign = center
valign = center
}
label {
monitor =
text = $TIME
color = rgba(eceff4ee)
font_size = 64
font_family = JetBrainsMono Nerd Font
position = 0, 80
halign = center
valign = center
}
label {
monitor =
text = Hi, $USER
color = rgba(88c0d0ee)
font_size = 20
font_family = JetBrainsMono Nerd Font
position = 0, -20
halign = center
valign = center
}

70
.config/kitty/kitty.conf Normal file
View File

@@ -0,0 +1,70 @@
# ╔═══════════════════════════════════════════════════════════════════╗
# ║ HYPRARCH - Kitty Config ║
# ║ Nord Color Scheme ║
# ╚═══════════════════════════════════════════════════════════════════╝
# ── Font ─────────────────────────────────────────────────────────────
font_family JetBrainsMono Nerd Font
bold_font auto
italic_font auto
bold_italic_font auto
font_size 12.0
# ── Window ───────────────────────────────────────────────────────────
background_opacity 0.95
window_padding_width 8
confirm_os_window_close 0
enable_audio_bell no
# ── Tab Bar ──────────────────────────────────────────────────────────
tab_bar_style powerline
tab_powerline_style slanted
active_tab_foreground #2e3440
active_tab_background #88c0d0
inactive_tab_foreground #d8dee9
inactive_tab_background #3b4252
# ── Nord Color Scheme ────────────────────────────────────────────────
# Background
background #2e3440
foreground #d8dee9
# Cursor
cursor #d8dee9
cursor_text_color #2e3440
# Selection
selection_background #4c566a
selection_foreground #eceff4
# Black
color0 #3b4252
color8 #4c566a
# Red
color1 #bf616a
color9 #bf616a
# Green
color2 #a3be8c
color10 #a3be8c
# Yellow
color3 #ebcb8b
color11 #ebcb8b
# Blue
color4 #81a1c1
color12 #81a1c1
# Magenta
color5 #b48ead
color13 #b48ead
# Cyan
color6 #88c0d0
color14 #8fbcbb
# White
color7 #e5e9f0
color15 #eceff4

16
.config/rofi/config.rasi Normal file
View File

@@ -0,0 +1,16 @@
/* ╔═══════════════════════════════════════════════════════════════════╗
║ HYPRARCH - Rofi Config ║
║ Nord Color Scheme ║
╚═══════════════════════════════════════════════════════════════════╝ */
configuration {
modi: "drun,run";
show-icons: true;
drun-display-format: "{name}";
disable-history: false;
sidebar-mode: false;
display-drun: "Apps";
display-run: "Run";
}
@theme "nord"

80
.config/rofi/nord.rasi Normal file
View File

@@ -0,0 +1,80 @@
/* ╔═══════════════════════════════════════════════════════════════════╗
║ HYPRARCH - Rofi Nord Theme ║
╚═══════════════════════════════════════════════════════════════════╝ */
* {
bg: #2e3440;
bg-alt: #3b4252;
fg: #eceff4;
fg-alt: #d8dee9;
accent: #88c0d0;
urgent: #bf616a;
background-color: transparent;
text-color: @fg;
margin: 0;
padding: 0;
spacing: 0;
}
window {
location: center;
width: 600;
background-color: @bg;
border: 2px;
border-color: @accent;
border-radius: 12px;
}
mainbox {
children: [inputbar, listview];
}
inputbar {
padding: 12px;
spacing: 12px;
children: [prompt, entry];
background-color: @bg-alt;
}
prompt {
text-color: @accent;
}
entry {
placeholder: "Search...";
placeholder-color: @fg-alt;
}
listview {
lines: 8;
columns: 1;
padding: 8px 0;
background-color: @bg;
}
element {
padding: 8px 12px;
spacing: 8px;
background-color: transparent;
}
element normal.normal {
text-color: @fg;
}
element selected.normal {
background-color: @bg-alt;
text-color: @accent;
}
element-icon {
size: 1em;
vertical-align: 0.5;
}
element-text {
text-color: inherit;
vertical-align: 0.5;
}

82
.config/waybar/config Normal file
View File

@@ -0,0 +1,82 @@
{
"layer": "top",
"position": "top",
"height": 34,
"spacing": 8,
"modules-left": ["hyprland/workspaces", "hyprland/window"],
"modules-center": ["clock"],
"modules-right": ["pulseaudio", "network", "cpu", "memory", "battery", "tray"],
"hyprland/workspaces": {
"format": "{icon}",
"on-click": "activate",
"format-icons": {
"1": "一",
"2": "二",
"3": "三",
"4": "四",
"5": "五",
"6": "六",
"7": "七",
"8": "八",
"9": "九",
"10": "十",
"active": "",
"default": ""
}
},
"hyprland/window": {
"format": "{}",
"separate-outputs": true,
"max-length": 50
},
"clock": {
"format": "{:%H:%M}",
"format-alt": "{:%A, %B %d, %Y}",
"tooltip-format": "<tt><small>{calendar}</small></tt>"
},
"pulseaudio": {
"format": "{icon} {volume}%",
"format-muted": "󰝟",
"format-icons": {
"default": ["", "", ""]
},
"on-click": "pavucontrol"
},
"network": {
"format-wifi": " {essid}",
"format-ethernet": "󰈀",
"format-disconnected": "󰤭",
"tooltip-format": "{ifname}: {ipaddr}",
"on-click": "nm-connection-editor"
},
"cpu": {
"format": " {usage}%",
"tooltip": false
},
"memory": {
"format": " {}%"
},
"battery": {
"states": {
"warning": 30,
"critical": 15
},
"format": "{icon} {capacity}%",
"format-charging": "󰂄 {capacity}%",
"format-plugged": " {capacity}%",
"format-icons": ["󰂎", "󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂"]
},
"tray": {
"spacing": 10
}
}

85
.config/waybar/style.css Normal file
View File

@@ -0,0 +1,85 @@
/* ╔═══════════════════════════════════════════════════════════════════╗
║ HYPRARCH - Waybar Style ║
║ Nord Color Scheme ║
╚═══════════════════════════════════════════════════════════════════╝ */
* {
font-family: "JetBrainsMono Nerd Font";
font-size: 13px;
min-height: 0;
border: none;
border-radius: 0;
}
window#waybar {
background: rgba(46, 52, 64, 0.95);
color: #eceff4;
}
#workspaces {
margin: 0 4px;
}
#workspaces button {
padding: 0 12px;
color: #d8dee9;
background: transparent;
border-bottom: 3px solid transparent;
}
#workspaces button.active {
color: #88c0d0;
border-bottom: 3px solid #88c0d0;
}
#workspaces button:hover {
background: rgba(136, 192, 208, 0.1);
}
#window {
margin: 0 8px;
color: #d8dee9;
font-weight: normal;
}
#clock,
#battery,
#cpu,
#memory,
#network,
#pulseaudio {
padding: 0 12px;
margin: 4px 2px;
background: rgba(59, 66, 82, 0.8);
border-radius: 8px;
color: #eceff4;
}
#battery.charging {
color: #a3be8c;
}
#battery.warning:not(.charging) {
color: #ebcb8b;
}
#battery.critical:not(.charging) {
color: #bf616a;
}
#pulseaudio.muted {
color: #bf616a;
}
#tray {
padding: 0 8px;
}
#tray > .passive {
-gtk-icon-effect: dim;
}
#tray > .needs-attention {
-gtk-icon-effect: highlight;
background-color: #bf616a;
}

18
.gitignore vendored Normal file
View File

@@ -0,0 +1,18 @@
# Backup files
*.bak
*~
.config-backup-*
# OS files
.DS_Store
Thumbs.db
# Editor files
.vscode/
.idea/
*.swp
*.swo
# Temporary files
*.tmp
*.log

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 Crib
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

233
README.md Normal file
View File

@@ -0,0 +1,233 @@
# 🎨 HYPRARCH
A minimal, beautiful Hyprland rice for Arch Linux with Nord color scheme.
![Hyprland](https://img.shields.io/badge/Hyprland-blue?style=flat-square)
![Arch Linux](https://img.shields.io/badge/Arch_Linux-1793D1?style=flat-square&logo=arch-linux&logoColor=white)
![Nord Theme](https://img.shields.io/badge/Nord-88c0d0?style=flat-square)
## ✨ Features
- 🪟 **Hyprland** - Dynamic tiling Wayland compositor with smooth animations
- 📊 **Waybar** - Minimal status bar with Nord styling
- 🚀 **Rofi** - Beautiful app launcher
- 🖥️ **Kitty** - GPU-accelerated terminal
- 🔔 **Dunst** - Clean notification daemon
- 🖼️ **SWWW** - Animated wallpaper daemon
- 🔒 **Hyprlock** - Stylish lock screen
- 🎨 **Nord Theme** - Cohesive color scheme throughout
## 📸 Screenshots
*Coming soon*
## ⚡ Quick Install
```bash
# Clone the repository
git clone https://git.cribdev.com/hyprarch/hyprarch.git ~/hyprarch
# Run the install script
cd ~/hyprarch
chmod +x install.sh
./install.sh
# Log out and select Hyprland, or start from TTY:
Hyprland
```
That's it! The script handles everything automatically.
## 📦 What Gets Installed
### Core
- Hyprland, Hyprpaper, Hyprpicker, Hypridle, Hyprlock
- Waybar, Rofi, Dunst, SWWW
- XDG Desktop Portal for Hyprland
### Utilities
- Kitty (terminal)
- Thunar (file manager)
- PipeWire (audio)
- NetworkManager, Blueman (connectivity)
### CLI Tools
- Neovim, Zsh, Starship prompt
- eza, bat, fzf, ripgrep, fd
### Applications
- Firefox, MPV, Zathura (PDF)
## ⌨️ Keybindings
| Key | Action |
|-----|--------|
| `SUPER + Return` | Terminal (Kitty) |
| `SUPER + D` | App Launcher (Rofi) |
| `SUPER + Q` | Close Window |
| `SUPER + E` | File Manager |
| `SUPER + V` | Toggle Floating |
| `SUPER + F` | Fullscreen |
| `SUPER + L` | Lock Screen |
| `SUPER + M` | Exit Hyprland |
| `SUPER + 1-9` | Switch Workspace |
| `SUPER + SHIFT + 1-9` | Move to Workspace |
| `SUPER + SHIFT + S` | Screenshot (select) |
| `Print` | Screenshot to file |
## 📁 File Structure
```
hyprarch/
├── install.sh # Main install script
├── README.md # This file
├── .config/
│ ├── hypr/
│ │ ├── hyprland.conf # Main Hyprland config
│ │ └── hyprlock.conf # Lock screen config
│ ├── waybar/
│ │ ├── config # Waybar modules
│ │ └── style.css # Nord themed styling
│ ├── rofi/
│ │ ├── config.rasi # Rofi config
│ │ └── nord.rasi # Nord theme
│ ├── kitty/
│ │ └── kitty.conf # Terminal config
│ └── dunst/
│ └── dunstrc # Notification config
└── wallpapers/ # Wallpaper collection
```
## 🎨 Color Scheme (Nord)
| Color | Hex | Usage |
|-------|-----|-------|
| Polar Night | `#2e3440` | Background |
| Snow Storm | `#eceff4` | Foreground |
| Frost | `#88c0d0` | Accent/Active |
| Aurora Red | `#bf616a` | Critical/Error |
| Aurora Green | `#a3be8c` | Success |
| Aurora Yellow | `#ebcb8b` | Warning |
## 🔧 Customization
### Change Wallpaper
```bash
swww img ~/Pictures/wallpapers/your-wallpaper.jpg --transition-type grow
```
### Edit Configs
```bash
# Hyprland
nvim ~/.config/hypr/hyprland.conf
# Waybar
nvim ~/.config/waybar/config
nvim ~/.config/waybar/style.css
# Rofi
nvim ~/.config/rofi/nord.rasi
# Kitty
nvim ~/.config/kitty/kitty.conf
```
### Change Theme Colors
Edit the color variables in:
- `~/.config/waybar/style.css`
- `~/.config/rofi/nord.rasi`
- `~/.config/kitty/kitty.conf`
- `~/.config/dunst/dunstrc`
## 🔍 Troubleshooting
### Hyprland won't start
```bash
# Check if running Wayland
echo $XDG_SESSION_TYPE
# Check Hyprland logs
cat /tmp/hypr/*/hyprland.log
```
### Waybar not showing
```bash
# Restart waybar
killall waybar
waybar &
```
### No sound
```bash
# Check PipeWire
systemctl --user status pipewire pipewire-pulse wireplumber
# Restart audio
systemctl --user restart pipewire pipewire-pulse wireplumber
```
### Wallpaper not loading
```bash
# Check if swww daemon is running
pgrep swww
# Start daemon and set wallpaper
swww-daemon &
sleep 1
swww img ~/Pictures/wallpapers/default.jpg
```
### Rofi not opening
```bash
# Test rofi
rofi -show drun
# Check if rofi-wayland is installed
pacman -Qs rofi
```
## 🔄 Updating
```bash
cd ~/hyprarch
git pull
./install.sh
```
Your custom configs will be backed up before updating.
## 🗑️ Uninstall
```bash
# Remove configs
rm -rf ~/.config/hypr
rm -rf ~/.config/waybar
rm -rf ~/.config/rofi
rm -rf ~/.config/kitty
rm -rf ~/.config/dunst
# Optionally remove packages (be careful!)
# sudo pacman -Rns hyprland waybar rofi kitty dunst swww
```
## 📚 Resources
- [Hyprland Wiki](https://wiki.hyprland.org/)
- [Nord Theme](https://www.nordtheme.com/)
- [Arch Wiki - Hyprland](https://wiki.archlinux.org/title/Hyprland)
## 🤝 Credits
- [Hyprland](https://hyprland.org/) by vaxerski
- [Nord Theme](https://www.nordtheme.com/) by Arctic Ice Studio
- [Nordic Wallpapers](https://github.com/linuxdotexe/nordic-wallpapers)
## 📄 License
MIT License - Feel free to use and modify!
---
<p align="center">
Made with 💙 for the Arch + Hyprland community
</p>

333
install.sh Normal file
View File

@@ -0,0 +1,333 @@
#!/bin/bash
# ╔═══════════════════════════════════════════════════════════════════╗
# ║ HYPRARCH - Install Script ║
# ║ https://git.cribdev.com/hyprarch ║
# ╚═══════════════════════════════════════════════════════════════════╝
set -e
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Banner
echo -e "${CYAN}"
cat << "EOF"
╦ ╦╦ ╦╔═╗╦═╗╔═╗╦═╗╔═╗╦ ╦
╠═╣╚╦╝╠═╝╠╦╝╠═╣╠╦╝║ ╠═╣
╩ ╩ ╩ ╩ ╩╚═╩ ╩╩╚═╚═╝╩ ╩
Hyprland Rice for Arch Linux
EOF
echo -e "${NC}"
# Check if running as root
if [ "$EUID" -eq 0 ]; then
echo -e "${RED}Error: Please don't run this script as root${NC}"
exit 1
fi
# Check if running Arch Linux
if [ ! -f /etc/arch-release ]; then
echo -e "${RED}Error: This script is designed for Arch Linux${NC}"
exit 1
fi
# Function to print status
print_status() {
echo -e "${BLUE}[*]${NC} $1"
}
print_success() {
echo -e "${GREEN}[✓]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[!]${NC} $1"
}
print_error() {
echo -e "${RED}[✗]${NC} $1"
}
# Get script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# ── Step 1: Update System ────────────────────────────────────────────
print_status "Updating system..."
sudo pacman -Syu --noconfirm
# ── Step 2: Install yay (AUR helper) ─────────────────────────────────
if ! command -v yay &> /dev/null; then
print_status "Installing yay (AUR helper)..."
sudo pacman -S --needed --noconfirm git base-devel
git clone https://aur.archlinux.org/yay.git /tmp/yay
cd /tmp/yay && makepkg -si --noconfirm
cd "$SCRIPT_DIR"
rm -rf /tmp/yay
print_success "yay installed"
else
print_success "yay already installed"
fi
# ── Step 3: Install Packages ─────────────────────────────────────────
print_status "Installing packages..."
# Core Hyprland packages
HYPRLAND_PKGS=(
hyprland
hyprpaper
hyprpicker
hypridle
hyprlock
xdg-desktop-portal-hyprland
)
# Wayland essentials
WAYLAND_PKGS=(
waybar
rofi-wayland
dunst
swww
grim
slurp
wl-clipboard
)
# System utilities
SYSTEM_PKGS=(
kitty
thunar
thunar-archive-plugin
file-roller
pavucontrol
brightnessctl
networkmanager
network-manager-applet
bluez
bluez-utils
blueman
pipewire
pipewire-alsa
pipewire-pulse
pipewire-jack
wireplumber
)
# Fonts
FONT_PKGS=(
ttf-jetbrains-mono-nerd
ttf-fira-code
noto-fonts
noto-fonts-cjk
noto-fonts-emoji
ttf-font-awesome
)
# CLI tools
CLI_PKGS=(
git
vim
neovim
htop
btop
wget
curl
unzip
zip
ripgrep
fd
fzf
bat
eza
jq
zsh
starship
)
# Applications
APP_PKGS=(
firefox
imv
zathura
zathura-pdf-mupdf
mpv
)
# Qt/GTK theming
THEME_PKGS=(
qt5ct
qt6ct
nwg-look
)
# Install official packages
print_status "Installing official packages..."
sudo pacman -S --needed --noconfirm "${HYPRLAND_PKGS[@]}" "${WAYLAND_PKGS[@]}" "${SYSTEM_PKGS[@]}" "${FONT_PKGS[@]}" "${CLI_PKGS[@]}" "${APP_PKGS[@]}" "${THEME_PKGS[@]}"
# AUR packages
AUR_PKGS=(
swaynotificationcenter
)
print_status "Installing AUR packages..."
yay -S --needed --noconfirm "${AUR_PKGS[@]}"
print_success "All packages installed"
# ── Step 4: Enable Services ──────────────────────────────────────────
print_status "Enabling services..."
sudo systemctl enable NetworkManager
sudo systemctl enable bluetooth
systemctl --user enable pipewire pipewire-pulse wireplumber
print_success "Services enabled"
# ── Step 5: Backup Existing Configs ──────────────────────────────────
print_status "Backing up existing configs..."
BACKUP_DIR="$HOME/.config-backup-$(date +%Y%m%d_%H%M%S)"
configs_to_backup=(
"$HOME/.config/hypr"
"$HOME/.config/waybar"
"$HOME/.config/rofi"
"$HOME/.config/kitty"
"$HOME/.config/dunst"
)
mkdir -p "$BACKUP_DIR"
for config in "${configs_to_backup[@]}"; do
if [ -d "$config" ] || [ -f "$config" ]; then
cp -r "$config" "$BACKUP_DIR/" 2>/dev/null || true
print_warning "Backed up $(basename $config)"
fi
done
print_success "Backup created at $BACKUP_DIR"
# ── Step 6: Install Configs ──────────────────────────────────────────
print_status "Installing configs..."
# Create directories
mkdir -p "$HOME/.config/hypr"
mkdir -p "$HOME/.config/waybar"
mkdir -p "$HOME/.config/rofi"
mkdir -p "$HOME/.config/kitty"
mkdir -p "$HOME/.config/dunst"
mkdir -p "$HOME/Pictures/wallpapers"
mkdir -p "$HOME/Pictures/screenshots"
# Copy configs
cp -r "$SCRIPT_DIR/.config/hypr/"* "$HOME/.config/hypr/"
cp -r "$SCRIPT_DIR/.config/waybar/"* "$HOME/.config/waybar/"
cp -r "$SCRIPT_DIR/.config/rofi/"* "$HOME/.config/rofi/"
cp -r "$SCRIPT_DIR/.config/kitty/"* "$HOME/.config/kitty/"
cp -r "$SCRIPT_DIR/.config/dunst/"* "$HOME/.config/dunst/"
# Copy wallpapers if they exist
if [ -d "$SCRIPT_DIR/wallpapers" ] && [ "$(ls -A $SCRIPT_DIR/wallpapers 2>/dev/null)" ]; then
cp -r "$SCRIPT_DIR/wallpapers/"* "$HOME/Pictures/wallpapers/"
fi
print_success "Configs installed"
# ── Step 7: Set Zsh as Default Shell ─────────────────────────────────
if [ "$SHELL" != "$(which zsh)" ]; then
print_status "Setting zsh as default shell..."
chsh -s $(which zsh)
print_success "Zsh set as default shell (will take effect on next login)"
fi
# ── Step 8: Install Starship Config ──────────────────────────────────
print_status "Installing starship config..."
mkdir -p "$HOME/.config"
cat > "$HOME/.config/starship.toml" << 'EOF'
add_newline = false
format = "$directory$git_branch$git_status$character"
[directory]
truncation_length = 3
truncate_to_repo = true
[character]
success_symbol = "[](bold green)"
error_symbol = "[](bold red)"
[git_branch]
format = "[$symbol$branch]($style) "
style = "bold purple"
EOF
print_success "Starship config installed"
# ── Step 9: Setup Zsh Config ─────────────────────────────────────────
print_status "Setting up zsh config..."
cat > "$HOME/.zshrc" << 'EOF'
# HYPRARCH - Zsh Config
# History
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt appendhistory
setopt sharehistory
setopt hist_ignore_dups
# Completion
autoload -Uz compinit
compinit
# Aliases
alias ls='eza'
alias ll='eza -la'
alias cat='bat'
alias vim='nvim'
alias update='sudo pacman -Syu'
alias cleanup='sudo pacman -Rns $(pacman -Qtdq)'
# Starship prompt
eval "$(starship init zsh)"
EOF
print_success "Zsh config installed"
# ── Step 10: Download Default Wallpaper ──────────────────────────────
print_status "Downloading default wallpaper..."
if command -v wget &> /dev/null; then
wget -q "https://raw.githubusercontent.com/linuxdotexe/nordic-wallpapers/master/wallpapers/ign_astronaut.png" -O "$HOME/Pictures/wallpapers/default.jpg" 2>/dev/null || \
wget -q "https://images.unsplash.com/photo-1557682250-33bd709cbe85?w=1920" -O "$HOME/Pictures/wallpapers/default.jpg" 2>/dev/null || \
print_warning "Could not download wallpaper, please add one manually"
fi
print_success "Wallpaper downloaded"
# ── Complete ─────────────────────────────────────────────────────────
echo ""
echo -e "${GREEN}╔═══════════════════════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║ Installation Complete! ║${NC}"
echo -e "${GREEN}╚═══════════════════════════════════════════════════════════════════╝${NC}"
echo ""
echo -e "${CYAN}Next steps:${NC}"
echo " 1. Log out and select Hyprland from your display manager"
echo " 2. Or start Hyprland from TTY: ${YELLOW}Hyprland${NC}"
echo ""
echo -e "${CYAN}Keybindings:${NC}"
echo " SUPER + Return → Terminal (Kitty)"
echo " SUPER + D → App Launcher (Rofi)"
echo " SUPER + Q → Close Window"
echo " SUPER + E → File Manager"
echo " SUPER + 1-9 → Switch Workspace"
echo ""
echo -e "${CYAN}Config locations:${NC}"
echo " Hyprland: ~/.config/hypr/hyprland.conf"
echo " Waybar: ~/.config/waybar/"
echo " Rofi: ~/.config/rofi/"
echo " Kitty: ~/.config/kitty/kitty.conf"
echo ""
echo -e "${YELLOW}Backup of old configs: $BACKUP_DIR${NC}"
echo ""
echo -e "${GREEN}Enjoy your new rice! 🎨${NC}"

24
wallpapers/README.md Normal file
View File

@@ -0,0 +1,24 @@
# Wallpapers
Place your wallpapers here!
The default wallpaper will be downloaded during installation, but you can add your own.
## Setting Wallpaper
```bash
swww img ~/Pictures/wallpapers/your-wallpaper.jpg --transition-type grow
```
## Recommended Wallpaper Sources
- [Nordic Wallpapers](https://github.com/linuxdotexe/nordic-wallpapers)
- [Wallhaven](https://wallhaven.cc/)
- [Unsplash](https://unsplash.com/)
## Transition Types
- `grow` - Grows from center
- `wipe` - Wipes across screen
- `fade` - Fades between images
- `none` - Instant change