From b6bd12519191cd5dc8bac5c53905feaea1521097 Mon Sep 17 00:00:00 2001 From: Pedro Rey Anca Date: Sun, 13 Jul 2025 16:21:33 +0200 Subject: [PATCH 01/10] Dont force kernel linuxPackages_latest --- modules/core/bootloader.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/core/bootloader.nix b/modules/core/bootloader.nix index 9619060..58553ef 100644 --- a/modules/core/bootloader.nix +++ b/modules/core/bootloader.nix @@ -11,5 +11,4 @@ }; efi.canTouchEfiVariables = lib.mkDefault true; }; - boot.kernelPackages = pkgs.linuxPackages_latest; } From 7cd8e7e6dff59f5fa376714bf52b15a61d59c640 Mon Sep 17 00:00:00 2001 From: Pedro Rey Anca Date: Sun, 13 Jul 2025 16:38:56 +0200 Subject: [PATCH 02/10] Disable update news and donation nag --- modules/home/hyprland/config.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/home/hyprland/config.nix b/modules/home/hyprland/config.nix index 781817d..04d1e21 100644 --- a/modules/home/hyprland/config.nix +++ b/modules/home/hyprland/config.nix @@ -293,6 +293,10 @@ workspace_swipe = true; workspace_swipe_direction_lock = false; }; + ecosystem = { + no_update_news = true; + no_donation_nag = true; + }; }; }; } From b3acf11a319fd41f3df2a52e8ee49927051bf297 Mon Sep 17 00:00:00 2001 From: Pedro Rey Anca Date: Thu, 24 Jul 2025 18:57:46 +0200 Subject: [PATCH 03/10] Organize packages and remove/change a few --- modules/home/default.nix | 4 +- modules/home/distrobox.nix | 28 ++++++++++ modules/home/matrix.nix | 4 ++ modules/home/packages.nix | 104 +++++++++++++++---------------------- 4 files changed, 77 insertions(+), 63 deletions(-) create mode 100644 modules/home/distrobox.nix create mode 100644 modules/home/matrix.nix diff --git a/modules/home/default.nix b/modules/home/default.nix index e94b8d6..bbb821c 100644 --- a/modules/home/default.nix +++ b/modules/home/default.nix @@ -11,7 +11,8 @@ ++ [(import ./cava.nix)] # audio visualizer ++ [(import ./cliphist.nix)] # clipboard ++ [(import ./direnv.nix)] - ++ [(import ./discord.nix)] # discord with catppuccin theme + ++ [(import ./discord.nix)] + ++ [(import ./distrobox.nix)] ++ [(import ./gpg.nix)] # GnuPG and its agent (gpg-agent) ++ [(import ./fuzzel.nix)] # launcher ++ [(import ./gaming.nix)] # packages related to gaming @@ -21,6 +22,7 @@ ++ [(import ./kdeconnect.nix)] ++ [(import ./kitty.nix)] # terminal ++ [(import ./swaync)] # notification deamon + ++ [(import ./matrix.nix)] # Matrix clients ++ [(import ./nemo.nix)] # File manager ++ [(import ./nextcloud.nix)] # nextcloud client ++ [(import ./nvim.nix)] # neovim editor diff --git a/modules/home/distrobox.nix b/modules/home/distrobox.nix new file mode 100644 index 0000000..581d63d --- /dev/null +++ b/modules/home/distrobox.nix @@ -0,0 +1,28 @@ +{pkgs, ...}: { + programs.distrobox = { + enable = true; + enableSystemdUnit = true; + containers = { + debian13 = { + image = "debian:13"; + entry = false; + additional_packages = "git"; + init_hooks = [ + "ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/docker" + "ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/docker-compose" + ]; + }; + + kali = { + image = "docker.io/kalilinux/kali-rolling:latest"; + entry = false; + init_hooks = [ + "ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/docker" + "ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/docker-compose" + ]; + }; + }; + }; + + home.packages = with pkgs; [boxbuddy]; +} diff --git a/modules/home/matrix.nix b/modules/home/matrix.nix new file mode 100644 index 0000000..8133f6e --- /dev/null +++ b/modules/home/matrix.nix @@ -0,0 +1,4 @@ +{pkgs, ...}: { + programs.element-desktop.enable = true; + home.packages = with pkgs; [fractal]; +} diff --git a/modules/home/packages.nix b/modules/home/packages.nix index 2bcafde..002bf49 100644 --- a/modules/home/packages.nix +++ b/modules/home/packages.nix @@ -17,82 +17,62 @@ }) ["mp4" "x-matroska" "webm"]); home.packages = with pkgs; [ - bemoji # emoji picker - bitwise # cli tool for bit / hex manipulation + # CLI utils bitwarden-cli - distrobox - boxbuddy - evince # gnome pdf viewer - eza # cool ls - element-desktop # Matrix client - fd # find replacement file # Show file information - file-roller # Archive manager - freetube # YouTube client - fzf # fuzzy finder - gimp - gnome-text-editor gtrash # rm replacement, put deleted files in system trash imagemagick - inkscape - kdePackages.kleopatra # Gpg GUI - lazygit - jq - nitch # systhem fetch util - nix-prefetch-github - kdePackages.okular # KDE's pdf viewer/editor (supports digital signing) - simple-scan - orca-slicer + lazygit # Simple terminal UI for git commands + jq # command-line JSON processor + nitch # neofetch-like util tdf # cli pdf viewer - speedcrunch - thunderbird todo # cli todo list - toipe # typing test in the terminal - transmission_4-gtk # torrent client - vlc - xournalpp # For notes and pdf editing yazi # terminal file manager yt-dlp - zenity - wdisplays - wireguard-tools - wtype + wtype # xdotool type for wayland + caligula # TUI for disk imaging + ffmpeg + killall + man-pages # extra man pages + openssl + pamixer # pulseaudio command line mixer + playerctl # controller for media players + wl-clipboard # clipboard utils for wayland (wl-copy, wl-paste) + unzip + wget + usbutils + gotify-cli + + #GUI Utils + file-roller # Archive manager + wdisplays # Configuring displays in Wayland compositors + bemoji # emoji picker + pavucontrol # pulseaudio volume controle (GUI) + + # GUI Apps + evince # gnome pdf viewer + freetube # YouTube client + thunderbird + vlc + mpv # video player + xournalpp # For notes and pdf editing + qbittorrent # torrent client + speedcrunch # Fast power user calculator + simple-scan + orca-slicer + kdePackages.okular # KDE's pdf viewer/editor (supports digital signing) + inkscape + kdePackages.kleopatra # GPG GUI + gimp + gnome-text-editor + gparted # partition manager + vimiv-qt # Image viewer, vim-like # Wine stuff winetricks wineWowPackages.wayland bottles - # C / C++ - gcc - gnumake - - # Python - python3 - - cmatrix - caligula - gparted # partition manager - ffmpeg - vimiv-qt # Image viewer, vim-like - killall - libnotify - man-pages # extra man pages - mpv # video player - openssl - pamixer # pulseaudio command line mixer - pavucontrol # pulseaudio volume controle (GUI) - playerctl # controller for media players - wl-clipboard # clipboard utils for wayland (wl-copy, wl-paste) - poweralertd - qalculate-gtk # calculator - unzip - wget - xdg-utils - xxd - alejandra - usbutils - # VPN wireguard-tools openconnect From b77f7c03cf0f3fa7697f3eae7df298dfcbd5f58b Mon Sep 17 00:00:00 2001 From: Pedro Rey Anca Date: Thu, 24 Jul 2025 19:01:32 +0200 Subject: [PATCH 04/10] Remove unused stuff --- modules/core/services.nix | 9 ++------- modules/core/system.nix | 17 +---------------- modules/home/gtk.nix | 8 -------- 3 files changed, 3 insertions(+), 31 deletions(-) diff --git a/modules/core/services.nix b/modules/core/services.nix index 391e45e..a6f02ec 100644 --- a/modules/core/services.nix +++ b/modules/core/services.nix @@ -3,8 +3,7 @@ gvfs.enable = true; gnome.gnome-keyring.enable = true; dbus.enable = true; - fstrim.enable = true; - flatpak.enable = true; + flatpak.enable = true; printing.enable = true; blueman.enable = true; avahi = { @@ -13,8 +12,4 @@ openFirewall = true; }; }; - services.logind.extraConfig = '' - # don’t shutdown when power button is short-pressed - HandlePowerKey=ignore - ''; -} + } diff --git a/modules/core/system.nix b/modules/core/system.nix index bf617a9..b5acb45 100644 --- a/modules/core/system.nix +++ b/modules/core/system.nix @@ -5,13 +5,10 @@ inputs, ... }: { - # imports = [ inputs.nix-gaming.nixosModules.default ]; nix = { settings = { auto-optimise-store = true; experimental-features = ["nix-command" "flakes"]; - substituters = ["https://nix-gaming.cachix.org"]; - trusted-public-keys = ["nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4="]; }; gc = { automatic = true; @@ -19,27 +16,15 @@ options = "--delete-older-than 7d"; }; }; - nixpkgs = { - overlays = [ - inputs.nur.overlays.default - ]; - }; environment.systemPackages = with pkgs; [ wget + curl git - ddcutil ]; - # For ddcutil brightness control - boot.kernelModules = ["i2c-dev"]; - services.udev.extraRules = '' - KERNEL=="i2c-[0-9]*", GROUP="i2c", MODE="0660" - ''; - time.timeZone = "Europe/Madrid"; console.keyMap = "es"; i18n.defaultLocale = "en_US.UTF-8"; - nixpkgs.config.allowUnfree = true; system.stateVersion = "24.05"; } diff --git a/modules/home/gtk.nix b/modules/home/gtk.nix index e586066..2d9e351 100644 --- a/modules/home/gtk.nix +++ b/modules/home/gtk.nix @@ -4,14 +4,6 @@ ... }: { fonts.fontconfig.enable = true; - home.packages = with pkgs; [ - nerd-fonts.jetbrains-mono - nerd-fonts.noto - - twemoji-color-font - noto-fonts-emoji - roboto - ]; gtk = { enable = true; From 696bba168f0a5c9bdac91faf3d6f65cfc8856f29 Mon Sep 17 00:00:00 2001 From: Pedro Rey Anca Date: Thu, 24 Jul 2025 19:02:29 +0200 Subject: [PATCH 05/10] Move hyprland config --- modules/home/hyprland/config.nix | 302 ---------------------------- modules/home/hyprland/default.nix | 1 - modules/home/hyprland/hyprland.nix | 308 ++++++++++++++++++++++++++++- 3 files changed, 304 insertions(+), 307 deletions(-) delete mode 100644 modules/home/hyprland/config.nix diff --git a/modules/home/hyprland/config.nix b/modules/home/hyprland/config.nix deleted file mode 100644 index 04d1e21..0000000 --- a/modules/home/hyprland/config.nix +++ /dev/null @@ -1,302 +0,0 @@ -{pkgs, ...}: { - wayland.windowManager.hyprland = { - settings = { - # autostart - exec-once = [ - "uwsm app -- nm-applet" - "uwsm app -- wl-clip-persist --clipboard regular" - "uwsm app -- bash -c 'if [ ! -f ~/.config/hypr/wallpaper.png ]; then wall-change ~/.config/hypr/default_wallpaper.png; fi'" - "uwsm app -- swaybg -m fill -i ~/.config/hypr/wallpaper.png &" - "uwsm app -- poweralertd" - "uwsm app -- waybar" - "uwsm app -- swaync" - "uwsm app -- ckb-next -b" - "uwsm app -- element-desktop --hidden" - ]; - - input = { - kb_layout = "es,us"; - kb_options = "grp:alt_caps_toggle"; - numlock_by_default = true; - follow_mouse = 1; - sensitivity = 0; - touchpad = { - natural_scroll = true; - }; - }; - - general = { - "$mainMod" = "SUPER"; - layout = "dwindle"; - gaps_in = 0; - gaps_out = 0; - border_size = 2; - # "col.active_border" = "rgb(cba6f7) rgb(94e2d5) 45deg"; - # "col.inactive_border" = "0x00000000"; - # border_part_of_window = false; - no_border_on_floating = false; - }; - - misc = { - disable_autoreload = true; - disable_hyprland_logo = true; - always_follow_on_dnd = true; - layers_hog_keyboard_focus = true; - animate_manual_resizes = false; - enable_swallow = true; - focus_on_activate = true; - }; - - dwindle = { - force_split = 0; - special_scale_factor = 1.0; - split_width_multiplier = 1.0; - use_active_for_splits = true; - pseudotile = "yes"; - preserve_split = "yes"; - }; - - master = { - new_status = "master"; - special_scale_factor = 1; - }; - - decoration = { - rounding = 0; - # active_opacity = 0.90; - # inactive_opacity = 0.90; - # fullscreen_opacity = 1.0; - - blur = { - enabled = true; - size = 1; - passes = 1; - # size = 4; - # passes = 2; - brightness = 1; - contrast = 1.400; - ignore_opacity = true; - noise = 0; - new_optimizations = true; - xray = false; - }; - - shadow = { - enabled = true; - - ignore_window = true; - offset = "0 2"; - range = 20; - render_power = 3; - # color = "rgba(00000055)"; - }; - }; - - animations = { - enabled = true; - - bezier = [ - "fluent_decel, 0, 0.2, 0.4, 1" - "easeOutCirc, 0, 0.55, 0.45, 1" - "easeOutCubic, 0.33, 1, 0.68, 1" - "easeinoutsine, 0.37, 0, 0.63, 1" - ]; - - animation = [ - # Windows - "windowsIn, 1, 3, easeOutCubic, popin 30%" # window open - "windowsOut, 1, 3, fluent_decel, popin 70%" # window close. - "windowsMove, 1, 2, easeinoutsine, slide" # everything in between, moving, dragging, resizing. - - # Fade - "fadeIn, 1, 3, easeOutCubic" # fade in (open) -> layers and windows - "fadeOut, 1, 2, easeOutCubic" # fade out (close) -> layers and windows - "fadeSwitch, 0, 1, easeOutCirc" # fade on changing activewindow and its opacity - "fadeShadow, 1, 10, easeOutCirc" # fade on changing activewindow for shadows - "fadeDim, 1, 4, fluent_decel" # the easing of the dimming of inactive windows - "border, 1, 2.7, easeOutCirc" # for animating the border's color switch speed - "borderangle, 1, 30, fluent_decel, once" # for animating the border's gradient angle - styles: once (default), loop - "workspaces, 1, 4, easeOutCubic, fade" # styles: slide, slidevert, fade, slidefade, slidefadevert - ]; - }; - - bind = - [ - # show keybinds list - "$mainMod, F1, exec, show-keybinds" - - # keybindings - "$mainMod, Return, exec, uwsm app -- kitty" - "ALT, Return, exec, uwsm app -- kitty --title float_kitty" - "$mainMod SHIFT, Return, exec, uwsm app -- kitty --start-as=fullscreen -o 'font_size=16'" - "$mainMod, B, exec, uwsm app -- librewolf" - "$mainMod, N, exec, uwsm app -- swaync-client -t" - "$mainMod SHIFT, N, exec, uwsm app -- swaync-client -d" - "$mainMod SHIFT, Q, killactive," - "$mainMod, F, fullscreen, 0" - "$mainMod SHIFT, F, fullscreen, 1" - "$mainMod, Space, togglefloating," - "$mainMod, D, exec, uwsm app -- fuzzel" - "$mainMod SHIFT, E, exec, uwsm app -- bemoji -n" - "$mainMod, M, exec, uwsm app -- element-desktop" - "$mainMod, Y, exec, uwsm app -- kitty spotify_player" - "$mainMod, X, exec, uwsm app -- rofi-rbw" - "$mainMod, Escape, exec, uwsm app -- loginctl lock-session" - "$mainMod SHIFT, Escape, exec, uwsm app -- shutdown-script" - "$mainMod, P, pseudo," - "$mainMod SHIFT, P, togglesplit," - "$mainMod, E, exec, uwsm app -- nemo" - "$mainMod SHIFT, B, exec, uwsm app -- pkill -SIGUSR1 .waybar-wrapped" - "$mainMod, C ,exec, uwsm app -- hyprpicker -a" - "$mainMod, W,exec, uwsm app -- wallpaper-picker" - - # screenshot - "$mainMod, Print, exec, uwsm app -- screenshot-menu" - ",Print, exec, uwsm app -- grimblast --notify --freeze copy area" - ] - ++ ( - # workspaces - # binds $mod + [shift +] {1..10} to [move to] workspace {1..10} - builtins.concatLists ( - builtins.genList ( - x: let - ws = let - c = (x + 1) / 10; - in - builtins.toString (x + 1 - (c * 10)); - in [ - "$mainMod, ${ws}, workspace, ${toString (x + 1)}" - "$mainMod SHIFT, ${ws}, movetoworkspacesilent, ${toString (x + 1)}" - ] - ) - 10 - ) - ) - ++ [ - "$mainMod CTRL, c, workspace, emptynm" - "$mainMod SHIFT, c, movetoworkspace, emptynm" - ] - ++ ( - # Window focus, movement and control - builtins.concatLists ( - let - keys = ["H" "L" "K" "J"]; - directions = ["l" "r" "u" "d"]; - resize = toString 80; # Change this to change how much a window resizes each keypress - resize_list = ["-${resize} 0" "${resize} 0" "0 -${resize}" "0 ${resize}"]; - in - builtins.genList ( - x: let - k = builtins.elemAt keys x; - d = builtins.elemAt directions x; - r = builtins.elemAt resize_list x; - in [ - "$mainMod, ${k}, movefocus, ${d}" - "$mainMod SHIFT, ${k}, movewindow, ${d}" - "$mainMod CTRL, ${k}, resizeactive, ${r}" - "$mainMod ALT, ${k}, moveactive, ${r}" - ] - ) - 4 - ) - ) - ++ [ - "$mainMod, mouse_down, workspace, e-1" - "$mainMod, mouse_up, workspace, e+1" - - # laptop brigthness - ",XF86MonBrightnessUp, exec, brightnessctl set 5%+" - ",XF86MonBrightnessDown, exec, brightnessctl set 5%-" - "$mainMod, XF86MonBrightnessUp, exec, brightnessctl set 100%+" - "$mainMod, XF86MonBrightnessDown, exec, brightnessctl set 100%-" - - # clipboard manager - "$mainMod, V, exec, cliphist list | fuzzel --dmenu --prompt 'πŸ“‹ ' | cliphist decode | wl-copy" - ]; - - # Bindings that work when locked - bindl = [ - # media and volume controls - ",XF86AudioRaiseVolume,exec, pamixer -i 2" - ",XF86AudioLowerVolume,exec, pamixer -d 2" - ",XF86AudioMute,exec, pamixer -t" - ",XF86AudioPlay,exec, playerctl play-pause" - ",XF86AudioNext,exec, playerctl next" - ",XF86AudioPrev,exec, playerctl previous" - ",XF86AudioStop, exec, playerctl stop" - ]; - - # mouse binding - bindm = [ - "$mainMod, mouse:272, movewindow" - "$mainMod, mouse:273, resizewindow" - ]; - - # windowrule - windowrule = [ - "float,class:vimiv" - "center,class:vimiv" - "float,class:mpv" - "center,class:mpv" - "size 1200 725,class:mpv" - "float,title:^(float_kitty)$" - "center,title:^(float_kitty)$" - "size 950 600,title:^(float_kitty)$" - "tile, class:neovide" - "idleinhibit focus,class:mpv" - "float,class:udiskie" - "float,title:^(Volume Control)$" - "float,title:^(Firefox β€” Sharing Indicator)$" - "move 0 0,title:^(Firefox β€” Sharing Indicator)$" - "size 700 450,title:^(Volume Control)$" - "move 40 55%,title:^(Volume Control)$" - "float, title:^(Picture-in-Picture)$" - "opacity 1.0 override 1.0 override, title:^(Picture-in-Picture)$" - "pin, title:^(Picture-in-Picture)$" - "opacity 1.0 override 1.0 override, class:(Aseprite)" - "opacity 1.0 override 1.0 override, class:(Unity)" - "idleinhibit focus, class:^(mpv)$" - "idleinhibit fullscreen, class:^(firefox)$" - "float,class:^(zenity)$" - "center,class:^(zenity)$" - "size 850 500,class:^(zenity)$" - "float,class:^(pavucontrol)$" - "float,class:^(.sameboy-wrapped)$" - "float,class:^(file_progress)$" - "float,class:^(confirm)$" - "float,class:^(dialog)$" - "float,class:^(download)$" - "float,class:^(notification)$" - "float,class:^(error)$" - "float,class:^(confirmreset)$" - "float,title:^(Open File)$" - "float,title:^(branchdialog)$" - "float,title:^(Confirm to replace files)$" - "float,title:^(File Operation Progress)$" - - "opacity 0.0 override,class:^(xwaylandvideobridge)$" - "noanim,class:^(xwaylandvideobridge)$" - "noinitialfocus,class:^(xwaylandvideobridge)$" - "maxsize 1 1,class:^(xwaylandvideobridge)$" - "noblur,class:^(xwaylandvideobridge)$" - ]; - - monitor = [ - ",preferred,auto,1" - ]; - - xwayland = { - force_zero_scaling = true; - }; - - gestures = { - workspace_swipe = true; - workspace_swipe_direction_lock = false; - }; - ecosystem = { - no_update_news = true; - no_donation_nag = true; - }; - }; - }; -} diff --git a/modules/home/hyprland/default.nix b/modules/home/hyprland/default.nix index 40d1698..d50f9ba 100644 --- a/modules/home/hyprland/default.nix +++ b/modules/home/hyprland/default.nix @@ -1,7 +1,6 @@ {...}: { imports = [(import ./hyprland.nix)] - ++ [(import ./config.nix)] ++ [(import ./hyprlock.nix)] ++ [(import ./hypridle.nix)] ++ [(import ./variables.nix)]; diff --git a/modules/home/hyprland/hyprland.nix b/modules/home/hyprland/hyprland.nix index d4ca52a..4b2fffb 100644 --- a/modules/home/hyprland/hyprland.nix +++ b/modules/home/hyprland/hyprland.nix @@ -4,7 +4,6 @@ ... }: { home.packages = with pkgs; [ - # swww swaybg inputs.hypr-contrib.packages.${pkgs.system}.grimblast hyprpicker @@ -15,7 +14,9 @@ glib wayland ]; - systemd.user.targets.hyprland-session.Unit.Wants = ["xdg-desktop-autostart.target"]; + + services.hyprpolkitagent.enable = true; + wayland.windowManager.hyprland = { enable = true; xwayland = { @@ -24,7 +25,306 @@ }; # enableNvidiaPatches = false; systemd.enable = false; - }; - services.hyprpolkitagent.enable = true; + settings = let + app_menu = "${pkgs.fuzzel}/bin/fuzzel"; + in { + # autostart + exec-once = [ + "uwsm app -- nm-applet" + "uwsm app -- wl-clip-persist --clipboard regular" + "uwsm app -- bash -c 'if [ ! -f ~/.config/hypr/wallpaper.png ]; then wall-change ~/.config/hypr/default_wallpaper.png; fi'" + "uwsm app -- swaybg -m fill -i ~/.config/hypr/wallpaper.png &" + "uwsm app -- ${pkgs.poweralertd}/bin/poweralertd" + "uwsm app -- waybar" + "uwsm app -- swaync" + "uwsm app -- ckb-next -b" + "uwsm app -- element-desktop --hidden" + ]; + + input = { + kb_layout = "es,us"; + kb_options = "grp:alt_caps_toggle"; + numlock_by_default = true; + follow_mouse = 1; + sensitivity = 0; + touchpad = { + natural_scroll = true; + }; + }; + + general = { + "$mainMod" = "SUPER"; + layout = "dwindle"; + gaps_in = 0; + gaps_out = 0; + border_size = 2; + # "col.active_border" = "rgb(cba6f7) rgb(94e2d5) 45deg"; + # "col.inactive_border" = "0x00000000"; + # border_part_of_window = false; + no_border_on_floating = false; + }; + + misc = { + disable_autoreload = true; + disable_hyprland_logo = true; + always_follow_on_dnd = true; + layers_hog_keyboard_focus = true; + animate_manual_resizes = false; + enable_swallow = true; + focus_on_activate = true; + }; + + dwindle = { + force_split = 0; + special_scale_factor = 1.0; + split_width_multiplier = 1.0; + use_active_for_splits = true; + pseudotile = "yes"; + preserve_split = "yes"; + }; + + master = { + new_status = "master"; + special_scale_factor = 1; + }; + + decoration = { + rounding = 0; + # active_opacity = 0.90; + # inactive_opacity = 0.90; + # fullscreen_opacity = 1.0; + + blur = { + enabled = true; + size = 1; + passes = 1; + # size = 4; + # passes = 2; + brightness = 1; + contrast = 1.400; + ignore_opacity = true; + noise = 0; + new_optimizations = true; + xray = false; + }; + + shadow = { + enabled = true; + + ignore_window = true; + offset = "0 2"; + range = 20; + render_power = 3; + # color = "rgba(00000055)"; + }; + }; + + animations = { + enabled = true; + + bezier = [ + "fluent_decel, 0, 0.2, 0.4, 1" + "easeOutCirc, 0, 0.55, 0.45, 1" + "easeOutCubic, 0.33, 1, 0.68, 1" + "easeinoutsine, 0.37, 0, 0.63, 1" + ]; + + animation = [ + # Windows + "windowsIn, 1, 3, easeOutCubic, popin 30%" # window open + "windowsOut, 1, 3, fluent_decel, popin 70%" # window close. + "windowsMove, 1, 2, easeinoutsine, slide" # everything in between, moving, dragging, resizing. + + # Fade + "fadeIn, 1, 3, easeOutCubic" # fade in (open) -> layers and windows + "fadeOut, 1, 2, easeOutCubic" # fade out (close) -> layers and windows + "fadeSwitch, 0, 1, easeOutCirc" # fade on changing activewindow and its opacity + "fadeShadow, 1, 10, easeOutCirc" # fade on changing activewindow for shadows + "fadeDim, 1, 4, fluent_decel" # the easing of the dimming of inactive windows + "border, 1, 2.7, easeOutCirc" # for animating the border's color switch speed + "borderangle, 1, 30, fluent_decel, once" # for animating the border's gradient angle - styles: once (default), loop + "workspaces, 1, 4, easeOutCubic, fade" # styles: slide, slidevert, fade, slidefade, slidefadevert + ]; + }; + + bind = + [ + # show keybinds list + "$mainMod, F1, exec, show-keybinds" + + # keybindings + "$mainMod, Return, exec, uwsm app -- kitty" + "ALT, Return, exec, uwsm app -- kitty --title float_kitty" + "$mainMod SHIFT, Return, exec, uwsm app -- kitty --start-as=fullscreen -o 'font_size=16'" + "$mainMod, B, exec, uwsm app -- librewolf" + "$mainMod, N, exec, uwsm app -- swaync-client -t" + "$mainMod SHIFT, N, exec, uwsm app -- swaync-client -d" + "$mainMod SHIFT, Q, killactive," + "$mainMod, F, fullscreen, 0" + "$mainMod SHIFT, F, fullscreen, 1" + "$mainMod, Space, togglefloating," + "$mainMod, D, exec, uwsm app -- ${app_menu}" + "$mainMod SHIFT, E, exec, uwsm app -- bemoji -n" + "$mainMod, M, exec, uwsm app -- element-desktop" + "$mainMod, Y, exec, uwsm app -- kitty spotify_player" + "$mainMod, X, exec, uwsm app -- rofi-rbw" + "$mainMod, Escape, exec, uwsm app -- loginctl lock-session" + "$mainMod SHIFT, Escape, exec, uwsm app -- shutdown-script" + "$mainMod, P, pseudo," + "$mainMod SHIFT, P, togglesplit," + "$mainMod, E, exec, uwsm app -- nemo" + "$mainMod SHIFT, B, exec, uwsm app -- pkill -SIGUSR1 .waybar-wrapped" + "$mainMod, C ,exec, uwsm app -- hyprpicker -a" + "$mainMod, W,exec, uwsm app -- wallpaper-picker" + + # screenshot + "$mainMod, Print, exec, uwsm app -- screenshot-menu" + ",Print, exec, uwsm app -- grimblast --notify --freeze copy area" + ] + ++ ( + # workspaces + # binds $mod + [shift +] {1..10} to [move to] workspace {1..10} + builtins.concatLists ( + builtins.genList ( + x: let + ws = let + c = (x + 1) / 10; + in + builtins.toString (x + 1 - (c * 10)); + in [ + "$mainMod, ${ws}, workspace, ${toString (x + 1)}" + "$mainMod SHIFT, ${ws}, movetoworkspacesilent, ${toString (x + 1)}" + ] + ) + 10 + ) + ) + ++ [ + "$mainMod CTRL, c, workspace, emptynm" + "$mainMod SHIFT, c, movetoworkspace, emptynm" + ] + ++ ( + # Window focus, movement and control + builtins.concatLists ( + let + keys = ["H" "L" "K" "J"]; + directions = ["l" "r" "u" "d"]; + resize = toString 80; # Change this to change how much a window resizes each keypress + resize_list = ["-${resize} 0" "${resize} 0" "0 -${resize}" "0 ${resize}"]; + in + builtins.genList ( + x: let + k = builtins.elemAt keys x; + d = builtins.elemAt directions x; + r = builtins.elemAt resize_list x; + in [ + "$mainMod, ${k}, movefocus, ${d}" + "$mainMod SHIFT, ${k}, movewindow, ${d}" + "$mainMod CTRL, ${k}, resizeactive, ${r}" + "$mainMod ALT, ${k}, moveactive, ${r}" + ] + ) + 4 + ) + ) + ++ [ + "$mainMod, mouse_down, workspace, e-1" + "$mainMod, mouse_up, workspace, e+1" + + # laptop brigthness + ",XF86MonBrightnessUp, exec, brightnessctl set 5%+" + ",XF86MonBrightnessDown, exec, brightnessctl set 5%-" + "$mainMod, XF86MonBrightnessUp, exec, brightnessctl set 100%+" + "$mainMod, XF86MonBrightnessDown, exec, brightnessctl set 100%-" + + # clipboard manager + "$mainMod, V, exec, cliphist list | fuzzel --dmenu --prompt 'πŸ“‹ ' | cliphist decode | wl-copy" + ]; + + # Bindings that work when locked + bindl = [ + # media and volume controls + ",XF86AudioRaiseVolume,exec, pamixer -i 2" + ",XF86AudioLowerVolume,exec, pamixer -d 2" + ",XF86AudioMute,exec, pamixer -t" + ",XF86AudioPlay,exec, playerctl play-pause" + ",XF86AudioNext,exec, playerctl next" + ",XF86AudioPrev,exec, playerctl previous" + ",XF86AudioStop, exec, playerctl stop" + ]; + + # mouse binding + bindm = [ + "$mainMod, mouse:272, movewindow" + "$mainMod, mouse:273, resizewindow" + ]; + + # windowrule + windowrule = [ + "float,class:vimiv" + "center,class:vimiv" + "float,class:mpv" + "center,class:mpv" + "size 1200 725,class:mpv" + "float,title:^(float_kitty)$" + "center,title:^(float_kitty)$" + "size 950 600,title:^(float_kitty)$" + "tile, class:neovide" + "idleinhibit focus,class:mpv" + "float,class:udiskie" + "float,title:^(Volume Control)$" + "float,title:^(Firefox β€” Sharing Indicator)$" + "move 0 0,title:^(Firefox β€” Sharing Indicator)$" + "size 700 450,title:^(Volume Control)$" + "move 40 55%,title:^(Volume Control)$" + "float, title:^(Picture-in-Picture)$" + "opacity 1.0 override 1.0 override, title:^(Picture-in-Picture)$" + "pin, title:^(Picture-in-Picture)$" + "opacity 1.0 override 1.0 override, class:(Aseprite)" + "opacity 1.0 override 1.0 override, class:(Unity)" + "idleinhibit focus, class:^(mpv)$" + "idleinhibit fullscreen, class:^(firefox)$" + "float,class:^(zenity)$" + "center,class:^(zenity)$" + "size 850 500,class:^(zenity)$" + "float,class:^(pavucontrol)$" + "float,class:^(.sameboy-wrapped)$" + "float,class:^(file_progress)$" + "float,class:^(confirm)$" + "float,class:^(dialog)$" + "float,class:^(download)$" + "float,class:^(notification)$" + "float,class:^(error)$" + "float,class:^(confirmreset)$" + "float,title:^(Open File)$" + "float,title:^(branchdialog)$" + "float,title:^(Confirm to replace files)$" + "float,title:^(File Operation Progress)$" + + "opacity 0.0 override,class:^(xwaylandvideobridge)$" + "noanim,class:^(xwaylandvideobridge)$" + "noinitialfocus,class:^(xwaylandvideobridge)$" + "maxsize 1 1,class:^(xwaylandvideobridge)$" + "noblur,class:^(xwaylandvideobridge)$" + ]; + + monitor = [ + ",preferred,auto,1" + ]; + + xwayland = { + force_zero_scaling = true; + }; + + gestures = { + workspace_swipe = true; + workspace_swipe_direction_lock = false; + }; + ecosystem = { + no_update_news = true; + no_donation_nag = true; + }; + }; + }; } From c8f469b6d5fea439d2b348079423c9a9de95b2d4 Mon Sep 17 00:00:00 2001 From: Pedro Rey Anca Date: Thu, 24 Jul 2025 19:02:58 +0200 Subject: [PATCH 06/10] Fix ZSH config (forgot to commit this) --- modules/home/zsh.nix | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/modules/home/zsh.nix b/modules/home/zsh.nix index b10dca6..610730c 100644 --- a/modules/home/zsh.nix +++ b/modules/home/zsh.nix @@ -5,6 +5,8 @@ host, ... }: { + home.packages = with pkgs; [fzf eza git fd]; + programs.zsh = { enable = true; enableCompletion = true; @@ -15,8 +17,6 @@ plugins = ["git" "fzf"]; }; shellAliases = { - # record = "wf-recorder --audio=alsa_output.pci-0000_08_00.6.analog-stereo.monitor -f $HOME/Videos/$(date +'%Y%m%d%H%M%S_1.mp4')"; - # Utils c = "clear"; cd = "z"; @@ -71,8 +71,7 @@ # ssh s = "kitten ssh"; - ssh = "kitten ssh"; - ossh = "ssh"; + kssh = "kitten ssh"; }; }; From 88abf3ed4d9dab7ad932ee043df50cce4a4b05ef Mon Sep 17 00:00:00 2001 From: Pedro Rey Anca Date: Thu, 24 Jul 2025 19:05:09 +0200 Subject: [PATCH 07/10] Do not allow unfree (except steam) --- flake.nix | 1 - modules/core/nix.nix | 12 +++++++++++- modules/home/gaming.nix | 5 ----- modules/home/retroarch.nix | 1 - modules/home/vscodium.nix | 4 +--- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/flake.nix b/flake.nix index 950fc37..ba3cb5d 100644 --- a/flake.nix +++ b/flake.nix @@ -37,7 +37,6 @@ system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; - config.allowUnfree = true; }; lib = nixpkgs.lib; in { diff --git a/modules/core/nix.nix b/modules/core/nix.nix index 4b1337a..0555461 100644 --- a/modules/core/nix.nix +++ b/modules/core/nix.nix @@ -1,5 +1,15 @@ -{username, ...}: { +{ + username, + lib, + ... +}: { nix.settings = { trusted-users = ["${username}"]; }; + + nixpkgs.config.allowUnfreePredicate = pkg: + builtins.elem (lib.getName pkg) [ + "steam" + "steam-unwrapped" + ]; } diff --git a/modules/home/gaming.nix b/modules/home/gaming.nix index f1fe994..3400e5f 100644 --- a/modules/home/gaming.nix +++ b/modules/home/gaming.nix @@ -24,17 +24,12 @@ vitetris nethack - ## Celeste - celeste-classic - celeste-classic-pm - ## Doom # gzdoom crispy-doom ## Emulation sameboy - snes9x cemu dolphin-emu ryujinx diff --git a/modules/home/retroarch.nix b/modules/home/retroarch.nix index 4bee7d2..9cecd41 100644 --- a/modules/home/retroarch.nix +++ b/modules/home/retroarch.nix @@ -5,7 +5,6 @@ fceumm gambatte mgba - snes9x ])) ]; } diff --git a/modules/home/vscodium.nix b/modules/home/vscodium.nix index bd33d2c..5ec14b9 100644 --- a/modules/home/vscodium.nix +++ b/modules/home/vscodium.nix @@ -14,9 +14,7 @@ # python ms-python.python ms-python.black-formatter - # C/C++ - ms-vscode.cpptools - # OCaml + # OCaml ocamllabs.ocaml-platform # CMake ms-vscode.cmake-tools From 9385849afda4688b1e0c817397375c29eecc8835 Mon Sep 17 00:00:00 2001 From: Pedro Rey Anca Date: Thu, 24 Jul 2025 19:05:56 +0200 Subject: [PATCH 08/10] Auto-unlock gnome keyring on login and install libsecret --- modules/core/services.nix | 8 +++++--- modules/core/wayland.nix | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/modules/core/services.nix b/modules/core/services.nix index a6f02ec..bbfa371 100644 --- a/modules/core/services.nix +++ b/modules/core/services.nix @@ -1,9 +1,9 @@ -{...}: { +{pkgs, ...}: { services = { gvfs.enable = true; gnome.gnome-keyring.enable = true; dbus.enable = true; - flatpak.enable = true; + flatpak.enable = true; printing.enable = true; blueman.enable = true; avahi = { @@ -12,4 +12,6 @@ openFirewall = true; }; }; - } + + environment.systemPackages = [pkgs.libsecret]; +} diff --git a/modules/core/wayland.nix b/modules/core/wayland.nix index f00a3f5..105edff 100644 --- a/modules/core/wayland.nix +++ b/modules/core/wayland.nix @@ -39,6 +39,7 @@ command = "uwsm start hyprland-uwsm.desktop"; user = "${username}"; }; + security.pam.services.greetd.enableGnomeKeyring = true; environment.sessionVariables.XKB_DEFAULT_LAYOUT = "es"; } From 0153b47408509aff6ab69afedf2588af76b8ba82 Mon Sep 17 00:00:00 2001 From: Pedro Rey Anca Date: Fri, 25 Jul 2025 12:59:00 +0200 Subject: [PATCH 09/10] Remove xserver.nix --- modules/core/default.nix | 1 - modules/core/xserver.nix | 27 --------------------------- 2 files changed, 28 deletions(-) delete mode 100644 modules/core/xserver.nix diff --git a/modules/core/default.nix b/modules/core/default.nix index d7aa66f..0ab7818 100644 --- a/modules/core/default.nix +++ b/modules/core/default.nix @@ -9,7 +9,6 @@ imports = [(import ./bootloader.nix)] ++ [(import ./hardware.nix)] - ++ [(import ./xserver.nix)] ++ [(import ./nix.nix)] ++ [(import ./network.nix)] ++ [(import ./pipewire.nix)] diff --git a/modules/core/xserver.nix b/modules/core/xserver.nix deleted file mode 100644 index 1f87711..0000000 --- a/modules/core/xserver.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - pkgs, - username, - ... -}: { - services = { - xserver = { - enable = true; - xkb.layout = "es,us"; - }; - - displayManager.autoLogin = { - enable = true; - user = "${username}"; - }; - libinput = { - enable = true; - # mouse = { - # accelProfile = "flat"; - # }; - }; - }; - # To prevent getting stuck at shutdown - systemd.extraConfig = "DefaultTimeoutStopSec=10s"; - - environment.systemPackages = [pkgs.xorg.xhost]; # GParted (and others) won't start if not installed -} From 6b04ee02590183065832ffa92afd8f1d0e8a5b16 Mon Sep 17 00:00:00 2001 From: Pedro Rey Anca Date: Wed, 6 Aug 2025 22:23:36 +0200 Subject: [PATCH 10/10] Remove unused aliases --- modules/home/zsh.nix | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/modules/home/zsh.nix b/modules/home/zsh.nix index 610730c..6642582 100644 --- a/modules/home/zsh.nix +++ b/modules/home/zsh.nix @@ -5,36 +5,26 @@ host, ... }: { - home.packages = with pkgs; [fzf eza git fd]; + home.packages = with pkgs; [fzf git]; programs.zsh = { enable = true; enableCompletion = true; autosuggestion.enable = true; syntaxHighlighting.enable = true; + oh-my-zsh = { enable = true; plugins = ["git" "fzf"]; }; + shellAliases = { # Utils c = "clear"; cd = "z"; tt = "gtrash put"; - cat = "bat"; - nano = "micro"; - code = "codium"; - py = "python"; icat = "kitten icat"; - dsize = "du -hs"; - findw = "grep -rl"; - pdf = "tdf"; open = "xdg-open"; - find = "fd"; - - l = "eza --icons -a --group-directories-first -1"; #EZA_ICON_SPACING=2 - ll = "eza --icons -a --group-directories-first -1 --no-user --long"; - tree = "eza --icons --tree --group-directories-first"; # Nixos cdnix = "cd ~/nixos-config && codium ~/nixos-config";