diff --git a/config/desktop.nix b/config/desktop.nix index 6745767..2c95cd8 100644 --- a/config/desktop.nix +++ b/config/desktop.nix @@ -7,12 +7,8 @@ hardware.graphics = { enable = true; }; - - # Enable the GNOME Desktop Environment. - services.displayManager.gdm.enable = true; # use sddm until gnome 50 due to https://github.com/systemd/systemd/issues/39259 - services.displayManager.sddm.enable = false; - services.displayManager.sddm.wayland.enable = false; - services.desktopManager.gnome.enable = false; + + #hyprland programs.hyprland.enable = true; security.pam.services.hyprlock = {}; @@ -65,19 +61,6 @@ #services.udev.packages = [ pkgs.via ]; - environment.gnome.excludePackages = with pkgs; [ - epiphany # web browser - geary # email - decibels #audio player - gnome-calendar - gnome-music - gnome-software - gnome-tour - totem # video player - xterm - yelp # help - ]; - nixpkgs.overlays = [ (final: _: { # this allows you to access `pkgs.unstable` anywhere in your config @@ -95,11 +78,6 @@ orca-slicer firefox gimp - gnomeExtensions.appindicator - gnomeExtensions.blur-my-shell - gnomeExtensions.caffeine - gnomeExtensions.dash-to-dock - gnomeExtensions.pop-shell inkscape bitwarden-desktop bitwarden-cli @@ -131,7 +109,7 @@ restic-browser # games - webcord + webcord heroic lutris cataclysm-dda @@ -208,71 +186,6 @@ }; gamemode.enable = true; - - dconf = { - enable = true; - profiles.user.databases = [{ - lockAll = true; # prevents overriding - settings = { - "org/gnome/shell" = { - favorite-apps = [ - "org.gnome.Nautilus.desktop" - "brave-browser.desktop" - "proton-mail.desktop" - "obsidian.desktop" - "signal.desktop" - "element-desktop.desktop" - "steam.desktop" - "bitwarden.desktop" - "org.gnome.Settings.desktop" - "org.gnome.Console.desktop" - ]; - enabled-extensions = [ - pkgs.gnomeExtensions.appindicator.extensionUuid - pkgs.gnomeExtensions.blur-my-shell.extensionUuid - pkgs.gnomeExtensions.caffeine.extensionUuid - pkgs.gnomeExtensions.dash-to-dock.extensionUuid - ]; - }; - "org/gnome/desktop/calendar" = { - show-weekdate = true; - }; - "org/gnome/desktop/interface" = { - clock-show-weekday = true; - color-scheme = "prefer-dark"; - document-font-name = "Noto Sans 11"; - enable-hot-corners = false; - font-name = "Noto Sans 11"; - gtk-theme = "Adwaita-dark"; - monospace-font-name = "Fira Mono 12"; - }; - "org/gnome/desktop/peripherals/mouse" = { - accel-profile = "flat"; - }; - "org/gnome/desktop/wm/preferences" = { - button-layout = ":minimize,maximize,close"; - }; - "org/gnome/nautilus/list-view" = { - default-zoom-level = "small"; - }; - "org/gnome/nautilus/preferences" = { - default-folder-viewer = "list-view"; - }; - "org/gnome/shell/extensions/dash-to-dock" = { - click-action = "minimize-or-previews"; - dock-fixed = true; - multi-monitor = true; - show-mounts = false; - show-show-apps-button = true; - apply-custom-theme = true; - }; - "org/gnome/shell/keybindings" = { - show-screenshot-ui = ["s"]; - }; - #org.gnome.desktop.input-sources sources [('xkb', 'us'), ('xkb', 'dz+ar')] - }; - }]; - }; }; fileSystems."/mnt/media" = { diff --git a/config/gnome.nix b/config/gnome.nix new file mode 100644 index 0000000..280d54f --- /dev/null +++ b/config/gnome.nix @@ -0,0 +1,91 @@ +{ + + # Enable the GNOME Desktop Environment. + services.displayManager.gdm.enable = true; # use sddm until gnome 50 due to https://github.com/systemd/systemd/issues/39259 + services.desktopManager.gnome.enable = false; + + environment.systemPackages = with pkgs; [ + gnomeExtensions.appindicator + gnomeExtensions.blur-my-shell + gnomeExtensions.caffeine + gnomeExtensions.dash-to-dock + ]; + + environment.gnome.excludePackages = with pkgs; [ + epiphany # web browser + geary # email + decibels #audio player + gnome-calendar + gnome-music + gnome-software + gnome-tour + totem # video player + xterm + yelp # help + ]; + + programs.dconf = { + enable = true; + profiles.user.databases = [{ + lockAll = true; # prevents overriding + settings = { + "org/gnome/shell" = { + favorite-apps = [ + "org.gnome.Nautilus.desktop" + "brave-browser.desktop" + "proton-mail.desktop" + "obsidian.desktop" + "signal.desktop" + "element-desktop.desktop" + "steam.desktop" + "bitwarden.desktop" + "org.gnome.Settings.desktop" + "org.gnome.Console.desktop" + ]; + enabled-extensions = [ + pkgs.gnomeExtensions.appindicator.extensionUuid + pkgs.gnomeExtensions.blur-my-shell.extensionUuid + pkgs.gnomeExtensions.caffeine.extensionUuid + pkgs.gnomeExtensions.dash-to-dock.extensionUuid + ]; + }; + "org/gnome/desktop/calendar" = { + show-weekdate = true; + }; + "org/gnome/desktop/interface" = { + clock-show-weekday = true; + color-scheme = "prefer-dark"; + document-font-name = "Noto Sans 11"; + enable-hot-corners = false; + font-name = "Noto Sans 11"; + gtk-theme = "Adwaita-dark"; + monospace-font-name = "Fira Mono 12"; + }; + "org/gnome/desktop/peripherals/mouse" = { + accel-profile = "flat"; + }; + "org/gnome/desktop/wm/preferences" = { + button-layout = ":minimize,maximize,close"; + }; + "org/gnome/nautilus/list-view" = { + default-zoom-level = "small"; + }; + "org/gnome/nautilus/preferences" = { + default-folder-viewer = "list-view"; + }; + "org/gnome/shell/extensions/dash-to-dock" = { + click-action = "minimize-or-previews"; + dock-fixed = true; + multi-monitor = true; + show-mounts = false; + show-show-apps-button = true; + apply-custom-theme = true; + }; + "org/gnome/shell/keybindings" = { + show-screenshot-ui = ["s"]; + }; + #org.gnome.desktop.input-sources sources [('xkb', 'us'), ('xkb', 'dz+ar')] + }; + }]; + }; +} \ No newline at end of file diff --git a/home/desktop.nix b/home/desktop.nix index 95ce944..880d26e 100644 --- a/home/desktop.nix +++ b/home/desktop.nix @@ -13,552 +13,6 @@ ''; }; - home.pointerCursor = { - gtk.enable = true; - # x11.enable = true; - package = pkgs.apple-cursor; - name = "macOS"; - size = 20; - }; - -# gtk = { -# enable = true; -# theme = { -# package = pkgs.flat-remix-gtk; -# name = "Flat-Remix-GTK-Grey-Darkest"; -# }; -# -# iconTheme = { -# package = pkgs.adwaita-icon-theme; -# name = "Adwaita"; -# }; -# -# font = { -# name = "Sans"; -# size = 11; -# }; -# }; - - home.packages = with pkgs; [ - grim #screenshots - slurp #screenshot selection - wl-clipboard # copy to clipboard - glib # gsettings - gsettings-desktop-schemas # gsettings - ]; - - programs.kitty.enable = true; - - services.mako.enable = true; - - dconf.settings = { - "org/gnome/desktop/interface" = { - color-scheme = "prefer-dark"; - }; - }; - programs.waybar = { - #systemd.enable = true; - #systemd.target = "hyprland-session.target"; - enable = true; - style = '' - @define-color background #1a1a2e; - @define-color foreground #e0e0e0; - * { - /* background-color: @background; */ - /* color: @foreground; */ - - border: none; - padding: 0px; - min-height: 0; - font-family: "DejaVu Sans", "Font Awesome 5 Free"; - font-weight: normal; - font-size: 12px; - } - #waybar > .horizontal { - padding-top: 2px; - } - - window#waybar { - background-color: @background; - color: @foreground; - border-bottom: 2px solid alpha(@foreground, 0.9); - transition-property: background-color; - transition-duration: .5s; - border-left: 2px solid alpha(@foreground, 0.9); - border-right: 2px solid alpha(@foreground, 0.9); - border-radius: 2px; - } - - #window { - text-shadow: 0px 0px 2px alpha(@foreground, 0.4); - } - - - #workspaces { - background: transparent; - margin: 3px 0px; - padding: 10px 6px; - margin-left: -6px; - margin-top: 0px; - margin-bottom: 0px; - } - - #workspaces button { - min-width: 8px; - min-height: 8px; - padding: 1; - margin: 0 6px; - border-radius: 2px; - background-color: alpha(@foreground, 0.75); - transition: all 0.15s ease-in-out; - } - - #workspaces button.active, - #workspaces button:hover { - background-color: @foreground; - min-width: 25px; - border-radius: 2px; - transition: all 0.15s ease-in-out; - } - #workspaces button.empty { - opacity: 0.45; - } - - - #workspaces button label { - font-size: 0px; - } - - #workspaces button { - /* margin-top: 1px; */ - /* margin-bottom: -1px; */ - font-size: 12.5px; - background: @foreground; - font-weight: 800; - } - ''; - settings = { - mainBar = { - modules-left = [ "hyprland/workspaces" ]; - modules-center = [ "hyprland/window" ]; - modules-right = [ "tray" "idle_inhibitor" "privacy" "pulseaudio" "clock" ]; - - clock = { - format = "{:%a %b %d %H:%M}"; - }; - - idle_inhibitor = { - format = "{icon}"; - format-icons = { - activated = ""; - deactivated = ""; - }; - }; - - pulseaudio = { - format = "{icon}"; - format-muted = ""; - format-icons = { - default = ["" ""]; - }; - on-scroll-up = "wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 10%+"; - on-scroll-down = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 10%-"; - on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; - }; - }; - }; - }; - programs.wofi.enable = true; - programs.hyprlock.enable = true; - - services.hypridle = { - enable = true; - settings = { - general = { - lock_cmd = "pidof hyprlock || hyprlock"; - }; - - listener = [ - { - timeout = 300; - on-timeout = "loginctl lock-session & hyprctl dispatch dpms off"; - on-resume = "hyprctl dispatch dpms on"; - } - { - timeout = 900; - on-timeout = "systemctl suspend"; - on-resume = "hyprctl dispatch dpms on"; - } - ]; - }; - }; - - wayland.windowManager.hyprland = { - enable = true; - plugins = [ - pkgs.hyprlandPlugins.hyprbars - ]; - settings = { - # This is an example Hyprland config file for Nix. - # Refer to the wiki for more information. - # https://wiki.hypr.land/Configuring/ - # https://wiki.hypr.land/Nix/ - # https://wiki.hypr.land/Nix/Hyprland-on-NixOS/ - # https://wiki.hypr.land/Nix/Hyprland-on-Home-Manager/ - - # Please note not all available settings / options are set here. - # For a full list, see the wiki - - # You can split this configuration into multiple files - # Create your files separately and then link them to this file like this: - # source = ~/.config/hypr/myColors.conf - # todo: make the line above nix-ish - - - ################ - ### MONITORS ### - ################ - - # See https://wiki.hypr.land/Configuring/Monitors/ - #monitor = ",preferred,auto,auto"; - monitor = - if ( hostname == "nixos-desktop" ) - then [ - "DP-2, 2560x1440@180,0x0,1,vrr,1,bitdepth,10" - "HDMI-A-1, 1920x1080@75,2560x0,1,vrr,1" - ] - else [ - ",preferred,auto,auto" - ]; - - - - ################### - ### MY PROGRAMS ### - ################### - - # See https://wiki.hypr.land/Configuring/Keywords/ - - # Set programs that you use - - "$terminal" = "kitty"; - "$fileManager" = "dolphin"; - "$menu" = "wofi --show drun"; - "$browser" = "brave"; - - - ################# - ### AUTOSTART ### - ################# - - # Autostart necessary processes (like notifications daemons, status bars, etc.) - # Or execute your favorite apps at launch like this: - - exec-once = [ - "waybar" - "steam -silent" - - #"[workspace 1 silent]$browser" - #"[workspace 3 silent]proton-mail" - #"[workspace 2 silent]signal-desktop" - #"[workspace 2 silent]steam" - ]; - - - ############################# - ### ENVIRONMENT VARIABLES ### - ############################# - - # See https://wiki.hypr.land/Configuring/Environment-variables/ - - env = [ - "XCURSOR_SIZE,24" - "HYPRCURSOR_SIZE,24" - ]; - - - ################### - ### PERMISSIONS ### - ################### - - # See https://wiki.hypr.land/Configuring/Permissions/ - # Please note permission changes here require a Hyprland restart and are not applied on-the-fly - # for security reasons - - # ecosystem = { - # enforce_permissions = 1; - # }; - - permission = [ - "/usr/(bin|local/bin)/grim, screencopy, allow" - "/usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow" - # "/usr/(bin|local/bin)/hyprpm, plugin, allow" - ]; - - - ##################### - ### LOOK AND FEEL ### - ##################### - - # Refer to https://wiki.hypr.land/Configuring/Variables/ - - # https://wiki.hypr.land/Configuring/Variables/#general - general = { - gaps_in = 5; - gaps_out = 20; - - border_size = 2; - - "col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg"; - "col.inactive_border" = "rgba(595959aa)"; - - # Set to true enable resizing windows by clicking and dragging on borders and gaps - resize_on_border = false; - - # Please see https://wiki.hypr.land/Configuring/Tearing/ before you turn this on - allow_tearing = false; - - layout = "dwindle"; - }; - - # https://wiki.hypr.land/Configuring/Variables/#decoration - decoration = { - rounding = 10; - rounding_power = 2; - - # Change transparency of focused and unfocused windows - active_opacity = 1.0; - inactive_opacity = 1.0; - - shadow = { - enabled = true; - range = 4; - render_power = 3; - color = "rgba(1a1a1aee)"; - }; - - # https://wiki.hypr.land/Configuring/Variables/#blur - blur = { - enabled = true; - size = 3; - passes = 1; - - vibrancy = 0.1696; - }; - }; - - # https://wiki.hypr.land/Configuring/Variables/#animations - animations = { - enabled = "yes, please :)"; - - # Default animations, see https://wiki.hypr.land/Configuring/Animations/ for more - - bezier = [ - "easeOutQuint,0.23,1,0.32,1" - "easeInOutCubic,0.65,0.05,0.36,1" - "linear,0,0,1,1" - "almostLinear,0.5,0.5,0.75,1.0" - "quick,0.15,0,0.1,1" - ]; - - animation = [ - "global, 1, 10, default" - "border, 1, 5.39, easeOutQuint" - "windows, 1, 4.79, easeOutQuint" - "windowsIn, 1, 4.1, easeOutQuint, popin 87%" - "windowsOut, 1, 1.49, linear, popin 87%" - "fadeIn, 1, 1.73, almostLinear" - "fadeOut, 1, 1.46, almostLinear" - "fade, 1, 3.03, quick" - "layers, 1, 3.81, easeOutQuint" - "layersIn, 1, 4, easeOutQuint, fade" - "layersOut, 1, 1.5, linear, fade" - "fadeLayersIn, 1, 1.79, almostLinear" - "fadeLayersOut, 1, 1.39, almostLinear" - "workspaces, 1, 1.94, almostLinear, fade" - "workspacesIn, 1, 1.21, almostLinear, fade" - "workspacesOut, 1, 1.94, almostLinear, fade" - "zoomFactor, 1, 7, quick" - ]; - }; - - # Ref https://wiki.hypr.land/Configuring/Workspace-Rules/ - # "Smart gaps" / "No gaps when only" - # uncomment all if you wish to use that. - # workspace = [ - # "w[tv1], gapsout:0, gapsin:0" - # "f[1], gapsout:0, gapsin:0" - # ]; - # windowrule = [ - # "bordersize 0, floating:0, onworkspace:w[tv1]" - # "rounding 0, floating:0, onworkspace:w[tv1]" - # "bordersize 0, floating:0, onworkspace:f[1]" - # "rounding 0, floating:0, onworkspace:f[1]" - # ]; - - # See https://wiki.hypr.land/Configuring/Dwindle-Layout/ for more - dwindle = { - pseudotile = true; # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below - preserve_split = true; # You probably want this - }; - - # See https://wiki.hypr.land/Configuring/Master-Layout/ for more - master = { - new_status = "master"; - }; - - # https://wiki.hypr.land/Configuring/Variables/#misc - misc = { - force_default_wallpaper = -1; # Set to 0 or 1 to disable the anime mascot wallpapers - disable_hyprland_logo = false; # If true disables the random hyprland logo / anime girl background. :( - }; - - - ############# - ### INPUT ### - ############# - - # https://wiki.hypr.land/Configuring/Variables/#input - input = { - kb_layout = "us"; - kb_variant = ""; - kb_model = ""; - kb_options = ""; - kb_rules = ""; - - follow_mouse = 1; - - sensitivity = 0; # -1.0 - 1.0, 0 means no modification. - - touchpad = { - disable_while_typing = false; - natural_scroll = false; - }; - }; - - # https://wiki.hypr.land/Configuring/Variables/#gestures - #gestures = { - # workspace_swipe = false; - #}; - - # Example per-device config - # See https://wiki.hypr.land/Configuring/Keywords/#per-device-input-configs for more - device = { - name = "epic-mouse-v1"; - sensitivity = -0.5; - }; - - - ################### - ### KEYBINDINGS ### - ################### - - # See https://wiki.hypr.land/Configuring/Keywords/ - "$mainMod" = "SUPER"; # Sets "Windows" key as main modifier - - bind = [ - # Example binds, see https://wiki.hypr.land/Configuring/Binds/ for more - "$mainMod, Return, exec, $terminal" - "$mainMod, Q, killactive," - "alt, F4, killactive," - "$mainMod SHIFT, Q, exit," - "$mainMod, E, exec, $fileManager" - "$mainMod, V, togglefloating," - "$mainMod, F, fullscreen, 1" - "$mainMod, W, exec, $browser" - "$mainMod, space, exec, $menu" - #"$mainMod, P, pseudo," # dwindle - "$mainMod, T, togglesplit," # dwindle - "$mainMod SHIFT, L, exec, hyprlock" - "$mainMod SHIFT, F, workspaceopt, allfloat" - "$mainMod, M, togglegroup," - "$mainMod SHIFT, S, exec, grim -g \"$(slurp)\" - | wl-copy" - - # Move focus with mainMod + arrow keys - "$mainMod, h, movefocus, l" - "$mainMod, l, movefocus, r" - "$mainMod, k, movefocus, u" - "$mainMod, j, movefocus, d" - "$mainMod, Tab, cyclenext" - "$mainMod, Tab, bringactivetotop" - - # Switch workspaces with mainMod + [0-9] - "$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" - - # Move active window to a workspace with mainMod + SHIFT + [0-9] - "$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" - - # Example special workspace (scratchpad) - "$mainMod, N, togglespecialworkspace, notes" - "$mainMod SHIFT, N, movetoworkspace, special:notes" - - # Scroll through existing workspaces with mainMod + scroll - "$mainMod, mouse_down, workspace, e+1" - "$mainMod, mouse_up, workspace, e-1" - ]; - - # Move/resize windows with mainMod + LMB/RMB and dragging - bindm = [ - "$mainMod, mouse:272, movewindow" - "$mainMod, mouse:273, resizewindow" - ]; - - # Laptop multimedia keys for volume and LCD brightness - bindel = [ - ",XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+" - ",XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" - ",XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" - ",XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" - ",XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+" - ",XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-" - ]; - - # Requires playerctl - bindl = [ - ", XF86AudioNext, exec, playerctl next" - ", XF86AudioPause, exec, playerctl play-pause" - ", XF86AudioPlay, exec, playerctl play-pause" - ", XF86AudioPrev, exec, playerctl previous" - ]; - - ############################## - ### WINDOWS AND WORKSPACES ### - ############################## - - # See https://wiki.hypr.land/Configuring/Window-Rules/ for more - # See https://wiki.hypr.land/Configuring/Workspace-Rules/ for workspace rules - - windowrule = [ - # Example windowrule - # "float,class:^(kitty)$,title:^(kitty)$" - # Ignore maximize requests from apps. You'll probably like this. - "suppressevent maximize, class:.*" - - # Fix some dragging issues with XWayland - "nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0" - ]; - workspace = "name:1,monitor:DP-2"; - }; - }; - # Don't touch home.stateVersion = "24.11"; } diff --git a/home/hyprland.nix b/home/hyprland.nix new file mode 100644 index 0000000..15d243b --- /dev/null +++ b/home/hyprland.nix @@ -0,0 +1,547 @@ +{ + home.pointerCursor = { + gtk.enable = true; + # x11.enable = true; + package = pkgs.apple-cursor; + name = "macOS"; + size = 20; + }; + +# gtk = { +# enable = true; +# theme = { +# package = pkgs.flat-remix-gtk; +# name = "Flat-Remix-GTK-Grey-Darkest"; +# }; +# +# iconTheme = { +# package = pkgs.adwaita-icon-theme; +# name = "Adwaita"; +# }; +# +# font = { +# name = "Sans"; +# size = 11; +# }; +# }; + + home.packages = with pkgs; [ + grim #screenshots + slurp #screenshot selection + wl-clipboard # copy to clipboard + glib # gsettings + gsettings-desktop-schemas # gsettings + ]; + + programs.kitty.enable = true; + + services.mako.enable = true; + + dconf.settings = { + "org/gnome/desktop/interface" = { + color-scheme = "prefer-dark"; + }; + }; + programs.waybar = { + #systemd.enable = true; + #systemd.target = "hyprland-session.target"; + enable = true; + style = '' + @define-color background #1a1a2e; + @define-color foreground #e0e0e0; + * { + /* background-color: @background; */ + /* color: @foreground; */ + + border: none; + padding: 0px; + min-height: 0; + font-family: "DejaVu Sans", "Font Awesome 5 Free"; + font-weight: normal; + font-size: 12px; + } + #waybar > .horizontal { + padding-top: 2px; + } + + window#waybar { + background-color: @background; + color: @foreground; + border-bottom: 2px solid alpha(@foreground, 0.9); + transition-property: background-color; + transition-duration: .5s; + border-left: 2px solid alpha(@foreground, 0.9); + border-right: 2px solid alpha(@foreground, 0.9); + border-radius: 2px; + } + + #window { + text-shadow: 0px 0px 2px alpha(@foreground, 0.4); + } + + + #workspaces { + background: transparent; + margin: 3px 0px; + padding: 10px 6px; + margin-left: -6px; + margin-top: 0px; + margin-bottom: 0px; + } + + #workspaces button { + min-width: 8px; + min-height: 8px; + padding: 1; + margin: 0 6px; + border-radius: 2px; + background-color: alpha(@foreground, 0.75); + transition: all 0.15s ease-in-out; + } + + #workspaces button.active, + #workspaces button:hover { + background-color: @foreground; + min-width: 25px; + border-radius: 2px; + transition: all 0.15s ease-in-out; + } + #workspaces button.empty { + opacity: 0.45; + } + + + #workspaces button label { + font-size: 0px; + } + + #workspaces button { + /* margin-top: 1px; */ + /* margin-bottom: -1px; */ + font-size: 12.5px; + background: @foreground; + font-weight: 800; + } + ''; + settings = { + mainBar = { + modules-left = [ "hyprland/workspaces" ]; + modules-center = [ "hyprland/window" ]; + modules-right = [ "tray" "idle_inhibitor" "privacy" "pulseaudio" "clock" ]; + + clock = { + format = "{:%a %b %d %H:%M}"; + }; + + idle_inhibitor = { + format = "{icon}"; + format-icons = { + activated = ""; + deactivated = ""; + }; + }; + + pulseaudio = { + format = "{icon}"; + format-muted = ""; + format-icons = { + default = ["" ""]; + }; + on-scroll-up = "wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 10%+"; + on-scroll-down = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 10%-"; + on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; + }; + }; + }; + }; + programs.wofi.enable = true; + programs.hyprlock.enable = true; + + services.hypridle = { + enable = true; + settings = { + general = { + lock_cmd = "pidof hyprlock || hyprlock"; + }; + + listener = [ + { + timeout = 300; + on-timeout = "loginctl lock-session & hyprctl dispatch dpms off"; + on-resume = "hyprctl dispatch dpms on"; + } + { + timeout = 900; + on-timeout = "systemctl suspend"; + on-resume = "hyprctl dispatch dpms on"; + } + ]; + }; + }; + + wayland.windowManager.hyprland = { + enable = true; + plugins = [ + pkgs.hyprlandPlugins.hyprbars + ]; + settings = { + # This is an example Hyprland config file for Nix. + # Refer to the wiki for more information. + # https://wiki.hypr.land/Configuring/ + # https://wiki.hypr.land/Nix/ + # https://wiki.hypr.land/Nix/Hyprland-on-NixOS/ + # https://wiki.hypr.land/Nix/Hyprland-on-Home-Manager/ + + # Please note not all available settings / options are set here. + # For a full list, see the wiki + + # You can split this configuration into multiple files + # Create your files separately and then link them to this file like this: + # source = ~/.config/hypr/myColors.conf + # todo: make the line above nix-ish + + + ################ + ### MONITORS ### + ################ + + # See https://wiki.hypr.land/Configuring/Monitors/ + #monitor = ",preferred,auto,auto"; + monitor = + if ( hostname == "nixos-desktop" ) + then [ + "DP-2, 2560x1440@180,0x0,1,vrr,1,bitdepth,10" + "HDMI-A-1, 1920x1080@75,2560x0,1,vrr,1" + ] + else [ + ",preferred,auto,auto" + ]; + + + + ################### + ### MY PROGRAMS ### + ################### + + # See https://wiki.hypr.land/Configuring/Keywords/ + + # Set programs that you use + + "$terminal" = "kitty"; + "$fileManager" = "dolphin"; + "$menu" = "wofi --show drun"; + "$browser" = "brave"; + + + ################# + ### AUTOSTART ### + ################# + + # Autostart necessary processes (like notifications daemons, status bars, etc.) + # Or execute your favorite apps at launch like this: + + exec-once = [ + "waybar" + "steam -silent" + + #"[workspace 1 silent]$browser" + #"[workspace 3 silent]proton-mail" + #"[workspace 2 silent]signal-desktop" + #"[workspace 2 silent]steam" + ]; + + + ############################# + ### ENVIRONMENT VARIABLES ### + ############################# + + # See https://wiki.hypr.land/Configuring/Environment-variables/ + + env = [ + "XCURSOR_SIZE,24" + "HYPRCURSOR_SIZE,24" + ]; + + + ################### + ### PERMISSIONS ### + ################### + + # See https://wiki.hypr.land/Configuring/Permissions/ + # Please note permission changes here require a Hyprland restart and are not applied on-the-fly + # for security reasons + + # ecosystem = { + # enforce_permissions = 1; + # }; + + permission = [ + "/usr/(bin|local/bin)/grim, screencopy, allow" + "/usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow" + # "/usr/(bin|local/bin)/hyprpm, plugin, allow" + ]; + + + ##################### + ### LOOK AND FEEL ### + ##################### + + # Refer to https://wiki.hypr.land/Configuring/Variables/ + + # https://wiki.hypr.land/Configuring/Variables/#general + general = { + gaps_in = 5; + gaps_out = 20; + + border_size = 2; + + "col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg"; + "col.inactive_border" = "rgba(595959aa)"; + + # Set to true enable resizing windows by clicking and dragging on borders and gaps + resize_on_border = false; + + # Please see https://wiki.hypr.land/Configuring/Tearing/ before you turn this on + allow_tearing = false; + + layout = "dwindle"; + }; + + # https://wiki.hypr.land/Configuring/Variables/#decoration + decoration = { + rounding = 10; + rounding_power = 2; + + # Change transparency of focused and unfocused windows + active_opacity = 1.0; + inactive_opacity = 1.0; + + shadow = { + enabled = true; + range = 4; + render_power = 3; + color = "rgba(1a1a1aee)"; + }; + + # https://wiki.hypr.land/Configuring/Variables/#blur + blur = { + enabled = true; + size = 3; + passes = 1; + + vibrancy = 0.1696; + }; + }; + + # https://wiki.hypr.land/Configuring/Variables/#animations + animations = { + enabled = "yes, please :)"; + + # Default animations, see https://wiki.hypr.land/Configuring/Animations/ for more + + bezier = [ + "easeOutQuint,0.23,1,0.32,1" + "easeInOutCubic,0.65,0.05,0.36,1" + "linear,0,0,1,1" + "almostLinear,0.5,0.5,0.75,1.0" + "quick,0.15,0,0.1,1" + ]; + + animation = [ + "global, 1, 10, default" + "border, 1, 5.39, easeOutQuint" + "windows, 1, 4.79, easeOutQuint" + "windowsIn, 1, 4.1, easeOutQuint, popin 87%" + "windowsOut, 1, 1.49, linear, popin 87%" + "fadeIn, 1, 1.73, almostLinear" + "fadeOut, 1, 1.46, almostLinear" + "fade, 1, 3.03, quick" + "layers, 1, 3.81, easeOutQuint" + "layersIn, 1, 4, easeOutQuint, fade" + "layersOut, 1, 1.5, linear, fade" + "fadeLayersIn, 1, 1.79, almostLinear" + "fadeLayersOut, 1, 1.39, almostLinear" + "workspaces, 1, 1.94, almostLinear, fade" + "workspacesIn, 1, 1.21, almostLinear, fade" + "workspacesOut, 1, 1.94, almostLinear, fade" + "zoomFactor, 1, 7, quick" + ]; + }; + + # Ref https://wiki.hypr.land/Configuring/Workspace-Rules/ + # "Smart gaps" / "No gaps when only" + # uncomment all if you wish to use that. + # workspace = [ + # "w[tv1], gapsout:0, gapsin:0" + # "f[1], gapsout:0, gapsin:0" + # ]; + # windowrule = [ + # "bordersize 0, floating:0, onworkspace:w[tv1]" + # "rounding 0, floating:0, onworkspace:w[tv1]" + # "bordersize 0, floating:0, onworkspace:f[1]" + # "rounding 0, floating:0, onworkspace:f[1]" + # ]; + + # See https://wiki.hypr.land/Configuring/Dwindle-Layout/ for more + dwindle = { + pseudotile = true; # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = true; # You probably want this + }; + + # See https://wiki.hypr.land/Configuring/Master-Layout/ for more + master = { + new_status = "master"; + }; + + # https://wiki.hypr.land/Configuring/Variables/#misc + misc = { + force_default_wallpaper = -1; # Set to 0 or 1 to disable the anime mascot wallpapers + disable_hyprland_logo = false; # If true disables the random hyprland logo / anime girl background. :( + }; + + + ############# + ### INPUT ### + ############# + + # https://wiki.hypr.land/Configuring/Variables/#input + input = { + kb_layout = "us"; + kb_variant = ""; + kb_model = ""; + kb_options = ""; + kb_rules = ""; + + follow_mouse = 1; + + sensitivity = 0; # -1.0 - 1.0, 0 means no modification. + + touchpad = { + disable_while_typing = false; + natural_scroll = false; + }; + }; + + # https://wiki.hypr.land/Configuring/Variables/#gestures + #gestures = { + # workspace_swipe = false; + #}; + + # Example per-device config + # See https://wiki.hypr.land/Configuring/Keywords/#per-device-input-configs for more + device = { + name = "epic-mouse-v1"; + sensitivity = -0.5; + }; + + + ################### + ### KEYBINDINGS ### + ################### + + # See https://wiki.hypr.land/Configuring/Keywords/ + "$mainMod" = "SUPER"; # Sets "Windows" key as main modifier + + bind = [ + # Example binds, see https://wiki.hypr.land/Configuring/Binds/ for more + "$mainMod, Return, exec, $terminal" + "$mainMod, Q, killactive," + "alt, F4, killactive," + "$mainMod SHIFT, Q, exit," + "$mainMod, E, exec, $fileManager" + "$mainMod, V, togglefloating," + "$mainMod, F, fullscreen, 1" + "$mainMod, W, exec, $browser" + "$mainMod, space, exec, $menu" + #"$mainMod, P, pseudo," # dwindle + "$mainMod, T, togglesplit," # dwindle + "$mainMod SHIFT, L, exec, hyprlock" + "$mainMod SHIFT, F, workspaceopt, allfloat" + "$mainMod, M, togglegroup," + "$mainMod SHIFT, S, exec, grim -g \"$(slurp)\" - | wl-copy" + + # Move focus with mainMod + arrow keys + "$mainMod, h, movefocus, l" + "$mainMod, l, movefocus, r" + "$mainMod, k, movefocus, u" + "$mainMod, j, movefocus, d" + "$mainMod, Tab, cyclenext" + "$mainMod, Tab, bringactivetotop" + + # Switch workspaces with mainMod + [0-9] + "$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" + + # Move active window to a workspace with mainMod + SHIFT + [0-9] + "$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" + + # Example special workspace (scratchpad) + "$mainMod, N, togglespecialworkspace, notes" + "$mainMod SHIFT, N, movetoworkspace, special:notes" + + # Scroll through existing workspaces with mainMod + scroll + "$mainMod, mouse_down, workspace, e+1" + "$mainMod, mouse_up, workspace, e-1" + ]; + + # Move/resize windows with mainMod + LMB/RMB and dragging + bindm = [ + "$mainMod, mouse:272, movewindow" + "$mainMod, mouse:273, resizewindow" + ]; + + # Laptop multimedia keys for volume and LCD brightness + bindel = [ + ",XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+" + ",XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" + ",XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + ",XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" + ",XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+" + ",XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-" + ]; + + # Requires playerctl + bindl = [ + ", XF86AudioNext, exec, playerctl next" + ", XF86AudioPause, exec, playerctl play-pause" + ", XF86AudioPlay, exec, playerctl play-pause" + ", XF86AudioPrev, exec, playerctl previous" + ]; + + ############################## + ### WINDOWS AND WORKSPACES ### + ############################## + + # See https://wiki.hypr.land/Configuring/Window-Rules/ for more + # See https://wiki.hypr.land/Configuring/Workspace-Rules/ for workspace rules + + windowrule = [ + # Example windowrule + # "float,class:^(kitty)$,title:^(kitty)$" + # Ignore maximize requests from apps. You'll probably like this. + "suppressevent maximize, class:.*" + + # Fix some dragging issues with XWayland + "nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0" + ]; + workspace = "name:1,monitor:DP-2"; + }; + }; +} \ No newline at end of file