diff --git a/flake.nix b/flake.nix index ba3cb5d..950fc37 100644 --- a/flake.nix +++ b/flake.nix @@ -37,6 +37,7 @@ system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; + config.allowUnfree = true; }; lib = nixpkgs.lib; in { diff --git a/modules/core/bootloader.nix b/modules/core/bootloader.nix index 58553ef..9619060 100644 --- a/modules/core/bootloader.nix +++ b/modules/core/bootloader.nix @@ -11,4 +11,5 @@ }; efi.canTouchEfiVariables = lib.mkDefault true; }; + boot.kernelPackages = pkgs.linuxPackages_latest; } diff --git a/modules/core/default.nix b/modules/core/default.nix index 0ab7818..d7aa66f 100644 --- a/modules/core/default.nix +++ b/modules/core/default.nix @@ -9,6 +9,7 @@ imports = [(import ./bootloader.nix)] ++ [(import ./hardware.nix)] + ++ [(import ./xserver.nix)] ++ [(import ./nix.nix)] ++ [(import ./network.nix)] ++ [(import ./pipewire.nix)] diff --git a/modules/core/nix.nix b/modules/core/nix.nix index 0555461..4b1337a 100644 --- a/modules/core/nix.nix +++ b/modules/core/nix.nix @@ -1,15 +1,5 @@ -{ - username, - lib, - ... -}: { +{username, ...}: { nix.settings = { trusted-users = ["${username}"]; }; - - nixpkgs.config.allowUnfreePredicate = pkg: - builtins.elem (lib.getName pkg) [ - "steam" - "steam-unwrapped" - ]; } diff --git a/modules/core/services.nix b/modules/core/services.nix index bbfa371..391e45e 100644 --- a/modules/core/services.nix +++ b/modules/core/services.nix @@ -1,8 +1,9 @@ -{pkgs, ...}: { +{...}: { services = { gvfs.enable = true; gnome.gnome-keyring.enable = true; dbus.enable = true; + fstrim.enable = true; flatpak.enable = true; printing.enable = true; blueman.enable = true; @@ -12,6 +13,8 @@ openFirewall = true; }; }; - - environment.systemPackages = [pkgs.libsecret]; + 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 b5acb45..bf617a9 100644 --- a/modules/core/system.nix +++ b/modules/core/system.nix @@ -5,10 +5,13 @@ 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; @@ -16,15 +19,27 @@ 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/core/wayland.nix b/modules/core/wayland.nix index 105edff..f00a3f5 100644 --- a/modules/core/wayland.nix +++ b/modules/core/wayland.nix @@ -39,7 +39,6 @@ command = "uwsm start hyprland-uwsm.desktop"; user = "${username}"; }; - security.pam.services.greetd.enableGnomeKeyring = true; environment.sessionVariables.XKB_DEFAULT_LAYOUT = "es"; } diff --git a/modules/core/xserver.nix b/modules/core/xserver.nix new file mode 100644 index 0000000..1f87711 --- /dev/null +++ b/modules/core/xserver.nix @@ -0,0 +1,27 @@ +{ + 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 +} diff --git a/modules/home/default.nix b/modules/home/default.nix index bbb821c..e94b8d6 100644 --- a/modules/home/default.nix +++ b/modules/home/default.nix @@ -11,8 +11,7 @@ ++ [(import ./cava.nix)] # audio visualizer ++ [(import ./cliphist.nix)] # clipboard ++ [(import ./direnv.nix)] - ++ [(import ./discord.nix)] - ++ [(import ./distrobox.nix)] + ++ [(import ./discord.nix)] # discord with catppuccin theme ++ [(import ./gpg.nix)] # GnuPG and its agent (gpg-agent) ++ [(import ./fuzzel.nix)] # launcher ++ [(import ./gaming.nix)] # packages related to gaming @@ -22,7 +21,6 @@ ++ [(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 deleted file mode 100644 index 581d63d..0000000 --- a/modules/home/distrobox.nix +++ /dev/null @@ -1,28 +0,0 @@ -{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/gaming.nix b/modules/home/gaming.nix index 3400e5f..f1fe994 100644 --- a/modules/home/gaming.nix +++ b/modules/home/gaming.nix @@ -24,12 +24,17 @@ vitetris nethack + ## Celeste + celeste-classic + celeste-classic-pm + ## Doom # gzdoom crispy-doom ## Emulation sameboy + snes9x cemu dolphin-emu ryujinx diff --git a/modules/home/gtk.nix b/modules/home/gtk.nix index 2d9e351..e586066 100644 --- a/modules/home/gtk.nix +++ b/modules/home/gtk.nix @@ -4,6 +4,14 @@ ... }: { 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; diff --git a/modules/home/hyprland/config.nix b/modules/home/hyprland/config.nix new file mode 100644 index 0000000..781817d --- /dev/null +++ b/modules/home/hyprland/config.nix @@ -0,0 +1,298 @@ +{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; + }; + }; + }; +} diff --git a/modules/home/hyprland/default.nix b/modules/home/hyprland/default.nix index d50f9ba..40d1698 100644 --- a/modules/home/hyprland/default.nix +++ b/modules/home/hyprland/default.nix @@ -1,6 +1,7 @@ {...}: { 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 4b2fffb..d4ca52a 100644 --- a/modules/home/hyprland/hyprland.nix +++ b/modules/home/hyprland/hyprland.nix @@ -4,6 +4,7 @@ ... }: { home.packages = with pkgs; [ + # swww swaybg inputs.hypr-contrib.packages.${pkgs.system}.grimblast hyprpicker @@ -14,9 +15,7 @@ glib wayland ]; - - services.hyprpolkitagent.enable = true; - + systemd.user.targets.hyprland-session.Unit.Wants = ["xdg-desktop-autostart.target"]; wayland.windowManager.hyprland = { enable = true; xwayland = { @@ -25,306 +24,7 @@ }; # enableNvidiaPatches = false; systemd.enable = false; - - 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; - }; - }; }; + + services.hyprpolkitagent.enable = true; } diff --git a/modules/home/matrix.nix b/modules/home/matrix.nix deleted file mode 100644 index 8133f6e..0000000 --- a/modules/home/matrix.nix +++ /dev/null @@ -1,4 +0,0 @@ -{pkgs, ...}: { - programs.element-desktop.enable = true; - home.packages = with pkgs; [fractal]; -} diff --git a/modules/home/packages.nix b/modules/home/packages.nix index 002bf49..2bcafde 100644 --- a/modules/home/packages.nix +++ b/modules/home/packages.nix @@ -17,62 +17,82 @@ }) ["mp4" "x-matroska" "webm"]); home.packages = with pkgs; [ - # CLI utils - bitwarden-cli - file # Show file information - gtrash # rm replacement, put deleted files in system trash - imagemagick - lazygit # Simple terminal UI for git commands - jq # command-line JSON processor - nitch # neofetch-like util - tdf # cli pdf viewer - todo # cli todo list - yazi # terminal file manager - yt-dlp - 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 + bitwise # cli tool for bit / hex manipulation + 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 - 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 + fzf # fuzzy finder gimp gnome-text-editor - gparted # partition manager - vimiv-qt # Image viewer, vim-like + 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 + 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 # 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 diff --git a/modules/home/retroarch.nix b/modules/home/retroarch.nix index 9cecd41..4bee7d2 100644 --- a/modules/home/retroarch.nix +++ b/modules/home/retroarch.nix @@ -5,6 +5,7 @@ fceumm gambatte mgba + snes9x ])) ]; } diff --git a/modules/home/vscodium.nix b/modules/home/vscodium.nix index 5ec14b9..bd33d2c 100644 --- a/modules/home/vscodium.nix +++ b/modules/home/vscodium.nix @@ -14,7 +14,9 @@ # python ms-python.python ms-python.black-formatter - # OCaml + # C/C++ + ms-vscode.cpptools + # OCaml ocamllabs.ocaml-platform # CMake ms-vscode.cmake-tools diff --git a/modules/home/zsh.nix b/modules/home/zsh.nix index 6642582..b10dca6 100644 --- a/modules/home/zsh.nix +++ b/modules/home/zsh.nix @@ -5,26 +5,36 @@ host, ... }: { - 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 = { + # 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"; 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"; @@ -61,7 +71,8 @@ # ssh s = "kitten ssh"; - kssh = "kitten ssh"; + ssh = "kitten ssh"; + ossh = "ssh"; }; };