diff --git a/flake.nix b/flake.nix index babc9ed..1f31aee 100644 --- a/flake.nix +++ b/flake.nix @@ -99,6 +99,7 @@ system = "x86_64-linux"; modules = [ overlays-module + niri-flake.nixosModules.niri ./hosts/alex/configuration.nix home-manager.nixosModules.home-manager { @@ -112,6 +113,7 @@ ./home/ash/desktop.nix ./home/ash/emacs.nix # ./home/ash/obs.nix + ./home/ash/niri.nix ./home/ash/tpm-fido.nix ./home/ash/vscodium.nix ./home/ash/zoom.nix @@ -142,6 +144,7 @@ ./home/ash/obs.nix ./home/ash/intellij.nix ./home/ash/lutris.nix + ./home/ash/vscodium.nix ./home/ash/zoom.nix ]; @@ -208,6 +211,28 @@ ]; }; + nixosConfigurations.em = nixpkgs-unstable.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + overlays-module + niri-flake.nixosModules.niri + ./hosts/em/configuration.nix + home-manager-unstable.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.ash = { ... }: { + imports = [ + fsh.homeModules.fsh + ./home/ash + ./home/ash/niri.nix + ./home/ash/desktop.nix + ]; + }; + } + ]; + }; + packages.x86_64-linux = { emira = nixos-generators.nixosGenerate { system = "x86_64-linux"; diff --git a/home/ash/niri.nix b/home/ash/niri.nix index 003eaf2..1e466df 100644 --- a/home/ash/niri.nix +++ b/home/ash/niri.nix @@ -1,5 +1,256 @@ { config, pkgs, ... }: { programs.niri = { - # enable = true; + settings = { + input = { + focus-follows-mouse.enable = true; + }; + layout = { + gaps = 8; + preset-column-widths = [ + { proportion = 1. / 3.; } + { proportion = 1. / 2.; } + { proportion = 2. / 3.; } + ]; + default-column-width.proportion = 1. / 2.; + focus-ring = { + active.color = "#cba6f7"; + inactive.color = "#313244"; + }; + }; + binds = with config.lib.niri.actions; { + "Mod+Shift+Slash".action = show-hotkey-overlay; + + "Mod+T".action = spawn "kitty"; + "Mod+Space".action = spawn "fuzzel"; + "Super+Alt+L".action = spawn "swaylock"; + + "XF86AudioRaiseVolume" = { + allow-when-locked = true; + action = spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; + }; + "XF86AudioLowerVolume" = { + allow-when-locked = true; + action = spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; + }; + "XF86AudioMute" = { + allow-when-locked = true; + action = spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; + }; + "XF86AudioMicMute" = { + allow-when-locked = true; + action = spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; + }; + + "Mod+Q".action = close-window; + + "Mod+Left".action = focus-column-left; + "Mod+Down".action = focus-window-down; + "Mod+Up".action = focus-window-up; + "Mod+Right".action = focus-column-right; + "Mod+H".action = focus-column-left; + "Mod+J".action = focus-window-down; + "Mod+K".action = focus-window-up; + "Mod+L".action = focus-column-right; + + "Mod+Ctrl+Left".action = move-column-left; + "Mod+Ctrl+Down".action = move-window-down; + "Mod+Ctrl+Up".action = move-window-up; + "Mod+Ctrl+Right".action = move-column-right; + "Mod+Ctrl+H".action = move-column-left; + "Mod+Ctrl+J".action = move-window-down; + "Mod+Ctrl+K".action = move-window-up; + "Mod+Ctrl+L".action = move-column-right; + + "Mod+Home".action = focus-column-first; + "Mod+End".action = focus-column-last; + "Mod+Ctrl+Home".action = move-column-to-first; + "Mod+Ctrl+End".action = move-column-to-last; + + "Mod+Shift+Left".action = focus-monitor-left; + "Mod+Shift+Down".action = focus-monitor-down; + "Mod+Shift+Up".action = focus-monitor-up; + "Mod+Shift+Right".action = focus-monitor-right; + "Mod+Shift+H".action = focus-monitor-left; + "Mod+Shift+J".action = focus-monitor-down; + "Mod+Shift+K".action = focus-monitor-up; + "Mod+Shift+L".action = focus-monitor-right; + + "Mod+Shift+Ctrl+Left".action = move-column-to-monitor-left; + "Mod+Shift+Ctrl+Down".action = move-column-to-monitor-down; + "Mod+Shift+Ctrl+Up".action = move-column-to-monitor-up; + "Mod+Shift+Ctrl+Right".action = move-column-to-monitor-right; + "Mod+Shift+Ctrl+H".action = move-column-to-monitor-left; + "Mod+Shift+Ctrl+J".action = move-column-to-monitor-down; + "Mod+Shift+Ctrl+K".action = move-column-to-monitor-up; + "Mod+Shift+Ctrl+L".action = move-column-to-monitor-right; + + "Mod+Page_Down".action = focus-workspace-down; + "Mod+Page_Up".action = focus-workspace-up; + "Mod+U".action = focus-workspace-down; + "Mod+I".action = focus-workspace-up; + "Mod+Ctrl+Page_Down".action = move-column-to-workspace-down; + "Mod+Ctrl+Page_Up".action = move-column-to-workspace-up; + "Mod+Ctrl+U".action = move-column-to-workspace-down; + "Mod+Ctrl+I".action = move-column-to-workspace-up; + + "Mod+Shift+Page_Down".action = move-workspace-down; + "Mod+Shift+Page_Up".action = move-workspace-up; + "Mod+Shift+U".action = move-workspace-down; + "Mod+Shift+I".action = move-workspace-up; + + "Mod+1".action = focus-workspace 1; + "Mod+2".action = focus-workspace 2; + "Mod+3".action = focus-workspace 3; + "Mod+4".action = focus-workspace 4; + "Mod+5".action = focus-workspace 5; + "Mod+6".action = focus-workspace 6; + "Mod+7".action = focus-workspace 7; + "Mod+8".action = focus-workspace 8; + "Mod+9".action = focus-workspace 9; + "Mod+Ctrl+1".action = move-column-to-workspace 1; + "Mod+Ctrl+2".action = move-column-to-workspace 2; + "Mod+Ctrl+3".action = move-column-to-workspace 3; + "Mod+Ctrl+4".action = move-column-to-workspace 4; + "Mod+Ctrl+5".action = move-column-to-workspace 5; + "Mod+Ctrl+6".action = move-column-to-workspace 6; + "Mod+Ctrl+7".action = move-column-to-workspace 7; + "Mod+Ctrl+8".action = move-column-to-workspace 8; + "Mod+Ctrl+9".action = move-column-to-workspace 9; + + "Mod+Comma".action = consume-window-into-column; + "Mod+Period".action = expel-window-from-column; + + "Mod+R".action = switch-preset-column-width; + "Mod+Shift+R".action = reset-window-height; + "Mod+F".action = maximize-column; + "Mod+Shift+F".action = fullscreen-window; + "Mod+C".action = center-column; + + "Mod+Minus".action = set-column-width "-10%"; + "Mod+Plus".action = set-column-width "+10%"; + + "Mod+Shift+Minus".action = set-window-height "-10%"; + "Mod+Shift+Plus".action = set-window-height "+10%"; + + "Print".action = screenshot; + "Ctrl+Print".action = screenshot-screen; + "Alt+Print".action = screenshot-window; + + "Mod+Shift+E".action = quit; + "Mod+Shift+P".action = power-off-monitors; + }; + }; + }; + + programs.swaylock.enable = true; + + programs.fuzzel = { + enable = true; + }; + + programs.waybar = { + enable = true; + style = ./waybar/style.css; + settings = [{ + "layer" = "top"; # Waybar at top layer + "position" = "top"; # Waybar position (top|bottom|left|right) + # "width" = 1280; # Waybar width + # Choose the order of the modules + "modules-left" = [ + "wlr/workspaces" + ]; + "modules-center" = [ + # "custom/music" + ]; + "modules-right" = [ + "pulseaudio" + "backlight" + "battery" + "clock" + "tray" + "custom/lock" + "custom/power" + ]; + "wlr/workspaces" = { + "disable-scroll" = true; + "sort-by-name" = true; + "format" = " {icon} "; + "format-icons" = { + "default" = ""; + }; + }; + "tray" = { + "icon-size" = 21; + "spacing" = 10; + }; + # "custom/music" = { + # "format" = " {}"; + # "escape" = true; + # "interval" = 5; + # "tooltip" = false; + # "exec" = "playerctl metadata --format='{{ title }}'"; + # "on-click" = "playerctl play-pause"; + # "max-length" = 50 + # }; + "clock" = { + "timezone" = "Europe/London"; + "tooltip-format" = "{:%Y %B}\n{calendar}"; + "format-alt" = " {:%d/%m/%Y}"; + "format" = " {:%H:%M}"; + }; + "backlight" = { + "device" = "intel_backlight"; + "format" = "{icon}"; + "format-icons" = ["" "" "" "" "" "" "" "" ""]; + }; + "battery" = { + "states" = { + "warning" = 30; + "critical" = 15; + }; + "format" = "{icon}"; + "format-charging" = ""; + "format-plugged" = ""; + "format-alt" = "{icon}"; + "format-icons" = ["" "" "" "" "" "" "" "" "" "" "" ""]; + }; + "pulseaudio" = { + # "scroll-step" = 1, # %, can be a float + "format" = "{icon} {volume}%"; + "format-muted" = ""; + "format-icons" = { + "default" = ["" "" " "]; + }; + "on-click" = "pavucontrol"; + }; + "custom/lock" = { + "tooltip" = false; + "on-click" = "sh -c '(sleep 0.5s; swaylock --grace 0)' & disown"; + "format" = ""; + }; + "custom/power" = { + "tooltip" = false; + "on-click" = "wlogout &"; + "format" = "Logout"; + }; + }]; + systemd.enable = true; + }; + + services.mako = { + enable = true; + }; + + systemd.user.services."swaybg" = { + Unit = { + Description = "swaybg"; + PartOf = ["graphical-session.target"]; + After = ["graphical-session.target"]; + Requisite = ["graphical-session.target"]; + }; + Service = { + ExecStart = "${pkgs.swaybg}/bin/swaybg -i $HOME/wallpaper.png"; + Restart = "on-failure"; + }; }; } diff --git a/home/ash/waybar/style.css b/home/ash/waybar/style.css new file mode 100644 index 0000000..39cb5d9 --- /dev/null +++ b/home/ash/waybar/style.css @@ -0,0 +1,131 @@ +@define-color base #1e1e2e; +@define-color mantle #181825; +@define-color crust #11111b; + +@define-color text #cdd6f4; +@define-color subtext0 #a6adc8; +@define-color subtext1 #bac2de; + +@define-color surface0 #313244; +@define-color surface1 #45475a; +@define-color surface2 #585b70; + +@define-color overlay0 #6c7086; +@define-color overlay1 #7f849c; +@define-color overlay2 #9399b2; + +@define-color blue #89b4fa; +@define-color lavender #b4befe; +@define-color sapphire #74c7ec; +@define-color sky #89dceb; +@define-color teal #94e2d5; +@define-color green #a6e3a1; +@define-color yellow #f9e2af; +@define-color peach #fab387; +@define-color maroon #eba0ac; +@define-color red #f38ba8; +@define-color mauve #cba6f7; +@define-color pink #f5c2e7; +@define-color flamingo #f2cdcd; +@define-color rosewater #f5e0dc; + +* { + font-family: FantasqueSansMono Nerd Font; + font-size: 17px; + min-height: 0; +} + +#waybar { + background: transparent; + color: @text; + margin: 5px 5px; +} + +#workspaces { + border-radius: 1rem; + margin: 5px; + background-color: @surface0; + margin-left: 1rem; +} + +#workspaces button { + color: @lavender; + border-radius: 1rem; + padding: 0.4rem; +} + +#workspaces button.active { + color: @sky; + border-radius: 1rem; +} + +#workspaces button:hover { + color: @sapphire; + border-radius: 1rem; +} + +#custom-music, +#tray, +#backlight, +#clock, +#battery, +#pulseaudio, +#custom-lock, +#custom-power { + background-color: @surface0; + padding: 0.5rem 1rem; + margin: 5px 0; +} + +#clock { + color: @blue; + border-radius: 0px 1rem 1rem 0px; + margin-right: 1rem; +} + +#battery { + color: @green; +} + +#battery.charging { + color: @green; +} + +#battery.warning:not(.charging) { + color: @red; +} + +#backlight { + color: @yellow; +} + +#backlight, #battery { + border-radius: 0; +} + +#pulseaudio { + color: @maroon; + border-radius: 1rem 0px 0px 1rem; + margin-left: 1rem; +} + +#custom-music { + color: @mauve; + border-radius: 1rem; +} + +#custom-lock { + border-radius: 1rem 0px 0px 1rem; + color: @lavender; +} + +#custom-power { + margin-right: 1rem; + border-radius: 0px 1rem 1rem 0px; + color: @red; +} + +#tray { + margin-right: 1rem; + border-radius: 1rem; +} \ No newline at end of file diff --git a/hosts/alex/configuration.nix b/hosts/alex/configuration.nix index 04cc50d..52c9a0c 100644 --- a/hosts/alex/configuration.nix +++ b/hosts/alex/configuration.nix @@ -7,6 +7,7 @@ ../../common/tpm.nix ../../roles/kodi.nix ../../roles/libvirt.nix + ../../roles/niri.nix ../../roles/podman.nix ./hardware-config.nix ]; @@ -22,7 +23,6 @@ networking.hostName = "alex"; networking.firewall.enable = false; - sound.enable = true; hardware.pulseaudio.enable = false; security.rtkit.enable = true; services.pipewire = { @@ -45,7 +45,6 @@ xkb.layout = "gb"; }; displayManager.sddm.enable = true; - desktopManager.plasma6.enable = true; }; #environment.systemPackages = with pkgs; [