diff --git a/flake.nix b/flake.nix index 97cda4e..ec802c7 100644 --- a/flake.nix +++ b/flake.nix @@ -8,7 +8,7 @@ url = "github:nix-community/home-manager/release-25.11"; inputs.nixpkgs.follows = "nixpkgs"; }; - }; + }; # never got nixvim to wokrs. ): # nixvim = { # url = "github:nix-community/nixvim/nixos-25.11"; diff --git a/hosts/laptop/configuration.nix b/hosts/laptop/configuration.nix index 56a69cc..b89f249 100755 --- a/hosts/laptop/configuration.nix +++ b/hosts/laptop/configuration.nix @@ -19,6 +19,12 @@ home-manager.users = { tomasr = ./home.nix; }; +environment.pathsToLink = [ + "/share/applications" + "/share/xdg-desktop-portal" +]; + + # Bootloader. boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; @@ -58,6 +64,7 @@ programs.hyprland = { xwayland.enable = true; }; + #enable sddm services.displayManager.sddm = { enable = true; @@ -126,26 +133,34 @@ services.upower.enable = true; # List packages installed in system profile. To search, run: # $ nix search wget environment.systemPackages = with pkgs; [ - wget - tree # shows dir in tree - zsh # better bash - brightnessctl # control brightness - pulseaudio # sound server - playerctl # controls media player - blueman # GTK-based Bluetooth Manager - udiskie # removable disk automounter for udisks - networkmanagerapplet # NetworkManager control applet - cliphist # Wayland clipboard manager - wl-clipboard # cli copy/past utilities for Wayland - jp # lightweight and flexible cli JSON parser - notepad-next - libnotify # Library that sends desktop notifications to a notification daemon - ripgrep #better grepp - hyprkeys # keybind helper - cowsay - cmatrix - swww #wallpaper daemon - socat # Utility for bidirectional data transfer between two independent data channels (used to communicate between hyprland and swww to change wallpapers dinamically) +#we need to install gnome and kde utils individually as we dont use gnome +gnome-calculator +snapshot +gnome-characters +gnome-disk-utility +kdePackages.okular +nautilus +gnome-font-viewer +wget +tree # shows dir in tree +zsh # better bash +brightnessctl # control brightness +pulseaudio # sound server +playerctl # controls media player +blueman # GTK-based Bluetooth Manager +udiskie # removable disk automounter for udisks +networkmanagerapplet # NetworkManager control applet +cliphist # Wayland clipboard manager +wl-clipboard # cli copy/past utilities for Wayland +jp # lightweight and flexible cli JSON parser +notepad-next +libnotify # Library that sends desktop notifications to a notification daemon +ripgrep #better grepp +hyprkeys # keybind helper +cowsay +cmatrix +swww #wallpaper daemon +socat # Utility for bidirectional data transfer between two independent data channels (used to communicate between hyprland and swww to change wallpapers dinamically) gcc # GNU C compiler libreoffice gruvbox-gtk-theme @@ -154,14 +169,12 @@ powertop inetutils # collections of network programs such as telnet python313Packages.pygments # used for ccat (comment of colorize plugin from oh-my-zsh) fzf -#we need to install gnome and kde utils individually as we dont use gnome - gnome-calculator - snapshot - gnome-characters - gnome-disk-utility - kdePackages.okular - nautilus - gnome-font-viewer +jq # json parser used in some scripts +bottom # Cross-platform graphical process/system monitor with a customizable interface +cmatrix +tomato-c # pomodoro timer +pavucontrol # PulseAudio Volume Control +hyprshot ]; # fonts diff --git a/hosts/laptop/home.nix b/hosts/laptop/home.nix index 13465d4..b392201 100755 --- a/hosts/laptop/home.nix +++ b/hosts/laptop/home.nix @@ -20,6 +20,8 @@ imports = [ ../../modules/home-manager/waybar.nix #../../modules/home-manager/oh-my-posh.nix # zsh customizer ../../modules/home-manager/oh-my-zsh.nix # another zsh customizer +../../modules/home-manager/hypridle.nix +../../modules/home-manager/swaylock.nix ]; @@ -56,6 +58,7 @@ home.packages = [ (pkgs.callPackage ../../modules/scripts/mountkdrive.nix {}) (pkgs.callPackage ../../modules/scripts/weatherwaybar.nix {}) (pkgs.callPackage ../../modules/scripts/colorpicker.nix {}) +(pkgs.callPackage ../../modules/scripts/killall.nix {}) #pkgs pkgs.gruvbox-gtk-theme # # Adds the 'hello' command to your environment. It prints a friendly diff --git a/modules/home-manager/hypridle.nix b/modules/home-manager/hypridle.nix new file mode 100644 index 0000000..0a077c2 --- /dev/null +++ b/modules/home-manager/hypridle.nix @@ -0,0 +1,23 @@ +{ config, pkgs, ... }: + +{ + + services.hypridle = { + enable = true; + settings = { + general = { + lock_cmd = "notify-send 'lock!'"; # dbus/sysd lock command (loginctl lock-session) + unlock_cmd = "notify-send 'unlock!'"; # same as above, but unlock + before_sleep_cmd = "notify-send 'Zzz'"; # command ran before sleep + after_sleep_cmd = "notify-send 'Awake!"; # command ran after sleep + ignore_dbus_inhibit = false; # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam) + ignore_systemd_inhibit = false; # whether to ignore systemd-inhibit --what=idle inhibitors + }; + listener = { + timeout = 500; # in seconds + on-timeout = "notify-send 'You are idle!'"; # command to run when timeout has passed + on-resume = "notify-send 'Welcome back!'"; # command to run when activity is detected after timeout has fired. + }; + }; + }; +} diff --git a/modules/home-manager/hyprland.nix b/modules/home-manager/hyprland.nix index 76893a6..d4d98c5 100644 --- a/modules/home-manager/hyprland.nix +++ b/modules/home-manager/hyprland.nix @@ -12,6 +12,9 @@ in #hint Electron apps to use on wayland; home.sessionVariables.NIXOS_OZONE_WL="1"; + wayland.windowManager.hyprland.plugins = [ + pkgs.hyprlandPlugins.hyprspace + ]; wayland.windowManager.hyprland.settings = { "$mod" = "SUPER"; "$term" = "kitty"; @@ -20,6 +23,25 @@ in "$browser" = "firefox"; # change to librewolf later # ▄▀█ █▄░█ █ █▀▄▀█ ▄▀█ ▀█▀ █ █▀█ █▄░█ # █▀█ █░▀█ █ █░▀░█ █▀█ ░█░ █ █▄█ █░▀█ + animations = { + enabled = true; + bezier = [ + "wind, 0.05, 0.9, 0.1, 1.05" + "winIn, 0.1, 1.1, 0.1, 1.1" + "winOut, 0.3, -0.3, 0, 1" + "liner, 1, 1, 1, 1" + ]; + animation = [ + "windows, 1, 6, wind, slide" + "windowsIn, 1, 6, winIn, slide" + "windowsOut, 1, 5, winOut, slide" + "windowsMove, 1, 5, wind, slide" + "border, 1, 1, liner" + "borderangle, 1, 30, liner, loop" + "fade, 1, 10, default" + "workspaces, 1, 5, wind" + ]; + }; # █▀▀ █▄░█ █░█ # ██▄ █░▀█ ▀▄▀ @@ -49,7 +71,15 @@ in # █▄▀ █▀▀ █▄█ █▄▄ █ █▄░█ █▀▄ █ █▄░█ █▀▀ █▀ # █░█ ██▄ ░█░ █▄█ █ █░▀█ █▄▀ █ █░▀█ █▄█ ▄█ - #not all binds now. Do it later when all scripts and etc. are moved + # binds to do + # when librewolf setup put $browser as librewolf + # with framework 16 rgb keypad + # exec a little kitty floating window with tomato executed (pomodoro app) + # if hyprexpo plugin enabled bind = $mainMod, Space, hyprexpo:expo, toggle +#bind = Ctrl+$mainMod, 1, exec, pgrep -x ollama > /dev/null || ollama serve & notify-send -u normal -t 3000 "Running Deepseek-r1 with 1.5b parameters" "" & kitty -e sh -c "ollama run deepseek-r1:1.5b" +#bind = Ctrl+$mainMod, 2, exec, pgrep -x ollama > /dev/null || ollama serve & notify-send -u normal -t 3000 "Running Deepseek-r1 with 8b parameters" "" & kitty -e sh -c "ollama run deepseek-r1:8b" + + bind = [ #hyprland/utility keybindings "$mod, W, togglefloating" @@ -94,6 +124,9 @@ in "$mod, mouse_up, workspace, e-1" "$mod, V, exec, cliphist list | rofi -dmenu| cliphist decode | wl-copy" # copy paste "$mod, B, exec, hyprkeys -bkr | rofi -dmenu" + "$mod, A, tagwindow, noborder" # used to not apply image border + "$mod, S, togglespecialworkspace," + "Alt+$mod, S, movetoworkspace, special" #apps keybindings "$mod, T, exec, $term" "$mod, E, exec, $file" @@ -101,7 +134,23 @@ in "$mod+Shift, A, exec, rofi -show drun" "$mod, Q, exec, custom-dontkillsteam" "Ctrl+Alt, W, exec, pkill waybar || waybar" + "$mod, L, exec, swaylock -eFLK -i ${wallpaper}" + "$mod, F11, exec, hyprshot -m window" + ", F11, exec, hyprshot -m output" + "$mod_SHIFT, S, exec, hyprshot -m region --clipboard only" + # framework 16 rgb macropad + "$mod, P, exec, swaync-client -t" + "Ctrl+$mod, 3, exec, pavucontrol" + "Ctrl+$mod, 5, exec, gnome-characters" + "Ctrl+$mod, 6, exec, custom-killall" + # reloads the autostart programs + "Ctrl+$mod, 4, exec, sleep 3 && kitty -o font_size=16 -e sh -c 'custom-weather'" + "Ctrl+$mod, 4, exec, sleep 2 && kitty -o font_size=8 -e sh -c 'custom-cowsay'" + "Ctrl+$mod, 4, exec, kitty -e 'sleep 2 & clear & fastfetch'" + "Ctrl+$mod, 4, exec, sleep 1 && kitty -o font_size=5 -e btm --theme gruvbox --disable-click --disable_advanced_kill --enable_cache_memory -g -R -T " + "Ctrl+$mod, 4, exec, sleep 3 && kitty -o font_size=1 -e sh -c 'cmatrix -br'" #plugins keybindings + "$mod, SPACE, overview:toggle, " ]; binde = [ @@ -111,14 +160,14 @@ in "$mod+Shift, Down, resizeactive,m 0 30" ]; bindl = [ - ", F1, exec, pactl set-sink-mute @DEFAULT_SINK@ togge" #toggle audio mute + ", F1, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle" #toggle audio mute ", F5, exec, playerctl play-pause" # media F4-F6 ", F4, exec, playerctl previous" ", F6, exec, playerctl next" ]; bindel = [ ", F2, exec, pactl set-sink-volume @DEFAULT_SINK@ -10%" # decrease volume - ", F3, exec, pactl set-sinl-volume @DEFAULT_SINK@ +10%" # increase volume + ", F3, exec, pactl set-sink-volume @DEFAULT_SINK@ +10%" # increase volume ", F7, exec, brightnessctl s 10%-" # decrease brightness ", F8, exec, brightnessctl s +10%" # increase brightness ]; @@ -147,10 +196,34 @@ in "sleep 1 && custom-wallpaper" "custom-mountkdrive" "waybar" + + + ######################### + # login autostart + ####################### + "[workspace 1 silent] sleep 3 && kitty -o font_size=16 -e sh -c 'custom-weather'" + # will launch weather (Third) with a reduced font size + "[workspace 1 silent] sleep 2 && kitty -o font_size=8 -e sh -c 'custom-cowsay'" + # will launch quotes (fourth) + "[workspace 1 silent] kitty - e 'sleep 2 & clear & fastfetch'" + # the terminal will exec .zshrc so FastFetch will be launched (First) + "[workspace 1 silent] sleep 1 && kitty -o font_size=5 -e btm --theme gruvbox --disable-click --disable_advanced_kill --enable_cache_memory -g -R -T " + # will launch bottom (second) + "[workspace 1 silent] sleep 3 && kitty -o font_size=1 -e sh -c 'cmatrix -br'" + # will launch cmatrix + + # sleep is used to launch the app in a specific order, because normally exec-once are run in parrallel + ###################### + ###################### ]; # █░░ ▄▀█ █▄█ █▀█ █░█ ▀█▀ █▀ # █▄▄ █▀█ ░█░ █▄█ █▄█ ░█░ ▄█ + dwindle = { + pseudotile = true; + preserve_split = true; + }; + # █▀▄▀█ █ █▀ █▀▀ # █░▀░█ █ ▄█ █▄▄ @@ -163,9 +236,108 @@ in }; # █▀▄▀█ █▀█ █▄░█ █ ▀█▀ █▀█ █▀█ -# █░▀░█ █▄█ █░▀█ █ ░█░ █▄█ █▀▄ +# █░▀░█ █▄█ █#░▀█ █ ░█░ █▄█ █▀▄ monitor = [ - ",preferred, auto, auto" + #",preferred, auto, auto" + "eDP-1, highres@highrr, 0x0, 1" + "HDMI-A-1, highres2highrr, auto-left, 1" + ]; +# _______ ___ __ __ _______ ___ __ _ _______ +#| || | | | | || || | | | | || | +#| _ || | | | | || ___|| | | |_| || _____| +#| |_| || | | |_| || | __ | | | || |_____ +#| ___|| |___ | || || || | | _ ||_____ | +#| | | || || |_| || | | | | | _____| | +#|___| |_______||_______||_______||___| |_| |__||_______| +# +# █░█░█ █ █▄░█ █▀▄ █▀█ █░█░█   █▀█ █░█ █░░ █▀▀ █▀ +# ▀▄▀▄▀ █ █░▀█ █▄▀ █▄█ ▀▄▀▄▀   █▀▄ █▄█ █▄▄ ██▄ ▄█ + windowrulev2 = [ +"opacity 0.90 0.90,class:^(firefox)$" +"opacity 0.90 0.90,class:^(Brave-browser)$" +"opacity 0.80 0.80,class:^(code-oss)$" +"opacity 0.80 0.80,class:^(Code)$" +"opacity 0.80 0.80,class:^(code-url-handler)$" +"opacity 0.80 0.80,class:^(code-insiders-url-handler)$" +"opacity 0.75 0.75,class:^(kitty)$" +"opacity 0.80 0.80,class:^(org.kde.dolphin)$" +"opacity 0.80 0.80,class:^(org.kde.ark)$" +"opacity 0.80 0.80,class:^(nwg-look)$" +"opacity 0.80 0.80,class:^(qt5ct)$" +"opacity 0.80 0.80,class:^(qt6ct)$" +"opacity 0.80 0.80,class:^(kvantummanager)$" +"opacity 0.80 0.70,class:^(org.pulseaudio.pavucontrol)$" +"opacity 0.80 0.70,class:^(blueman-manager)$" +"opacity 0.80 0.70,class:^(nm-applet)$" +"opacity 0.80 0.70,class:^(nm-connection-editor)$" +"opacity 0.80 0.70,class:^(org.kde.polkit-kde-authentication-agent-1)$" +"opacity 0.80 0.70,class:^(polkit-gnome-authentication-agent-1)$" +"opacity 0.80 0.70,class:^(org.freedesktop.impl.portal.desktop.gtk)$" +"opacity 0.80 0.70,class:^(org.freedesktop.impl.portal.desktop.hyprland)$" +"opacity 0.70 0.70,class:^([Ss]team)$" +"opacity 0.70 0.70,class:^(steamwebhelper)$" +"opacity 0.70 0.70,class:^(Spotify)$" +"opacity 0.70 0.70,initialTitle:^(Spotify Free)$" +"opacity 0.90 0.90,class:^(com.github.rafostar.Clapper)$" # Clapper-Gtk +"opacity 0.80 0.80,class:^(com.github.tchx84.Flatseal)$" # Flatseal-Gtk +"opacity 0.80 0.80,class:^(hu.kramo.Cartridges)$" # Cartridges-Gtk +"opacity 0.80 0.80,class:^(com.obsproject.Studio)$" # Obs-Qt +"opacity 0.80 0.80,class:^(gnome-boxes)$" # Boxes-Gtk +"opacity 0.80 0.80,class:^(discord)$" # Discord-Electron +"opacity 0.80 0.80,class:^(WebCord)$" # WebCord-Electron +"opacity 0.80 0.80,class:^(ArmCord)$" # ArmCord-Electron +"opacity 0.80 0.80,class:^(app.drey.Warp)$" # Warp-Gtk +"opacity 0.80 0.80,class:^(net.davidotek.pupgui2)$" # ProtonUp-Qt +"opacity 0.80 0.80,class:^(yad)$" # Protontricks-Gtk +"opacity 0.80 0.80,class:^(Signal)$" # Signal-Gtk +"opacity 0.80 0.80,class:^(io.github.alainm23.planify)$" # planify-Gtk +"opacity 0.80 0.80,class:^(io.gitlab.theevilskeleton.Upscaler)$" # Upscaler-Gtk +"opacity 0.80 0.80,class:^(com.github.unrud.VideoDownloader)$" # VideoDownloader-Gtk +"opacity 0.80 0.80,class:^(io.gitlab.adhami3310.Impression)$" # Impression-Gtk +"opacity 0.80 0.80,class:^(io.missioncenter.MissionCenter)$" # MissionCenter-Gtk +"opacity 0.80 0.80,class:^(io.github.flattool.Warehouse)$" # Warehouse-Gtk +"float,class:^(org.kde.dolphin)$,title:^(Progress Dialog — Dolphin)$" +"float,class:^(org.kde.dolphin)$,title:^(Copying — Dolphin)$" +"float,class:^(firefox)$,title:^(Picture-in-Picture)$" +"float,class:^(firefox)$,title:^(Library)$" +"float,class:^(kitty)$,title:^(top)$" +"float,class:^(kitty)$,title:^(btop)$" +"float,class:^(kitty)$,title:^(htop)$" +"float,class:^(vlc)$" +"float,class:^(kvantummanager)$" +"float,class:^(qt5ct)$" +"float,class:^(qt6ct)$" +"float,class:^(nwg-look)$" +"float,class:^(org.kde.ark)$" +"float,class:^(org.pulseaudio.pavucontrol)$" +"float,class:^(blueman-manager)$" +"float,class:^(nm-applet)$" +"float,class:^(nm-connection-editor)$" +"float,class:^(org.kde.polkit-kde-authentication-agent-1)$" +"float,class:^(Signal)$" # Signal-Gtk +"float,class:^(com.github.rafostar.Clapper)$" # Clapper-Gtk +"float,class:^(app.drey.Warp)$" # Warp-Gtk +"float,class:^(net.davidotek.pupgui2)$" # ProtonUp-Qt +"float,class:^(yad)$" # Protontricks-Gtk +"float,class:^(eog)$" # Imageviewer-Gtk +"float,class:^(io.github.alainm23.planify)$" # planify-Gtk +"float,class:^(io.gitlab.theevilskeleton.Upscaler)$" # Upscaler-Gtk +"float,class:^(com.github.unrud.VideoDownloader)$" # VideoDownloader-Gkk +"float,class:^(io.gitlab.adhami3310.Impression)$" # Impression-Gtk +"float,class:^(io.missioncenter.MissionCenter)$" # MissionCenter-Gtk +#"plugin:imgborders:noimgborders, tag:noborder" + ]; + layerrule = [ +"blur,rofi" +"ignorezero,rofi" +"blur,notifications" +"ignorezero,notifications" +"blur,swaync-notification-window" +"ignorezero,swaync-notification-window" +"blur,swaync-control-center" +"ignorezero,swaync-control-center" +"blur,logout_dialog" + ]; }; } diff --git a/modules/home-manager/kitty.nix b/modules/home-manager/kitty.nix index 5324f64..67f235f 100644 --- a/modules/home-manager/kitty.nix +++ b/modules/home-manager/kitty.nix @@ -6,6 +6,8 @@ #font.name = nerd-fonts._0xproto; #font.size = "10"; extraConfig = '' +font nerd-fonts._0xproto +font_size 14 bold_font auto italic_font auto bold_italic_font auto diff --git a/modules/home-manager/swaylock.nix b/modules/home-manager/swaylock.nix new file mode 100644 index 0000000..b658a6c --- /dev/null +++ b/modules/home-manager/swaylock.nix @@ -0,0 +1,38 @@ +{ config, pkgs, ... }: + +{ + programs.swaylock = { + enable = true; + settings = { + color="1e1e2e"; + bs-hl-color="f5e0dc"; + caps-lock-bs-hl-color="f5e0dc"; + caps-lock-key-hl-color="a6e3a1"; + inside-color="00000000"; + inside-clear-color = "00000000"; + inside-caps-lock-color="00000000"; + inside-ver-color="00000000"; + inside-wrong-color="00000000"; + key-hl-color="a6e3a1"; + layout-bg-color="00000000"; + layout-border-color="00000000"; + layout-text-color="cdd6f4"; + line-color="00000000"; + line-clear-color="00000000"; + line-caps-lock-color="00000000"; + line-ver-color="00000000"; + line-wrong-color="00000000"; + ring-color="b4befe"; + ring-clear-color="f5e0dc"; + ring-caps-lock-color="fab387"; + ring-ver-color="89b4fa"; + ring-wrong-color="eba0ac"; + separator-color="00000000"; + text-color="cdd6f4"; + text-clear-color="f5e0dc"; + text-caps-lock-color="fab387"; + text-ver-color="89b4fa"; + text-wrong-color="eba0ac"; + }; +}; +} diff --git a/modules/home-manager/waybar.nix b/modules/home-manager/waybar.nix index c9c3fa7..d332891 100644 --- a/modules/home-manager/waybar.nix +++ b/modules/home-manager/waybar.nix @@ -393,7 +393,7 @@ @define-color active @color6; * { - font-size: 16px; + font-size: 23px; font-family: "0xProto Nerd Font"; min-width: 8px; min-height: 0px; @@ -428,7 +428,7 @@ tooltip { menu label, tooltip label { - font-size: 14px; + font-size: 20px; color: lighter(@active); } @@ -464,7 +464,7 @@ tooltip label { #together, #submap, #custom-weather { - font-size: 12px; + font-size: 17px; } #custom-recorder, @@ -489,7 +489,7 @@ tooltip label { #custom-hotspot, #custom-github, #custom-notifications { - font-size: 14px; + font-size: 20px; } #custom-hotspot { @@ -510,17 +510,17 @@ tooltip label { } #custom-cpu-icon { - font-size: 25px; + font-size: 36px; } #custom-cputemp, #temperature { - font-size: 12px; + font-size: 17px; } #disk, #memory, #cpu { - font-size: 14px; + font-size: 20px; font-weight: bold; } @@ -592,7 +592,7 @@ tooltip label { } #battery { - font-size: 12px; + font-size: 17px; border-radius: 8px; padding: 4px 0px; margin: 4px 2px 4px 2px; @@ -615,13 +615,13 @@ tooltip label { } #battery.powerdraw { - font-size: 12px; + font-size: 17px; padding: 0; margin-right: -20px; margin-left: -20px; } #battery.w { - font-size: 12px; + font-size: 17px; padding: 0; margin-left: -20px; margin-right: -20px; diff --git a/modules/scripts/killall.nix b/modules/scripts/killall.nix new file mode 100644 index 0000000..6ff5803 --- /dev/null +++ b/modules/scripts/killall.nix @@ -0,0 +1,19 @@ +{ writeShellApplication, hyprland, jq,... }: + +writeShellApplication { + name = "custom-killall"; + runtimeInputs = [ + hyprland + jq + ]; + text = '' + active_workspace_id=$(hyprctl activeworkspace -j | jq -r '.id') + + hyprctl clients -j | + jq -r ".[] + | select(.workspace.id==''${active_workspace_id}) + | select(.focusHistoryID!=0) + | .pid" | + xargs -r kill +''; +}