commit 510db0f1d46c74843d522f6ffd69391c7cc0393e Author: tulg Date: Sat Oct 18 17:35:04 2025 +0300 pain and suffering diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/config/hypr/hypridle.conf b/config/hypr/hypridle.conf new file mode 100644 index 0000000..baf4ae3 --- /dev/null +++ b/config/hypr/hypridle.conf @@ -0,0 +1,35 @@ +general { + lock_cmd = pidof hyprlock || hyprlock + # avoid starting multiple hyprlock instances. + before_sleep_cmd = loginctl lock-session # lock before suspend. + after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display. +} + +listener { + timeout = 150 # 2.5min. + on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor. + on-resume = brightnessctl -r # monitor backlight restore. +} + +# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight. +listener { + timeout = 150 # 2.5min. + on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight. + on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight. +} + +listener { + timeout = 300 # 5min + on-timeout = loginctl lock-session # lock screen when timeout has passed +} + +listener { + timeout = 330 # 5.5min + on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed + on-resume = hyprctl dispatch dpms on # screen on when activity is detected after timeout has fired. +} + +listener { + timeout = 1800 # 30min + on-timeout = systemctl suspend # suspend pc +} diff --git a/config/hypr/hyprland.conf b/config/hypr/hyprland.conf new file mode 100644 index 0000000..8264987 --- /dev/null +++ b/config/hypr/hyprland.conf @@ -0,0 +1,354 @@ +# ####################################################################################### +# AUTOGENERATED HYPR CONFIG. +# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT, +# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS. +# ####################################################################################### + +# +# Please note not all available settings / options are set here. +# For a full list, see the wiki +# + +# autogenerated = 1 # remove this line to remove the warning + +# See https://wiki.hyprland.org/Configuring/Monitors/ +monitor = eDP-1, 1920x1080@60.02000, 0x0, 1.00 +monitor = Virtual-1, 1920x1080,0x0, 1 +#monitor = DP-1, 1920x1080@60, 0x0, 1 +#monitor = HDMI-A-1, 1920x1080@60.02000, 0x0, 1 +#monitor +# See https://wiki.hyprland.org/Configuring/Keywords/ for more + +# Execute your favorite apps at launch +#exec-once = garuda-welcome + +# Add networkmanager applet to tray in waybar +exec-once = nm-applet --indicator + +# Set keyboard layout +#exec-once = .local/bin/garuda-locale.sh +exec-once = NetworkManager +# Set monitor values. For own values, please comment with # +#exec-once = .local/bin/mon.sh +exec-once = swww-daemon +# Source a file (multi-file configs) +# source = ~/.config/hypr/myColors.conf + +# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ +input { +kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + numlock_by_default= true + follow_mouse = 1 + +touchpad { + #natural_scroll = true + tap-to-click = true + disable_while_typing = true +} + + + sensitivity = -0.5 # -1.0 - 1.0, 0 means no modification. +} + +general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 5 + gaps_out = 10 + border_size = 2 + col.active_border = rgb(D3869B) + + + col.inactive_border = rgba(595959aa) + + layout = dwindle +} + +decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + rounding = 10 + blur { + enabled = true + size = 5 + passes = 1 + } + +# drop_shadow = true +# shadow_range = 4 +# shadow_render_power = 3 +# col.shadow = rgba(1a1a1aee) +} + +animations { + enabled = true + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 2, default, popin 80% + animation = border, 1, 2, default + animation = fade, 1, 2, default + animation = workspaces, 1, 2, default +} + +dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = true # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = true # you probably want this +} + +master { + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more + # new_is_master = true +} + +gestures { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + +} +misc { + disable_hyprland_logo = true +} +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/ +# executing for more + +#device:epic mouse V1 { +# sensitivity = -0.5 +#} + +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more +# Example windowrule v1 +#windowrule = float, ^(kitty)$ +#windowrule = float, ^(garuda-assistant)$ +#windowrule = float, ^(garuda-boot-options)$ +#windowrule = float, ^(garuda-boot-repair)$ +#windowrule = float, ^(garuda-gamer)$ +#windowrule = float, ^(garuda-network-assistant)$ +#windowrule = float, ^(garuda-settings-manager)$ +#windowrule = float, ^(garuda-welcome)$ + +# Example windowrule v2 +# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more +$mainMod = ALT + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod SHIFT, R, exec, hyprctl reload +#bind = $mainMod, 36, exec, footclient +bind = $mainMod, E, exec, kitty +bind = $mainMod, C, killactive, +bind = $mainMod, M, exec, nwgbar +bind = $mainMod, G, exec, /home/tulg/.config/looking-glass-client -F -f /dev/kvmfr0 -m 58 +bind = $mainMod SHIFT, O, togglefloating, +bind = $mainMod, D, exec, wofi --show drun --allow-images -W 300 -H 500 -l 4 +bind = $mainMod SHIFT, D, exec, nwg-drawer -mb 10 -mr 10 -ml 10 -mt 10 +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod SHIFT, P, togglesplit, # dwindle + +# Mainmod + Function keys +bind = $mainMod, F1, exec, firedragon +bind = $mainMod, F2, exec, thunderbird +bind = $mainMod, F3, exec, thunar +bind = $mainMod, F4, exec, geany +bind = $mainMod, F5, exec, github-desktop +bind = $mainMod, F6, exec, gparted +bind = $mainMod, F7, exec, inkscape +bind = $mainMod, F8, exec, blender +bind = $mainMod, F9, exec, meld +bind = $mainMod, F10, exec, joplin-desktop +bind = $mainMod, F11, exec, snapper-tools +bind = $mainMod, F12, exec, galculator + +# Move focus with mainMod + arrow keys +bind = $mainMod, left, movefocus, l +bind = $mainMod, H, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, L, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, K, movefocus, u +bind = $mainMod, down, movefocus, d +bind = $mainMod, J, movefocus, 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 to workspace with focused container with ALT + SHIFT + [0-9] +bind = ALT SHIFT, 1, movetoworkspace, 1 +bind = ALT SHIFT, 2, movetoworkspace, 2 +bind = ALT SHIFT, 3, movetoworkspace, 3 +bind = ALT SHIFT, 4, movetoworkspace, 4 +bind = ALT SHIFT, 5, movetoworkspace, 5 +bind = ALT SHIFT, 6, movetoworkspace, 6 +bind = ALT SHIFT, 7, movetoworkspace, 7 +bind = ALT SHIFT, 8, movetoworkspace, 8 +bind = ALT SHIFT, 9, movetoworkspace, 9 +bind = ALT SHIFT, 0, movetoworkspace, 10 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mainMod SHIFT, 1, movetoworkspacesilent, 1 +bind = $mainMod SHIFT, 2, movetoworkspacesilent, 2 +bind = $mainMod SHIFT, 3, movetoworkspacesilent, 3 +bind = $mainMod SHIFT, 4, movetoworkspacesilent, 4 +bind = $mainMod SHIFT, 5, movetoworkspacesilent, 5 +bind = $mainMod SHIFT, 6, movetoworkspacesilent, 6 +bind = $mainMod SHIFT, 7, movetoworkspacesilent, 7 +bind = $mainMod SHIFT, 8, movetoworkspacesilent, 8 +bind = $mainMod SHIFT, 9, movetoworkspacesilent, 9 +bind = $mainMod SHIFT, 0, movetoworkspacesilent, 10 + +# 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 + +# background +#exec-once = wpaperd + +# status bar +exec-once = waybar +layerrule = blur , waybar +layerrule = ignorezero , waybar + +# set volume (laptops only and may or may not work on PCs) +bind = ,122, exec, pactl set-sink-volume @DEFAULT_SINK@ -5% +bind = ,123, exec, pactl set-sink-volume @DEFAULT_SINK@ +5% +bind = ,121, exec, pactl set-sink-volume @DEFAULT_SINK@ 0% +# other bindings +#bind = $mainMod, E, exec, kitty +bind = $mainMod, F, fullscreen +bind = $mainMod, Q, exec, kitty lf +bind = ,232,exec,brightnessctl -c backlight set 5%- +bind = ,233,exec,brightnessctl -c backlight set +5% +#bind = $mainMod SHIFT,C, exec, killall -9 wpaperd && wpaperd + +# Screenshots: +# +# Change to swappy https://github.com/jtheoof/swappy +# Old functions only commented out to make it easier for the user to change if necessary. + +# Snip a selection and pipe to swappy +bind = ,Print, exec, grim -g "$(slurp)" - | swappy -f - +# Screenshot a window and pipe to swappy +bind = CTRL, Print, exec, .config/hypr/scripts/screenshot_window.sh +# Screenshot the current display and pipe to swappy +bind = SHIFT, Print, exec, .config/hypr/scripts/screenshot_display.sh + +# https://github.com/hyprwm/contrib/blob/main/grimblast/grimblast.1.scd +# Print: All outputs +# SHIFT+Print: Select area +# $mainMod+Print: Current window +# $mainMod+Shfit+Print: Current output +# +# bind = ,Print, exec, grimblast save screen && notify-send Screenshot captured +# bind = SHIFT, Print, exec, grimblast save area && notify-send Selected\ area captured +# bind = $mainMod, Print, exec, grimblast save active && notify-send Active\ window captured +# bind = $mainMod SHIFT, Print, exec, grimblast output active && notify-send Output captured + +# for resizing window +# will switch to a submap called resize +bind=$mainMod,R,submap,resize + +# will start a submap called "resize" +submap=resize + +# sets repeatable binds for resizing the active window +binde=,right,resizeactive,50 0 +binde=,L,resizeactive,50 0 +binde=,left,resizeactive,-50 0 +binde=,H,resizeactive,-50 0 +binde=,up,resizeactive,0 -50 +binde=,K,resizeactive,0 -50 +binde=,down,resizeactive,0 50 +binde=,J,resizeactive,0 50 + +# use reset to go back to the global submap +bind=,escape,submap,reset + +# will reset the submap, meaning end the current one and return to the global one +submap=reset + +# to move window +bind = $mainMod SHIFT,up, movewindow, u +bind = $mainMod SHIFT,K, movewindow, u +bind = $mainMod SHIFT,down, movewindow, d +bind = $mainMod SHIFT,J, movewindow, d +bind = $mainMod SHIFT,left, movewindow, l +bind = $mainMod SHIFT,H, movewindow, l +bind = $mainMod SHIFT,right, movewindow, r +bind = $mainMod SHIFT,L, movewindow, r + +# other blurings +blurls = wofi +blurls = thunar +blurls = gedit +blurls = gtk-layer-shell # for nwg-drawer +blurls = catfish +# window rules +#windowrule = opacity 0.85 override 0.85 override,^(thunar)$ +#windowrule = opacity 0.85 override 0.85 override,^(gedit)$ +#windowrule = opacity 0.85 override 0.85 override,^(catfish)$ +#windowrule = stayfocused, ^(wofi)$ + +# window rules with evaluation +windowrulev2 = opacity 0.85 0.85,floating:1 + +exec-once = mako +exec-once =/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 +exec-once = foot --server +# experimental(might work might won't) + +# pre executions (under development) +#exec-once=exec xrdb -load ~/.Xresources + +# Clipboard Manager +exec-once = wl-paste --type text --watch cliphist store #Stores only text data +exec-once = wl-paste --type image --watch cliphist store #Stores only image data +bind = $mainMod, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy + +# video play paues bindings +bind=,172,exec,playerctl play-pause +bind=,171,exec,playerctl next +bind=,173,exec,playerctl previous + +# Use gtk-settings +exec-once = apply-gsettings +exec-once = gsettings set org.gnome.desktop.interface cursor-theme BreezeX-RosePine-Linux +exec-once = gsettings set org.gnome.desktop.interface cursor-size 28 + +env = HYPRCURSOR_THEME,rose-pine-hyprcursor +env = HYPRCURSOR_SIZE,28 + + + +# Performance Tweaks (For less power consumption without sacrificing performance) +# See : https://wiki.hyprland.org/Configuring/Performance/ +misc:vfr = true + +# enable G-Hyprland +bind = $mainMod SHIFT, G, exec, footclient -e ~/.local/bin/bear/implement_gum.sh enable +# Install Garuda Hyprland +bind = $mainMod, I, exec, .local/bin/calamares.sh + +# Let the user customize this hyprstart script by overriding stuff in $hyprstart +exec-once = .config/hypr/exec-hyprland diff --git a/config/hypr/hyprlock.conf b/config/hypr/hyprlock.conf new file mode 100644 index 0000000..1cae14e --- /dev/null +++ b/config/hypr/hyprlock.conf @@ -0,0 +1,85 @@ +# background +background { + monitor = + #path = screenshot + path = /usr/share/wallpapers/garuda-wallpapers/Garuda-TilliDie-cube-105.png + color = $background + blur_passes = 2 + contrast = 1 + brightness = 0.5 + vibrancy = 0.2 + vibrancy_darkness = 0.2 +} + +# general +general { + no_fade_in = true + no_fade_out = true + hide_cursor = false + grace = 0 + disable_loading_bar = false +} +# animations +animations { + enabled = true +} + +# input field +input-field { + monitor = + size = 250, 60 + outline_thickness = 2 + dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8 + dots_spacing = 0.35 # Scale of dots' absolute size, 0.0 - 1.0 + dots_center = true + outer_color = rgba(236, 240, 15, 1) + inner_color = rgba(240 , 204, 14, 1) + font_color = $foreground + fade_on_empty = false + rounding = -1 + check_color = rgb(204, 136, 34) + placeholder_text = Input Password... + hide_input = false + position = 0, -200 + halign = center + valign = center +} + +# date +label { + monitor = + text = cmd[update:1000] echo "$(date +"%A, %B %d")" + color = rgba(242, 243, 244, 0.75) + font_size = 22 + font_family = JetBrains Mono + position = 0, 300 + halign = center + valign = center +} + +# time +label { + monitor = + text = cmd[update:1000] echo "$(date +"%-I:%M")" + color = rgba(242, 243, 244, 0.75) + font_size = 95 + font_family = JetBrains Mono Extrabold + position = 0, 200 + halign = center + valign = center +} + + +# things that can be played by user + +Profile Picture +image { + monitor = + path = /usr/share/logos/Hyprland_logo.png + size = 200 + border_size = 2 + border_color = $foreground + position = 0, 0 + halign = center + valign = center +} diff --git a/config/hypr/hyprstart b/config/hypr/hyprstart new file mode 100755 index 0000000..63821b9 --- /dev/null +++ b/config/hypr/hyprstart @@ -0,0 +1,19 @@ +#!/bin/sh +cd ~ +# user preferred settings + +#cursor size +export XCURSOR_SIZE=24 + +# text editor +export MICRO_TRUECOLOR=1 +export EDITOR=/usr/bin/micro + +#browser +export BROWSER=firefox +#terminal +export TERM=kitty +#mail +export MAIL=thunderbird + +# check /usr/local/bin/hyprstart diff --git a/config/hypr/monitors.conf b/config/hypr/monitors.conf new file mode 100644 index 0000000..e69de29 diff --git a/config/hypr/scripts/idle_inhibitor.sh b/config/hypr/scripts/idle_inhibitor.sh new file mode 100755 index 0000000..a7a7ed3 --- /dev/null +++ b/config/hypr/scripts/idle_inhibitor.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +a=$(pidof hypridle) +if [[ $a ]] +then + killall -9 hypridle + notify-send "idle inhibitor activated" +else + notify-send "idle inhibitor deactivated" + hypridle &> /dev/null +fi diff --git a/config/hypr/scripts/lock.sh b/config/hypr/scripts/lock.sh new file mode 100644 index 0000000..1c759f3 --- /dev/null +++ b/config/hypr/scripts/lock.sh @@ -0,0 +1,29 @@ +#!/bin/sh +swaylock \ + --screenshots \ + --clock \ + --hide-keyboard-layout \ + --indicator \ + --indicator-radius 100 \ + --indicator-thickness 7 \ + --effect-blur 7x5 \ + --effect-vignette 0.5:0.5 \ + --ring-color cba6f7 \ + --ring-ver-color 89b4fa \ + --ring-wrong-color f38ba8 \ + --ring-clear-color a6e3a1 \ + --key-hl-color 1e1e2e \ + --bs-hl-color eba0ac \ + --text-color 11111b \ + --text-caps-lock-color 11111b \ + --line-color 00000000 \ + --line-ver-color 00000000 \ + --line-wrong-color 00000000 \ + --line-clear-color 00000000 \ + --separator-color 00000000 \ + --inside-color cba6f7 \ + --inside-ver-color 89b4fa\ + --inside-wrong-color f38ba8 \ + --inside-clear-color a6e3a1 \ + --grace 2 \ + --fade-in 0.2 diff --git a/config/hypr/scripts/screenshot_display.sh b/config/hypr/scripts/screenshot_display.sh new file mode 100755 index 0000000..f300065 --- /dev/null +++ b/config/hypr/scripts/screenshot_display.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# .config/hypr/scripts/screenshot_display.sh +# Screenshot the current display Shift+Print + +output_id=$(hyprctl -j monitors | jq -r '.[] | select(.focused).name') +grim -o $output_id - | swappy -f - diff --git a/config/hypr/scripts/screenshot_window.sh b/config/hypr/scripts/screenshot_window.sh new file mode 100755 index 0000000..805abb7 --- /dev/null +++ b/config/hypr/scripts/screenshot_window.sh @@ -0,0 +1,5 @@ +#!/bin/bash +# .config/hypr/scripts/screenshot_window.sh +# Screenshot a window Ctrl+Print + +grim -g "$(hyprctl -j activewindow | jq -r '.at + .size | "\(.[0]),\(.[1]) \(.[2])x\(.[3])"' | slurp)" - | swappy -f - diff --git a/config/hypr/workspaces.conf b/config/hypr/workspaces.conf new file mode 100644 index 0000000..e69de29 diff --git a/config/kitty/current-theme.conf b/config/kitty/current-theme.conf new file mode 100644 index 0000000..b27902e --- /dev/null +++ b/config/kitty/current-theme.conf @@ -0,0 +1,53 @@ +## name: Rosé Pine Moon +## author: mvllow +## license: MIT +## upstream: https://github.com/rose-pine/kitty/blob/main/dist/rose-pine-moon.conf +## blurb: All natural pine, faux fur and a bit of soho vibes for the classy minimalist + +foreground #e0def4 +background #232136 +selection_foreground #e0def4 +selection_background #44415a + +cursor #56526e +cursor_text_color #e0def4 + +url_color #c4a7e7 + +active_tab_foreground #e0def4 +active_tab_background #393552 +inactive_tab_foreground #6e6a86 +inactive_tab_background #232136 + +# black +color0 #393552 +color8 #6e6a86 + +# red +color1 #eb6f92 +color9 #eb6f92 + +# green +color2 #3e8fb0 +color10 #3e8fb0 + +# yellow +color3 #f6c177 +color11 #f6c177 + +# blue +color4 #9ccfd8 +color12 #9ccfd8 + +# magenta +color5 #c4a7e7 +color13 #c4a7e7 + +# cyan +color6 #ea9a97 +color14 #ea9a97 + +# white +color7 #e0def4 +color15 #e0def4 + diff --git a/config/kitty/dark-theme.auto.conf b/config/kitty/dark-theme.auto.conf new file mode 100644 index 0000000..b27902e --- /dev/null +++ b/config/kitty/dark-theme.auto.conf @@ -0,0 +1,53 @@ +## name: Rosé Pine Moon +## author: mvllow +## license: MIT +## upstream: https://github.com/rose-pine/kitty/blob/main/dist/rose-pine-moon.conf +## blurb: All natural pine, faux fur and a bit of soho vibes for the classy minimalist + +foreground #e0def4 +background #232136 +selection_foreground #e0def4 +selection_background #44415a + +cursor #56526e +cursor_text_color #e0def4 + +url_color #c4a7e7 + +active_tab_foreground #e0def4 +active_tab_background #393552 +inactive_tab_foreground #6e6a86 +inactive_tab_background #232136 + +# black +color0 #393552 +color8 #6e6a86 + +# red +color1 #eb6f92 +color9 #eb6f92 + +# green +color2 #3e8fb0 +color10 #3e8fb0 + +# yellow +color3 #f6c177 +color11 #f6c177 + +# blue +color4 #9ccfd8 +color12 #9ccfd8 + +# magenta +color5 #c4a7e7 +color13 #c4a7e7 + +# cyan +color6 #ea9a97 +color14 #ea9a97 + +# white +color7 #e0def4 +color15 #e0def4 + diff --git a/config/kitty/kitty.conf b/config/kitty/kitty.conf new file mode 100644 index 0000000..173d3a4 --- /dev/null +++ b/config/kitty/kitty.conf @@ -0,0 +1,8 @@ +background_opacity 0.3 +enable_audio_bell no + + +# BEGIN_KITTY_THEME +# Rosé Pine Moon +#include current-theme.conf +# END_KITTY_THEME diff --git a/config/kitty/kitty.conf.bak b/config/kitty/kitty.conf.bak new file mode 100644 index 0000000..8c83af4 --- /dev/null +++ b/config/kitty/kitty.conf.bak @@ -0,0 +1,2 @@ +background_opacity 0.3 +enable_audio_bell no diff --git a/config/lf/lf.tar.gz b/config/lf/lf.tar.gz new file mode 100644 index 0000000..07371cb Binary files /dev/null and b/config/lf/lf.tar.gz differ diff --git a/config/lf/lf_kitty_clean b/config/lf/lf_kitty_clean new file mode 100755 index 0000000..16a2e66 --- /dev/null +++ b/config/lf/lf_kitty_clean @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +kitty +kitten icat --clear --stdin no --silent --transfer-mode file < /dev/null > /dev/tty diff --git a/config/lf/lf_kitty_preview b/config/lf/lf_kitty_preview new file mode 100755 index 0000000..1b7e805 --- /dev/null +++ b/config/lf/lf_kitty_preview @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +file=$1 +w=$2 +h=$3 +x=$4 +y=$5 + +if [[ "$( file -Lb --mime-type "$file")" =~ ^image ]]; then + kitty +kitten icat --silent --stdin no --transfer-mode file --place "${w}x${h}@${x}x${y}" "$file" < /dev/null > /dev/tty + exit 1 +fi + +pistol "$file" diff --git a/config/lf/lfrc b/config/lf/lfrc new file mode 100644 index 0000000..4325323 --- /dev/null +++ b/config/lf/lfrc @@ -0,0 +1,147 @@ +# interpreter for shell commands +set shell zsh + +# set '-eu' options for shell commands +# These options are used to have safer shell commands. Option '-e' is used to +# exit on error and option '-u' is used to give error for unset variables. +# Option '-f' disables pathname expansion which can be useful when $f, $fs, and +# $fx variables contain names with '*' or '?' characters. However, this option +# is used selectively within individual commands as it can be limiting at +# times. +set shellopts '-eu' + +# set internal field separator (IFS) to "\n" for shell commands +# This is useful to automatically split file names in $fs and $fx properly +# since default file separator used in these variables (i.e. 'filesep' option) +# is newline. You need to consider the values of these options and create your +# commands accordingly. +set ifs "\n" + +# leave some space at the top and the bottom of the screen +set scrolloff 10 + +# Use the `dim` attribute instead of underline for the cursor in the preview pane +set cursorpreviewfmt "\033[7;2m" + +# use enter for shell commands +map shell + +# show the result of execution of previous commands +map ` !true + +# execute current file (must be executable) +map x $$f +map X !$f +map D set hidden! +map d set hidden! +# dedicated keys for file opener actions +map o &mimeopen $f +map O $mimeopen --ask $f +cmd nano ${{ + nano $f +}} +cmd open-with-cli $$@ nano +#cmd open-with-cli $$@ $fx +#map e push :open-with-cli ## input application +map e nano +map w wp +map bw wpm +map br cd /run/media/tulg +map bp cd /run/media/tulg/backup1/pogland/wallpapers/ +map c cd ~/.config/ +map f wppp +cmd wp &{{ + swww img $f # To make sure our escape sequence still reaches stdout we pipe it to /dev/tty +}} +cmd wppp &{{ + swayimg $f # To make sure our escape sequence still reaches stdout we pipe it to /dev/tty +}} +cmd wpm &{{ + mv $f /run/media/tulg/backup1/pogland/wallpapers # To make sure our escape sequence still reaches stdout we pipe it to /dev/tty + }} + +cmd drives &{{ + cd /run/media/tulg # To make sure our escape sequence still reaches stdout we pipe it to /dev/tty + }} +cmd on-cd &{{ + # '&' commands run silently in background (which is what we want here), + # but are not connected to stdout. + + printf "\033]0; $(pwd | sed "s|$HOME|~|")\007" > /dev/tty # To make sure our escape sequence still reaches stdout we pipe it to /dev/tty +}} + +# also run at startup +on-cd + +# define a custom 'open' command +# This command is called when current file is not a directory. You may want to +# use either file extensions and/or mime types here. Below uses an editor for +# text files and a file opener for the rest. +cmd open &{{ + case $(file --mime-type -Lb $f) in + text/*) lf -remote "send $id nano \$fx";; + *) for f in $fx; do $OPENER $f > /dev/null 2> /dev/null & done;; + esac +}} + +# mkdir command. See wiki if you want it to select created dir +map a :push %mkdir + +# define a custom 'rename' command without prompt for overwrite +# cmd rename %[ -e $1 ] && printf "file exists" || mv $f $1 +# map r push :rename + +# make sure trash folder exists +# %mkdir -p ~/.trash + +# move current file or selected files to trash folder +# (also see 'man mv' for backup/overwrite options) +cmd trash %set -f; mv $fx ~/.trash + +# define a custom 'delete' command +# cmd delete ${{ +# set -f +# printf "$fx\n" +# printf "delete?[y/n]" +# read ans +# [ "$ans" = "y" ] && rm -rf $fx +# }} + +# use '' key for either 'trash' or 'delete' command +# map trash +# map delete + +# extract the current file with the right command +# (xkcd link: https://xkcd.com/1168/) +cmd extract ${{ + set -f + case $f in + *.tar.bz|*.tar.bz2|*.tbz|*.tbz2) tar xjvf $f;; + *.tar.gz|*.tgz) tar xzvf $f;; + *.tar.xz|*.txz) tar xJvf $f;; + *.zip) unzip $f;; + *.rar) unrar x $f;; + *.7z) 7z x $f;; + esac +}} + +# compress current file or selected files with tar and gunzip +cmd tar ${{ + set -f + mkdir $1 + cp -r $fx $1 + tar czf $1.tar.gz $1 + rm -rf $1 +}} + +# compress current file or selected files with zip +cmd zip ${{ + set -f + mkdir $1 + cp -r $fx $1 + zip -r $1.zip $1 + rm -rf $1 +}} +set preview +set previewer ~/.config/lf/lf_kitty_preview +set cleaner ~/.config/lf/lf_kitty_clean diff --git a/config/lorde_wallpaper_upscaled.jpg b/config/lorde_wallpaper_upscaled.jpg new file mode 100755 index 0000000..8954ffd Binary files /dev/null and b/config/lorde_wallpaper_upscaled.jpg differ diff --git a/config/mako/config b/config/mako/config new file mode 100644 index 0000000..7c6e438 --- /dev/null +++ b/config/mako/config @@ -0,0 +1,16 @@ +anchor=top-right +font=fira sans 10 +background-color=#232136 +text-color=#D3869B +width=350 +margin=0,20,20 +padding=10 +border-size=1 +border-color=#232136 +border-radius=5 +default-timeout=10000 +group-by=summary +icons=1 + +[grouped] +format=%s\n%b diff --git a/config/waybar/config b/config/waybar/config new file mode 100644 index 0000000..eb63133 --- /dev/null +++ b/config/waybar/config @@ -0,0 +1,176 @@ +{ + "layer": "top", // Waybar at top layer + "position": "top", // Waybar position (top|bottom|left|right) + "height": 40, + "width":1920, + "margin": "0 0 0 0", + "spacing":0, + + // Choose the order of the modules + // Add according to your wishes: "custom/weather" + + "modules-left": ["hyprland/workspaces", "hyprland/window"], + "modules-center": ["custom/network_traffic"], + "modules-right": ["backlight","temperature", "cpu", "memory", "battery", "pulseaudio", "network", "tray", "clock"], + + // Modules configuration + + "hyprland/workspaces": { + "format": "{icon}", + "on-click": "activate", + "all-outputs": true, + "sort-by-number": true, + "format-icons": { + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9", + "10": "10", + "focused": "", + "default": "" + }, + "on-scroll-up": "hyprctl dispatch workspace e+1", + "on-scroll-down": "hyprctl dispatch workspace e-1", + }, + "hyprland/window": { + "format": "{}", + "icon":false, + "icon-size" : 20 + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "", + "deactivated": "" + } + }, + "tray": { + "icon-size": 20, + "spacing": 5 + }, + "clock": { + "tooltip-format": "{:%A, %d.%B %Y }\n{calendar}", + "format": " {:%a %d %b  %I:%M %p}", //12 hour format + //"format": " {:%a %d %b  %H:%M}", //24 hour format + "format-alt": " {:%d/%m/%Y  %H:%M:%S}", + //"max-length": 200 + "interval": 1, + "on-click": "~/.config/waybar/scripts/OCV", + }, + "cpu": { + "format": "🖳{usage}%", + "on-click": "foot -e htop" + }, + "memory": { + "format": "🖴 {: >3}%", + "on-click": "foot -e htop" + }, + "temperature": { + "thermal-zone": 7, // Check with: # cat /sys/class/hwmon/hwmon*/temp1_input + "hwmon-path": "/sys/class/hwmon/hwmon7/temp1_input", + "critical-threshold": 80, + "format-critical": "{temperatureC}°C ", + "format": "{temperatureC}°C " + }, + "backlight": { + // "device": "acpi_video1", + "format": "{icon} {percent: >3}%", + "format-icons": ["", ""], + "on-scroll-down": "brightnessctl -c backlight set 1%-", + "on-scroll-up": "brightnessctl -c backlight set +1%", + "on-click": "~/.config/waybar/scripts/backlight-hint.sh" + }, + "battery": { + "states": { + // "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "{icon} {capacity: >3}%", + "format-icons": ["", "", "", "", ""] + // "format-good": "", // An empty format will hide the module + // "format-full": "", + //"format-icons": ["", "", "", "", "", "", "", "", "", ""] + //"format": "‫{icon}‬ {capacity}%", + //"format-icons": ["ﱉ","ﱊ","ﱌ","ﱍ","ﱋ"] + }, + "network": { + //"interface": "wlp0s20f3", // (Optional) To force the use of this interface "format-wifi": " {essid}", + "format": "⚠Disabled", + "format-wifi": "", + "format-ethernet": "", + "format-linked": "{ifname} (No IP)", + "format-disconnected": "⚠Disabled", + "format-alt": "{ifname}: {ipaddr}/{cidr}", + "family": "ipv4", + "tooltip-format-wifi": " {ifname} @ {essid}\nIP: {ipaddr}\nStrength: {signalStrength}%\nFreq: {frequency}MHz\nUp: {bandwidthUpBits} Down: {bandwidthDownBits}", + "tooltip-format-ethernet": " {ifname}\nIP: {ipaddr}\n up: {bandwidthUpBits} down: {bandwidthDownBits}", + //"min-length": 2, + //"max-length": 2, + "on-click": "nm-connection-editor" + }, + "custom/updates": { + "format": "{} {icon}", + "return-type": "json", + "format-icons": { + "has-updates": "󱍷", + "updated": "󰂪", + "interval": 7200, + }, + "exec-if": "which waybar-module-pacman-updates", + "exec": "waybar-module-pacman-updates", + "on-click": "foot -e update" + }, + "custom/power": { + "format":"⏻", + "on-click": "nwgbar", + "tooltip": false, + }, + "custom/keyboard-layout": { + "format": " Cheat", // Icon: keyboard + "on-click": "~/.config/waybar/scripts/keyhint.sh", + }, + "custom/launcher": { + "format":" ", + "on-click": "exec nwg-drawer -c 7 -is 70 -spacing 23", + "tooltip": false, + }, + "custom/network_traffic": { + "exec": "~/.config/waybar/scripts/network_traffic.sh", + "return-type": "json", + "format-ethernet": "{icon} {ifname} ⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}", // optional +}, + "pulseaudio": { + "scroll-step": 3, // %, can be a float + "format": "{icon} {volume}% {format_source}", + "format-bluetooth": "{volume}% {icon} {format_source}", + "format-bluetooth-muted": " {icon} {format_source}", + "format-muted": " {format_source}", + //"format-source": "{volume}% ", + //"format-source-muted": "", + "format-source": "", + "format-source-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + }, + "on-click": "pavucontrol", + "on-click-right": "pactl set-source-mute @DEFAULT_SOURCE@ toggle" + }, + // https://github.com/chubin/wttr.in + "custom/weather": { + "exec": "curl 'https://wttr.in/Essen?format=2'", + "interval": 900, + "on-click": "yad --html --uri='https://wttr.in/Essen' --center --fixed --width=1000 --height=680 --timeout=60 --timeout-indicator=right" + }, + } diff --git a/config/waybar/launcher.png b/config/waybar/launcher.png new file mode 100644 index 0000000..a375295 Binary files /dev/null and b/config/waybar/launcher.png differ diff --git a/config/waybar/scripts/OCV b/config/waybar/scripts/OCV new file mode 100755 index 0000000..450e34e --- /dev/null +++ b/config/waybar/scripts/OCV @@ -0,0 +1,9 @@ +#!/bin/bash + +yad --width=400 --height=200 \ +--center \ +--fixed \ +--title="Calendar" \ +--no-buttons \ +yad \ + --calendar diff --git a/config/waybar/scripts/backlight-hint.sh b/config/waybar/scripts/backlight-hint.sh new file mode 100755 index 0000000..4f09ffa --- /dev/null +++ b/config/waybar/scripts/backlight-hint.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +yad --width=100 --height=100 \ +--center \ +--fixed \ +--title="Backlight" \ +--no-buttons \ +--timeout=10 \ +--timeout-indicator=bottom \ +yad \ +--text="\nScroll your mouse wheel to change \n the backlight of the monitor." \ + diff --git a/config/waybar/scripts/cleanup_after_start.sh b/config/waybar/scripts/cleanup_after_start.sh new file mode 100755 index 0000000..7d19382 --- /dev/null +++ b/config/waybar/scripts/cleanup_after_start.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +sleep 20 +hyprctl keyword windowrule "workspace unset,nmtui-colors" +hyprctl keyword windowrule "workspace unset,calamares" +hyprctl keyword windowrule "workspace unset,keyhint.sh" +hyprctl keyword windowrule "workspace unset,firedragon" diff --git a/config/waybar/scripts/keyhint.sh b/config/waybar/scripts/keyhint.sh new file mode 100755 index 0000000..cf4a372 --- /dev/null +++ b/config/waybar/scripts/keyhint.sh @@ -0,0 +1,37 @@ +#!/bin/sh +# "Change keyboard layout in" "~/.config/hypr/hyprland.conf" " " \ + +yad --width=530 --height=640 \ +--center \ +--fixed \ +--title="Garuda Hyprland Keybindings" \ +--no-buttons \ +--list \ +--column=Key: \ +--column=Description: \ +--column=Command: \ +--timeout=60 \ +--timeout-indicator=right \ +"ESC" "close this app" "" "=" "modkey" "(set mod Mod4)" \ +"+Shift+g" "G-hyprland" "implement G-Hyprland" \ +"+enter/+t" "Terminal" "(foot)" \ +"" "Application Menu" "(wofi)" \ +"+Shift+d" "Full Launcher" "(nwggrid)" \ +"+o" "" "Open Broswer" \ +"+n" "" "Open Files" \ +"+q" "close focused app" "(kill)" \ +"+v" "clipboard manager" "(cliphist)" \ +"+r" "Resize windows" "(resize)" \ +"Print" "screenshot" "(grimblast)" \ +"Shift+Print" "screenshot region" "(grimblast)" \ +"+Print" "screenshot window" "(grimblast)" \ +"+Shift+e" "power-menu" "(wofi)" \ +"+Shift+c" "Change wallpaper" "(wpaperd)" \ +"+f" "Fullscreen" "Toggles to full screen" \ +"+Shift+f" "fullscreenstate" "Behave full screen without full screen" \ +"+m" "maximize" "Hides all the windows other then focused window" \ +"+Shift+Spacebar" "Float" "Toggle windows to float" \ +"+p" "Dwindle effect" "pseudo" \ +"+Shift+p" "Dwindle effect" "toggle split" \ +"+i" "Calamares" "Install Garuda Hyprland" \ +"" "" " Window closed in 60 sec."\ diff --git a/config/waybar/scripts/network_traffic.sh b/config/waybar/scripts/network_traffic.sh new file mode 100755 index 0000000..5bc2def --- /dev/null +++ b/config/waybar/scripts/network_traffic.sh @@ -0,0 +1,109 @@ +#!/bin/bash + +# network_traffic.sh [-tPOLLING_INTERVAL] [NETWORK_INTERFACE...] + +getopts t: __ && shift +isecs=${OPTARG:-1} +ifaces=($@) +: ${rate_max:=1000000} # maximum transfer rate for {percent}, can be overridden setting the env var + +# `snore` adapted from https://blog.dhampir.no/content/sleeping-without-a-subprocess-in-bash-and-how-to-sleep-forever +# without MacOS workaround, TODO: with _snore_fd initialized separatedly, also i dont touch IFS so dont bother with it +snore() { + local IFS + [[ -n "${_snore_fd:-}" ]] || { exec {_snore_fd}<> <(:); } 2>/dev/null + read ${1:+-t "$1"} -u $_snore_fd || : +} + +human_readable() { + local hrunits=( B K M G T P ) + local ndigits=${#1} + local idxunit=$(( (2 + ndigits) / 3 - 1)) + local lentrim=$(( ndigits - (idxunit * 3 ) )) + echo ${1::$lentrim}${hrunits[$idxunit]} +} + +exit_err() { + printf '{"text": "⚠ %s", "tooltip": "%s", "class": "error"}\n' "$@" + exit +} + +if test ${#ifaces[@]} -gt 0; then +# sanity check the interface names + for iface in ${ifaces[@]}; do + test -h "/sys/class/net/${iface}" || exit_err "${iface}" "${iface} is not an existing network interface name" + done +else +# default to all interfaces except `lo` + ifaces=(/sys/class/net/*) + ifaces=(${ifaces[@]##*/}) + ifaces=(${ifaces[@]^(eth|wlan|enp|wlp|eno)}) +fi + +# sanity check polling interval +if test ${isecs} -lt 1; then + exit_err "${isecs}" "${isecs} is not a valid polling interval" +fi +# NOTE: `snore` would take a decimal interval but bash arithmetic does not +#if test $(echo "${isecs} >= 0.2" |bc) -eq 0; then +# exit_err "${isecs}" "${isecs} is not a valid polling interval" +#fi + +# NOTE: `/proc/net/dev` format is: +# interface: +# RX bytes packets errs drop fifo frame compressed multicast +# TX bytes packets errs drop fifo colls carrier compressed + +# NOTE: array items are: +# 0=rx_bytes 1=rx_packets 2=rx_errs 3=rx_drop +# 4=tx_bytes 5=tx_packets 6=tx_errs 7=tx_drop +for iface in ${ifaces[@]} aggregate; do + declare -a traffic_prev_${iface} traffic_curr_${iface} traffic_delt_${iface} + declare -n traffic_prev=traffic_prev_${iface} + declare -n traffic_curr=traffic_curr_${iface} + declare -n traffic_delt=traffic_delt_${iface} + traffic_prev=( 0 0 0 0 0 0 0 0 ) + traffic_curr=( 0 0 0 0 0 0 0 0 ) + traffic_delt=( 0 0 0 0 0 0 0 0 ) +done + +# TODO: rearrange the loop, do not show bogus on first iteration +while snore ${isecs} ;do + tooltip="" + traffic_delt_aggregate=( 0 0 0 0 0 0 0 0 ) + + readarray -s2 proc_net_dev :is( + .toolbarbutton-icon, + .toolbarbutton-text, + .toolbarbutton-badge-stack + ) { + fill: var(--base); + } + } +} diff --git a/config/zen-rose-pine/zen-themes.css b/config/zen-rose-pine/zen-themes.css new file mode 100644 index 0000000..8513d9a --- /dev/null +++ b/config/zen-rose-pine/zen-themes.css @@ -0,0 +1,8 @@ +/* Zen Mods - Generated by ZenMods. +* FILE GENERATED AT: Saturday, October 11, 2025 at 7:22:29 PM GMT+03:00 +* DO NOT EDIT THIS FILE DIRECTLY! +* Your changes will be overwritten. +* Instead, go to the preferences and edit the mods there. +*/ + +/* End of Zen Mods */ diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..a4aefaa --- /dev/null +++ b/configuration.nix @@ -0,0 +1,139 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). + +{ config, pkgs, ... }: + +{ + imports = + [ # Include the results of the hardware scan. + ./hardware-configuration.nix + ]; + + # Bootloader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + networking = { + hostName = "virgil"; + nameservers = ["127.0.0.1" "::1"]; + }; + + services.dnscrypt-proxy2 = { + enable = true; + settings = { + listen_addresses = ["127.0.0.1:53" "[::1]:53"]; + }; + }; + + services.zapret = { + enable = true; + params = [ + "--dpi-desync=fake" + "--dpi-desync-ttl=8" + ]; + }; + + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + + # Enable networking + networking.networkmanager.enable = true; + + # Set your time zone. + time.timeZone = "Europe/Istanbul"; + + # Select internationalisation properties. + services.getty.autologinUser = "tulg"; + programs.hyprland = { + enable = true; + xwayland.enable = true; + }; + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.tulg = { + isNormalUser = true; + description = "Tulga"; + extraGroups = [ "networkmanager" "wheel" ]; + packages = with pkgs; []; + }; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + # wget + git + rose-pine-gtk-theme + ]; + + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + # programs.gnupg.agent = { + # enable = true; + # enableSSHSupport = true; + # }; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + services.openssh = { + enable = true; + settings = { + PasswordAuthentication = true; + PermitRootLogin = "yes"; + }; + }; + fonts = { + packages = with pkgs; [ + noto-fonts + noto-fonts-cjk-sans + noto-fonts-emoji + nerd-fonts.symbols-only + liberation_ttf + font-awesome + fira + fira-sans + fira-code + fira-code-symbols + ]; + + enableDefaultPackages = true; + fontconfig = { + enable = true; + defaultFonts = { + sansSerif = [ "Fira Sans Regular" ]; + serif = [ "Fira Sans Regular" ]; + monospace = [ "Fira Mono Regular" ]; + }; + }; + }; + + # Open ports in the firewall. + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + # networking.firewall.enable = false; + users.users."root".openssh.authorizedKeys.keys = [ + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDIefprdYz4gFgBqGlrkycWcTYxFttQHRjDQmREtQTiGyqK1gQiB4z4Cbiayt7Emq224sbaobQPlNSyhlBCSo/Wf0bmZMz8NwNdwhFSkDnyD6LPaHg8fv9FXnWW0wBMl4oSD2wfGbMQBrecjgHXfJ64UiHyyhDllDDtWGgoY75wwfWHzX/NiGaEi0LHCQ8dsgp7H+BhssTkJPZbv6BJcA34yfb6dISjvW2S/QGKMwgYr9ArfGLUTWPbj+EbL7Bf9VsTFe9nP+FnYqEu4+oBIbY2heXWA+FCi0zxmMY4oYJxT5cJi1nffVOxboKLm4kIT93gv1WdcDiQDVdy5sJ1q0gJyiRt1HfJW4l8jn36VJ0FvdGmRliOTzSfeER0gbIsOcxeArHRV3ff/CoSocnSs0To5vFKgjlGwhdE8sJsqILgZnIoKwVvOXuDOz/RhbdBPpVsG7upk7bLJtLv9P5h0h/gUIWA1iktaYBSDL0UofjSrfNhZH6M0P+soIuooanSlVGivTlASw1pd+gjvebbc9ksvGZVqPQT0XegIvZkwfu8moERZUqv/xhNcyWTEGfFKoeHt5ub8Ac0LOe9Ak6N+p8xDjTdkmUgte5J/CNL1JL3JA/iqocAo+VvmIbPatbrOwUNcROOS3WeFg8MfNrbDyYCVNbZWAyM6wwfLB2fIUB2jw== tulg@highcommand" # content of authorized_keys file + ]; + users.users."tulg".openssh.authorizedKeys.keys = [ + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDIefprdYz4gFgBqGlrkycWcTYxFttQHRjDQmREtQTiGyqK1gQiB4z4Cbiayt7Emq224sbaobQPlNSyhlBCSo/Wf0bmZMz8NwNdwhFSkDnyD6LPaHg8fv9FXnWW0wBMl4oSD2wfGbMQBrecjgHXfJ64UiHyyhDllDDtWGgoY75wwfWHzX/NiGaEi0LHCQ8dsgp7H+BhssTkJPZbv6BJcA34yfb6dISjvW2S/QGKMwgYr9ArfGLUTWPbj+EbL7Bf9VsTFe9nP+FnYqEu4+oBIbY2heXWA+FCi0zxmMY4oYJxT5cJi1nffVOxboKLm4kIT93gv1WdcDiQDVdy5sJ1q0gJyiRt1HfJW4l8jn36VJ0FvdGmRliOTzSfeER0gbIsOcxeArHRV3ff/CoSocnSs0To5vFKgjlGwhdE8sJsqILgZnIoKwVvOXuDOz/RhbdBPpVsG7upk7bLJtLv9P5h0h/gUIWA1iktaYBSDL0UofjSrfNhZH6M0P+soIuooanSlVGivTlASw1pd+gjvebbc9ksvGZVqPQT0XegIvZkwfu8moERZUqv/xhNcyWTEGfFKoeHt5ub8Ac0LOe9Ak6N+p8xDjTdkmUgte5J/CNL1JL3JA/iqocAo+VvmIbPatbrOwUNcROOS3WeFg8MfNrbDyYCVNbZWAyM6wwfLB2fIUB2jw== tulg@highcommand" # content of authorized_keys file + ]; + # This value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It‘s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). + nix.settings.experimental-features = [ "nix-command" "flakes"]; + services.displayManager.ly.enable = true; + system.stateVersion = "25.05"; # Did you read the comment? + +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..d965c60 --- /dev/null +++ b/flake.lock @@ -0,0 +1,193 @@ +{ + "nodes": { + "base16-schemes": { + "flake": false, + "locked": { + "lastModified": 1696158499, + "narHash": "sha256-5yIHgDTPjoX/3oDEfLSQ0eJZdFL1SaCfb9d6M0RmOTM=", + "owner": "tinted-theming", + "repo": "base16-schemes", + "rev": "a9112eaae86d9dd8ee6bb9445b664fba2f94037a", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-schemes", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1760641408, + "narHash": "sha256-Y086n2U0kN9HjOo+UScwQDS27gKMiIlT6vDehvlmdAg=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "847669dabf374d32a072bdab3f08cae7296ac011", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "zen-browser", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1752603129, + "narHash": "sha256-S+wmHhwNQ5Ru689L2Gu8n1OD6s9eU9n9mD827JNR+kw=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "e8c19a3cec2814c754f031ab3ae7316b64da085b", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "nix-colors": { + "inputs": { + "base16-schemes": "base16-schemes", + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1707825078, + "narHash": "sha256-hTfge2J2W+42SZ7VHXkf4kjU+qzFqPeC9k66jAUBMHk=", + "owner": "misterio77", + "repo": "nix-colors", + "rev": "b01f024090d2c4fc3152cd0cf12027a7b8453ba1", + "type": "github" + }, + "original": { + "owner": "misterio77", + "repo": "nix-colors", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1760524057, + "narHash": "sha256-EVAqOteLBFmd7pKkb0+FIUyzTF61VKi7YmvP1tw4nEw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "544961dfcce86422ba200ed9a0b00dd4b1486ec5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1697935651, + "narHash": "sha256-qOfWjQ2JQSQL15KLh6D7xQhx0qgZlYZTYlcEiRuAMMw=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "e1e11fdbb01113d85c7f41cada9d2847660e3902", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1760038930, + "narHash": "sha256-Oncbh0UmHjSlxO7ErQDM3KM0A5/Znfofj2BSzlHLeVw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0b4defa2584313f3b781240b29d61f6f9f7e0df3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "nix-colors": "nix-colors", + "nixpkgs": "nixpkgs", + "spicetify-nix": "spicetify-nix", + "zen-browser": "zen-browser" + } + }, + "spicetify-nix": { + "inputs": { + "nixpkgs": "nixpkgs_2", + "systems": "systems" + }, + "locked": { + "lastModified": 1760243311, + "narHash": "sha256-LNrok211+WWlMGWqpGPpnGcnWhyo5SfvMv62uDiLzoI=", + "owner": "Gerg-L", + "repo": "spicetify-nix", + "rev": "93f1d45e48191a0b24c5c15e5cf369566ff75be9", + "type": "github" + }, + "original": { + "owner": "Gerg-L", + "repo": "spicetify-nix", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "zen-browser": { + "inputs": { + "home-manager": "home-manager_2", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1760646099, + "narHash": "sha256-hFoiRU9tM0ilgZS4gSO00nbnsuTQoYGQBb8+5Vma3Og=", + "owner": "0xc000022070", + "repo": "zen-browser-flake", + "rev": "f3fd50667a6ab075b1e7c406ff30c54684cefa16", + "type": "github" + }, + "original": { + "owner": "0xc000022070", + "repo": "zen-browser-flake", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..29ed92d --- /dev/null +++ b/flake.nix @@ -0,0 +1,52 @@ +{ + description = "NixOS configuration"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + spicetify-nix.url = "github:Gerg-L/spicetify-nix"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + nix-colors.url = "github:misterio77/nix-colors"; + zen-browser = { + url = "github:0xc000022070/zen-browser-flake"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { self, nixpkgs, home-manager, nix-colors, ... } @ inputs: + let + system = "x86_64-linux"; + pkgs = import nixpkgs { + inherit system; + config.allowUnfree = true; + }; + in { + nixosConfigurations.virgil = nixpkgs.lib.nixosSystem { + inherit system; + specialArgs = { inherit inputs; }; + modules = [ + ./configuration.nix + home-manager.nixosModules.home-manager + + { + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + + # Pass additional inputs to home-manager modules + extraSpecialArgs = { inherit inputs nix-colors; }; + + backupFileExtension = "backup"; + + users.tulg = { + imports = [ ./home.nix ]; + }; + }; + } + ]; + }; + }; +} diff --git a/hardware-configuration.nix b/hardware-configuration.nix new file mode 100644 index 0000000..285c66a --- /dev/null +++ b/hardware-configuration.nix @@ -0,0 +1,37 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/profiles/qemu-guest.nix") + ]; + + boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "virtio_scsi" "sr_mod" "virtio_blk" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/10d6e759-3b2a-4593-b7c8-21b78352781d"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/3639-959D"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + + swapDevices = [ ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp1s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; +} diff --git a/home.nix b/home.nix new file mode 100644 index 0000000..f9c7fcd --- /dev/null +++ b/home.nix @@ -0,0 +1,154 @@ +{ config, lib, pkgs, inputs, nix-colors, ... }: + +let + dots = "${config.home.homeDirectory}/nixdots/config"; + symlink = path: config.lib.file.mkOutOfStoreSymlink path; + spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.stdenv.system}; +in +{ + imports = [ + inputs.zen-browser.homeModules.twilight + inputs.spicetify-nix.homeManagerModules.default + + ]; + home.username = "tulg"; + home.homeDirectory = "/home/tulg"; + home.stateVersion = "25.05"; + home.packages = with pkgs; [ + networkmanagerapplet + wdisplays + nwg-look + rose-pine-gtk-theme + xfce.thunar + arc-theme +# spotify + pavucontrol + wl-clipboard + hyprcursor + parsec-bin + file-roller + hyprpolkitagent + swww + grim + slurp + lf + pistol + waybar + wofi + mako + kitty + vesktop + libsForQt5.qtstyleplugin-kvantum + libsForQt5.qt5ct + rose-pine-kvantum + ]; + programs.vscode.enable = true; + programs.zen-browser.enable = true; + programs.zen-browser.policies = { + DisableAppUpdate = true; + DisableTelemetry = true; + }; + + programs.spicetify = { + enable = true; + theme = spicePkgs.themes.ziro; + colorScheme = "rose-pine-moon"; + }; + + xdg.configFile."hypr" = { + source = symlink "${dots}/hypr"; + recursive = true; + }; + + xdg.configFile."waybar" = { + source = symlink "${dots}/waybar"; + recursive = true; + }; + + xdg.configFile."kitty" = { + source = symlink "${dots}/kitty"; + recursive = true; + }; + + xdg.configFile."wofi" = { + source = symlink "${dots}/wofi"; + recursive = true; + }; + + xdg.configFile."mako" = { + source = symlink "${dots}/mako"; + recursive = true; + }; + + xdg.configFile."lf" = { + source = symlink "${dots}/lf"; + recursive = true; + }; + programs.firefox.enable = true; + programs.bash = { + enable = true; + shellAliases = { + a = "echo ids"; + }; + }; + + programs.git = { + enable = true; + userName = "tulg"; + userEmail = "tulg@protonmail.ch"; + }; + + + + + gtk = { + enable = true; + + theme = { + name = "Nordic-darker"; + package = pkgs.nordic; + }; + + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + + }; + + + + home.pointerCursor = { + gtk.enable = true; + x11.enable = true; + package = pkgs.bibata-cursors; + name = "Bibata-Modern-Classic"; + size = 16; + }; + nixpkgs.config.qt5 = { + enable = true; + platformTheme = "qt5ct"; + style = { + package = pkgs.rose-pine-kvantum; + name = "Rose-pine"; + }; + }; + # + # + home.sessionVariables = { + NIXOS_OZONE_WL = "1"; # hint Electron apps to use Wayland + GTK_THEME = "rose-pine"; + QT_QPA_PLATFORMTHEME = "qt5ct"; + QT_QPA_PLATFORM = "wayland"; + }; + + xdg.portal = { + enable = true; + config.common.default = "*"; + xdgOpenUsePortal = true; + extraPortals = [ + pkgs.xdg-desktop-portal-hyprland + pkgs.xdg-desktop-portal-gtk + ]; + }; +}