diff --git a/common.nix b/common.nix index 1b99392..54b3ad2 100644 --- a/common.nix +++ b/common.nix @@ -59,14 +59,14 @@ all: { services.openssh = { enable = lib.mkDefault true; - # lol no - settings.PermitRootLogin = lib.mkDefault "no"; - settings.PasswordAuthentication = lib.mkDefault false; - # allow reverse ssh port shit to be public sometimes - settings.GatewayPorts = lib.mkDefault "clientspecified"; - extraConfig = '' - StreamLocalBindUnlink yes - ''; + settings = { + StreamLocalBindUnlink = lib.mkDefault "yes"; + # lol no + PermitRootLogin = lib.mkDefault "no"; + PasswordAuthentication = lib.mkDefault false; + # allow reverse ssh port shit to be public sometimes + GatewayPorts = lib.mkDefault "clientspecified"; + }; }; # Use a firewall diff --git a/flake.nix b/flake.nix index 1e5cda3..1c38f78 100644 --- a/flake.nix +++ b/flake.nix @@ -26,15 +26,26 @@ noctalia = { url = "github:noctalia-dev/noctalia-shell"; inputs.nixpkgs.follows = "nixpkgs"; - # inputs.quickshell.follows = "quickshell"; }; + niri = { + url = "github:sodiboo/niri-flake"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + nixConfig = { + extra-substituters = [ "https://niri.cachix.org" ]; + extra-trusted-public-keys = [ "niri.cachix.org-1:Wv0OmO7PsuocRKzfDoJ3mulSl7Z6oezYhGhR+3W2964=" ]; }; outputs = { self, nixpkgs, + niri, ... } @ inputs: { + overlays.niri = niri.overlays.niri; + nixosModules = let m = { ezpassthru = import ./modules/ezpassthru.nix; @@ -42,7 +53,7 @@ fuckingprint = import ./modules/fuckingprint.nix; workstation = import ./modules/workstation.nix; ezpw = import ./modules/ezpw.nix; - ezpc = import ./modules/ezpc.nix; + ezpc = import ./modules/ezpc.nix inputs; }; in m diff --git a/home-manager/common.nix b/home-manager/common.nix index 690ff29..538c05f 100644 --- a/home-manager/common.nix +++ b/home-manager/common.nix @@ -5,7 +5,6 @@ inputs: all: { ... }: { imports = [ - inputs.noctalia.homeModules.default all ]; diff --git a/home-manager/modules/ezpcusr.nix b/home-manager/modules/ezpcusr.nix index a72344e..a12f0b3 100644 --- a/home-manager/modules/ezpcusr.nix +++ b/home-manager/modules/ezpcusr.nix @@ -7,6 +7,11 @@ inputs: { with lib; let cfg = config.ezpcusr; in { + imports = [ + inputs.niri.homeModules.niri + + inputs.noctalia.homeModules.default + ]; options.ezpcusr = { enable = mkEnableOption "Enable simple PC user config"; @@ -66,165 +71,165 @@ in { }; }; - xdg.portal = { - enable = true; - xdgOpenUsePortal = true; - extraPortals = [pkgs.xdg-desktop-portal-hyprland pkgs.xdg-desktop-portal-gtk]; - config = { - common.default = ["gtk"]; - hyprland.default = ["gtk" "hyprland"]; - }; - }; + services.wpaperd.enable = true; - wayland.windowManager.hyprland = { + # xdg.portal = { + # config.niri = { + # default = [ "gnome" "gtk" ]; + # # "org.freedesktop.impl.portal.Access" = "gtk"; + # # "org.freedesktop.impl.portal.Notification" = "gtk"; + # # "org.freedesktop.impl.portal.Secret" = "gnome-keyring"; + # # "org.freedesktop.impl.portal.FileChooser" = "gtk"; + # }; + # extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + # }; + + programs.niri = { enable = true; - systemd = { - enable = true; - enableXdgAutostart = true; - }; - # package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland; - # portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland; - package = pkgs.hyprland; - portalPackage = pkgs.xdg-desktop-portal-hyprland; - plugins = with pkgs.hyprlandPlugins; [ - hy3 - hypr-dynamic-cursors - ]; + package = pkgs.niri-unstable; settings = { - exec-once = [ - "noctalia-shell" + window-rules = [ + { draw-border-with-background = false; } ]; - "plugin:dynamic-cursors" = { - shake.enabled = false; + prefer-no-csd = true; + xwayland-satellite = { + enable = true; + path = lib.getExe pkgs.xwayland-satellite-unstable; }; - "plugin:hy3" = { - no_gaps_when_only = 1; + # spawn-at-startup = [ + # { argv = ["noctalia-shell"]; } + # ]; + clipboard.disable-primary = true; + input = { + focus-follows-mouse.enable = true; + touchpad = { + click-method = "clickfinger"; + natural-scroll = false; + }; }; - ecosystem = { - no_update_news = true; - no_donation_nag = true; - }; - animations = { - enabled = false; - }; - decoration = { - shadow.enabled = false; - }; - misc = { - disable_hyprland_logo = true; - animate_manual_resizes = true; - animate_mouse_windowdragging = true; - new_window_takes_over_fullscreen = 2; - middle_click_paste = false; - }; - general = { - "$mod" = "SUPER"; - layout = "hy3"; + binds = { + "Mod+Return".action.spawn = "${config.programs.foot.package}/bin/foot"; + "Mod+q".action = config.lib.niri.actions.close-window; + # "$mod, F, fullscreen, 0" + # "$mod SHIFT, F, fullscreen, 1" + # "$mod, Space, togglefloating" + # "$mod SHIFT, SPACE, exec, hyprctl switchxkblayout all next" + "Mod+d".action.spawn = ["noctalia-shell" "ipc" "call" "launcher" "toggle"]; - gaps_in = 6; - gaps_out = 6; - resize_on_border = true; - }; - gestures = { - }; - bindm = [ - "$mod, mouse:272, movewindow" - "$mod, mouse:273, resizewindow" - ]; - bind = - [ - "$mod, Return, exec, ${config.programs.foot.package}/bin/foot" - "$mod, Q, killactive," - "$mod, F, fullscreen, 0" - "$mod SHIFT, F, fullscreen, 1" - "$mod, Space, togglefloating" - "$mod SHIFT, SPACE, exec, hyprctl switchxkblayout all next" - "$mod, D, exec, noctalia-shell ipc call launcher toggle" + "Print".action.spawn-sh = "grim - | satty -f -"; - ", Print, exec, grim - | satty -f -" + "Mod+c".action.spawn = ["noctalia-shell" "ipc" "call" "launcher" "clipboard"]; - "$mod, c, exec, noctalia-shell ipc call launcher clipboard" + "Mod+Minus".action.spawn = ["noctalia-shell" "ipc" "call" "volume" "decrease"]; + "Mod+Equal".action.spawn = ["noctalia-shell" "ipc" "call" "volume" "increase"]; + "XF86AudioLowerVolume".action.spawn = ["noctalia-shell" "ipc" "call" "volume" "decrease"]; + "XF86AudioRaiseVolume".action.spawn = ["noctalia-shell" "ipc" "call" "volume" "increase"]; - "$mod, minus, exec, noctalia-shell ipc call volume decrease" - "$mod, equal, exec, noctalia-shell ipc call volume increase" - ", XF86AudioLowerVolume, exec, noctalia-shell ipc call volume decrease" - ", XF86AudioRaiseVolume, exec, noctalia-shell ipc call volume increase" + "XF86AudioMute".action.spawn = ["noctalia-shell" "ipc" "call" "volume" "mute"]; + "XF86AudioMicMute".action.spawn = ["noctalia-shell" "ipc" "call" "volume" "muteInput"]; - ", XF86AudioMute, exec, noctalia-shell ipc call volume mute" - ", XF86AudioMicMute, exec, noctalia-shell ipc call volume muteInput" + "XF86MonBrightnessDown".action.spawn = ["noctalia-shell" "ipc" "call" "brightness" "decrease"]; + "XF86MonBrightnessUp".action.spawn = ["noctalia-shell" "ipc" "call" "brightness" "increase"]; + "Mod+Semicolon".action.spawn = ["noctalia-shell" "ipc" "call" "brightness" "decrease"]; + "Mod+Apostrophe".action.spawn = ["noctalia-shell" "ipc" "call" "brightness" "increase"]; - ", XF86MonBrightnessDown, exec, noctalia-shell ipc call brightness decrease" - ", XF86MonBrightnessUp, exec, noctalia-shell ipc call brightness increase" - "$mod, semicolon, exec, noctalia-shell ipc call brightness decrease" - "$mod, apostrophe, exec, noctalia-shell ipc call brightness increase" + # Previous/next but change the shuffle/random state before action (and change back afterwards) + "Mod+Shift+Bracketright".action.spawn-sh = "${pkgs.playerctl}/bin/playerctl shuffle Toggle && ${pkgs.playerctl}/bin/playerctl next && ${pkgs.playerctl}/bin/playerctl shuffle Toggle"; + "Mod+Shift+bracketleft".action.spawn-sh = "${pkgs.playerctl}/bin/playerctl shuffle Toggle && ${pkgs.playerctl}/bin/playerctl previous && ${pkgs.playerctl}/bin/playerctl shuffle Toggle"; + "Shift+XF86AudioNext".action.spawn-sh = "${pkgs.playerctl}/bin/playerctl shuffle Toggle && ${pkgs.playerctl}/bin/playerctl next && ${pkgs.playerctl}/bin/playerctl shuffle Toggle"; + "Shift+XF86AudioPrev".action.spawn-sh = "${pkgs.playerctl}/bin/playerctl shuffle Toggle && ${pkgs.playerctl}/bin/playerctl pref && ${pkgs.playerctl}/bin/playerctl shuffle Toggle"; - # Previous/next but change the shuffle/random state before action (and change back afterwards) - "$mod&SHIFT, bracketright, exec, ${pkgs.playerctl}/bin/playerctl shuffle Toggle && ${pkgs.playerctl}/bin/playerctl next && ${pkgs.playerctl}/bin/playerctl shuffle Toggle" - "$mod&SHIFT, bracketleft, exec, ${pkgs.playerctl}/bin/playerctl shuffle Toggle && ${pkgs.playerctl}/bin/playerctl previous && ${pkgs.playerctl}/bin/playerctl shuffle Toggle" - "SHIFT, XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl shuffle Toggle && ${pkgs.playerctl}/bin/playerctl next && ${pkgs.playerctl}/bin/playerctl shuffle Toggle" + # Previous/next + "Mod+Bracketright".action.spawn = ["noctalia-shell" "ipc" "call" "media" "next"]; + "Mod+Bracketleft".action.spawn = ["noctalia-shell" "ipc" "call" "media" "previous"]; + "XF86AudioNext".action.spawn = ["noctalia-shell" "ipc" "call" "media" "next"]; + "XF86AudioPrev".action.spawn = ["noctalia-shell" "ipc" "call" "media" "previous"]; - # Previous/next - "$mod, bracketright, exec, noctalia-shell ipc call media next" - "$mod, bracketleft, exec, noctalia-shell ipc call media previous" - ", XF86AudioNext, exec, noctalia-shell ipc call media next" - ", XF86AudioPrev, exec, noctalia-shell ipc call media previous" + # Seek forward/back + "Mod+Control+bracketleft".action.spawn = ["noctalia-shell" "ipc" "call" "media" "seekRelative" "-5"]; + "Mod+Control+bracketright".action.spawn = ["noctalia-shell" "ipc" "call" "media" "seekRelative" "5"]; + "Control+XF86AudioPrev".action.spawn = ["noctalia-shell" "ipc" "call" "media" "seekRelative" "-5"]; + "Control+XF86AudioNext".action.spawn = ["noctalia-shell" "ipc" "call" "media" "seekRelative" "5"]; - # Seek forward/back - "$mod&Control_L, bracketleft, exec, noctalia-shell ipc call media seekRelative -5" - "$mod&Control_L, bracketright, exec, noctalia-shell ipc call media seekRelative 5" - "Control_L, XF86AudioPrev, exec, noctalia-shell ipc call media seekRelative -5" - "Control_L, XF86AudioNext, exec, noctalia-shell ipc call media seekRelative 5" + # Toggle play/pause + "XF86AudioPlay".action.spawn = ["noctalia-shell" "ipc" "call" "media" "playPause"]; + "XF86AudioPause".action.spawn = ["noctalia-shell" "ipc" "call" "media" "playPause"]; + "Mod+Backslash".action.spawn = ["noctalia-shell" "ipc" "call" "media" "playPause"]; - # Toggle play/pause - ", XF86AudioPlay, exec, noctalia-shell ipc call media playPause" - ", XF86AudioPause, exec, noctalia-shell ipc call media playPause" - "$mod, backslash, exec, noctalia-shell ipc call media playPause" + "Control+Alt+l".action.spawn = ["noctalia-shell" "ipc" "call" "lockScreen" "lock"]; - "Control_L&Alt_L, l, exec, noctalia-shell ipc call lockScreen lock" + "Mod+Shift+Slash".action = config.lib.niri.actions.show-hotkey-overlay; - "$mod, left, hy3:movefocus, l" - "$mod, right, hy3:movefocus, r" - "$mod, up, hy3:movefocus, u" - "$mod, down, hy3:movefocus, d" - "$mod, h, hy3:movefocus, l" - "$mod, j, hy3:movefocus, d" - "$mod, k, hy3:movefocus, u" - "$mod, l, hy3:movefocus, r" + "Mod+Left".action = config.lib.niri.actions.focus-column-left; + "Mod+Right".action = config.lib.niri.actions.focus-column-right; - "$mod SHIFT, left, hy3:movewindow, l" - "$mod SHIFT, right, hy3:movewindow, r" - "$mod SHIFT, up, hy3:movewindow, u" - "$mod SHIFT, down, hy3:movewindow, d" - "$mod SHIFT, h, hy3:movewindow, l" - "$mod SHIFT, j, hy3:movewindow, d" - "$mod SHIFT, k, hy3:movewindow, u" - "$mod SHIFT, l, hy3:movewindow, r" + # "Mod+Shift+Left".action = config.lib.niri.actions.move-column-left; + # "Mod+Shift+Right".action = config.lib.niri.actions.move-column-right; + "Mod+Shift+Left".action = config.lib.niri.actions.consume-or-expel-window-left; + "Mod+Shift+Right".action = config.lib.niri.actions.consume-or-expel-window-right; - "$mod CTRL, left, resizeactive, -80 0" - "$mod CTRL, right, resizeactive, 80 0" - "$mod CTRL, up, resizeactive, 0 -80" - "$mod CTRL, down, resizeactive, 0 80" - "$mod CTRL, h, resizeactive, -80 0" - "$mod CTRL, j, resizeactive, 0 80" - "$mod CTRL, k, resizeactive, 0 -80" - "$mod CTRL, l, resizeactive, 80 0" + "Mod+Down".action = config.lib.niri.actions.focus-window-or-workspace-down; + "Mod+Up".action = config.lib.niri.actions.focus-window-or-workspace-up; - "$mod, mouse_down, workspace, e-1" - "$mod, mouse_up, workspace, e+1" - ] - ++ ( + "Mod+Shift+Down".action = config.lib.niri.actions.move-window-down-or-to-workspace-down; + "Mod+Shift+Up".action = config.lib.niri.actions.move-window-up-or-to-workspace-up; + + # "Mod+Control+Left".action = config.lib.niri.actions.consume-or-expel-window-left; + # "Mod+Control+Right".action = config.lib.niri.actions.consume-or-expel-window-right; + + "Mod+Space".action = config.lib.niri.actions.toggle-window-floating; + + "Mod+F".action = config.lib.niri.actions.fullscreen-window; + + "Mod+M".action = config.lib.niri.actions.maximize-column; + + "Mod+O".action = config.lib.niri.actions.toggle-overview; + + # "$mod, left, hy3:movefocus, l" + # "$mod, right, hy3:movefocus, r" + # "$mod, up, hy3:movefocus, u" + # "$mod, down, hy3:movefocus, d" + # "$mod, h, hy3:movefocus, l" + # "$mod, j, hy3:movefocus, d" + # "$mod, k, hy3:movefocus, u" + # "$mod, l, hy3:movefocus, r" + + # "$mod SHIFT, left, hy3:movewindow, l" + # "$mod SHIFT, right, hy3:movewindow, r" + # "$mod SHIFT, up, hy3:movewindow, u" + # "$mod SHIFT, down, hy3:movewindow, d" + # "$mod SHIFT, h, hy3:movewindow, l" + # "$mod SHIFT, j, hy3:movewindow, d" + # "$mod SHIFT, k, hy3:movewindow, u" + # "$mod SHIFT, l, hy3:movewindow, r" + + # "$mod CTRL, left, resizeactive, -80 0" + # "$mod CTRL, right, resizeactive, 80 0" + # "$mod CTRL, up, resizeactive, 0 -80" + # "$mod CTRL, down, resizeactive, 0 80" + # "$mod CTRL, h, resizeactive, -80 0" + # "$mod CTRL, j, resizeactive, 0 80" + # "$mod CTRL, k, resizeactive, 0 -80" + # "$mod CTRL, l, resizeactive, 80 0" + + # "$mod, mouse_down, workspace, e-1" + # "$mod, mouse_up, workspace, e+1" + } + // ( # workspaces # binds $mod + [shift +] {1..9} to [move to] workspace {1..9} - builtins.concatLists (builtins.genList ( + lib.listToAttrs (builtins.concatLists (builtins.genList ( i: let ws = i + 1; in [ - "$mod, code:1${toString i}, workspace, ${toString ws}" - "$mod SHIFT, code:1${toString i}, movetoworkspace, ${toString ws}" + { name = "Mod+${toString i}"; value = { action.focus-workspace = i; }; } + { name = "Mod+Shift+${toString i}"; value = { action.move-window-to-workspace = i; }; } + # "$mod, code:1${toString i}, workspace, ${toString ws}" + # "$mod SHIFT, code:1${toString i}, movetoworkspace, ${toString ws}" ] ) 9) - ); + )); }; }; @@ -365,6 +370,8 @@ in { fonts.fontconfig.enable = lib.mkDefault true; home.packages = with pkgs; [ + nautilus # gnome portal file chooser + wl-clipboard wtype ydotool diff --git a/modules/ezpc.nix b/modules/ezpc.nix index 8aa89fc..ba8c11f 100644 --- a/modules/ezpc.nix +++ b/modules/ezpc.nix @@ -1,4 +1,4 @@ -{ +inputs: { config, lib, pkgs, @@ -7,21 +7,30 @@ with lib; let cfg = config.ezpc; in { + imports = [inputs.niri.nixosModules.niri]; options.ezpc.enable = mkEnableOption "Enable ezpc system stuff"; config = mkIf cfg.enable { - programs.hyprland.enable = true; - - xdg.portal = { + programs.niri = { enable = true; - xdgOpenUsePortal = true; - extraPortals = [ pkgs.xdg-desktop-portal-hyprland pkgs.xdg-desktop-portal-gtk ]; - config = { - common.default = ["gtk"]; - hyprland.default = ["gtk" "hyprland"]; - }; + package = pkgs.niri-unstable; }; + niri-flake.cache.enable = false; + + services.gnome.gnome-keyring.enable = lib.mkForce false; + + # xdg.portal = { + # config.niri = { + # default = [ "gnome" "gtk" ]; + # # "org.freedesktop.impl.portal.Access" = "gtk"; + # # "org.freedesktop.impl.portal.Notification" = "gtk"; + # # "org.freedesktop.impl.portal.Secret" = "gnome-keyring"; + # # "org.freedesktop.impl.portal.FileChooser" = "gtk"; + # }; + # extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + # }; + environment.sessionVariables = { QT_QPA_PLATFORM = "wayland;xcb"; MOZ_ENABLE_WAYLAND = "1"; @@ -39,7 +48,7 @@ in { enable = lib.mkDefault true; settings = { default_session = { - command = lib.mkDefault "${pkgs.tuigreet}/bin/tuigreet --time --user-menu --user-menu-max-uid 30000 --cmd hyprland"; + command = lib.mkDefault "${pkgs.tuigreet}/bin/tuigreet --time --user-menu --user-menu-max-uid 30000 --cmd niri-session"; }; }; }; diff --git a/modules/fuckingprint.nix b/modules/fuckingprint.nix index fdbd819..f7ce3b3 100644 --- a/modules/fuckingprint.nix +++ b/modules/fuckingprint.nix @@ -55,7 +55,7 @@ in { cups-dymo # cups-kyocera # mirror is down - cups-kyocera-ecosys-m552x-p502x + # cups-kyocera-ecosys-m552x-p502x # mirror is down # cups-kyodialog3 # Mirror is down cups-toshiba-estudio @@ -95,7 +95,7 @@ in { dsseries.enable = true; drivers.scanSnap.enable = true; extraBackends = with pkgs; [ - epkowa + # epkowa # borked hplipWithPlugin ]; }; diff --git a/modules/workstation.nix b/modules/workstation.nix index 4216cf2..2e35405 100644 --- a/modules/workstation.nix +++ b/modules/workstation.nix @@ -159,7 +159,6 @@ in { "libvirtd" # run VMs through libvirt "kvm" # run KVM VMs "lxd" # use LXD containers - "sway" # run sway.. I guess? "wheel" # sudo "networkmanager" # use networkmanager? "docker" # docker permission (basically the same as `wheel`)