From 467b2cef138262646cbe789a9380a54f05e3339d Mon Sep 17 00:00:00 2001 From: Ray Andrew Date: Sat, 2 Nov 2024 23:33:44 -0500 Subject: [PATCH] add i3 and sway --- flake.lock | 24 +++ flake.nix | 3 + src/home/default.nix | 2 + src/home/gui/default.nix | 4 +- src/home/gui/foot.nix | 11 ++ src/home/gui/i3status-rust.nix | 81 +++++++++++ src/home/gui/kde.nix | 86 +++++++++++ src/home/gui/kitty.nix | 2 +- src/home/gui/xdg-portal.nix | 17 --- src/home/gui/zoom.nix | 13 +- src/home/latex.nix | 7 + src/home/shell/lazygit.nix | 4 + src/home/wm/awesome.nix | 20 +++ src/home/wm/common_i3.nix | 201 ++++++++++++++++++++++++++ src/home/wm/default.nix | 11 ++ src/home/wm/i3.nix | 51 +++++++ src/home/wm/sway.nix | 53 +++++++ src/hosts/default.nix | 1 + src/hosts/pickwick/default.nix | 25 ++-- src/nixos/default.nix | 7 +- src/nixos/displaymanager.nix | 29 ++++ src/nixos/fingerprint.nix | 20 +++ src/nixos/fonts.nix | 5 +- src/nixos/gnome.nix | 49 ++++--- src/nixos/kde.nix | 22 +++ src/nixos/{audio.nix => pipewire.nix} | 0 src/nixos/stylix.nix | 4 +- src/nixos/users.nix | 2 + src/nixos/wm/default.nix | 6 + src/nixos/wm/i3.nix | 30 ++++ src/nixos/wm/sway.nix | 20 +++ src/nixos/xdg-portal.nix | 23 +++ 32 files changed, 777 insertions(+), 56 deletions(-) create mode 100644 src/home/gui/foot.nix create mode 100644 src/home/gui/i3status-rust.nix create mode 100644 src/home/gui/kde.nix delete mode 100644 src/home/gui/xdg-portal.nix create mode 100644 src/home/latex.nix create mode 100644 src/home/wm/awesome.nix create mode 100644 src/home/wm/common_i3.nix create mode 100644 src/home/wm/default.nix create mode 100644 src/home/wm/i3.nix create mode 100644 src/home/wm/sway.nix create mode 100644 src/nixos/displaymanager.nix create mode 100644 src/nixos/fingerprint.nix create mode 100644 src/nixos/kde.nix rename src/nixos/{audio.nix => pipewire.nix} (100%) create mode 100644 src/nixos/wm/default.nix create mode 100644 src/nixos/wm/i3.nix create mode 100644 src/nixos/wm/sway.nix create mode 100644 src/nixos/xdg-portal.nix diff --git a/flake.lock b/flake.lock index d655e23..234541a 100644 --- a/flake.lock +++ b/flake.lock @@ -280,6 +280,29 @@ "type": "github" } }, + "plasma-manager": { + "inputs": { + "home-manager": [ + "home-manager" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1730481339, + "narHash": "sha256-Y1yWhjt/38N5IMgWoGnUTzJ6F4kGnpti/l2AOJWPUOY=", + "owner": "nix-community", + "repo": "plasma-manager", + "rev": "6cb0aedf6160725eee50425b4e8d908c09dcb7a3", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "plasma-manager", + "type": "github" + } + }, "root": { "inputs": { "disko": "disko", @@ -289,6 +312,7 @@ "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs", "nixpkgs-stable": "nixpkgs-stable", + "plasma-manager": "plasma-manager", "stylix": "stylix" } }, diff --git a/flake.nix b/flake.nix index b2605bd..aee9c73 100644 --- a/flake.nix +++ b/flake.nix @@ -14,6 +14,9 @@ nix-index-database.inputs.nixpkgs.follows = "nixpkgs"; stylix.url = "github:danth/stylix"; stylix.inputs.nixpkgs.follows = "nixpkgs"; + plasma-manager.url = "github:nix-community/plasma-manager"; + plasma-manager.inputs.nixpkgs.follows = "nixpkgs"; + plasma-manager.inputs.home-manager.follows = "home-manager"; }; outputs = diff --git a/src/home/default.nix b/src/home/default.nix index df0bf3f..2be179f 100644 --- a/src/home/default.nix +++ b/src/home/default.nix @@ -12,9 +12,11 @@ ./impermanence.nix ./git.nix ./gui + ./latex.nix ./shell ./ssh.nix ./vim.nix + ./wm ]; config = { diff --git a/src/home/gui/default.nix b/src/home/gui/default.nix index 22a0d0d..66ecaca 100644 --- a/src/home/gui/default.nix +++ b/src/home/gui/default.nix @@ -6,16 +6,18 @@ ./chromium.nix ./discord.nix ./firefox.nix + ./foot.nix + ./kde.nix ./keyd.nix ./kitty.nix ./gnome.nix + ./i3status-rust.nix ./slack.nix ./skype.nix ./spotify.nix ./teams.nix ./vscode.nix ./wezterm.nix - ./xdg-portal.nix ./zathura.nix ./zoom.nix ]; diff --git a/src/home/gui/foot.nix b/src/home/gui/foot.nix new file mode 100644 index 0000000..de054d7 --- /dev/null +++ b/src/home/gui/foot.nix @@ -0,0 +1,11 @@ +{ pkgs, config, ... }: + +{ + programs.foot = { + enable = true; + server.enable = true; + }; + stylix.targets.foot = { + enable = true; + }; +} diff --git a/src/home/gui/i3status-rust.nix b/src/home/gui/i3status-rust.nix new file mode 100644 index 0000000..d1b8df7 --- /dev/null +++ b/src/home/gui/i3status-rust.nix @@ -0,0 +1,81 @@ +{ pkgs, config, lib, ... }: + +let + bar = { + position = "bottom"; + statusCommand = "${pkgs.i3status-rust}/bin/i3status-rs ~/.config/i3status-rust/config-${config.custom.i3status-rust.position}.toml"; + } // config.lib.stylix.i3.bar; +in +{ + options.custom = with lib; { + i3status-rust = { + enable = mkEnableOption "i3 status rust"; + position = mkOption { + type = types.str; + default = "bottom"; + }; + theme = mkOption { + type = types.str; + default = "native"; + }; + icons = mkOption { + type = types.str; + default = "material-nf"; + }; + }; + }; + + config = lib.mkIf config.custom.i3status-rust.enable { + programs.i3status-rust = { + enable = true; + bars = { + "${config.custom.i3status-rust.position}" = { + theme = config.custom.i3status-rust.theme; + icons = config.custom.i3status-rust.icons; + blocks = [ + { + block = "sound"; + } + { + block = "net"; + format = " $icon {$signal_strength|Wired connection} "; + } + { + block = "weather"; + autolocate = true; + # format = " WTR $weather $temp "; + format = " $icon $weather $temp "; + service = { + name = "metno"; + }; + } + { + block = "battery"; + format = " $icon $percentage "; + full_format = " $icon $percentage "; + empty_format = " $icon $percentage "; + not_charging_format = " $icon $percentage "; + } + { + block = "temperature"; + } + { + block = "uptime"; + } + { + block = "time"; + interval = 60; + format = " $timestamp.datetime(f:'%a %d/%m %l:%M %p')"; + } + ]; + }; + }; + }; + xsession.windowManager.i3.config = { + bars = [ bar ]; + }; + wayland.windowManager.sway.config = { + bars = [ bar ]; + }; + }; +} diff --git a/src/home/gui/kde.nix b/src/home/gui/kde.nix new file mode 100644 index 0000000..4038d3b --- /dev/null +++ b/src/home/gui/kde.nix @@ -0,0 +1,86 @@ +{ inputs, lib, pkgs, config, stdenv, ... }: + +{ + home.packages = with pkgs; [ + kdePackages.krohnkite + ]; + + programs.plasma = { + enable = true; + + hotkeys = { + commands = { + # "launch-konsole" = { + # name = "Launch Konsole"; + # key = "Meta+Alt+K"; + # command = "konsole"; + # }; + "launch-terminal" = { + name = "Launch Terminal"; + key = "Meta+Return"; + command = "kitty"; + }; + }; + }; + + shortcuts = { + ksmserver = { + "Lock Session" = [ + "Screensaver" + "Meta+Ctrl+Alt+L" + ]; + }; + kwin = { + "Window Close" = [ + "Alt+F4" + "Meta+Shift+Q" + ]; + "Switch to Desktop 1" = [ + "Meta+1" + ]; + "Switch to Desktop 2" = [ + "Meta+2" + ]; + }; + plasmashell = { + "activate task manager entry 1" = []; + "activate task manager entry 2" = []; + }; + }; + + input.touchpads = [ + { + enable = true; + name = "PIXA3854:00 093A:0274 Touchpad"; + vendorId = "093A"; + productId = "0274"; + tapToClick = true; + disableWhileTyping = true; + naturalScroll = true; + } + ]; + + kwin = { + edgeBarrier = 0; + cornerBarrier = false; + scripts.polonium.enable = false; + }; + + configFile ={ + kwinrc = { + Desktops.Number = { + value = 1; + immutable = false; + }; + Windows = { + ActiveMouseScreen = false; + SeparateScreenFocus = true; + }; + Plugins = { + krohnkiteEnabled = true; + }; + }; + }; + }; +} + diff --git a/src/home/gui/kitty.nix b/src/home/gui/kitty.nix index f90453c..2a20264 100644 --- a/src/home/gui/kitty.nix +++ b/src/home/gui/kitty.nix @@ -9,7 +9,7 @@ enableFishIntegration = config.programs.fish.enable; }; settings = { - hide_window_decorations = "yes"; + hide_window_decorations = "titlebar-only"; enable_audio_bell = "no"; }; }; diff --git a/src/home/gui/xdg-portal.nix b/src/home/gui/xdg-portal.nix deleted file mode 100644 index 9ebe2d1..0000000 --- a/src/home/gui/xdg-portal.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ pkgs, ... }: - -{ - xdg.portal = { - enable = true; - xdgOpenUsePortal = true; - extraPortals = with pkgs; [ - xdg-desktop-portal-kde - xdg-desktop-portal-gnome - xdg-desktop-portal-gtk - ]; - config = { - common = { default = [ "gtk" ]; }; - gnome = { default = [ "gnome" "gtk" ]; }; - }; - }; -} diff --git a/src/home/gui/zoom.nix b/src/home/gui/zoom.nix index 2c0927e..6d661c3 100644 --- a/src/home/gui/zoom.nix +++ b/src/home/gui/zoom.nix @@ -1,8 +1,19 @@ { config, pkgs, ... }: +let + zoom = pkgs.zoom-us.overrideAttrs (attrs: { + nativeBuildInputs = (attrs.nativeBuildInputs or []) ++ [ pkgs.bbe ]; + postFixup = '' + cp $out/opt/zoom/zoom . + bbe -e 's/\0manjaro\0/\0nixos\0\0\0/' < zoom > $out/opt/zoom/zoom + '' + (attrs.postFixup or "") + '' + sed -i 's|Exec=|Exec=env XDG_CURRENT_DESKTOP="gnome" |' $out/share/applications/Zoom.desktop + ''; + }); +in { home.packages = with pkgs; [ - zoom-us + zoom ]; custom.persist = { diff --git a/src/home/latex.nix b/src/home/latex.nix new file mode 100644 index 0000000..6c75eb4 --- /dev/null +++ b/src/home/latex.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: + +{ + home.packages = with pkgs; [ + texlive.combined.scheme-full + ]; +} diff --git a/src/home/shell/lazygit.nix b/src/home/shell/lazygit.nix index 681cbbf..349af69 100644 --- a/src/home/shell/lazygit.nix +++ b/src/home/shell/lazygit.nix @@ -3,5 +3,9 @@ { programs.lazygit = { enable = true; + settings = { + reporting = "off"; + startupPopupVersion = 1; + }; }; } diff --git a/src/home/wm/awesome.nix b/src/home/wm/awesome.nix new file mode 100644 index 0000000..3b835d1 --- /dev/null +++ b/src/home/wm/awesome.nix @@ -0,0 +1,20 @@ +{ pkgs, lib, config, ... }: + +{ + options.custom = with lib; { + wm = { + awesome = { + enable = mkEnableOption "Awesome WM"; + }; + }; + }; + + config = lib.mkIf config.custom.wm.awesome.enable { + xsession.windowManager.awesome = { + enable = true; + luaModules = with pkgs.luaPackages; [ + luarocks # is the package manager for Lua modules + ]; + }; + }; +} diff --git a/src/home/wm/common_i3.nix b/src/home/wm/common_i3.nix new file mode 100644 index 0000000..17aa224 --- /dev/null +++ b/src/home/wm/common_i3.nix @@ -0,0 +1,201 @@ +{ config +, pkgs +, lib +, light +, menu +, terminal +, sound ? "pactl" +, alt ? "Mod1" +, modifier ? "Mod4" +, extraWindowOptions ? { } +, extraFocusOptions ? { } +, extraModes ? { } +, extraConfig ? "" +, workspaces ? [ + { + ws = 1; + name = "1"; + } + { + ws = 2; + name = "2"; + } + { + ws = 3; + name = "3"; + } + { + ws = 4; + name = "4"; + } + { + ws = 5; + name = "5"; + } + { + ws = 6; + name = "6"; + } + { + ws = 7; + name = "7"; + } + { + ws = 8; + name = "8"; + } + { + ws = 9; + name = "9"; + } + { + ws = 0; + name = "10"; + } + ] +, ... +}: + +let + powerManagementMode = " : Screen [l]ock, [e]xit, [s]uspend, [h]ibernate, [R]eboot, [S]hutdown"; + resizeMode = " : [h]  , [j]  , [k]  , [l] "; + + # Helpers + mapDirection = { prefixKey ? null, leftCmd, downCmd, upCmd, rightCmd }: + with lib.strings; { + # Arrow keys + "${optionalString (prefixKey != null) "${prefixKey}+"}Left" = leftCmd; + "${optionalString (prefixKey != null) "${prefixKey}+"}Down" = downCmd; + "${optionalString (prefixKey != null) "${prefixKey}+"}Up" = upCmd; + "${optionalString (prefixKey != null) "${prefixKey}+"}Right" = rightCmd; + # Vi-like keys + "${optionalString (prefixKey != null) "${prefixKey}+"}h" = leftCmd; + "${optionalString (prefixKey != null) "${prefixKey}+"}j" = downCmd; + "${optionalString (prefixKey != null) "${prefixKey}+"}k" = upCmd; + "${optionalString (prefixKey != null) "${prefixKey}+"}l" = rightCmd; + }; + + mapDirectionDefault = { prefixKey ? null, prefixCmd }: + (mapDirection { + inherit prefixKey; + leftCmd = "${prefixCmd} left"; + downCmd = "${prefixCmd} down"; + upCmd = "${prefixCmd} up"; + rightCmd = "${prefixCmd} right"; + }); + + mapWorkspacesStr = with builtins; + with lib.strings; + { workspaces, prefixKey ? null, prefixCmd }: + (concatStringsSep "\n" (map + ({ ws, name }: + '' + bindsym ${optionalString (prefixKey != null) "${prefixKey}+"}${ + toString ws + } ${prefixCmd} "${name}"'') + workspaces)); +in +{ + inherit modifier terminal; + + helpers = { inherit mapDirection mapDirectionDefault mapWorkspacesStr; }; + + config = { + inherit modifier terminal; + + keybindings = { + "${modifier}+space" = "exec ${menu}"; + + "${modifier}+Return" = "exec ${terminal}"; + "${modifier}+Shift+Return" = "exec ${terminal} bash -c \"tmux attach || tmux new-session\""; + + "${modifier}+r" = ''mode "${resizeMode}"''; + "${modifier}+Escape" = ''mode "${powerManagementMode}"''; + + "${modifier}+Shift+c" = "reload"; + "${modifier}+Shift+r" = "restart"; + "${modifier}+Shift+q" = "kill"; + "${modifier}+Shift+e" = "exit"; + "${alt}+F4" = "kill"; + + "${modifier}+h" = "focus left"; + "${modifier}+j" = "focus down"; + "${modifier}+k" = "focus up"; + "${modifier}+l" = "focus right"; + + "${modifier}+s" = "layout stacking"; + "${modifier}+t" = "layout tabbed"; + "${modifier}+e" = "layout toggle split"; + "${modifier}+Shift+p" = "floating toggle"; + "${modifier}+p" = "focus mode_toggle"; + "${modifier}+f" = "fullscreen toggle"; + "${modifier}+Shift+v" = "split h"; + "${modifier}+v" = "split v"; + + "${modifier}+Shift+h" = "move left"; + "${modifier}+Shift+j" = "move down"; + "${modifier}+Shift+k" = "move up"; + "${modifier}+Shift+l" = "move right"; + + "XF86MonBrightnessUp" = "exec --no-startup-id ${light} -A 10%"; + "XF86MonBrightnessDown" = "exec --no-startup-id ${light} -U 10%"; + }; + + modes = + let + exitMode = { + "Escape" = "mode default"; + "Return" = "mode default"; + }; + in + { + ${resizeMode} = (mapDirection { + leftCmd = "resize shrink width 10px or 10ppt"; + downCmd = "resize grow height 10px or 10ppt"; + upCmd = "resize shrink height 10px or 10ppt"; + rightCmd = "resize grow width 10px or 10ppt"; + }) // exitMode; + ${powerManagementMode} = { + l = "mode default, exec loginctl lock-session"; + e = "mode default, exec loginctl terminate-session $XDG_SESSION_ID"; + s = "mode default, exec systemctl suspend"; + h = "mode default, exec systemctl hibernate"; + "Shift+r" = "mode default, exec systemctl reboot"; + "Shift+s" = "mode default, exec systemctl poweroff"; + } // exitMode; + } // extraModes; + + workspaceAutoBackAndForth = true; + workspaceLayout = "tabbed"; + + window = { + border = 1; + hideEdgeBorders = "smart"; + titlebar = false; + } // extraWindowOptions; + + focus = { followMouse = false; } // extraFocusOptions; + }; + + # Until this issue is fixed we need to map workspaces directly to config file + # https://github.com/nix-community/home-manager/issues/695 + extraConfig = + let + workspaceStr = (builtins.concatStringsSep "\n" [ + (mapWorkspacesStr { + inherit workspaces; + prefixKey = modifier; + prefixCmd = "workspace number"; + }) + (mapWorkspacesStr { + inherit workspaces; + prefixKey = "${modifier}+Shift"; + prefixCmd = "move container to workspace number"; + }) + ]); + in + '' + ${workspaceStr} + ${extraConfig} + ''; +} diff --git a/src/home/wm/default.nix b/src/home/wm/default.nix new file mode 100644 index 0000000..c42023f --- /dev/null +++ b/src/home/wm/default.nix @@ -0,0 +1,11 @@ +_: { + imports = [ + ./awesome.nix + ./i3.nix + ./sway.nix + ]; + + config = { + xsession.enable = true; + }; +} diff --git a/src/home/wm/i3.nix b/src/home/wm/i3.nix new file mode 100644 index 0000000..a60a956 --- /dev/null +++ b/src/home/wm/i3.nix @@ -0,0 +1,51 @@ +{ pkgs, lib, config, ... }: + + +let + pactl = lib.getExe' pkgs.pulseaudio "pactl"; + maim = lib.getExe' pkgs.maim "maim"; + clipboard-copy = lib.getExe' pkgs.xclip "xclip"; + commonOptions = import ./common_i3.nix rec { + inherit config lib pkgs; + light = lib.getExe' pkgs.light "light"; + menu = lib.getExe' pkgs.dmenu "dmenu_run"; + terminal = + if config.programs.kitty.enable then + lib.getExe' config.programs.kitty.package "kitty" + else + lib.getExe' pkgs.xterm "xterm"; + }; +in +{ + options.custom = with lib; { + wm = { + i3 = { + enable = mkEnableOption "i3 WM"; + }; + }; + }; + + config = lib.mkIf config.custom.wm.i3.enable { + xsession.windowManager.i3 = { + enable = true; + extraConfig = commonOptions.extraConfig; + config = lib.mkMerge ([ + commonOptions.config + { + # modifier = "Mod4"; + # terminal = "kitty"; + keybindings = { + "XF86AudioRaiseVolume" = "exec --no-startup-id '${pactl} set-sink-volume @DEFAULT_SINK@ 1%'"; + "XF86AudioLowerVolume" = "exec --no-startup-id '${pactl} set-sink-volume @DEFAULT_SINK@ -1%'"; + "XF86AudioMute" = "exec --no-startup-id '${pactl} set-sink-volume @DEFAULT_SINK@ toggle'"; + "XF86AudioMicMute" = "exec --no-startup-id '${pactl} set-source-mute @DEFAULT_SOURCE@ toggle'"; + "${commonOptions.modifier}+o" = "exec --no-startup-id ${maim} -s ~/pictures/screenshots/$(date +%Y-%m-%d-%H-%M-%S).png"; + "${commonOptions.modifier}+Shift+o" = "exec --no-startup-id ${maim} -s | ${clipboard-copy} -selection clipboard -t image/png"; + "PRINT" = "exec --no-startup-id ${maim} -s | ${clipboard-copy} -selection clipboard -t image/png"; + }; + } + ]); + }; + stylix.targets.i3.enable = true; + }; +} diff --git a/src/home/wm/sway.nix b/src/home/wm/sway.nix new file mode 100644 index 0000000..2631a68 --- /dev/null +++ b/src/home/wm/sway.nix @@ -0,0 +1,53 @@ +{ pkgs, lib, config, ... }: + +let + swayosd = lib.getExe' config.services.swayosd.package "swayosd-client"; + pactl = lib.getExe' pkgs.pulseaudio "pactl"; + grim = lib.getExe' pkgs.grim "grim"; + slurp = lib.getExe' pkgs.slurp "slurp"; + clipboard-copy = lib.getExe' pkgs.wl-clipboard "wl-copy"; + commonOptions = import ./common_i3.nix rec { + inherit config lib pkgs; + light = lib.getExe' pkgs.light "light"; + menu = lib.getExe' pkgs.bemenu "bemenu-run"; + terminal = + if config.programs.kitty.enable then + lib.getExe' config.programs.kitty.package "kitty" + else + lib.getExe' pkgs.foot "foot"; + }; +in +{ + options.custom = with lib; { + wm = { + sway = { + enable = mkEnableOption "Sway WM"; + }; + }; + }; + + config = lib.mkIf config.custom.wm.sway.enable { + services.swayosd = { + enable = true; + }; + wayland.windowManager.sway = { + enable = true; + extraConfig = commonOptions.extraConfig; + config = lib.mkMerge ([ + commonOptions.config + { + keybindings = { + "XF86AudioRaiseVolume" = "exec --no-startup-id '${swayosd} --output-volume=raise'"; + "XF86AudioLowerVolume" = "exec --no-startup-id '${swayosd} --output-volume=lower'"; + "XF86AudioMute" = "exec --no-startup-id '${swayosd} --output-volume=mute-toggle"; + "XF86AudioMicMute" = "exec --no-startup-id '${pactl} set-source-mute @DEFAULT_SOURCE@ toggle'"; + "${commonOptions.modifier}+o" = "exec --no-startup-id ${grim} -g \"\$(${slurp})\" ~/pictures/screenshots/$(date +%Y-%m-%d-%H-%M-%S).png"; + "${commonOptions.modifier}+Shift+o" = "exec --no-startup-id ${grim} -g \"\$(${slurp})\" -t png - | ${clipboard-copy}"; + "PRINT" = "exec --no-startup-id ${grim} -g \"\$(${slurp})\" -t png - | ${clipboard-copy}"; + }; + } + ]); + }; + stylix.targets.sway.enable = true; + }; +} diff --git a/src/hosts/default.nix b/src/hosts/default.nix index e30fb01..ff9b1ee 100644 --- a/src/hosts/default.nix +++ b/src/hosts/default.nix @@ -43,6 +43,7 @@ let imports = [ inputs.nix-index-database.hmModules.nix-index inputs.impermanence.nixosModules.home-manager.impermanence + inputs.plasma-manager.homeManagerModules.plasma-manager ./${host}/home.nix ../home ]; diff --git a/src/hosts/pickwick/default.nix b/src/hosts/pickwick/default.nix index 3c97163..c9741a7 100644 --- a/src/hosts/pickwick/default.nix +++ b/src/hosts/pickwick/default.nix @@ -14,13 +14,9 @@ services.xserver.enable = true; services.xserver.xkb.layout = "us"; - security.pam.services.login.fprintAuth = false; - security.pam.services.sudo.fprintAuth = false; - # framework setting services.fwupd.enable = true; hardware.framework.amd-7040.preventWakeOnAC = true; - services.fprintd.enable = true; services.printing.enable = true; services.printing.drivers = with pkgs; [ @@ -37,11 +33,22 @@ }; programs.dconf.enable = true; - - custom.touchpad.enable = true; - custom.gnome = { - enable = true; - stylix = true; + + custom = { + touchpad.enable = true; + fingerprint.enable = true; + wm = { + i3.enable = true; + sway.enable = true; + }; + gnome = { + enable = true; + stylix = true; + }; + kde = { + enable = false; + stylix = true; + }; }; system.stateVersion = "24.11"; diff --git a/src/nixos/default.nix b/src/nixos/default.nix index 36e016d..bc28e42 100644 --- a/src/nixos/default.nix +++ b/src/nixos/default.nix @@ -7,16 +7,21 @@ { imports = [ - ./audio.nix ./1password.nix + ./displaymanager.nix ./fonts.nix + ./fingerprint.nix ./gnome.nix ./impermanence.nix + ./kde.nix ./keyd.nix ./nix.nix + ./pipewire.nix ./stylix.nix ./touchpad.nix ./users.nix + ./xdg-portal.nix + ./wm ./zfs.nix ]; diff --git a/src/nixos/displaymanager.nix b/src/nixos/displaymanager.nix new file mode 100644 index 0000000..96cb8aa --- /dev/null +++ b/src/nixos/displaymanager.nix @@ -0,0 +1,29 @@ +{ config, ...}: + +{ + services = { + xserver = { + enable = true; + displayManager = { + gdm.enable = true; + # lightdm.enable = true; + session = [ + { + manage = "desktop"; + name = "xsession"; + start = '' + exec $HOME/.xsession + ''; + } + ]; + }; + }; + displayManager = { + # sddm.enable = true; + # defaultSession = "xsession"; + }; + gnome.gnome-keyring.enable = !config.custom.kde.enable; + }; + + security.polkit.enable = true; +} diff --git a/src/nixos/fingerprint.nix b/src/nixos/fingerprint.nix new file mode 100644 index 0000000..0bac02e --- /dev/null +++ b/src/nixos/fingerprint.nix @@ -0,0 +1,20 @@ +{ pkgs, lib, config, ... }: + +{ + options.custom = with lib; { + fingerprint = { + enable = mkEnableOption "Fingerprint"; + }; + }; + + config = lib.mkIf config.custom.fingerprint.enable { + services.fprintd.enable = true; + security.pam.services.login.fprintAuth = false; + security.pam.services.sudo.fprintAuth = false; + custom.persist = { + root.directories = [ + "/var/lib/fprint" + ]; + }; + }; +} diff --git a/src/nixos/fonts.nix b/src/nixos/fonts.nix index aad222c..1561d2f 100644 --- a/src/nixos/fonts.nix +++ b/src/nixos/fonts.nix @@ -29,8 +29,11 @@ config = { fonts.fontDir.enable = true; - fonts.packages = [ + fonts.packages = with pkgs; [ config.custom.nerdfonts.package + font-awesome + powerline-fonts + powerline-symbols ]; }; } diff --git a/src/nixos/gnome.nix b/src/nixos/gnome.nix index 13d452d..a8a983e 100644 --- a/src/nixos/gnome.nix +++ b/src/nixos/gnome.nix @@ -8,27 +8,30 @@ }; }; - config = lib.mkIf config.custom.gnome.enable { - services = { - xserver.enable = true; - xserver.displayManager.gdm.enable = true; - xserver.desktopManager.gnome.enable = true; - }; - environment.gnome.excludePackages = with pkgs; [ - baobab - cheese - epiphany - simple-scan - yelp - evince - geary - gnome-tour - gnome-initial-setup - gnome-music - gnome-maps - gnome-disk-utility - ]; - stylix.targets.gnome.enable = config.custom.gnome.stylix; - hm.stylix.targets.gnome.enable = config.custom.gnome.stylix; - }; + config = lib.mkMerge [ + (lib.mkIf config.custom.gnome.enable { + services = { + # xserver.displayManager.gdm.enable = true; + xserver.desktopManager.gnome.enable = true; + }; + environment.gnome.excludePackages = with pkgs; [ + baobab + cheese + epiphany + simple-scan + yelp + evince + geary + gnome-tour + gnome-initial-setup + gnome-music + gnome-maps + gnome-disk-utility + ]; + }) + { + stylix.targets.gnome.enable = config.custom.gnome.stylix; + hm.stylix.targets.gnome.enable = config.custom.gnome.stylix; + } + ]; } diff --git a/src/nixos/kde.nix b/src/nixos/kde.nix new file mode 100644 index 0000000..4fb3945 --- /dev/null +++ b/src/nixos/kde.nix @@ -0,0 +1,22 @@ +{ config, lib, pkgs, ... }: + +{ + options.custom = with lib; { + kde = { + enable = mkEnableOption "KDE Desktop"; + stylix = mkEnableOption "KDE Stylix"; + }; + }; + + config = lib.mkMerge [ + (lib.mkIf config.custom.kde.enable { + services = { + # displayManager.sddm.enable = true; + desktopManager.plasma6.enable = true; + }; + }) + { + hm.stylix.targets.kde.enable = config.custom.kde.stylix; + } + ]; +} diff --git a/src/nixos/audio.nix b/src/nixos/pipewire.nix similarity index 100% rename from src/nixos/audio.nix rename to src/nixos/pipewire.nix diff --git a/src/nixos/stylix.nix b/src/nixos/stylix.nix index 967a336..b874018 100644 --- a/src/nixos/stylix.nix +++ b/src/nixos/stylix.nix @@ -5,8 +5,8 @@ enable = true; autoEnable = false; image = pkgs.nixos-artwork.wallpapers.nineish-dark-gray.src; - # base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml"; - base16Scheme = "${pkgs.base16-schemes}/share/themes/gruber.yaml"; + base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-material-dark-hard.yaml"; + # base16Scheme = "${pkgs.base16-schemes}/share/themes/gruber.yaml"; polarity = "dark"; fonts = { serif = config.stylix.fonts.sansSerif; diff --git a/src/nixos/users.nix b/src/nixos/users.nix index b4db869..f92eeb3 100644 --- a/src/nixos/users.nix +++ b/src/nixos/users.nix @@ -25,6 +25,8 @@ # initialPassword = "password"; hashedPasswordFile = "/persist/etc/shadow/${user}"; extraGroups = [ + "video" + "audio" "networkmanager" "wheel" "keyd" diff --git a/src/nixos/wm/default.nix b/src/nixos/wm/default.nix new file mode 100644 index 0000000..15f8287 --- /dev/null +++ b/src/nixos/wm/default.nix @@ -0,0 +1,6 @@ +_: { + imports = [ + ./i3.nix + ./sway.nix + ]; +} diff --git a/src/nixos/wm/i3.nix b/src/nixos/wm/i3.nix new file mode 100644 index 0000000..0779f42 --- /dev/null +++ b/src/nixos/wm/i3.nix @@ -0,0 +1,30 @@ +{ pkgs, lib, config, ... }: + +{ + options.custom = with lib; { + wm = { + i3 = { + enable = mkEnableOption "i3 WM"; + }; + }; + }; + + config = lib.mkIf config.custom.wm.i3.enable { + services.xserver = { + desktopManager = { + xterm.enable = false; + }; + windowManager.i3 = { + enable = true; + extraPackages = with pkgs; [ + dmenu + i3status + i3lock + i3blocks + ]; + }; + }; + hm.custom.wm.i3.enable = true; + hm.custom.i3status-rust.enable = true; + }; +} diff --git a/src/nixos/wm/sway.nix b/src/nixos/wm/sway.nix new file mode 100644 index 0000000..e309021 --- /dev/null +++ b/src/nixos/wm/sway.nix @@ -0,0 +1,20 @@ +{ pkgs, lib, config, ... }: + +{ + options.custom = with lib; { + wm = { + sway = { + enable = mkEnableOption "Sway WM"; + }; + }; + }; + + config = lib.mkIf config.custom.wm.sway.enable { + programs.sway = { + enable = true; + wrapperFeatures.gtk = true; + }; + hm.custom.wm.sway.enable = true; + hm.custom.i3status-rust.enable = true; + }; +} diff --git a/src/nixos/xdg-portal.nix b/src/nixos/xdg-portal.nix new file mode 100644 index 0000000..e5f3d2f --- /dev/null +++ b/src/nixos/xdg-portal.nix @@ -0,0 +1,23 @@ +{ pkgs, ... }: + +{ + xdg.portal = { + enable = true; + # xdgOpenUsePortal = true; + wlr.enable = true; + extraPortals = with pkgs; [ + # xdg-desktop-portal-kde + # xdg-desktop-portal-gnome + xdg-desktop-portal-gtk + ]; + # config = { + # common = { default = [ "gtk" ]; }; + # gnome = { default = [ "gnome" "gtk" ]; }; + # }; + }; + + systemd.tmpfiles.rules = [ + "L+ /usr/libexec/xdg-desktop-portal - - - - ${pkgs.xdg-desktop-portal}/libexec/xdg-desktop-portal" + # "L+ /usr/libexec/xdg-desktop-portal-hyprland - - - - ${pkgs.xdg-desktop-portal-hyprland}/libexec/xdg-desktop-portal-hyprland" + ]; +}