From 0a731ef17fce0a688cff4a374d339c12e69d7d74 Mon Sep 17 00:00:00 2001 From: Remy Moll Date: Fri, 13 Jun 2025 18:52:13 +0200 Subject: [PATCH] added new usb system, started modularizing --- flake.nix | 26 +- hosts/lenovo-yoga-usb/configuration.nix | 52 +++ hosts/lenovo-yoga-usb/default.nix | 25 ++ .../hardware-configuration.nix | 40 ++ modules/home-manager/code.nix | 16 +- modules/home-manager/documents.nix | 2 +- .../hypr/hyprland-customization.nix | 399 +++++++++--------- modules/home-manager/hypr/waybar.nix | 52 ++- modules/home-manager/kitty.nix | 10 +- modules/home-manager/stylix.nix | 207 +++++---- modules/home-manager/wofi.nix | 14 +- modules/nixos/bluetooth.nix | 24 +- modules/nixos/hyprland.nix | 42 +- modules/nixos/usb_config.nix | 17 + users/remy.nix | 21 - users/remy_spectre/default.nix | 38 ++ users/remy_yoga-usb/default.nix | 38 ++ 17 files changed, 669 insertions(+), 354 deletions(-) create mode 100644 hosts/lenovo-yoga-usb/configuration.nix create mode 100644 hosts/lenovo-yoga-usb/default.nix create mode 100644 hosts/lenovo-yoga-usb/hardware-configuration.nix create mode 100644 modules/nixos/usb_config.nix create mode 100644 users/remy_spectre/default.nix create mode 100644 users/remy_yoga-usb/default.nix diff --git a/flake.nix b/flake.nix index d9ed5b0..97fb5f2 100644 --- a/flake.nix +++ b/flake.nix @@ -53,13 +53,37 @@ home-manager.extraSpecialArgs = { inherit inputs; }; home-manager.users.remy.imports = [ - ./users/remy.nix + ./users/remy_spectre inputs.nix-flatpak.homeManagerModules.nix-flatpak ]; } ]; }; + + nixosConfigurations.nichts = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + specialArgs = { inherit inputs; }; + + modules = [ + ./hosts/lenovo-yoga-usb + stylix.nixosModules.stylix + inputs.superfreq.nixosModules.default + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.extraSpecialArgs = { inherit inputs; }; + + home-manager.users.remy.imports = [ + ./users/remy_yoga-usb + inputs.nix-flatpak.homeManagerModules.nix-flatpak + ]; + } + ]; + }; + + # nixosConfigurations.raspberry-pi = nixpkgs.lib.nixosSystem { # system = "aarch64-linux"; # modules = [ diff --git a/hosts/lenovo-yoga-usb/configuration.nix b/hosts/lenovo-yoga-usb/configuration.nix new file mode 100644 index 0000000..f2b979a --- /dev/null +++ b/hosts/lenovo-yoga-usb/configuration.nix @@ -0,0 +1,52 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page, on +# https://search.nixos.org/options and in the NixOS manual (`nixos-help`). + +{ config, lib, pkgs, ... }: + +{ + imports = + [ # Include the results of the hardware scan. + ./hardware-configuration.nix + ]; + + # Use the "experimental" flakes for cleaner config + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + nixpkgs.config.allowUnfree = true; + + + # Use latest kernel. + boot.kernelPackages = pkgs.linuxPackages_latest; + + networking.hostName = "nichts"; + # Pick only one of the below networking options. + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + # networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. + + # Set your time zone. + time.timeZone = "Europe/Berlin"; + + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + + # # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; + # i18n.supportedLocales = [ "en_US.UTF-8" "de_DE.UTF-8" ]; + + + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.remy = { + isNormalUser = true; + extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. + }; + + + networking.networkmanager.wifi.powersave = true; + + + # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . + system.stateVersion = "24.05"; # Did you read the comment? +} + diff --git a/hosts/lenovo-yoga-usb/default.nix b/hosts/lenovo-yoga-usb/default.nix new file mode 100644 index 0000000..3c3f940 --- /dev/null +++ b/hosts/lenovo-yoga-usb/default.nix @@ -0,0 +1,25 @@ +{lib, config, options, pkgs, ...}: +{ + + # Merge the configuration and hardware configuration + imports = [ + ./configuration.nix + ./hardware-configuration.nix + ../../modules/nixos/bluetooth.nix + ../../modules/nixos/flakes.nix + ../../modules/nixos/flatpak.nix + ../../modules/nixos/fonts.nix + ../../modules/nixos/hyprland.nix + ../../modules/nixos/ld.nix + ../../modules/nixos/monitoring.nix + ../../modules/nixos/networking.nix + ../../modules/nixos/nh.nix + ../../modules/nixos/pipewire.nix + ../../modules/nixos/podman.nix + ../../modules/nixos/power.nix + ../../modules/nixos/stylix.nix + ../../modules/nixos/usb_config.nix + ../../utils/binary-cache.nix + ../../utils/garbage-collection.nix + ]; +} diff --git a/hosts/lenovo-yoga-usb/hardware-configuration.nix b/hosts/lenovo-yoga-usb/hardware-configuration.nix new file mode 100644 index 0000000..7861dd8 --- /dev/null +++ b/hosts/lenovo-yoga-usb/hardware-configuration.nix @@ -0,0 +1,40 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" "sdhci_pci" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/621498e8-64f6-4979-8489-3dc1d145e349"; + fsType = "ext4"; + }; + + boot.initrd.luks.devices."root-enc".device = "/dev/disk/by-uuid/156d0f15-397c-4bc6-8f57-026108975246"; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/B2D0-672E"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + + swapDevices = [ ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp1s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/modules/home-manager/code.nix b/modules/home-manager/code.nix index 7f198b9..4b5a8d8 100644 --- a/modules/home-manager/code.nix +++ b/modules/home-manager/code.nix @@ -3,7 +3,7 @@ programs.vscode = { enable = true; # install vscode in a FHS environment to allow extensions with prebuilt binaries - package = pkgs.vscode.fhs; + # package = pkgs.vscode.fhs; # profiles = { # default = { @@ -18,9 +18,9 @@ ms-python.isort ms-python.debugpy ms-python.vscode-pylance - ms-toolsai.jupyter - ms-toolsai.vscode-jupyter-slideshow - ms-toolsai.jupyter-renderers + # ms-toolsai.jupyter + # ms-toolsai.vscode-jupyter-slideshow + # ms-toolsai.jupyter-renderers # Nix language jnoortheen.nix-ide @@ -28,11 +28,17 @@ # typst myriad-dreamin.tinymist ] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ + { + name = "jupyter"; + publisher = "ms-toolsai"; + version = "2025.3.2025032101"; + sha256 = "sha256-s2qEUl9J6EOije6MasZOnHErYs3NYXBqLSfMT03vEH0="; + } { name = "jupyter-hub"; publisher = "ms-toolsai"; version = "2024.10.1002831100"; - sha256 = "sha256-3YF91Wgw5je040xPpLHPdxQIEAetpmDz6La7bw2JM+g="; + sha256 = "sha256-5IRczwXbYkDdYEOXvQnnH+HJNLvsRsrZ6fnoVCveqrs="; } ]; diff --git a/modules/home-manager/documents.nix b/modules/home-manager/documents.nix index 93cad4b..4cc6854 100644 --- a/modules/home-manager/documents.nix +++ b/modules/home-manager/documents.nix @@ -2,6 +2,6 @@ { home.packages = [ # pdf viewer - pkgs.evince + pkgs.papers ]; } diff --git a/modules/home-manager/hypr/hyprland-customization.nix b/modules/home-manager/hypr/hyprland-customization.nix index 22b45b9..2a77320 100644 --- a/modules/home-manager/hypr/hyprland-customization.nix +++ b/modules/home-manager/hypr/hyprland-customization.nix @@ -1,228 +1,251 @@ -{inputs, pkgs, ...}: +{inputs, pkgs, lib, config, ...}: +let + cfg = config.nix-config.hypr; +in { - home.packages = [ - pkgs.hyprshot - pkgs.nautilus - pkgs.gnome-control-center - pkgs.brightnessctl - pkgs.cliphist - pkgs.wl-clipboard - pkgs.gcr # Provides org.gnome.keyring.SystemPrompter - ]; + options = { + nix-config.hypr.internal-screen.resolution = lib.mkOption { type = lib.types.str; }; + nix-config.hypr.internal-screen.scale = lib.mkOption { type = lib.types.str; }; + nix-config.hypr.browser = lib.mkOption { + type = lib.types.str; + default = "firefox"; + description = "The browser to use in Hyprland."; + }; + nix-config.hypr.launcher-cmd = lib.mkOption { + type = lib.types.str; + default = "wofi --show drun -n"; + description = "The command to launch the application launcher in Hyprland."; + }; + nix-config.hypr.ide = lib.mkOption { + type = lib.types.str; + default = "code"; + description = "The IDE to use in Hyprland."; + }; + }; + + config = { + home.packages = [ + pkgs.hyprshot + pkgs.nautilus + pkgs.gnome-control-center + pkgs.gnome-bluetooth # needed by gnome-control-center to manage bluetooth + pkgs.brightnessctl + pkgs.cliphist + pkgs.wl-clipboard + pkgs.gcr # Provides org.gnome.keyring.SystemPrompter + ]; - # Also use gnome keyring - services.gnome-keyring.enable = true; + # Also use gnome keyring + services.gnome-keyring.enable = true; - wayland.windowManager.hyprland = { - enable = true; - systemd.enable = true; - settings = { - "$mod" = "SUPER"; - "$browser" = "firefox"; - "$launcher-cmd" = "wofi --show drun -n"; - "$ide" = "code"; + wayland.windowManager.hyprland = { + enable = true; + systemd.enable = true; + settings = { + "$mod" = "SUPER"; - # Global bindings - bind = [ - # Launch applications - "$mod, space, exec, $launcher-cmd" - "$mod, return, exec, kitty" - "$mod, b, exec, $browser" - "$mod, s, exec, $ide" - "$mod, e, exec, nautilus" + # Global bindings + bind = [ + # Launch applications + "$mod, space, exec, ${cfg.launcher-cmd}" + "$mod, return, exec, kitty" + "$mod, b, exec, ${cfg.browser}" + "$mod, s, exec, ${cfg.ide}" + "$mod, e, exec, nautilus" - # Lock screen - "$mod, l, exec, hyprlock" + # Lock screen + "$mod, l, exec, hyprlock" - # Clipboard management - "$mod, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy" + # Clipboard management + "$mod, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy" - # Close window - "$mod, Q, killactive," - "$mod+Shift, Q, exit," # this is the true kill + # Close window + "$mod, Q, killactive," + "$mod+Shift, Q, exit," # this is the true kill - # Toggle Floating and reduce size - "$mod, f, togglefloating," - "$mod, f, resizeactive, 50% 50%," - # Toggle fullscreen - "$mod+Shift, f, fullscreen," + # Toggle Floating and reduce size + "$mod, f, togglefloating," + "$mod, f, resizeactive, 50% 50%," + # Toggle fullscreen + "$mod+Shift, f, fullscreen," - # Alt-tab alternative - "$mod, Tab, cyclenext," - "$mod, Tab, bringactivetotop," + # Alt-tab alternative + "$mod, Tab, cyclenext," + "$mod, Tab, bringactivetotop," - # Move the window - "$mod+Shift, left, movewindow, l" - "$mod+Shift, right, movewindow, r" - "$mod+Shift, up, movewindow, u" - "$mod+Shift, down, movewindow, d" + # Move the window + "$mod+Shift, left, movewindow, l" + "$mod+Shift, right, movewindow, r" + "$mod+Shift, up, movewindow, u" + "$mod+Shift, down, movewindow, d" - "$mod+Ctrl, left, movetoworkspace, -1" - "$mod+Ctrl, right, movetoworkspace, +1" + "$mod+Ctrl, left, movetoworkspace, -1" + "$mod+Ctrl, right, movetoworkspace, +1" - # Switch workspace - "$mod+Alt, left, workspace, -1" - "$mod+Alt, right, workspace, +1" + # Switch workspace + "$mod+Alt, left, workspace, -1" + "$mod+Alt, right, workspace, +1" - # Screenshot - "$mod, Print, exec, hyprshot -m region -o ~/Pictures/Screenshots" - "$mod+Shift, Print, exec, hyprshot -m window -o ~/Pictures/Screenshots" + # Screenshot + "$mod, Print, exec, hyprshot -m region -o ~/Pictures/Screenshots" + "$mod+Shift, Print, exec, hyprshot -m window -o ~/Pictures/Screenshots" - ]; + ]; - # repeatable bindings - binde = [ - # Fn keys - ", XF86MonBrightnessDown, exec, brightnessctl set 5%-" - ", XF86MonBrightnessUp, exec, brightnessctl set +5%" - ", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+" - ", XF86AudioLowerVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%-" - ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + # repeatable bindings + binde = [ + # Fn keys + ", XF86MonBrightnessDown, exec, brightnessctl set 5%-" + ", XF86MonBrightnessUp, exec, brightnessctl set +5%" + ", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+" + ", XF86AudioLowerVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%-" + ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" - # Reshape the window in focus - "$mod, MINUS, resizeactive, -2% -2%" - "$mod, KP_Subtract, resizeactive, -2% -2%" - "$mod, PLUS, resizeactive, 2% 2%" - "$mod, KP_Add, resizeactive, 2% 2%" + # Reshape the window in focus + "$mod, MINUS, resizeactive, -2% -2%" + "$mod, KP_Subtract, resizeactive, -2% -2%" + "$mod, PLUS, resizeactive, 2% 2%" + "$mod, KP_Add, resizeactive, 2% 2%" + ]; - ]; + # lock-screen bindings + bindl = [ + # on lid close, lock the screen + # if another monitor is connected, only turn the internal monitor off and don't lock the screen + ", switch:on:Lid Switch, exec, hyprctl dispatch dpms off eDP-1" + # if there is no active monitor, perform a screen lock + ", switch:on:Lid Switch, exec, hyprctl monitors | grep 'dpmsStatus: 1' || hyprlock" + ", switch:off:Lid Switch, exec, hyprctl dispatch dpms on eDP-1" + ]; - # lock-screen bindings - bindl = [ - # on lid close, lock the screen - # if another monitor is connected, only turn the internal monitor off and don't lock the screen - ", switch:on:Lid Switch, exec, hyprctl dispatch dpms off eDP-1" - # if there is no active monitor, perform a screen lock - ", switch:on:Lid Switch, exec, hyprctl monitors | grep 'dpmsStatus: 1' || hyprlock" - ", switch:off:Lid Switch, exec, hyprctl dispatch dpms on eDP-1" - ]; + # bindr = [ + # # Overview + # "$mod, , overview:toggle" + # ]; - # bindr = [ - # # Overview - # "$mod, , overview:toggle" - # ]; + bindm = [ + # move the window + "$mod, mouse:272, movewindow" + ]; - bindm = [ - # move the window - "$mod, mouse:272, movewindow" - ]; + exec-once = [ + "gnome-keyring-daemon --start --components=secrets" + # "${pkgs.hyprpaper}/bin/hyprpaper" + # hyprpaper is handled as its own service + "${pkgs.waybar}/bin/waybar" + # listen to clipboard events and send them to cliphist + "wl-paste --watch cliphist store" + "${pkgs.waybar}/bin/hypridle" + "hyprpaper" + # # Fixes cursor themes in gnome apps under hyprland + # "gsettings set org.gnome.desktop.interface cursor-theme '${config.home.pointerCursor.name}'" + # "gsettings set org.gnome.desktop.interface cursor-size ${toString home.pointerCursor.size}" + "${pkgs.owncloud-client}" + ]; - exec-once = [ - "gnome-keyring-daemon --start --components=secrets" - # "${pkgs.hyprpaper}/bin/hyprpaper" - # hyprpaper is handled as its own service - "${pkgs.waybar}/bin/waybar" - # listen to clipboard events and send them to cliphist - "wl-paste --watch cliphist store" - "${pkgs.waybar}/bin/hypridle" - "hyprpaper" - # # Fixes cursor themes in gnome apps under hyprland - # "gsettings set org.gnome.desktop.interface cursor-theme '${config.home.pointerCursor.name}'" - # "gsettings set org.gnome.desktop.interface cursor-size ${toString home.pointerCursor.size}" - "${pkgs.owncloud-client}" - ]; - - general = { - resize_on_border = true; - gaps_in = 5; - gaps_out = 5; - border_size = 1; - "col.active_border" = "rgb(98971A) rgb(CC241D) 45deg"; - layout = "master"; - }; - - misc = { - # disable refreshs when nothing is going on - vfr = false; - disable_hyprland_logo = true; - }; - - input = { - kb_layout = "de"; - # remap caps lock to ctrl - kb_options = "ctrl:nocaps"; - numlock_by_default = true; - # mouse input should be unchanged - natural_scroll = false; - sensitivity = 0.3; - touchpad = { - disable_while_typing = false; - natural_scroll = true; + general = { + resize_on_border = true; + gaps_in = 5; + gaps_out = 5; + border_size = 1; + "col.active_border" = "rgb(98971A) rgb(CC241D) 45deg"; + layout = "master"; }; - }; - device = { - name = "syna329a:00-06cb:cd4f-touchpad"; - sensitivity = 0.5; - }; + misc = { + # disable refreshs when nothing is going on + vfr = false; + disable_hyprland_logo = true; + }; - gestures = { - workspace_swipe = true; - workspace_swipe_fingers = 4; - workspace_swipe_touch = true; - }; + input = { + kb_layout = "de"; + # remap caps lock to ctrl + kb_options = "ctrl:nocaps"; + numlock_by_default = true; + # mouse input should be unchanged + natural_scroll = false; + sensitivity = 0.3; + touchpad = { + disable_while_typing = false; + natural_scroll = true; + }; + }; - decoration = { - rounding = 7; - # active_opacity = 0.95; - inactive_opacity = 0.9; + device = { + name = "syna329a:00-06cb:cd4f-touchpad"; + sensitivity = 0.5; + }; - shadow = { + gestures = { + workspace_swipe = true; + workspace_swipe_fingers = 4; + workspace_swipe_touch = true; + }; + + decoration = { + rounding = 7; + # active_opacity = 0.95; + inactive_opacity = 0.9; + + shadow = { + enabled = false; + }; + + # blur is set on a per-program basis + windowrulev2 = [ + # kitty should behave like a floating window + "animation popin, class:kitty" + "move cursor -50% -50%, class:kitty" + "float, class:kitty" + "size 50% 50%, class:kitty" + + # some more floating windows + "float, class:org.gnome.Settings" + "float, class:desktopclient.owncloud.com" + "float, class:org.keepassxc.KeePassXC" + + ]; + }; + + monitor = [ + # the internal monitor, always at the "center" + "eDP-1, ${cfg.internal-screen.resolution}, 0x0, ${cfg.internal-screen.scale}" + + # Samsung monitors at irchel (matching the description) + # "desc:Samsung Electric Company LS27D80xU HK7X800803, 3840x2160, auto-up, 1.8" + "desc:Samsung Electric Company LS27D80xU HNAX600169, 2560x1440@59.95, auto-up, 1" + + ", preferred, auto-up, auto" # automatically add any newly detected monitor + ]; + + xwayland = { enabled = false; }; - # blur is set on a per-program basis - windowrulev2 = [ - # kitty should behave like a floating window - "animation popin, class:kitty" - "move cursor -50% -50%, class:kitty" - "float, class:kitty" - "size 50% 50%, class:kitty" - - # some more floating windows - "float, class:org.gnome.Settings" - "float, class:desktopclient.owncloud.com" - "float, class:org.keepassxc.KeePassXC" - + env = [ + # force apps to use wayland + "NIXOS_OZONE_WL, 1" + "ELECTRON_OZONE_PLATFORM_HINT, wayland" + # set the scale factor for GDK apps + "GDK_SCALE, 1.7" + # set the scale factor for QT apps + "QT_SCALE_FACTOR, 1.7" + # set the scale factor for GTK apps ]; }; - monitor = [ - "eDP-1, 3840x2160, 0x0, 1.666667" # the internal laptop monitor - # Samsung monitors at irchel (matching the description) - # "desc:Samsung Electric Company LS27D80xU HK7X800803, 3840x2160, auto-up, 1.8" - "desc:Samsung Electric Company LS27D80xU HNAX600169, 2560x1440@59.95, auto-up, 1" - - ", preferred, auto-up, auto" # automatically add any newly detected monitor - ]; - - xwayland = { - enabled = false; - }; - - env = [ - # force apps to use wayland - "NIXOS_OZONE_WL, 1" - "ELECTRON_OZONE_PLATFORM_HINT, wayland" - # set the scale factor for GDK apps - "GDK_SCALE, 1.7" - # set the scale factor for QT apps - "QT_SCALE_FACTOR, 1.7" - # set the scale factor for GTK apps + plugins = [ + # Global overview + pkgs.hyprlandPlugins.hyprspace + # Touch gestures + pkgs.hyprlandPlugins.hyprgrass ]; }; - plugins = [ - # Global overview - pkgs.hyprlandPlugins.hyprspace - # Touch gestures - pkgs.hyprlandPlugins.hyprgrass - ]; - + services.swaync.enable = true; }; - - services.swaync.enable = true; } diff --git a/modules/home-manager/hypr/waybar.nix b/modules/home-manager/hypr/waybar.nix index bf903ba..c1499ce 100644 --- a/modules/home-manager/hypr/waybar.nix +++ b/modules/home-manager/hypr/waybar.nix @@ -1,4 +1,7 @@ -{inputs, pkgs, ...}: +{inputs, pkgs, lib, config, ...}: +let + cfg = config.nix-config.style; +in { # required to autoload fonts from packages installed via Home Manager fonts.fontconfig.enable = true; @@ -14,14 +17,16 @@ settings = { mainBar = { - margin-top = 2; - margin-bottom = 2; - margin-left = 5; - margin-right = 5; - layer = "top"; position = "top"; - spacing = 5; + + margin-top = 5; + # margin-bottom = 2; + # margin-left = 5; + # margin-right = 5; + + # margin between the modules + spacing = 2; modules-left = [ "hyprland/workspaces" @@ -36,8 +41,8 @@ modules-right = [ "tray" "privacy" - "wireplumber" "network" + "wireplumber" "battery" "backlight" "idle_inhibitor" @@ -150,18 +155,29 @@ return-type = "json"; exec-if = "which swaync-client"; exec = "swaync-client -swb"; - on-click = "sleep 0.1 && task-waybar"; + on-click = "swaync-client -t -sw"; + on-click-right = "swaync-client -d -sw"; escape = true; }; "network" = { format = "󰤭"; - format-wifi = "{icon} {essid}"; + format-ethernet = " {ipaddr}"; + format-wifi = "{icon}"; format-icons = [ "󰤯" "󰤟" "󰤢" "󰤥" "󰤨" ]; - format-ethernet = "󰊗 {ipaddr}/{cidr}"; - format-disconnected = ""; - tooltip-format = "󰊗 {ifname} via {gwaddr}"; - tooltip-format-wifi = "SSID: {essid}({signalStrength}%), {frequency} MHz\nInterface: {ifname}\nIP: {ipaddr}\nGW: {gwaddr}\n\n{bandwidthUpBits}\t{bandwidthDownBits}\t󰹹{bandwidthTotalBits}"; - tooltip-format-ethernet = "{ifname} "; + format-disconnected = "󰤭"; + tooltip-format = " {ifname} via {gwaddr}"; + # TODO - don't escape the strings in the tooltip + tooltip-format-wifi = '' + 󰤨 {essid}({signalStrength}%), {frequency} GHz\nInterface: {ifname} + IP: {ipaddr} GW: {gwaddr} + + {bandwidthUpBits} {bandwidthDownBits} 󰹹{bandwidthTotalBits} + ''; + tooltip-format-ethernet = '' +  {ifname} - {ipaddr}/{cidr} + + {bandwidthUpBits} {bandwidthDownBits} 󰹹{bandwidthTotalBits} + ''; tooltip-format-disconnected = "Disconnected"; on-click = "XDG_CURRENT_DESKTOP=GNOME gnome-control-center wifi"; }; @@ -192,22 +208,20 @@ style = '' * { - font-family: "FiraCode Nerd Font"; + font-family: "${cfg.monospaceFont}"; font-weight: bold; - font-size: 20px; + font-size: ${builtins.toString (cfg.fontSizes.desktop + 7)}px; } window#waybar { background-color: transparent; } - .module { background: rgba(0, 0, 0, 0.6); color: white; border-radius: 7px; padding: 5px 5px 5px 5px; - margin: 5px 0; } box.module button:hover { box-shadow: inset 0 -3px #ffffff; diff --git a/modules/home-manager/kitty.nix b/modules/home-manager/kitty.nix index 17b010a..96580f8 100644 --- a/modules/home-manager/kitty.nix +++ b/modules/home-manager/kitty.nix @@ -1,6 +1,6 @@ -{pkgs, lib, ...}: +{pkgs, lib, config, ...}: let - stylix = import ./stylix.nix { inherit pkgs; }; + cfg = config.nix-config.style; in { programs.kitty = { @@ -35,12 +35,12 @@ in # color15 = stylix.stylix.base16Scheme.base0F; # also reuse the background opacity by stylix - background_opacity = stylix.stylix.opacity.terminal; + background_opacity = cfg.terminalOpacity; background = "#000000"; - font_family = stylix.stylix.fonts.monospace.name; - font_size = stylix.stylix.fonts.sizes.terminal; + font_family = cfg.monospaceFont; + font_size = cfg.fontSizes.terminal; confirm_os_window_close = 0; enable_audio_bell = false; cursor_trail = 3; diff --git a/modules/home-manager/stylix.nix b/modules/home-manager/stylix.nix index 5c81650..15c7506 100644 --- a/modules/home-manager/stylix.nix +++ b/modules/home-manager/stylix.nix @@ -1,96 +1,147 @@ -{pkgs, ...}: +{pkgs, config, lib, ...}: +let + cfg = config.nix-config.style; +in { - stylix = { - # Stylix is already enabled since the system is configured to use it - # enable = true; - # don't theme applications by default - autoEnable = false; - + options.nix-config.style = { cursor = { - package = pkgs.apple-cursor; - name = "macOS"; - size = 35; + size = lib.mkOption { + type = lib.types.int; + default = 35; + description = "Size of the cursor in pixels."; + }; }; - - iconTheme = { - enable = true; - package = pkgs.tela-icon-theme; - }; - - - image = ./../../wallpapers/magicpattern-87PP9Zd7MNo-unsplash.jpg; - - - fonts = { - - serif = { - package = pkgs.dejavu_fonts; - name = "DejaVu Serif"; + fontSizes = { + applications = lib.mkOption { + type = lib.types.int; + default = 12; + description = "Font size for applications."; }; - - sansSerif = { - package = pkgs.dejavu_fonts; - name = "DejaVu Sans"; + desktop = lib.mkOption { + type = lib.types.int; + default = 12; + description = "Font size for desktop icons."; }; - - monospace = { - package = pkgs.nerdfonts.override { fonts = [ "FiraCode" ]; }; - name = "FiraCode Nerd Font Mono"; + popups = lib.mkOption { + type = lib.types.int; + default = 12; + description = "Font size for popups."; }; - - emoji = { - package = pkgs.noto-fonts-emoji; - name = "Noto Color Emoji"; - }; - - sizes = { - applications = 12; - desktop = 12; - popups = 12; - terminal = 12; + terminal = lib.mkOption { + type = lib.types.int; + default = 12; + description = "Font size for terminal."; }; }; - opacity = { - applications = 1.0; - desktop = 1.0; - popups = 0.9; - terminal = 0.8; + terminalOpacity = lib.mkOption { + type = lib.types.float; + default = 0.8; + description = "Terminal default opacity"; + }; + + monospaceFont = lib.mkOption { + type = lib.types.str; + default = "FiraCode Nerd Font Mono"; + description = "Monospace font. Needs to be installed."; }; }; - stylix.base16Scheme = { - scheme = "onelight"; - author = "https://github.com/one-dark"; - base00 = "#fafafa"; - base01 = "#f4f4f4"; - base02 = "#e5e5e6"; - base03 = "#dfdfe0"; - base04 = "#d7d7d8"; - base05 = "#383a42"; - base06 = "#202227"; - base07 = "#090a0b"; - base08 = "#d84a3d"; - base09 = "#a626a4"; - base0A = "#c18401"; - base0B = "#50a14f"; - base0C = "#0070a8"; - base0D = "#4078f2"; - base0E = "#a626a4"; - base0F = "#986801"; - }; + config = { - stylix.targets = { - hyprpaper.enable = true; - hyprlock.enable = true; - gnome.enable = true; + stylix = { + # Stylix is already enabled since the system is configured to use it + # enable = true; + # don't theme applications by default + autoEnable = false; - # disabled because they overwrite too many settings - # wofi.enable = true; - # vscode.enable = true; - # waybar.enable = true; - # kitty.enable = true; + cursor = { + package = pkgs.apple-cursor; + name = "macOS"; + size = cfg.cursor.size; + }; + iconTheme = { + enable = true; + package = pkgs.tela-icon-theme; + }; + + + image = ./../../wallpapers/magicpattern-87PP9Zd7MNo-unsplash.jpg; + + + fonts = { + + serif = { + package = pkgs.dejavu_fonts; + name = "DejaVu Serif"; + }; + + sansSerif = { + package = pkgs.dejavu_fonts; + name = "DejaVu Sans"; + }; + + monospace = { + package = pkgs.nerdfonts.override { fonts = [ "FiraCode" ]; }; + name = cfg.monospaceFont; + }; + + emoji = { + package = pkgs.noto-fonts-emoji; + name = "Noto Color Emoji"; + }; + + sizes = { + applications = cfg.fontSizes.applications; + desktop = cfg.fontSizes.desktop; + popups = cfg.fontSizes.popups; + terminal = cfg.fontSizes.terminal; + }; + }; + + opacity = { + applications = 1.0; + desktop = 1.0; + popups = 0.9; + terminal = cfg.terminalOpacity; + }; + }; + + stylix.base16Scheme = { + scheme = "onelight"; + author = "https://github.com/one-dark"; + base00 = "#fafafa"; + base01 = "#f4f4f4"; + base02 = "#e5e5e6"; + base03 = "#dfdfe0"; + base04 = "#d7d7d8"; + base05 = "#383a42"; + base06 = "#202227"; + base07 = "#090a0b"; + base08 = "#d84a3d"; + base09 = "#a626a4"; + base0A = "#c18401"; + base0B = "#50a14f"; + base0C = "#0070a8"; + base0D = "#4078f2"; + base0E = "#a626a4"; + base0F = "#986801"; + + }; + + stylix.targets = { + hyprpaper.enable = true; + hyprlock.enable = true; + gnome.enable = true; + + # disabled because they overwrite too many settings + # wofi.enable = true; + # vscode.enable = true; + # waybar.enable = true; + # kitty.enable = true; + + }; }; } diff --git a/modules/home-manager/wofi.nix b/modules/home-manager/wofi.nix index 13b1290..cb6ff9c 100644 --- a/modules/home-manager/wofi.nix +++ b/modules/home-manager/wofi.nix @@ -1,8 +1,8 @@ { config, pkgs, lib, ... }: let - stylix = import ./stylix.nix { inherit pkgs; }; - -in { + cfg = config.nix-config.style; +in +{ home.packages = with pkgs; [ wofi-emoji ]; @@ -52,14 +52,14 @@ in { style = '' * { - font-family: ${stylix.stylix.fonts.sansSerif.name}; - font-size: ${builtins.toString (stylix.stylix.fonts.sizes.applications + 10)}px; - color: ${stylix.stylix.base16Scheme.base04}; + font-family: ${cfg.monospaceFont}; + font-size: ${builtins.toString (cfg.fontSizes.desktop + 8)}px; + color: white; background: transparent; } #window { - background: rgba(41, 46, 66, 0.5); + background: rgba(1, 1, 1, 0.5); margin: auto; padding: 10px; } diff --git a/modules/nixos/bluetooth.nix b/modules/nixos/bluetooth.nix index 186a8d3..6d609a3 100644 --- a/modules/nixos/bluetooth.nix +++ b/modules/nixos/bluetooth.nix @@ -10,17 +10,17 @@ ]; hardware.bluetooth = { enable = true; - powerOnBoot = true; - settings = { - General = { - Name = "Nixtre"; - ControllerMode = "dual"; - FastConnectable = "true"; - Experimental = "true"; - }; - Policy = { - AutoEnable = "true"; - }; - }; + # powerOnBoot = true; + # settings = { + # General = { + # Name = "Nixtre"; + # ControllerMode = "dual"; + # FastConnectable = "true"; + # Experimental = "true"; + # }; + # Policy = { + # AutoEnable = "true"; + # }; + # }; }; } diff --git a/modules/nixos/hyprland.nix b/modules/nixos/hyprland.nix index d2a0969..dc1d73b 100644 --- a/modules/nixos/hyprland.nix +++ b/modules/nixos/hyprland.nix @@ -4,24 +4,32 @@ pkgs, ... }: +let + cfg = config.nix-config; +in { - # Use hyprland as the main desktop environment but use gdm as desktop manager - programs.hyprland = { - enable = true; - xwayland.enable = false; + + config = { + + # Use hyprland as the main desktop environment but use gdm as desktop manager + programs.hyprland = { + enable = true; + xwayland.enable = false; + }; + + + services.displayManager = { + defaultSession = "hyprland"; + }; + + services.xserver.displayManager.gdm = { + enable = true; + wayland = true; + }; + security.pam.services.hyprlock = {}; + + security.pam.services.gdm.enableGnomeKeyring = true; + }; - - services.displayManager = { - defaultSession = "hyprland"; - }; - - services.xserver.displayManager.gdm = { - enable = true; - wayland = true; - }; - security.pam.services.hyprlock = {}; - - security.pam.services.gdm.enableGnomeKeyring = true; - } diff --git a/modules/nixos/usb_config.nix b/modules/nixos/usb_config.nix new file mode 100644 index 0000000..90b6599 --- /dev/null +++ b/modules/nixos/usb_config.nix @@ -0,0 +1,17 @@ +{ + config, + pkgs, + ... +}: +{ + boot.loader.grub.enable = true; + + boot.loader.grub.efiSupport = true; + # location at install time. Since the drive is a USB drive this is expcected to change on each device + boot.loader.grub.device = "/dev/sdb"; + boot.loader.grub.efiInstallAsRemovable = true; + boot.loader.systemd-boot.enable = false; + + boot.loader.efi.canTouchEfiVariables = false; + boot.tmp.useTmpfs = true; +} diff --git a/users/remy.nix b/users/remy.nix index 67a6d42..5b0169b 100644 --- a/users/remy.nix +++ b/users/remy.nix @@ -1,26 +1,5 @@ { config, pkgs, lib, ... }: -with lib.hm.gvariant; { - imports = [ - ../modules/home-manager/browser.nix - ../modules/home-manager/code.nix - ../modules/home-manager/dev.nix - ../modules/home-manager/documents.nix - ../modules/home-manager/fish.nix - ../modules/home-manager/flatpaks.nix - ../modules/home-manager/hypr - ../modules/home-manager/keepassxc.nix - ../modules/home-manager/kitty.nix - ../modules/home-manager/kubectl.nix - ../modules/home-manager/obsidian.nix - ../modules/home-manager/owncloud-client.nix - ../modules/home-manager/ssh.nix - ../modules/home-manager/stylix.nix - ../modules/home-manager/thunderbird.nix - ../modules/home-manager/wofi.nix - ../modules/home-manager/xdg-portals.nix - ]; - ## Home Manager configuration home.stateVersion = "24.05"; # Let Home Manager install and manage itself. diff --git a/users/remy_spectre/default.nix b/users/remy_spectre/default.nix new file mode 100644 index 0000000..52f6344 --- /dev/null +++ b/users/remy_spectre/default.nix @@ -0,0 +1,38 @@ +{ config, pkgs, lib, ... }: +with lib.hm.gvariant; +{ + config = { + nix-config = { + hypr = { + internal-screen = { + resolution = "3840x2160"; + scale = "1.666667"; + }; + }; + }; + }; + + + + imports = [ + ../remy.nix + ../../modules/home-manager/browser.nix + ../../modules/home-manager/code.nix + ../../modules/home-manager/dev.nix + ../../modules/home-manager/documents.nix + ../../modules/home-manager/fish.nix + ../../modules/home-manager/flatpaks.nix + ../../modules/home-manager/hypr + ../../modules/home-manager/keepassxc.nix + ../../modules/home-manager/kitty.nix + ../../modules/home-manager/kubectl.nix + ../../modules/home-manager/obsidian.nix + ../../modules/home-manager/owncloud-client.nix + ../../modules/home-manager/ssh.nix + ../../modules/home-manager/stylix.nix + ../../modules/home-manager/thunderbird.nix + ../../modules/home-manager/wofi.nix + ../../modules/home-manager/xdg-portals.nix + ]; + +} diff --git a/users/remy_yoga-usb/default.nix b/users/remy_yoga-usb/default.nix new file mode 100644 index 0000000..8a2a7d2 --- /dev/null +++ b/users/remy_yoga-usb/default.nix @@ -0,0 +1,38 @@ +{ config, pkgs, lib, ... }: +with lib.hm.gvariant; +{ + config = { + nix-config = { + hypr = { + internal-screen = { + resolution = "2880x1800@90.00100"; + scale = "1.666667"; + }; + }; + }; + }; + + + + imports = [ + ../remy.nix + ../../modules/home-manager/browser.nix + ../../modules/home-manager/code.nix + ../../modules/home-manager/dev.nix + ../../modules/home-manager/documents.nix + ../../modules/home-manager/fish.nix + ../../modules/home-manager/flatpaks.nix + ../../modules/home-manager/hypr + ../../modules/home-manager/keepassxc.nix + ../../modules/home-manager/kitty.nix + ../../modules/home-manager/kubectl.nix + ../../modules/home-manager/obsidian.nix + ../../modules/home-manager/owncloud-client.nix + ../../modules/home-manager/ssh.nix + ../../modules/home-manager/stylix.nix + ../../modules/home-manager/thunderbird.nix + ../../modules/home-manager/wofi.nix + ../../modules/home-manager/xdg-portals.nix + ]; + +}