diff --git a/flake.lock b/flake.lock index 4e5c74d..05c8517 100644 --- a/flake.lock +++ b/flake.lock @@ -78,11 +78,11 @@ ] }, "locked": { - "lastModified": 1746798521, - "narHash": "sha256-axfz/jBEH9XHpS7YSumstV7b2PrPf7L8bhWUtLBv3nA=", + "lastModified": 1747279714, + "narHash": "sha256-UdxlE8yyrKiGq3bgGyJ78AdFwh+fuRAruKtyFY5Zq5I=", "owner": "nix-community", "repo": "home-manager", - "rev": "e95a7c5b6fa93304cd2fd78cf676c4f6d23c422c", + "rev": "954615c510c9faa3ee7fb6607ff72e55905e69f2", "type": "github" }, "original": { @@ -165,11 +165,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1746794848, - "narHash": "sha256-p765AZ0h8NaMIqNr3WJav20UMTd/K5arw/N0Yb9jn3c=", + "lastModified": 1747301504, + "narHash": "sha256-GAI36RNzF9yC0JOauS1+h681ElwdbD9q/qxxuIqcejQ=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "25cf06f6cfe1b23b97d9beae91247413a3683803", + "rev": "a5c9b3e49047b4f03f79c5146d8925363eab3072", "type": "github" }, "original": { @@ -628,11 +628,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1746663147, - "narHash": "sha256-Ua0drDHawlzNqJnclTJGf87dBmaO/tn7iZ+TCkTRpRc=", + "lastModified": 1747179050, + "narHash": "sha256-qhFMmDkeJX9KJwr5H32f1r7Prs7XbQWtO0h3V0a0rFY=", "owner": "nixos", "repo": "nixpkgs", - "rev": "dda3dcd3fe03e991015e9a74b22d35950f264a54", + "rev": "adaa24fbf46737f3f1b5497bf64bae750f82942e", "type": "github" }, "original": { diff --git a/hosts/darp8/file.nix b/hosts/darp8/file.nix new file mode 100644 index 0000000..89afda2 --- /dev/null +++ b/hosts/darp8/file.nix @@ -0,0 +1,52 @@ +{ config, pkgs, cfg, ... }: + +let + inherit (config.home) username homeDirectory; + + mkSymlinkAttrs = import ../../utils/mkSymlinkAttrs.nix { + inherit pkgs; + inherit (cfg) context runtimeRoot; + hm = config.lib; # same as: cfg.context.inputs.home-manager.lib.hm; + }; + +in +{ + # Symlink dotfiles + home.file = mkSymlinkAttrs { + ".config/hypr" = { + source = ../../modules/non-nix_configs/hypr; + outOfStoreSymlink = true; + recursive = true; + }; + + ".config/emacs" = { + source = ../../modules/non-nix_configs/emacs; + outOfStoreSymlink = true; + recursive = true; + }; + + ".config/ghostty" = { + source = ../../modules/non-nix_configs/ghostty; + outOfStoreSymlink = true; + recursive = true; + }; + + ".config/kitty" = { + source = ../../modules/non-nix_configs/kitty; + outOfStoreSymlink = true; + recursive = true; + }; + + ".config/nvim" = { + source = ../../modules/non-nix_configs/nvim; + outOfStoreSymlink = true; + recursive = true; + }; + + ".config/wofi" = { + source = ../../modules/non-nix_configs/wofi; + outOfStoreSymlink = true; + recursive = true; + }; + }; +} diff --git a/hosts/darp8/home.nix b/hosts/darp8/home.nix index d063359..1348009 100644 --- a/hosts/darp8/home.nix +++ b/hosts/darp8/home.nix @@ -5,6 +5,9 @@ home.homeDirectory = "/home/liamm"; imports = [ + # home.file imports + ./file.nix + # general modules ../../modules/home-manager/dunst.nix ../../modules/home-manager/tmux.nix @@ -70,8 +73,6 @@ zip ]; - home.file = {}; - home.sessionVariables = { EDITOR = "emacsclient"; GIT_EDITOR = "nvim"; @@ -121,26 +122,6 @@ xdg.enable = true; xdg.configFile = { - "emacs" = { - recursive = true; - source = ../../modules/non-nix_configs/emacs; - }; - "ghostty" = { - recursive = true; - source = ../../modules/non-nix_configs/ghostty; - }; - "kitty" = { - recursive = true; - source = ../../modules/non-nix_configs/kitty; - }; - "nvim" = { - recursive = true; - source = ../../modules/non-nix_configs/nvim; - }; - "wofi" = { - recursive = true; - source = ../../modules/non-nix_configs/wofi; - }; "user-dirs.dirs".source = ../../modules/non-nix_configs/user-dirs.dirs; "user-dirs.locale".source = ../../modules/non-nix_configs/user-dirs.locale; }; diff --git a/modules/desktop/hyprland.nix b/modules/desktop/hyprland.nix index 85b9718..97fc907 100644 --- a/modules/desktop/hyprland.nix +++ b/modules/desktop/hyprland.nix @@ -33,321 +33,6 @@ "--all" ]; }; - settings = { - monitor = [ - "eDP-1,1920x1080@60,0x0,1" - "HDMI-A-1,2550x1440@144,auto,1,mirror,eDP-1 " - ",preferred,auto,1,mirror,eDP-1" - ]; - exec-once = [ - "wl-clipboard-history -t" - "wl-paste -p --watch wl-copy -p ''" - "fcitx5 -d" - ]; - env = [ - "WLR_NO_HARDWARE_CURSORS,1" - "HYPRCURSOR_THEME,${config.gtk.cursorTheme.name}" - "HYPRCURSOR_SIZE,24" - "XDG_CURRENT_DESKTOP,Hyprland" - "XDG_SESSION_TYPE,wayland" - "XDG_SESSION_DESKTOP,Hyprland" - "GTK_THEME,${config.gtk.theme.name}" - "QT_QPA_PLATFORM,xcb;Hyprland" - "XCURSOR_THEME,${config.gtk.cursorTheme.name}" - "XCURSOR_SIZE,24" - ]; - input = { - kb_layout = "us"; - kb_variant = ""; - kb_model = ""; - kb_options = ""; - kb_rules = ""; - - follow_mouse = 1; - numlock_by_default = true; - - touchpad = { - disable_while_typing = true; - natural_scroll = true; - middle_button_emulation = true; - scroll_factor = 0.5; - drag_lock = false; - tap-to-click = true; - }; - sensitivity = 0; - }; - general = { - gaps_in = 2; - gaps_out = 4; - border_size = 2; - "col.active_border" = "rgba(881798FF)"; - "col.inactive_border" = "rgba(471520FF)"; - layout = "dwindle"; - }; - - debug = { - disable_logs = false; - }; - - misc = { - disable_hyprland_logo = false; - disable_splash_rendering = false; - mouse_move_enables_dpms = true; - key_press_enables_dpms = true; - }; - - ecosystem = { - no_update_news = true; - no_donation_nag = true; - }; - - experimental = { - xx_color_management_v4 = true; - }; - - decoration = { - rounding = 10; - blur = { - enabled = true; - size = 3; - passes = 1; - xray = true; - new_optimizations = "on"; - }; - - shadow = { - enabled = true; # formerly drop_shadow - range = 4; - render_power = 3; - color = "rgba(1a1a1aee)"; - }; - }; - - animations = { - enabled = true; - - bezier = "myBezier, 0.05, 0.9, 0.1, 1.05"; - animation = [ - "windows, 1, 7, myBezier" - "windowsOut, 1, 7, default, popin 80%" - "border, 1, 10, default" - "borderangle, 1, 8, default" - "fade, 1, 7, default" - "workspaces, 1, 6, default" - ]; - }; - - dwindle = { - pseudotile = true; - preserve_split = true; - }; - - gestures = { - workspace_swipe = true; - workspace_swipe_forever = true; - }; - - windowrule = [ - "idleinhibit fullscreen, class:firefox" - "idleinhibit fullscreen, class:floorp" - "idleinhibit fullscreen, class:ghostty" - "idleinhibit focus, class:firefox" - "idleinhibit focus, class:floorp" - "idleinhibit focus, class:mpv" - "idleinhibit focus, class:^(emacs)$" - "idleinhibit focus, class:^(Emacs)$" - "idleinhibit focus, class:^(discord)$" - "idleinhibit focus, class:^(Discord)$" - "idleinhibit focus, class:^(spotify)$" - "float, class:polkit-kde-authentication-agent-1" - "float, class:^(praat)$" - "float, class:^(network)$" - "float, class:^(nm-)$" - "float, class:^(Network)$" - "float, class:Rofi" - "float, class:Gimp" - "float, class:Nautilus" - "float, class:notification" - "float, class:^(launcher)$" - "tile, class:Spotify" - "tile, title:Minecraft" - "workspace 2, class:KeePassXC" - "workspace 3, class:firefox" - "workspace 3, class:floorp" - "workspace 4, class:Spotify" - "workspace 6, class:discord" - "workspace 6, class:Signal" - "workspace 10, title:Minecraft" - ]; - - "$mainMod" = "SUPER"; - "$altMod" = "ALT"; - "$ctrlMod" = "CTRL"; - - - # used for screenshots - "$screenshotarea" = "hyprctl keyword animation 'fadeOut,0,0,default'; grimblast --notify copy area; hyprctl keyword animation 'fadeOut,1,4,default'"; - # for locking screen - "$lock" = "hyprlock"; - - bind = [ - # Program binds - "$altMod, Return, exec, ghostty" - "$altMod SHIFT, Return, exec, alacritty" - "$mainMod SHIFT, D, exec, discord --enable-blink-features=MiddleClickAutoscroll" - "$mainMod SHIFT, E, exec, emacsclient -c -a 'emacs'" - "$mainMode SHIFT, F, exec, focus-linux" - "$mainMod, SPACE, exec, pkill wofi || wofi" - "$mainMod, E, exec, nautilus" - "$mainMod, S, exec, spotify" - "$mainMod, P, exec, hyprpicker -a -f hex" - - # Screenshot - ", Print, exec, $screenshotarea" - "SHIFT, Print, exec, grimblast --notify --cursor copy output" - - # WM management binds - "$mainMod SHIFT, P, pseudo," # dwindle - "$mainMod, C, killactive," - "$mainMod control, Q, exec, $lock" - "$mainMod, F4, exit," - "$mainMod, V, togglefloating, " - "$mainMod SHIFT, S, togglesplit," # dwindle - "$mainMod, F, fullscreen," - - - "$mainMod, H, movefocus, l" - "$mainMod, L, movefocus, r" - "$mainMod, K, movefocus, u" - "$mainMod, J, movefocus, d" - "$mainMod, comma, focusmonitor, -1" - "$mainMod, period, focusmonitor, +1" - - "$mainMod SHIFT, H, movewindow, l" - "$mainMod SHIFT, L, movewindow, r" - "$mainMod SHIFT, K, movewindow, u" - "$mainMod SHIFT, J, movewindow, d" - "$mainMod SHIFT, comma, movecurrentworkspacetomonitor, -1" - "$mainMod SHIFT, period, movecurrentworkspacetomonitor, +1" - - "$mainMod, right, resizeactive, 10 0" - "$mainMod, left, resizeactive, -10 0" - "$mainMod, up, resizeactive, 0 -10" - "$mainMod, down, resizeactive, 0 10" - - "$mainMod, 1, workspace, 1" - "$mainMod, 2, workspace, 2" - "$mainMod, 3, workspace, 3" - "$mainMod, 4, workspace, 4" - "$mainMod, 5, workspace, 5" - "$mainMod, 6, workspace, 6" - "$mainMod, 7, workspace, 7" - "$mainMod, 8, workspace, 8" - "$mainMod, 9, workspace, 9" - "$mainMod, 0, workspace, 10" - - "$mainMod SHIFT, 1, movetoworkspace, 1" - "$mainMod SHIFT, 2, movetoworkspace, 2" - "$mainMod SHIFT, 3, movetoworkspace, 3" - "$mainMod SHIFT, 4, movetoworkspace, 4" - "$mainMod SHIFT, 5, movetoworkspace, 5" - "$mainMod SHIFT, 6, movetoworkspace, 6" - "$mainMod SHIFT, 7, movetoworkspace, 7" - "$mainMod SHIFT, 8, movetoworkspace, 8" - "$mainMod SHIFT, 9, movetoworkspace, 9" - "$mainMod SHIFT, 0, movetoworkspace, 10" - "$mainMod SHIFT CTRL, right, movetoworkspace, +1" - "$mainMod SHIFT CTRL, left, movetoworkspace, -1" - - # Scroll through existing workspaces with mainMod + scroll - "$mainMod, mouse_down, workspace, e+1" - "$mainMod, mouse_up, workspace, e-1" - - # Tab through existing workspaces - "$mainMod, Tab, workspace, e+1" - "$mainMod SHIFT, Tab, workspace, e-1" - - "$mainMod CTRL, right, workspace, +1" - "$mainMod CTRL, left, workspace, -1" - ]; - - bindl = [ - ", XF86AudioPlay, exec, playerctl play-pause" - ", XF86AudioNext, exec, playerctl next" - ", XF86AudioPrev, exec, playerctl previous" - ]; - - bindel = [ - ", XF86AudioRaiseVolume, exec, pamixer -i 5 && ${../scripts/progress-notify.sh} audio" - ", XF86AudioLowerVolume, exec, pamixer -d 5 && ${../scripts/progress-notify.sh} audio" - ", XF86AudioMute, exec, pamixer -t && ${../scripts/progress-notify.sh} mute" - ]; - - binde = [ - ", XF86MonBrightnessDown, exec, brightnessctl set 10%- && ${../scripts/progress-notify.sh} brightness" - ", XF86MonBrightnessUp, exec, brightnessctl set 10%+ && ${../scripts/progress-notify.sh} brightness" - ]; - - # Move/resize windows with mainMod + LMB/RMB and dragging - bindm = [ - "$mainMod, mouse:272, movewindow" - "$mainMod, mouse:273, resizewindow" - ]; - - }; - extraConfig = '' - bind = $mainMod, R, submap, resize - submap = resize - bind=, escape,submap,reset - - binde=, left, resizeactive, -10 0 - bindr=, left, submap, reset - binde=, right, resizeactive, 10 0 - bindr=, right, submap, reset - binde=, up, resizeactive, 0 10 - bindr=, up, submap, reset - binde=, down, resizeactive, 0 -10 - bindr=, down, submap, reset - - binde=, H, resizeactive, -10 0 - bindr=, H, submap, reset - binde=, J, resizeactive, 0 -10 - bindr=, J, submap, reset - binde=, K, resizeactive, 0 10 - bindr=, K, submap, reset - binde=, L, resizeactive, 10 0 - bindr=, L, submap, reset - - submap=reset - - bind = $mainMod, B, submap, browser_select - submap = browser_select - - bind =, B, exec, brave - bind =, B, submap, reset - - bind = SHIFT, F, exec, firefox - bind = SHIFT, F, submap, reset - - bind =, F, exec, floorp - bind =, F, submap, reset - - bind =, C, exec, floorp -p limalone -no-remote - bind =, C, submap, reset - - bind=, escape,submap,reset - submap=reset - - bind = $mainMod SHIFT, V, submap, video_stuff - submap = video_stuff - bind = , O, exec, obs - bind = , O, submap, reset - bind = , V, exec , kdenlive - bind = , V, submap, reset - - bind=, escape,submap,reset - submap = reset - ''; }; lib.inputMethod.fcitx5.waylandFrontend = true; @@ -355,129 +40,15 @@ programs = { hyprlock = { enable = true; - settings = { - general = { - disable_loading_bar = true; - hide_cursor = true; - no_fade_in = false; - }; - background = [ - { - path = "~/pictures/.wallpapers/bloody_snow.jpg"; - blur_passes = 2; - blur_size = 8; - } - ]; - input-field = [ - { - monitor = ""; - size = "200, 30"; - outline_thickness = 3; - dots_size = 0.33; - dots_spacing = 0.15; - dots_center = false; - outer_color = "#fe0b00"; - inner_color = "#0c0c0c"; - font_color = "#efefef"; - fade_on_empty = true; - check_color = "#0eff0d"; - fail_color = "#ff009e"; - capslock_color = "#bb00ee"; - placeholder_text = "Input Password..."; - fail_text = "$FAIL ($ATTEMPTS)"; - } - ]; - label = [ - { - monitor = ""; - text = "$TIME"; - text_align = "center"; - color = "#ffffee"; - font_size = 28; - font_family = builtins.head osConfig.fonts.fontconfig.defaultFonts.sansSerif; - - position = "0, 80"; - halign = "center"; - valign = "center"; - } - { - monitor = ""; - text = "cmd[update:1000] echo \" $(date +'%A, %b %d %Y')\""; - text_align = "center"; - color = "#ffffee"; - font_size = 18; - font_family = builtins.head osConfig.fonts.fontconfig.defaultFonts.sansSerif; - - position = "80, 80"; - halign = "left"; - valign = "bottom"; - } - { - monitor = ""; - text = "cmd[update:1000] echo \"󰁿$(cat /sys/class/power_supply/BAT0/capacity)\""; - text_align = "center"; - color = "#ffffee"; - font_size = 18; - font_family = builtins.head osConfig.fonts.fontconfig.defaultFonts.sansSerif; - - position = "80, 80"; - halign = "right"; - valign = "bottom"; - } - ]; - }; }; }; services = { hyprpaper = { enable = true; - settings = { - ipc = "on"; - splash = false; - preload = [ - "~/pictures/.wallpapers/skyline-view.png" - "~/pictures/.wallpapers/iceland-winter-mountains.jpg" - ]; - wallpaper = [ - "eDP-1,~/pictures/.wallpapers/iceland-winter-mountains.jpg" - ]; - }; }; hypridle = { enable = true; - settings = { - general = { - lock_cmd = "${pkgs.procps}/bin/pidof hyprlock || ${pkgs.hyprlock}/bin/hyprlock"; # avoid starting multiple sessions - before_sleep_cmd = "${pkgs.systemd}/bin/loginctl lock-session"; # lock before suspend. - after_sleep_cmd = "${pkgs.hyprland}/bin/hyprctl dispatch dpms on"; # to avoid having to hit key twice to turn on display - }; - listeners = [ - { - timeout = 120; - on-timeout = "${pkgs.brightnessctl}/bin/brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor. - on-resume = "${pkgs.brightnessctl}/bin/brightnessctl -r"; # monitor backlight restor. - } - { - timeout = 120; - on-timeout = "${pkgs.brightnessctl}/bin/brightnessctl -sd rgb:kbd_backlight set 0"; # turn off keyboard backlight. - on-resume = "${pkgs.brightnessctl}/bin/brightnessctl -rd rgb:kbd_backlight"; # turn on keyboard backlight. - } - { - timeout = 180; - on-timeout = "${pkgs.systemd}/bin/loginctl lock-session"; # lock screen when timeout has passed - } - { - timeout = 300; - on-timeout = "${pkgs.hyprland}/bin/hyprctl dispatch dpms off"; # screen off when timeout has passed - on-resume = "${pkgs.hyprland}/bin/hyprctl dispatch dpms on"; # screen on when activity is detected after timeout has fired. - } - { - timeout = 300; - on-timeout = "${pkgs.systemd}/bin/systemctl suspend"; # suspend pc - } - ]; - }; }; }; } diff --git a/modules/non-nix_configs/ghostty/config b/modules/non-nix_configs/ghostty/config index dfad3d5..beb4117 100644 --- a/modules/non-nix_configs/ghostty/config +++ b/modules/non-nix_configs/ghostty/config @@ -21,6 +21,7 @@ gtk-wide-tabs = true # Font font-size = 14 +font-family = JetBrainsMono NF # Theme # theme = Grape diff --git a/modules/non-nix_configs/hypr/hypridle.conf b/modules/non-nix_configs/hypr/hypridle.conf new file mode 100644 index 0000000..409d0a9 --- /dev/null +++ b/modules/non-nix_configs/hypr/hypridle.conf @@ -0,0 +1,33 @@ +general { + after_sleep_cmd=hyprctl dispatch dpms on + before_sleep_cmd=loginctl lock-session + lock_cmd=pidof hyprlock || hyprlock +} + +listeners { + on-resume=brightnessctl -r + on-timeout=brightnessctl -s set 10 + timeout=120 +} + +listeners { + on-resume=brightnessctl -rd rgb:kbd_backlight + on-timeout=brightnessctl -sd rgb:kbd_backlight set 0 + timeout=120 +} + +listeners { + on-timeout=loginctl lock-session + timeout=180 +} + +listeners { + on-resume=hyprctl dispatch dpms on + on-timeout=hyprctl dispatch dpms off + timeout=300 +} + +listeners { + on-timeout=systemctl suspend + timeout=300 +} diff --git a/modules/non-nix_configs/hypr/hyprland.conf b/modules/non-nix_configs/hypr/hyprland.conf new file mode 100644 index 0000000..cfde284 --- /dev/null +++ b/modules/non-nix_configs/hypr/hyprland.conf @@ -0,0 +1,291 @@ +# Startup +exec-once = dbus-update-activation-environment --systemd --all && systemctl --user stop hyprland-session.target && systemctl --user start hyprland-session.target +exec-once=wl-clipboard-history -t +exec-once=wl-paste -p --watch wl-copy -p '' +exec-once=fcitx5 -d + +# Monitors + +monitor=eDP-1,1920x1080@60,0x0,1 +monitor=HDMI-A-1,2550x1440@144,auto,1,mirror,eDP-1 +monitor=,preferred,auto,1,mirror,eDP-1 + +# Environment + +env=WLR_NO_HARDWARE_CURSORS,1 +env=HYPRCURSOR_THEME,Bibata-Modern-Ice +env=HYPRCURSOR_SIZE,24 +env=XDG_CURRENT_DESKTOP,Hyprland +env=XDG_SESSION_TYPE,wayland +env=XDG_SESSION_DESKTOP,Hyprland +env=GTK_THEME,Materia-dark +env=QT_QPA_PLATFORM,xcb;Hyprland +env=XCURSOR_THEME,Bibata-Modern-Ice +env=XCURSOR_SIZE,24 + +animations { + bezier=myBezier, 0.05, 0.9, 0.1, 1.05 + animation=windows, 1, 7, myBezier + animation=windowsOut, 1, 7, default, popin 80% + animation=border, 1, 10, default + animation=borderangle, 1, 8, default + animation=fade, 1, 7, default + animation=workspaces, 1, 6, default + enabled=true +} + +debug { + disable_logs=true +} + +decoration { + blur { + enabled=true + new_optimizations=on + passes=1 + size=3 + xray=true + } + + shadow { + color=rgba(1a1a1aee) + enabled=true + range=4 + render_power=3 + } + rounding=10 +} + +dwindle { + preserve_split=true + pseudotile=true +} + +ecosystem { + no_donation_nag=true + no_update_news=true +} + +experimental { + xx_color_management_v4=true +} + +$purple=rgba(881798FF) +$crimson=rgba(471520FF) + +general { + border_size=2 + col.active_border=$purple + col.inactive_border=$crimson + gaps_in=2 + gaps_out=4 + layout=dwindle +} + +gestures { + workspace_swipe=true + workspace_swipe_forever=true +} + +input { + touchpad { + disable_while_typing=true + drag_lock=false + middle_button_emulation=true + natural_scroll=true + scroll_factor=0.500000 + tap-to-click=true + } + follow_mouse=1 + kb_layout=us + kb_model= + kb_options= + kb_rules= + kb_variant= + numlock_by_default=true + sensitivity=0 +} + +misc { + disable_hyprland_logo=false + disable_splash_rendering=false + key_press_enables_dpms=true + mouse_move_enables_dpms=true +} + +# Window Rules + +windowrule=idleinhibit fullscreen, class:firefox +windowrule=idleinhibit fullscreen, class:floorp +windowrule=idleinhibit fullscreen, class:ghostty +windowrule=idleinhibit focus, class:firefox +windowrule=idleinhibit focus, class:floorp +windowrule=idleinhibit focus, class:mpv +windowrule=idleinhibit focus, class:^(emacs)$ +windowrule=idleinhibit focus, class:^(Emacs)$ +windowrule=idleinhibit focus, class:^(discord)$ +windowrule=idleinhibit focus, class:^(Discord)$ +windowrule=idleinhibit focus, class:^(spotify)$ +windowrule=float, class:polkit-kde-authentication-agent-1 +windowrule=float, class:^(praat)$ +windowrule=float, class:^(network)$ +windowrule=float, class:^(nm-)$ +windowrule=float, class:^(Network)$ +windowrule=float, class:Rofi +windowrule=float, class:Gimp +windowrule=float, class:Nautilus +windowrule=float, class:notification +windowrule=float, class:^(launcher)$ +windowrule=tile, class:Spotify +windowrule=tile, title:Minecraft +windowrule=workspace 2, class:KeePassXC +windowrule=workspace 3, class:firefox +windowrule=workspace 3, class:floorp +windowrule=workspace 4, class:Spotify +windowrule=workspace 6, class:discord +windowrule=workspace 6, class:Signal +windowrule=workspace 10, title:Minecraft + +# Binds + +$altMod=ALT +$ctrlMod=CTRL +$lock=hyprlock +$mainMod=SUPER +$screenshotarea=hyprctl keyword animation 'fadeOut,0,0,default'; grimblast --notify copy area; hyprctl keyword animation 'fadeOut,1,4,default' + +# Binds :: Programs + +bind=$altMod, Return, exec, ghostty +bind=$altMod SHIFT, Return, exec, alacritty +bind=$mainMod SHIFT, D, exec, discord --enable-blink-features=MiddleClickAutoscroll +bind=$mainMod SHIFT, E, exec, emacsclient -c -a 'emacs' +bind=$mainMode SHIFT, F, exec, focus-linux +bind=$mainMod, SPACE, exec, pkill wofi || wofi +bind=$mainMod, E, exec, nautilus +bind=$mainMod, S, exec, spotify +bind=$mainMod, P, exec, hyprpicker -a -f hex +bind=, Print, exec, $screenshotarea +bind=SHIFT, Print, exec, grimblast --notify --cursor copy output +bind=$mainMod SHIFT, P, pseudo, +bind=$mainMod, C, killactive, +bind=$mainMod control, Q, exec, $lock +bind=$mainMod, F4, exit, +bind=$mainMod, V, togglefloating, +bind=$mainMod SHIFT, S, togglesplit, + +# Binds :: Navigation + +bind=$mainMod, F, fullscreen, +bind=$mainMod, H, movefocus, l +bind=$mainMod, L, movefocus, r +bind=$mainMod, K, movefocus, u +bind=$mainMod, J, movefocus, d +bind=$mainMod, comma, focusmonitor, -1 +bind=$mainMod, period, focusmonitor, +1 +bind=$mainMod SHIFT, H, movewindow, l +bind=$mainMod SHIFT, L, movewindow, r +bind=$mainMod SHIFT, K, movewindow, u +bind=$mainMod SHIFT, J, movewindow, d +bind=$mainMod SHIFT, comma, movecurrentworkspacetomonitor, -1 +bind=$mainMod SHIFT, period, movecurrentworkspacetomonitor, +1 +bind=$mainMod, right, resizeactive, 10 0 +bind=$mainMod, left, resizeactive, -10 0 +bind=$mainMod, up, resizeactive, 0 -10 +bind=$mainMod, down, resizeactive, 0 10 +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 +bind=$mainMod SHIFT, 1, movetoworkspace, 1 +bind=$mainMod SHIFT, 2, movetoworkspace, 2 +bind=$mainMod SHIFT, 3, movetoworkspace, 3 +bind=$mainMod SHIFT, 4, movetoworkspace, 4 +bind=$mainMod SHIFT, 5, movetoworkspace, 5 +bind=$mainMod SHIFT, 6, movetoworkspace, 6 +bind=$mainMod SHIFT, 7, movetoworkspace, 7 +bind=$mainMod SHIFT, 8, movetoworkspace, 8 +bind=$mainMod SHIFT, 9, movetoworkspace, 9 +bind=$mainMod SHIFT, 0, movetoworkspace, 10 +bind=$mainMod SHIFT CTRL, right, movetoworkspace, +1 +bind=$mainMod SHIFT CTRL, left, movetoworkspace, -1 +bind=$mainMod, mouse_down, workspace, e+1 +bind=$mainMod, mouse_up, workspace, e-1 +bind=$mainMod, Tab, workspace, e+1 +bind=$mainMod SHIFT, Tab, workspace, e-1 +bind=$mainMod CTRL, right, workspace, +1 +bind=$mainMod CTRL, left, workspace, -1 + +bindm=$mainMod, mouse:272, movewindow +bindm=$mainMod, mouse:273, resizewindow + +# Binds :: MultiMedia + +binde=, XF86MonBrightnessDown, exec, brightnessctl set 10%- && $HOME/personal/nixos/modules/scripts/progress-notify.sh brightness +binde=, XF86MonBrightnessUp, exec, brightnessctl set 10%+ && $HOME/personal/nixos/modules/scripts/progress-notify.sh brightness +bindel=, XF86AudioRaiseVolume, exec, pamixer -i 5 && $HOME/personal/nixos/modules/scripts/progress-notify.sh audio +bindel=, XF86AudioLowerVolume, exec, pamixer -d 5 && $HOME/personal/nixos/modules/scripts/progress-notify.sh audio +bindel=, XF86AudioMute, exec, pamixer -t && $HOME/personal/nixos/modules/scripts/progress-notify.sh mute +bindl=, XF86AudioPlay, exec, playerctl play-pause +bindl=, XF86AudioNext, exec, playerctl next +bindl=, XF86AudioPrev, exec, playerctl previous + +# Binds :: Submaps + +bind = $mainMod, R, submap, resize +submap = resize +bind=, escape,submap,reset + +binde=, left, resizeactive, -10 0 +bindr=, left, submap, reset +binde=, right, resizeactive, 10 0 +bindr=, right, submap, reset +binde=, up, resizeactive, 0 10 +bindr=, up, submap, reset +binde=, down, resizeactive, 0 -10 +bindr=, down, submap, reset + +binde=, H, resizeactive, -10 0 +bindr=, H, submap, reset +binde=, J, resizeactive, 0 -10 +bindr=, J, submap, reset +binde=, K, resizeactive, 0 10 +bindr=, K, submap, reset +binde=, L, resizeactive, 10 0 +bindr=, L, submap, reset + +submap=reset + +bind = $mainMod, B, submap, browser_select +submap = browser_select + +bind =, B, exec, brave +bind =, B, submap, reset + +bind = SHIFT, F, exec, firefox +bind = SHIFT, F, submap, reset + +bind =, F, exec, floorp +bind =, F, submap, reset + +bind =, C, exec, floorp -p limalone -no-remote +bind =, C, submap, reset + +bind=, escape,submap,reset +submap=reset + +bind = $mainMod SHIFT, V, submap, video_stuff +submap = video_stuff +bind = , O, exec, obs +bind = , O, submap, reset +bind = , V, exec , kdenlive +bind = , V, submap, reset + +bind=, escape,submap,reset +submap = reset diff --git a/modules/non-nix_configs/hypr/hyprlock.conf b/modules/non-nix_configs/hypr/hyprlock.conf new file mode 100644 index 0000000..03c8f63 --- /dev/null +++ b/modules/non-nix_configs/hypr/hyprlock.conf @@ -0,0 +1,65 @@ +background { + blur_passes=2 + blur_size=8 + path=$HOME/pictures/.wallpapers/bloody_snow.jpg +} + +general { + disable_loading_bar=true + hide_cursor=true + no_fade_in=false +} + +input-field { + monitor= + size=200, 30 + capslock_color=#bb00ee + check_color=#0eff0d + dots_center=false + dots_size=0.330000 + dots_spacing=0.150000 + fade_on_empty=true + fail_color=#ff009e + fail_text=$FAIL ($ATTEMPTS) + font_color=#efefef + inner_color=#0c0c0c + outer_color=#fe0b00 + outline_thickness=3 + placeholder_text=Enter Password... +} + +label { + monitor= + color=#ffffee + font_family=DejaVu Sans + font_size=28 + halign=center + position=0, 80 + text=$TIME + text_align=center + valign=center +} + +label { + monitor= + color=#ffffee + font_family=DejaVu Sans + font_size=18 + halign=left + position=80, 80 + text=cmd[update:1000] echo " $(date +'%A, %b %d %Y')" + text_align=center + valign=bottom +} + +label { + monitor= + color=#ffffee + font_family=DejaVu Sans + font_size=18 + halign=right + position=80, 80 + text=cmd[update:1000] echo "󰁿$(cat /sys/class/power_supply/BAT0/capacity)" + text_align=center + valign=bottom +} diff --git a/modules/non-nix_configs/hypr/hyprpaper.conf b/modules/non-nix_configs/hypr/hyprpaper.conf new file mode 100644 index 0000000..b4e4d20 --- /dev/null +++ b/modules/non-nix_configs/hypr/hyprpaper.conf @@ -0,0 +1,5 @@ +ipc=on +preload=$HOME/pictures/.wallpapers/skyline-view.png +preload=$HOME/pictures/.wallpapers/iceland-winter-mountains.jpg +splash=false +wallpaper=eDP-1,$HOME/pictures/.wallpapers/iceland-winter-mountains.jpg diff --git a/utils/mkSymlinkAttrs.nix b/utils/mkSymlinkAttrs.nix new file mode 100644 index 0000000..e1ecb90 --- /dev/null +++ b/utils/mkSymlinkAttrs.nix @@ -0,0 +1,69 @@ +# Taken from: https://github.com/urob/dotfiles/blob/main/lib/mkSymlinkAttrs.nix + +# This function adds and interpretes outOfStoreSymlink option to home.file attribute sets. +# +# Usage: +# home.file = mkSymlinkAttrs { +# .foo = { source = "foo"; outOfStoreSymlink = true; recursive = true; }; +# .bar = { source = "foo/bar"; outOfStoreSymlink = true; }; +# }; +{ pkgs, hm, context, runtimeRoot, ... }: + +let + inherit (pkgs) lib; + + # Swap a path inside the nix store with the same path in runtimeRoot + runtimePath = path: + let + rootStr = toString context; # context is the `self` passed to flake outputs + pathStr = toString path; + in + assert lib.assertMsg (lib.hasPrefix rootStr pathStr) + "${pathStr} does not start with ${rootStr}"; + runtimeRoot + lib.removePrefix rootStr pathStr; + + # Make outOfStoreSymlink against runtimeRoot. This replicates + # config.lib.file.mkOutOfStoreSymlink as_mkOutOfStoreSymlink and wraps it to + # replace the target path in the nix store with the original target path + # inside runtimeRoot. This is necessary because flakes live in the nix store. + mkOutOfStoreSymlink = + let + _mkOutOfStoreSymlink = path: + let + pathStr = toString path; + name = hm.strings.storeFileName (baseNameOf pathStr); + in + pkgs.runCommandLocal name { } ''ln -s ${lib.strings.escapeShellArg pathStr} $out''; + in + file: _mkOutOfStoreSymlink (runtimePath file); + + # Recursively make OutOfStoreSymlinks for all files inside path. + mkRecursiveOutOfStoreSymlink = path: link: + builtins.listToAttrs ( + map + (file: { + name = link + "${lib.removePrefix (toString path) (toString file)}"; + value = { source = mkOutOfStoreSymlink file; }; + }) + (lib.filesystem.listFilesRecursive path) + ); + + # Remove custom attributes from attribute set. + rmopts = attrs: builtins.removeAttrs attrs [ "source" "recursive" "outOfStoreSymlink" ]; + +in fileAttrs: lib.attrsets.concatMapAttrs + ( + name: value: + # Make outOfStoreSymlinks + if value.outOfStoreSymlink or false + then + if value.recursive or false + then + lib.attrsets.mapAttrs + (_: attrs: attrs // rmopts value) + (mkRecursiveOutOfStoreSymlink value.source name) + else { "${name}" = { source = mkOutOfStoreSymlink value.source; } // rmopts value; } + # Handle all other cases as usual + else { "${name}" = value; } + ) + fileAttrs