diff --git a/flake.nix b/flake.nix index b9293df..2716537 100644 --- a/flake.nix +++ b/flake.nix @@ -99,7 +99,7 @@ { login-manager.greetd.enable = desktop == "sway" || desktop == "hyprland"; } inputs.agenix.nixosModules.default - inputs.hyprland.nixosModules.default + # inputs.hyprland.nixosModules.default inputs.dzgui-nix.nixosModules.default { programs.hyprland.enable = (desktop == "hyprland"); } inputs.home-manager.nixosModules.home-manager diff --git a/system/configuration.nix b/system/configuration.nix index dc5ac8e..2e3eed5 100644 --- a/system/configuration.nix +++ b/system/configuration.nix @@ -99,6 +99,16 @@ # Enable touchpad support (enabled default in most desktopManager). services.xserver.libinput.enable = true; + xdg.portal = { + config.common.default = "*"; + enable = true; + wlr.enable = true; + # Always pick the first monitor, this is fine since I only ever use a single monitor + wlr.settings.screencast.chooser_type = "none"; + # gtk portal needed to make gtk apps happy + extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + }; + # Define a user account. Don't forget to set a password with ‘passwd’. users.mutableUsers = false; users.users.lelgenio = { diff --git a/system/greetd.nix b/system/greetd.nix index 72b82c1..d8d1531 100644 --- a/system/greetd.nix +++ b/system/greetd.nix @@ -35,7 +35,10 @@ in greetd_main_script = pkgs.writeShellScriptBin "main" '' ${pkgs.dbus-sway-environment}/bin/dbus-sway-environment export XDG_CURRENT_DESKTOP=sway GTK_THEME="${theme.gtk_theme}" XCURSOR_THEME="${theme.cursor_theme}" - ${pkgs.greetd.gtkgreet}/bin/gtkgreet -l -c ${desktop} + ${pkgs.greetd.gtkgreet}/bin/gtkgreet -l -c ${{ + sway = "sway"; + hyprland = "Hyprland"; + }.${desktop}} swaymsg exit ''; swayConfig = pkgs.writeText "greetd-sway-config" '' diff --git a/user/chat.nix b/user/chat.nix index 34ddd84..7e27892 100644 --- a/user/chat.nix +++ b/user/chat.nix @@ -7,6 +7,12 @@ ''; }; + wayland.windowManager.hyprland.extraConfig = '' + exec-once = thunderbird + exec-once = webcord + exec-once = telegram-desktop + ''; + home.packages = with pkgs; [ tdesktop webcord diff --git a/user/firefox.nix b/user/firefox.nix index ea3c3b5..4699999 100644 --- a/user/firefox.nix +++ b/user/firefox.nix @@ -1,7 +1,12 @@ { config, pkgs, lib, font, ... }: let inherit (pkgs.uservars) desktop browser; bugfixedFirefox = pkgs.firefox-esr-unwrapped // { requireSigning = false; allowAddonSideload = true; }; + cfg = config.packages.firefox; in { + options.packages.firefox = { + hideTitleBar = lib.mkEnableOption "Hide firefox title bar"; + }; + config = { programs.firefox = { enable = true; @@ -92,7 +97,7 @@ in { "devtools.chrome.enabled" = true; "devtools.debugger.remote-enabled" = true; }; - userChrome = lib.mkIf (desktop == "sway") '' + userChrome = lib.mkIf cfg.hideTitleBar '' #titlebar { display: none !important; } #sidebar-header { display: none !important; } ''; diff --git a/user/home.nix b/user/home.nix index f27c0e0..7dfc0ed 100644 --- a/user/home.nix +++ b/user/home.nix @@ -7,7 +7,7 @@ ./vscode ./fish ./firefox.nix - ./hyprland.nix + ./hyprland ./alacritty.nix ./git.nix ./ssh.nix @@ -36,7 +36,7 @@ ./gnome.nix ./thunar.nix ./xdg-dirs.nix - inputs.hyprland.homeManagerModules.default + # inputs.hyprland.homeManagerModules.default inputs.nix-index-database.hmModules.nix-index ]; @@ -172,6 +172,13 @@ exec nicotine ''; + wayland.windowManager.hyprland.extraConfig = lib.optionalString (osConfig.networking.hostName or "" == "monolith") '' + exec-once = steam + exec-once = obs --startreplaybuffer + exec-once = deluge-gtk + exec-once = nicotine + ''; + systemd.user.services.rm-target = { Unit = { Description = "Remove directories named 'target'"; diff --git a/user/hyprland.nix b/user/hyprland.nix deleted file mode 100644 index 992964a..0000000 --- a/user/hyprland.nix +++ /dev/null @@ -1,127 +0,0 @@ -{ config, pkgs, lib, ... }: { - config = lib.mkIf (pkgs.uservars.desktop == "hyprland") { - wayland.windowManager.hyprland = { - enable = false; - extraConfig = '' - monitor=,preferred,auto,1 - - input { - kb_file= - kb_layout=us(colemak) - kb_variant= - kb_model= - kb_options= - kb_rules= - - follow_mouse=1 - - touchpad { - natural_scroll=no - } - } - - general { - sensitivity=1.0 # for mouse cursor - main_mod=SUPER - - gaps_in=5 - gaps_out=10 - border_size=2 - col.active_border=0xffF44336 - col.inactive_border=0x66333333 - - apply_sens_to_raw=0 # whether to apply the sensitivity to raw input (e.g. used by games where you aim using your mouse) - - damage_tracking=full # leave it on full unless you hate your GPU and want to make it suffer - } - - decoration { - rounding=5 - blur=1 - blur_size=3 # minimum 1 - blur_passes=1 # minimum 1, more passes = more resource intensive. - # Your blur "amount" is blur_size * blur_passes, but high blur_size (over around 5-ish) will produce artifacts. - # if you want heavy blur, you need to up the blur_passes. - # the more passes, the more you can up the blur_size without noticing artifacts. - } - - animations { - enabled=1 - animation=windows,1,7,default - animation=border,1,10,default - animation=fade,1,10,default - animation=workspaces,1,6,default - } - - dwindle { - pseudotile=0 # enable pseudotiling on dwindle - } - - gestures { - workspace_swipe=no - } - - # example window rules - # for windows named/classed as abc and xyz - #windowrule=move 69 420,abc - #windowrule=size 420 69,abc - #windowrule=tile,xyz - #windowrule=float,abc - #windowrule=pseudo,abc - #windowrule=monitor 0,xyz - - # example binds - bind=SUPER,Q,exec,kitty - bind=SUPER,RETURN,exec,alacritty - bind=SUPER,x,killactive, - bind=SUPER,M,exit, - # bind=SUPER,E,exec,dolphin - bind=SUPER,V,togglefloating, - bind=SUPER,s,exec,wlauncher - bind=SUPER,P,pseudo, - - bind=SUPER,f,fullscreen - - bind=SUPER,n,movefocus,l - bind=SUPER,o,movefocus,r - bind=SUPER,i,movefocus,u - bind=SUPER,e,movefocus,d - - bind=SUPER,left,movefocus,l - bind=SUPER,right,movefocus,r - bind=SUPER,up,movefocus,u - bind=SUPER,down,movefocus,d - - bind=SUPER,1,workspace,1 - bind=SUPER,2,workspace,2 - bind=SUPER,3,workspace,3 - bind=SUPER,4,workspace,4 - bind=SUPER,5,workspace,5 - bind=SUPER,6,workspace,6 - bind=SUPER,7,workspace,7 - bind=SUPER,8,workspace,8 - bind=SUPER,9,workspace,9 - bind=SUPER,0,workspace,10 - - bind=ALT,1,movetoworkspace,1 - bind=ALT,2,movetoworkspace,2 - bind=ALT,3,movetoworkspace,3 - bind=ALT,4,movetoworkspace,4 - bind=ALT,5,movetoworkspace,5 - bind=ALT,6,movetoworkspace,6 - bind=ALT,7,movetoworkspace,7 - bind=ALT,8,movetoworkspace,8 - bind=ALT,9,movetoworkspace,9 - bind=ALT,0,movetoworkspace,10 - - bind=SUPER,u,workspace,e-1 - bind=SUPER,y,workspace,e+1 - - bind=SUPER,mouse_down,workspace,e-1 - bind=SUPER,mouse_up,workspace,e+1 - ''; - }; - home.file.".config/eww".source = ./eww; - home.packages = with pkgs; [ eww-wayland jq ]; - }; -} diff --git a/user/hyprland/default.nix b/user/hyprland/default.nix new file mode 100644 index 0000000..6eaa16f --- /dev/null +++ b/user/hyprland/default.nix @@ -0,0 +1,66 @@ +{ config, pkgs, lib, ... }: +let + inherit (pkgs.uservars) theme; +in +{ + imports = [ + ../sway/kanshi.nix + ../sway/mako.nix + # ../sway/sway-binds.nix + # ../sway/sway-modes.nix + # ../sway/sway-assigns.nix + # ../sway/swayidle.nix + # ../sway/swaylock.nix + ../sway/theme.nix + ]; + + config = lib.mkIf (pkgs.uservars.desktop == "hyprland") { + services.mako.enable = true; + + wayland.windowManager.hyprland = { + enable = true; + extraConfig = '' + source = /home/lelgenio/projects/nixos-config/user/hyprland/hyprland.conf + ''; + systemd.enable = true; + }; + home.file.".config/hypr/hyprpaper.conf".text = '' + preload = ${theme.background} + wallpaper = ,${theme.background} + ''; + # home.file.".config/eww".source = ./eww; + + packages.firefox.hideTitleBar = true; + + home.packages = with pkgs; [ + eww-wayland + jq + hyprpaper + wdisplays + + waybar + dhist + demoji + bmenu + wdmenu + wlauncher + volumesh + showkeys + pamixer + libnotify + xdg-utils + screenshotsh + color_picker + wf-recorder + wl-clipboard + wtype + wl-crosshair + + grim + swappy + (tesseract5.override { + enableLanguages = [ "eng" "por" ]; + }) + ]; + }; +} diff --git a/user/hyprland/hyprland.conf b/user/hyprland/hyprland.conf new file mode 100644 index 0000000..f84aa97 --- /dev/null +++ b/user/hyprland/hyprland.conf @@ -0,0 +1,282 @@ + +######################################################################################## +AUTOGENERATED HYPR CONFIG. +PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT, +OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS. +######################################################################################## + +# +# Please note not all available settings / options are set here. +# For a full list, see the wiki +# + +# autogenerated = 1 # remove this line to remove the warning + +# See https://wiki.hyprland.org/Configuring/Monitors/ +monitor=,preferred,auto,auto +monitor=DP-1,1920x1080@144,auto,auto + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more + +# Execute your favorite apps at launch +exec-once = hyprpaper & firefox + +# Source a file (multi-file configs) +# source = ~/.config/hypr/myColors.conf + +# Some default env vars. +env = XCURSOR_SIZE,24 + +# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ +input { + kb_layout = us(colemak) + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + + touchpad { + natural_scroll = no + } + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. +} + +general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 5 + gaps_out = 10 + border_size = 2 + col.active_border = rgba(F44336ee) rgba(202020ee) 45deg + col.inactive_border = rgba(202020ee) + + layout = master + + # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = false +} + +decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + rounding = 5 + + blur { + enabled = true + size = 3 + passes = 1 + } + + drop_shadow = yes + shadow_range = 4 + shadow_render_power = 3 + col.shadow = rgba(1a1a1aee) +} + +animations { + enabled = yes + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + 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 +} + +dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = yes # you probably want this +} + +master { + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more + new_is_master = false + no_gaps_when_only = 1 +} + +gestures { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + workspace_swipe = off +} + +misc { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + force_default_wallpaper = 0 # Set to 0 to disable the anime mascot wallpapers +} + +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more +device:epic-mouse-v1 { + sensitivity = -0.5 +} + +# Example windowrule v1 +# windowrule = float, ^(kitty)$ +# Example windowrule v2 +# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ + + +windowrulev2 = workspace 2, class:qutebrowser +windowrulev2 = workspace 2, class:qutebrowser +windowrulev2 = workspace 2, class:firefox +windowrulev2 = workspace 2, class:firefox +windowrulev2 = workspace 2, class:Chromium +windowrulev2 = workspace 2, class:chromium + +windowrulev2 = workspace 6, class:org.nicotine_plus.Nicotine +windowrulev2 = workspace 6, class:deluge +windowrulev2 = workspace 6, class:com.obsproject.Studio + +windowrulev2 = workspace 7, class:thunderbird +windowrulev2 = workspace 7, class:astroid + +windowrulev2 = workspace 9, class:.*[Ss]team.* +windowrulev2 = workspace 9, class:.*[Ss]team.* +windowrulev2 = workspace 9, class:[Ll]utris + +windowrulev2 = workspace 10, class:.*[Tt]elegram.* +windowrulev2 = workspace 10, class:.*[Tt]elegram.* +windowrulev2 = workspace 10, class:Jitsi Meet +windowrulev2 = workspace 10, class:discord +windowrulev2 = workspace 10, class:Discord +windowrulev2 = workspace 10, class:WebCord +windowrulev2 = workspace 10, class:WebCord +windowrulev2 = workspace 10, class:Element +windowrulev2 = workspace 10, class:Element + +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more +$mainMod = SUPER + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, Return, exec, alacritty +bind = $mainMod, X, killactive, +# bind = $mainMod, M, exit, +bind = $mainMod Control, Return, exec, thunar +bind = $mainMod Shift, Space, togglefloating, + +bind = $mainMod Control, z, exec, swaylock & systemctl suspend + +bind = $mainMod, R, exec, wofi --show drun +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod, J, togglesplit, # dwindle + +# Move focus with mainMod + arrow keys +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +# Switch workspaces with mainMod + [0-9] +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 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +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 + +# Example special workspace (scratchpad) +bind = $mainMod, j, togglespecialworkspace, magic +bind = $mainMod SHIFT, j, movetoworkspace, special:magic + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + +bind = $mainMod, S, exec, wlauncher +bind = $mainMod, B, layoutmsg, swapwithmaster + +bind = $mainMod Shift, E, layoutmsg, swapnext +bind = $mainMod Shift, I, layoutmsg, swapprev + + bind=$mainMod,f,fullscreen + + bind=$mainMod,n,movefocus,l + bind=$mainMod,o,movefocus,r + bind=$mainMod,i,movefocus,u + bind=$mainMod,e,movefocus,d + + bind=$mainMod,left,movefocus,l + bind=$mainMod,right,movefocus,r + bind=$mainMod,up,movefocus,u + bind=$mainMod,down,movefocus,d + + 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=ALT,1,movetoworkspace,1 + # bind=ALT,2,movetoworkspace,2 + # bind=ALT,3,movetoworkspace,3 + # bind=ALT,4,movetoworkspace,4 + # bind=ALT,5,movetoworkspace,5 + # bind=ALT,6,movetoworkspace,6 + # bind=ALT,7,movetoworkspace,7 + # bind=ALT,8,movetoworkspace,8 + # bind=ALT,9,movetoworkspace,9 + # bind=ALT,0,movetoworkspace,10 + + bind=$mainMod,u,workspace,e-1 + bind=$mainMod,y,workspace,e+1 + + bind=$mainMod,mouse_down,workspace,e-1 + bind=$mainMod,mouse_up,workspace,e+1 + +# Music mode + +bind=$mainMod,M,submap,music +submap=music + +binde=,Space,exec,mpc toggle + +binde=,U,exec,volumesh -i 10 +binde=,Y,exec,volumesh -d 10 +binde=,O,exec,mpc next +binde=,N,exec,mpc prev +binde=,I,exec,volumesh --mpd -i 10 +binde=,E,exec,volumesh --mpd -d 10 + +binde=,s,exec,pulse_sink + +# use reset to go back to the global submap +bind=,escape,submap,reset + +# will reset the submap, meaning end the current one and return to the global one +submap=reset diff --git a/user/sway/default.nix b/user/sway/default.nix index 0449e30..c79e0d8 100644 --- a/user/sway/default.nix +++ b/user/sway/default.nix @@ -98,6 +98,8 @@ in indicator = true; }; + packages.firefox.hideTitleBar = true; + home.packages = with pkgs; [ sway swaybg diff --git a/user/sway/mako.nix b/user/sway/mako.nix index 637a2d5..2089d22 100644 --- a/user/sway/mako.nix +++ b/user/sway/mako.nix @@ -1,11 +1,12 @@ { config, pkgs, lib, ... }: let - inherit (pkgs.uservars) key accent font theme; + inherit (pkgs.uservars) key accent font theme desktop; inherit (theme) color; in { services.mako = { borderSize = 2; + borderRadius = if desktop == "sway" then 0 else 5; padding = "5"; margin = "15"; layer = "overlay"; @@ -48,6 +49,6 @@ in ExecStart = "${pkgs.mako}/bin/mako"; Restart = "on-failure"; }; - Install = { WantedBy = [ "sway-session.target" ]; }; + Install = { WantedBy = [ "sway-session.target" "hyprland-sessions.target" ]; }; }; } diff --git a/user/variables.nix b/user/variables.nix index b8bb262..1357a63 100644 --- a/user/variables.nix +++ b/user/variables.nix @@ -128,8 +128,8 @@ rec { pass = "disroot.org"; }; - dmenu = "bmenu"; - desktop = "sway"; + dmenu = "rofi"; + desktop = "hyprland"; browser = "firefox"; editor = "kakoune"; email-client = "thunderbird"; diff --git a/user/waybar/default.nix b/user/waybar/default.nix index a0008c6..3de9b36 100644 --- a/user/waybar/default.nix +++ b/user/waybar/default.nix @@ -1,6 +1,6 @@ { config, osConfig, pkgs, lib, font, ... }: let - inherit (pkgs.uservars) key theme accent font; + inherit (pkgs.uservars) key theme accent font desktop; inherit (theme) color; in { @@ -8,13 +8,21 @@ in programs.waybar = { enable = true; systemd.enable = true; - systemd.target = "sway-session.target"; + systemd.target = "${desktop}-session.target"; settings = [{ layer = "top"; - modules-left = [ "sway/workspaces" "sway/mode" "sway/window" ]; + modules-left = [ + "sway/workspaces" + "sway/mode" + "sway/window" + "hyprland/workspaces" + "hyprland/mode" + "hyprland/window" + ]; modules-center = [ "clock" ]; modules-right = lib.flatten [ "sway/language" + "hyprland/language" "mpd" "custom/playerctl" # "tray" @@ -68,6 +76,30 @@ in }; }; "sway/window" = { max-length = 40; }; + "sway/language" = { format = "{short} {variant}"; }; + "hyprland/workspaces" = { + enable-bar-scroll = true; + on-scroll-up = "hyprctl dispatch workspace e-1"; + on-scroll-down = "hyprctl dispatch workspace e+1"; + format = "{icon}"; + format-icons = { + "1" = ""; + "2" = ""; + "3" = "󰅩"; + "4" = ""; + "5" = ""; + "6" = ""; + "7" = "󰇮"; + "8" = ""; + "9" = ""; + "10" = ""; + urgent = ""; + # focused = ""; + default = ""; + }; + }; + "hyprland/window" = { max-length = 40; }; + "hyprland/language" = { format = "{short} {variant}"; }; "tray" = { "spacing" = 7; "icon-size" = 19; @@ -123,7 +155,6 @@ in interval = 1; tooltip = false; }; - "sway/language" = { format = "{short} {variant}"; }; "custom/caffeine" = { format = "{}"; exec = "systemctl --user status swayidle > /dev/null && echo 󰒲 || echo 󰒳"; diff --git a/user/waybar/style.css b/user/waybar/style.css index f9c0fb1..0f82fea 100644 --- a/user/waybar/style.css +++ b/user/waybar/style.css @@ -20,7 +20,8 @@ window#waybar.solo { background-color: transparent; border: 3px solid transparent; } -#workspaces button.focused { +#workspaces button.focused, +#workspaces button.active { color: @color_txt@; border-top: 3px solid @accent_color@; }