diff --git a/flake.lock b/flake.lock index 026ae14..2c1d0f0 100644 --- a/flake.lock +++ b/flake.lock @@ -36,6 +36,22 @@ "type": "github" } }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, "flake-utils": { "locked": { "lastModified": 1676283394, @@ -224,6 +240,22 @@ "type": "github" } }, + "nixpkgs_4": { + "locked": { + "lastModified": 1678875422, + "narHash": "sha256-T3o6NcQPwXjxJMn2shz86Chch4ljXgZn746c2caGxd8=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "126f49a01de5b7e35a43fd43f891ecf6d3a51459", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nur": { "locked": { "lastModified": 1678614282, @@ -271,7 +303,8 @@ "nixpkgs-unstable": "nixpkgs-unstable", "nur": "nur", "pre-commit-hooks": "pre-commit-hooks", - "sops": "sops" + "sops": "sops", + "swayfx": "swayfx" } }, "sops": { @@ -293,6 +326,25 @@ "type": "github" } }, + "swayfx": { + "inputs": { + "flake-compat": "flake-compat_2", + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1678605650, + "narHash": "sha256-ROy8sD8/W1Sv1vF5D0EBSBm6W0KiWsuJGnQMRk6zT3Y=", + "owner": "willpower3309", + "repo": "swayfx", + "rev": "ac31a612164828ca6ae5478332eee3cd2317ffdc", + "type": "github" + }, + "original": { + "owner": "willpower3309", + "repo": "swayfx", + "type": "github" + } + }, "utils": { "locked": { "lastModified": 1676283394, diff --git a/flake.nix b/flake.nix index 35a450a..1cfbcb2 100644 --- a/flake.nix +++ b/flake.nix @@ -20,6 +20,7 @@ sops.url = "github:Mic92/sops-nix"; # dev + swayfx.url = "github:willpower3309/swayfx"; pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix"; flake-utils.url = "github:numtide/flake-utils"; }; @@ -35,6 +36,7 @@ nur, pre-commit-hooks, sops, + swayfx, ... }: let overlays = final: prev: { @@ -72,6 +74,7 @@ extraSpecialArgs = { flakePath = "/home/winston/.config/nixpkgs"; machine.personal = true; + swayfx = swayfx.packages.${system}.swayfx-unwrapped; }; }; }; @@ -87,7 +90,7 @@ ({config, ...}: { config = { - nixpkgs.overlays = [overlays]; + nixpkgs.overlays = [overlays swayfx.overlays.default]; home-manager = { useGlobalPkgs = true; sharedModules = [sops.homeManagerModules.sops]; @@ -95,6 +98,7 @@ extraSpecialArgs = { flakePath = "/home/w/.config/nixpkgs"; machine.personal = false; + swayfx = swayfx.packages.${system}.swayfx-unwrapped; }; }; }; diff --git a/home/apps/i3.nix b/home/apps/i3.nix index 3f8a3e6..59a0cd7 100644 --- a/home/apps/i3.nix +++ b/home/apps/i3.nix @@ -3,6 +3,7 @@ lib, flakePath, pkgs, + swayfx, ... }: let inherit (pkgs.stdenv.hostPlatform) isLinux; @@ -30,6 +31,7 @@ workspaceAutoBackAndForth = true; terminal = "wezterm start --always-new-process"; menu = ""; + defaultWorkspace = "$ws1"; keybindings = let mod = modifier; modMove = "${mod}+Shift"; @@ -152,17 +154,25 @@ # modes "${mod}+r" = "mode \"resize\""; - "${mod}+p" = "mode \"system\""; + "${mod}+p" = "mode \"power: (l)ock, (e)xit, (r)eboot, (s)uspend, (h)ibernate, (S)hut off\""; }; modes = { - system = { - "l" = "exec --no-startup-id i3exit lock, mode \"default\""; - "s" = "exec --no-startup-id i3exit suspend, mode \"default\""; - "u" = "exec --no-startup-id i3exit switch_user, mode \"default\""; - "e" = "exec --no-startup-id i3exit logout, mode \"default\""; - "h" = "exec --no-startup-id i3exit hibernate, mode \"default\""; - "r" = "exec --no-startup-id i3exit reboot, mode \"default\""; - "Shift+s" = "exec --no-startup-id i3exit shutdown, mode \"default\""; + "power: (l)ock, (e)xit, (r)eboot, (s)uspend, (h)ibernate, (S)hut off" = let + lock = + if wayland + then "swaylock" + else "i3lock"; + msg = + if wayland + then "swaymsg" + else "i3-msg"; + in { + l = "exec --no-startup-id ${lock} --color 000000, mode \"default\""; + e = "exec --no-startup-id ${msg} exit, mode \"default\""; + r = "exec --no-startup-id systemctl reboot, mode \"default\""; + s = "exec --no-startup-id systemctl suspend, mode \"default\""; + h = "exec --no-startup-id systemctl hibernate, mode \"default\""; + "Shift+s" = "exec --no-startup-id systemctl poweroff, mode \"default\""; Escape = "mode default"; Return = "mode default"; }; @@ -180,11 +190,10 @@ bars = [ { mode = "hide"; - hiddenState = "hide"; # use waybar if wayland command = lib.mkIf wayland "${lib.getExe config.programs.waybar.package}"; # otherwise use i3status-rust - statusCommand = lib.mkIf (!wayland) "${lib.getExe config.programs.i3status-rust.package} ${config.xdg.configHome}/i3status-rust/config-default.toml"; + statusCommand = lib.mkIf (!wayland) "${config.programs.i3status-rust.package}/bin/i3status-rs ${config.xdg.configHome}/i3status-rust/config-default.toml"; position = "top"; workspaceNumbers = false; inherit fonts; @@ -208,15 +217,7 @@ }; } ]; - colors = let - unfocused = { - background = "#000000"; - border = "#CBA6F7"; - childBorder = "#CBA6F7"; - text = "#CDD6F4"; - indicator = "#CBA6F7"; - }; - in { + colors = rec { focused = { background = "#000000"; border = "#F5C2E7"; @@ -231,8 +232,14 @@ text = "#CDD6F4"; indicator = "#F38BA8"; }; + unfocused = { + background = "#000000"; + border = "#CBA6F7"; + childBorder = "#CBA6F7"; + text = "#CDD6F4"; + indicator = "#CBA6F7"; + }; focusedInactive = unfocused; - unfocused = unfocused; placeholder = unfocused; }; window = { @@ -242,7 +249,7 @@ }; gaps = { inner = 5; - outer = 5; + outer = 2; }; }; commonExtraConfig = '' @@ -283,6 +290,42 @@ # keep apps in scratchpad for_window [class="discord"] move scratchpad sticky + + set $mode_gaps Gaps: (o)uter, (i)nner + set $mode_gaps_outer Outer Gaps: +|-|0 (local), Shift + +|-|0 (global) + set $mode_gaps_inner Inner Gaps: +|-|0 (local), Shift + +|-|0 (global) + bindsym ${(commonConfig {}).modifier}+Shift+g mode "$mode_gaps" + + mode "$mode_gaps" { + bindsym o mode "$mode_gaps_outer" + bindsym i mode "$mode_gaps_inner" + bindsym Return mode "$mode_gaps" + bindsym Escape mode "default" + } + mode "$mode_gaps_outer" { + bindsym plus gaps outer current plus 5 + bindsym minus gaps outer current minus 5 + bindsym 0 gaps outer current set 0 + + bindsym Shift+plus gaps outer all plus 5 + bindsym Shift+minus gaps outer all minus 5 + bindsym Shift+0 gaps outer all set 0 + + bindsym Return mode "$mode_gaps" + bindsym Escape mode "default" + } + mode "$mode_gaps_inner" { + bindsym plus gaps inner current plus 5 + bindsym minus gaps inner current minus 5 + bindsym 0 gaps inner current set 0 + + bindsym Shift+plus gaps inner all plus 5 + bindsym Shift+minus gaps inner all minus 5 + bindsym Shift+0 gaps inner all set 0 + + bindsym Return mode "$mode_gaps" + bindsym Escape mode "default" + } ''; in { fonts.fontconfig.enable = true; @@ -353,15 +396,13 @@ in { enable = true; components = ["secrets"]; }; - picom = let - riced = true; - in { + picom = { enable = true; package = pkgs.nur.repos.nekowinston.picom-ft-labs; fade = false; backend = "glx"; vSync = true; - shadow = riced; + shadow = true; settings = { animations = true; animation-exclude = [ @@ -378,9 +419,7 @@ in { enable-fading-prev-tag = true; enable-fading-next-tag = true; - blur = lib.mkIf riced { - method = "dual_kawase"; - }; + blur.method = "dual_kawase"; blur-background-exclude = [ "window_type = 'dock'" "window_type = 'desktop'" @@ -427,6 +466,7 @@ in { wayland.windowManager.sway = lib.mkIf isLinux { enable = true; + package = swayfx; config = commonConfig {wayland = true;} // { @@ -437,7 +477,14 @@ in { } ]; }; - extraConfig = commonExtraConfig; + extraConfig = '' + ${commonExtraConfig} + shadows on + shadow_color #0000007F + shadow_blur_radius 5 + corner_radius 5 + smart_corner_radius on + ''; systemdIntegration = true; wrapperFeatures = { base = true; diff --git a/machines/common/linux/default.nix b/machines/common/linux/default.nix index 2fceca2..5c96661 100644 --- a/machines/common/linux/default.nix +++ b/machines/common/linux/default.nix @@ -7,4 +7,6 @@ ]; # needed for gnome3 pinentry services.dbus.packages = [pkgs.gcr]; + xdg.portal.enable = true; + xdg.portal.wlr.enable = true; } diff --git a/machines/common/linux/xsession.nix b/machines/common/linux/xsession.nix index 291131d..6675718 100644 --- a/machines/common/linux/xsession.nix +++ b/machines/common/linux/xsession.nix @@ -35,9 +35,16 @@ xserver = { enable = true; desktopManager.xterm.enable = false; - displayManager.gdm.enable = true; + displayManager = { + gdm.enable = true; + # one of these days, it'll be sway :COPIUM: + defaultSession = "none+i3"; + }; libinput.enable = true; - windowManager.i3.enable = true; + windowManager.i3 = { + enable = true; + package = pkgs.unstable.i3; + }; xkbOptions = "caps:ctrl_modifier"; }; };