From 8ef1af3f20d24335fe55567f44c3c655863dd858 Mon Sep 17 00:00:00 2001 From: pagedmov Date: Fri, 1 Nov 2024 15:23:01 -0400 Subject: [PATCH 01/12] added sound effect for git checkout --- assets/sound/gitcheckout.wav | Bin 0 -> 58068 bytes modules/home/environment/zshell.nix | 10 ++++++++++ 2 files changed, 10 insertions(+) create mode 100644 assets/sound/gitcheckout.wav diff --git a/assets/sound/gitcheckout.wav b/assets/sound/gitcheckout.wav new file mode 100644 index 0000000000000000000000000000000000000000..cf784228f70cb878bc645deb72b840e9d343efc7 GIT binary patch literal 58068 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 Date: Fri, 1 Nov 2024 21:01:52 -0400 Subject: [PATCH 02/12] initial commit for module-refactor --- flake.nix | 3 + hosts/desktop/{settings.nix => config.nix} | 1 + hosts/desktop/default.nix | 15 - hosts/laptop/boot.nix | 15 - hosts/laptop/config.nix | 36 + hosts/laptop/default.nix | 18 - hosts/laptop/environment.nix | 17 - hosts/laptop/hardware.nix.old | 53 - hosts/laptop/services.nix | 47 - hosts/laptop/settings.nix | 21 - modules/default.nix | 31 + modules/home/environment/default.nix | 21 +- modules/home/environment/gtk.nix | 61 +- modules/home/environment/hyprland.nix | 242 +++ modules/home/environment/hyprland/config.nix | 221 --- modules/home/environment/hyprland/default.nix | 9 - .../home/environment/hyprland/hyprland.nix | 26 - modules/home/environment/spicetify.nix | 71 +- modules/home/environment/starship.nix | 99 +- modules/home/environment/stylix.nix | 30 +- modules/home/environment/swaync.nix | 1489 +++++++++-------- modules/home/environment/userpkgs.nix | 73 +- modules/home/environment/waybar.nix | 518 ++++++ modules/home/environment/waybar/default.nix | 6 - modules/home/environment/waybar/settings.nix | 323 ---- modules/home/environment/waybar/style.nix | 195 --- modules/home/environment/waybar/waybar.nix | 8 - modules/home/environment/zshell.nix | 357 ++-- modules/home/files.nix | 193 +-- modules/home/hm-modules.nix | 58 + modules/home/home-manager.nix | 6 +- modules/home/programs/autojump.nix | 13 +- modules/home/programs/bat.nix | 15 +- modules/home/programs/btop.nix | 37 +- modules/home/programs/cava.nix | 15 +- modules/home/programs/eza.nix | 19 +- modules/home/programs/firefox.nix | 246 +-- modules/home/programs/fuzzel.nix | 43 +- modules/home/programs/fzf.nix | 13 +- modules/home/programs/git.nix | 15 +- modules/home/programs/kitty.nix | 137 +- modules/home/programs/password-store.nix | 15 +- modules/home/programs/yazi.nix | 13 +- modules/home/scripts/default.nix | 75 +- .../{commands => wm-controls}/s_check.nix | 0 .../sys/{configuration.nix => default.nix} | 0 modules/sys/environment/issue.nix | 55 +- modules/sys/environment/nix.nix | 21 + modules/sys/environment/sddm.nix | 38 +- modules/sys/environment/stylix.nix | 75 +- modules/sys/hardware/bootloader.nix | 18 +- modules/sys/hardware/default.nix | 3 +- modules/sys/hardware/network.nix | 34 +- modules/sys/hardware/powerprofiles.nix | 51 + modules/sys/software/default.nix | 1 + modules/sys/software/gaming/gaming_pkgs.nix | 13 +- modules/sys/software/gaming/steam.nix | 13 +- modules/sys/software/module-test.nix | 11 + modules/sys/software/packages.nix | 156 +- modules/sys/software/programs.nix | 33 +- modules/sys/software/services.nix | 37 +- modules/sys/software/virtualization.nix | 11 +- 62 files changed, 2819 insertions(+), 2670 deletions(-) rename hosts/desktop/{settings.nix => config.nix} (94%) delete mode 100644 hosts/desktop/default.nix delete mode 100644 hosts/laptop/boot.nix create mode 100644 hosts/laptop/config.nix delete mode 100644 hosts/laptop/default.nix delete mode 100644 hosts/laptop/environment.nix delete mode 100644 hosts/laptop/hardware.nix.old delete mode 100644 hosts/laptop/services.nix delete mode 100644 hosts/laptop/settings.nix create mode 100644 modules/default.nix create mode 100644 modules/home/environment/hyprland.nix delete mode 100644 modules/home/environment/hyprland/config.nix delete mode 100644 modules/home/environment/hyprland/default.nix delete mode 100644 modules/home/environment/hyprland/hyprland.nix create mode 100644 modules/home/environment/waybar.nix delete mode 100644 modules/home/environment/waybar/default.nix delete mode 100644 modules/home/environment/waybar/settings.nix delete mode 100644 modules/home/environment/waybar/style.nix delete mode 100644 modules/home/environment/waybar/waybar.nix create mode 100644 modules/home/hm-modules.nix rename modules/home/scripts/{commands => wm-controls}/s_check.nix (100%) rename modules/sys/{configuration.nix => default.nix} (100%) create mode 100644 modules/sys/environment/nix.nix create mode 100644 modules/sys/hardware/powerprofiles.nix create mode 100644 modules/sys/software/module-test.nix diff --git a/flake.nix b/flake.nix index 2c8e161..782c0ab 100644 --- a/flake.nix +++ b/flake.nix @@ -76,6 +76,7 @@ inherit system; modules = [ ./hosts/desktop + ./modules stylix.nixosModules.stylix nixvim.nixosModules.nixvim nur.nixosModules.nur @@ -89,6 +90,7 @@ }; modules = [ ./hosts/laptop + ./modules stylix.nixosModules.stylix nixvim.nixosModules.nixvim nur.nixosModules.nur @@ -102,6 +104,7 @@ }; modules = [ ./hosts/server + ./modules stylix.nixosModules.stylix nixvim.nixosModules.nixvim nur.nixosModules.nur diff --git a/hosts/desktop/settings.nix b/hosts/desktop/config.nix similarity index 94% rename from hosts/desktop/settings.nix rename to hosts/desktop/config.nix index 776a197..c9bfa9f 100644 --- a/hosts/desktop/settings.nix +++ b/hosts/desktop/config.nix @@ -1,6 +1,7 @@ {pkgs, ...}: { system.stateVersion = "24.05"; nixpkgs.config.allowUnfree = true; + imports = [ ./hardware.nix ]; nix = { settings = { auto-optimise-store = true; diff --git a/hosts/desktop/default.nix b/hosts/desktop/default.nix deleted file mode 100644 index 867a32f..0000000 --- a/hosts/desktop/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ - host, - inputs, - username, - nur, - pkgs, - self, - ... -}: { - imports = [ - ./../../modules/sys/configuration.nix - ./hardware.nix - ./settings.nix - ]; -} diff --git a/hosts/laptop/boot.nix b/hosts/laptop/boot.nix deleted file mode 100644 index 625aae3..0000000 --- a/hosts/laptop/boot.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ - config, - pkgs, - ... -}: { - boot = { - kernelModules = ["acpi_call"]; - extraModulePackages = with config.boot.kernelPackages; - [ - acpi_call - cpupower - ] - ++ [pkgs.cpupower-gui]; - }; -} diff --git a/hosts/laptop/config.nix b/hosts/laptop/config.nix new file mode 100644 index 0000000..4db8d36 --- /dev/null +++ b/hosts/laptop/config.nix @@ -0,0 +1,36 @@ +{pkgs, config, ...}: { + system.stateVersion = "24.05"; + nixpkgs.config.allowUnfree = true; + imports = [ ./hardware.nix ]; + + powerProfiles.enable = true; + boot = { + kernelModules = ["acpi_call"]; + extraModulePackages = with config.boot.kernelPackages; + [ + acpi_call + cpupower + ] + ++ [pkgs.cpupower-gui]; + }; + + environment = { + variables = { + PATH = "${pkgs.clang-tools}/bin:$PATH"; + }; + shells = with pkgs; [ + zsh + bash + ]; + systemPackages = with pkgs; [ + acpi + brightnessctl + cpupower-gui + powertop + ]; + }; + + time.timeZone = "America/New_York"; + i18n.defaultLocale = "en_US.UTF-8"; + +} diff --git a/hosts/laptop/default.nix b/hosts/laptop/default.nix deleted file mode 100644 index d7f7bf1..0000000 --- a/hosts/laptop/default.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - host, - inputs, - pkgs, - config, - self, - username, - ... -}: { - imports = [ - ./../../modules/sys/configuration.nix - ./hardware.nix - ./boot.nix - ./services.nix - ./environment.nix - ./settings.nix - ]; -} diff --git a/hosts/laptop/environment.nix b/hosts/laptop/environment.nix deleted file mode 100644 index aca3a1b..0000000 --- a/hosts/laptop/environment.nix +++ /dev/null @@ -1,17 +0,0 @@ -{pkgs, ...}: { - environment = { - variables = { - PATH = "${pkgs.clang-tools}/bin:$PATH"; - }; - shells = with pkgs; [ - zsh - bash - ]; - systemPackages = with pkgs; [ - acpi - brightnessctl - cpupower-gui - powertop - ]; - }; -} diff --git a/hosts/laptop/hardware.nix.old b/hosts/laptop/hardware.nix.old deleted file mode 100644 index 1c21635..0000000 --- a/hosts/laptop/hardware.nix.old +++ /dev/null @@ -1,53 +0,0 @@ -# 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" "ahci" "usbhid" "usb_storage" "sd_mod"]; - boot.initrd.kernelModules = []; - boot.kernelModules = ["kvm-amd"]; - boot.extraModulePackages = []; - - fileSystems."/" = { - device = "/dev/disk/by-partlabel/disk-main-root"; - fsType = "ext4"; - }; - - fileSystems."/nix" = { - device = "/dev/disk/by-partlabel/disk-main-nix"; - fsType = "ext4"; - }; - - fileSystems."/boot" = { - device = "/dev/disk/by-partlabel/disk-main-ESP"; - fsType = "vfat"; - options = ["fmask=0077" "dmask=0077"]; - }; - - fileSystems."/home" = { - device = "/dev/disk/by-partlabel/disk-main-home"; - fsType = "ext4"; - }; - - 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.enp14s0.useDHCP = lib.mkDefault true; - # networking.interfaces.wlp15s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/hosts/laptop/services.nix b/hosts/laptop/services.nix deleted file mode 100644 index 187ab9d..0000000 --- a/hosts/laptop/services.nix +++ /dev/null @@ -1,47 +0,0 @@ -{...}: { - services = { - keyd = { - enable = true; - keyboards.default = { - ids = ["*"]; - settings.main = { - capslock = "esc"; - }; - }; - }; - - power-profiles-daemon.enable = true; - - upower = { - enable = true; - percentageLow = 20; - percentageCritical = 5; - percentageAction = 3; - criticalPowerAction = "PowerOff"; - }; - - tlp.settings = { - CPU_ENERGY_PERF_POLICY_ON_AC = "power"; - CPU_ENERGY_PERF_POLICY_ON_BAT = "power"; - - CPU_BOOST_ON_AC = 1; - CPU_BOOST_ON_BAT = 1; - - CPU_HWP_DYN_BOOST_ON_AC = 1; - CPU_HWP_DYN_BOOST_ON_BAT = 1; - - PLATFORM_PROFILE_ON_AC = "performance"; - PLATFORM_PROFILE_ON_BAT = "performance"; - - INTEL_GPU_MIN_FREQ_ON_AC = 500; - INTEL_GPU_MIN_FREQ_ON_BAT = 500; - # INTEL_GPU_MAX_FREQ_ON_AC=0; - # INTEL_GPU_MAX_FREQ_ON_BAT=0; - # INTEL_GPU_BOOST_FREQ_ON_AC=0; - # INTEL_GPU_BOOST_FREQ_ON_BAT=0; - - PCIE_ASPM_ON_AC = "default"; - PCIE_ASPM_ON_BAT = "powersupersave"; - }; - }; -} diff --git a/hosts/laptop/settings.nix b/hosts/laptop/settings.nix deleted file mode 100644 index 55e590c..0000000 --- a/hosts/laptop/settings.nix +++ /dev/null @@ -1,21 +0,0 @@ -{...}: { - system.stateVersion = "24.05"; - nixpkgs.config.allowUnfree = true; - nix = { - settings = { - auto-optimise-store = true; - experimental-features = ["nix-command" "flakes"]; - substituters = ["https://nix-gaming.cachix.org"]; - }; - gc = { - automatic = true; - dates = "weekly"; - options = "--delete-older-than 7d"; - }; - }; - - time.timeZone = "America/New_York"; - i18n.defaultLocale = "en_US.UTF-8"; - - powerManagement.cpuFreqGovernor = "performance"; -} diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..675df72 --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,31 @@ +{ + inputs, + nixpkgs, + config, + self, + username, + host, + lib, + ... +}: { + imports = [ + ./sys/hardware + ./sys/software + ./sys/environment + ./home/home-manager.nix + ]; + + networkModule.enable = lib.mkDefault true; + nixSettings.enable = lib.mkDefault true; + bootLoader.enable = lib.mkDefault true; + issue.enable = lib.mkDefault true; + sddmOpts.enable = lib.mkDefault true; + stylixOpts.enable = lib.mkDefault true; + gamingPkgs.enable = lib.mkDefault true; + steamOpts.enable = lib.mkDefault true; + sysPkgs.enable = lib.mkDefault true; + sysProgs.enable = lib.mkDefault true; + sysServices.enable = lib.mkDefault true; + virtOpts.enable = lib.mkDefault true; + powerProfiles.enable = lib.mkDefault false; +} diff --git a/modules/home/environment/default.nix b/modules/home/environment/default.nix index c32ff17..eb808dc 100644 --- a/modules/home/environment/default.nix +++ b/modules/home/environment/default.nix @@ -9,14 +9,15 @@ home-manager, ... }: { - imports = - [(import ./gtk.nix)] - ++ [(import ./spicetify.nix)] - ++ [(import ./stylix.nix)] - ++ [(import ./starship.nix)] - ++ [(import ./userpkgs.nix)] - ++ [(import ./zshell.nix)] - ++ [(import ./swaync.nix)] - ++ [(import ./waybar)] - ++ [(import ./hyprland)]; + imports = [ + ./gtk.nix + ./spicetify.nix + ./stylix.nix + ./starship.nix + ./userpkgs.nix + ./zshell.nix + ./swaync.nix + ./hyprland.nix + ./waybar.nix + ]; } diff --git a/modules/home/environment/gtk.nix b/modules/home/environment/gtk.nix index 332f080..40aa5d5 100644 --- a/modules/home/environment/gtk.nix +++ b/modules/home/environment/gtk.nix @@ -1,35 +1,36 @@ -{ - pkgs, - config, - ... -}: { - fonts.fontconfig.enable = true; - home.packages = with pkgs; [ - (nerdfonts.override { - fonts = [ - "JetBrainsMono" - "CascadiaCode" - "NerdFontsSymbolsOnly" - ]; - }) - ]; +{lib, config, pkgs, ... }: { + options = { + gtkOpts.enable = lib.mkEnableOption "enable my gtk options"; + }; + config = lib.mkIf config.gtkOpts.enable { + fonts.fontconfig.enable = true; + home.packages = with pkgs; [ + (nerdfonts.override { + fonts = [ + "JetBrainsMono" + "CascadiaCode" + "NerdFontsSymbolsOnly" + ]; + }) + ]; - gtk = { - enable = true; - iconTheme = { - name = "Papirus-Dark"; - package = pkgs.papirus-nord.override { - accent = "frostblue4"; + gtk = { + enable = true; + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-nord.override { + accent = "frostblue4"; + }; }; + #cursorTheme = { + # name = "Bibata-Modern-Ice"; + # package = pkgs.bibata-cursors; + # size = 16; + #}; + #font = { + # name = "Iosevka Nerd Font"; + # package = pkgs.nerdfonts.override {fonts = ["Iosevka"];}; + #}; }; - #cursorTheme = { - # name = "Bibata-Modern-Ice"; - # package = pkgs.bibata-cursors; - # size = 16; - #}; - #font = { - # name = "Iosevka Nerd Font"; - # package = pkgs.nerdfonts.override {fonts = ["Iosevka"];}; - #}; }; } diff --git a/modules/home/environment/hyprland.nix b/modules/home/environment/hyprland.nix new file mode 100644 index 0000000..c52856d --- /dev/null +++ b/modules/home/environment/hyprland.nix @@ -0,0 +1,242 @@ +{inputs, pkgs, lib, config, username, host, ... }: let + desktop = host == "oganesson"; + screenshot_bind = + if desktop + then [ + # My laptop does not have a printscreen button + "super, print, exec, grimblast copy area" + ] + else [ + "super, insert, exec, grimblast copy area" + ]; +in { + options = { + hyprlandConfig.enable = lib.mkEnableOption "enables my hyprland config"; + }; + config = lib.mkIf config.hyprlandConfig.enable { + home.packages = with pkgs; [ + swaybg + inputs.hypr-contrib.packages.${pkgs.system}.grimblast + hyprpicker + grim + slurp + wl-clip-persist + wf-recorder + glib + wayland + direnv + ]; + systemd.user.targets.hyprland-session.Unit.Wants = ["xdg-desktop-autostart.target"]; + wayland.windowManager.hyprland = { + enable = true; + xwayland = { + enable = true; + }; + systemd.enable = true; + }; + wayland.windowManager.hyprland = { + settings = { + monitor = + if (host == "oganesson") + then [ + "DP-1, 1920x1080@144, 1920x0, 1" + "HDMI-A-1, 1920x1080, 0x0, 1" + ] + else [ + "eDP-1, 1600x900, 0x0, 1" + ]; + + exec-once = [ + "waybar &" + "swaync &" + "wl-paste --type text --watch cliphist store &" + "wl-paste --type image --watch cliphist store &" + "wl-clip-persist --clipboard both" + "systemctl --user import-environment &" + "hash dbus-update-activation-environment 2>/dev/null &" + "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP &" + "aplay /home/${username}/sound/sys/login.wav &" + ]; + + workspace = + if desktop + then [ + "1,persistent=true,monitor:HDMI-A-1" + "2,persistent=true,monitor:HDMI-A-1" + "3,persistent=true,monitor:HDMI-A-1" + "4,persistent=true,monitor:DP-1" + "5,persistent=true,monitor:DP-1" + "6,persistent=true,monitor:DP-1" + ] + else [ + "1,persistent=true,monitor:eDP-1" + "2,persistent=true,monitor:eDP-1" + "3,persistent=true,monitor:eDP-1" + "4,persistent=true,monitor:eDP-1" + ]; + + env = [ + "XDG_CONFIG_HOME,$HOME/.config" + "XDG_DATA_HOME,$HOME/.local/share" + "XDG_CACHE_HOME,$HOME/.cache" + ]; + layerrule = [ + "blur,waybar" + "ignorezero,waybar" + "blur,launcher" + ]; + windowrule = [ + "opacity 0.8,nemo" + ]; + + input = { + kb_layout = "us"; + follow_mouse = 1; + accel_profile = "flat"; + force_no_accel = 1; + sensitivity = 0; + }; + general = { + "$mainMod" = "super"; + layout = "dwindle"; + gaps_in = 4; + gaps_out = 8; + border_size = 2; + #"col.inactive_border" = "0xff${scheme.base01}"; + #"col.active_border" = "0xff${scheme.base0F}"; + border_part_of_window = false; + no_border_on_floating = false; + }; + misc = { + disable_autoreload = true; + disable_hyprland_logo = true; + always_follow_on_dnd = true; + layers_hog_keyboard_focus = true; + animate_manual_resizes = false; + enable_swallow = true; + focus_on_activate = true; + }; + + dwindle = { + no_gaps_when_only = false; + force_split = 0; + special_scale_factor = 1.0; + split_width_multiplier = 1.0; + use_active_for_splits = true; + pseudotile = "yes"; + preserve_split = "yes"; + }; + + master = { + new_status = "master"; + special_scale_factor = 1; + no_gaps_when_only = false; + }; + + decoration = { + rounding = 7; + # active_opacity = 0.90; + # inactive_opacity = 0.90; + # fullscreen_opacity = 1.0; + + blur = { + enabled = true; + # size = 1; + # passes = 1; + size = 4; + passes = 1; + brightness = 1; + contrast = 1.400; + ignore_opacity = true; + popups = true; + noise = 0; + new_optimizations = true; + xray = true; + }; + + drop_shadow = true; + + shadow_ignore_window = true; + shadow_offset = "0 2"; + shadow_range = 20; + shadow_render_power = 3; + }; + + animations = { + enabled = true; + + bezier = [ + "fluent_decel, 0, 0.2, 0.4, 1" + "easeOutCirc, 0, 0.55, 0.45, 1" + "easeOutCubic, 0.33, 1, 0.68, 1" + "easeinoutsine, 0.37, 0, 0.63, 1" + ]; + + animation = [ + # Windows + "windowsIn, 1, 3, easeOutCubic, popin 30%" # window open + "windowsOut, 1, 3, fluent_decel, popin 70%" # window close. + "windowsMove, 1, 2, easeinoutsine, slide" # everything in between, moving, dragging, resizing. + + # Fade + "fadeIn, 1, 3, easeOutCubic" # fade in (open) -> layers and windows + "fadeOut, 1, 2, easeOutCubic" # fade out (close) -> layers and windows + "fadeSwitch, 0, 1, easeOutCirc" # fade on changing activewindow and its opacity + "fadeShadow, 1, 10, easeOutCirc" # fade on changing activewindow for shadows + "fadeDim, 1, 4, fluent_decel" # the easing of the dimming of inactive windows + "border, 1, 2.7, easeOutCirc" # for animating the border's color switch speed + "borderangle, 1, 30, fluent_decel, once" # for animating the border's gradient angle - styles: once (default), loop + "workspaces, 1, 4, easeOutCubic, fade" # styles: slide, slidevert, fade, slidefade, slidefadevert + ]; + + bind = + [ + "super, up, exec, pactl set-sink-volume @default_sink@ +10%" + "super, down, exec, pactl set-sink-volume @default_sink@ -10%" + "super, t, exec, swaync-client -t -sw" + "super, a, exec, firefox" + "super, q, exec, kitty --title Kitty" + "super shift, q, exec, [float;size 40% 30%;move onscreen cursor -50% -50%] kitty --title Kitty" + "super, c, killactive," + "super, e, exec, nemo" + "super, p, exec, [float;size 40% 25%;move onscreen cursor] [ ! -f /tmp/keyringfile ] && kitty toolbelt" + "super shift, m, exit," + "super, m, exec, fuzzel" + "super, r, exec, neovide" + "super, b, togglesplit, # dwindle" + "super, f, togglefloating" + "super, g, fullscreen" + "super, h, movefocus, l" + "super, l, movefocus, r" + "super, k, movefocus, u" + "super, j, movefocus, d" + "super shift, h, movewindow, l" + "super shift, l, movewindow, r" + "super shift, k, movewindow, u" + "super shift, j, movewindow, d" + "super, d, exec, switchmon" + "super, 1, exec, hyprctl 'dispatch workspace 1'" + "super, 2, exec, hyprctl 'dispatch workspace 2'" + "super, 3, exec, hyprctl 'dispatch workspace 3'" + "super, 4, exec, hyprctl 'dispatch workspace 4'" + "super, 5, exec, hyprctl 'dispatch workspace 5'" + "super, 6, exec, hyprctl 'dispatch workspace 6'" + "super shift, 1, movetoworkspace, 1" + "super shift, 2, movetoworkspace, 2" + "super shift, 3, movetoworkspace, 3" + "super shift, 4, movetoworkspace, 4" + "super shift, 5, movetoworkspace, 5" + "super shift, 6, movetoworkspace, 6" + "super, s, togglespecialworkspace, magic" + "super shift, s, movetoworkspace, special:magic" + ] + ++ screenshot_bind; + bindm = [ + "super, mouse:272, movewindow" + "super, mouse:273, resizewindow" + ]; + }; + }; + }; + }; +} diff --git a/modules/home/environment/hyprland/config.nix b/modules/home/environment/hyprland/config.nix deleted file mode 100644 index 777209b..0000000 --- a/modules/home/environment/hyprland/config.nix +++ /dev/null @@ -1,221 +0,0 @@ -{ - username, - host, - ... -}: let - desktop = host == "oganesson"; - screenshot_bind = - if desktop - then [ - # My laptop does not have a printscreen button - "super, print, exec, grimblast copy area" - ] - else [ - "super, insert, exec, grimblast copy area" - ]; -in { - wayland.windowManager.hyprland = { - settings = { - monitor = - if (host == "oganesson") - then [ - "DP-1, 1920x1080@144, 1920x0, 1" - "HDMI-A-1, 1920x1080, 0x0, 1" - ] - else [ - "eDP-1, 1600x900, 0x0, 1" - ]; - - exec-once = [ - "waybar &" - "swaync &" - "wl-paste --type text --watch cliphist store &" - "wl-paste --type image --watch cliphist store &" - "wl-clip-persist --clipboard both" - "systemctl --user import-environment &" - "hash dbus-update-activation-environment 2>/dev/null &" - "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP &" - "aplay /home/${username}/sound/sys/login.wav &" - ]; - - workspace = - if desktop - then [ - "1,persistent=true,monitor:HDMI-A-1" - "2,persistent=true,monitor:HDMI-A-1" - "3,persistent=true,monitor:HDMI-A-1" - "4,persistent=true,monitor:DP-1" - "5,persistent=true,monitor:DP-1" - "6,persistent=true,monitor:DP-1" - ] - else [ - "1,persistent=true,monitor:eDP-1" - "2,persistent=true,monitor:eDP-1" - "3,persistent=true,monitor:eDP-1" - "4,persistent=true,monitor:eDP-1" - ]; - - env = [ - "XDG_CONFIG_HOME,$HOME/.config" - "XDG_DATA_HOME,$HOME/.local/share" - "XDG_CACHE_HOME,$HOME/.cache" - ]; - layerrule = [ - "blur,waybar" - "ignorezero,waybar" - "blur,launcher" - ]; - windowrule = [ - "opacity 0.8,nemo" - ]; - - input = { - kb_layout = "us"; - follow_mouse = 1; - accel_profile = "flat"; - force_no_accel = 1; - sensitivity = 0; - }; - general = { - "$mainMod" = "super"; - layout = "dwindle"; - gaps_in = 4; - gaps_out = 8; - border_size = 2; - #"col.inactive_border" = "0xff${scheme.base01}"; - #"col.active_border" = "0xff${scheme.base0F}"; - border_part_of_window = false; - no_border_on_floating = false; - }; - misc = { - disable_autoreload = true; - disable_hyprland_logo = true; - always_follow_on_dnd = true; - layers_hog_keyboard_focus = true; - animate_manual_resizes = false; - enable_swallow = true; - focus_on_activate = true; - }; - - dwindle = { - no_gaps_when_only = false; - force_split = 0; - special_scale_factor = 1.0; - split_width_multiplier = 1.0; - use_active_for_splits = true; - pseudotile = "yes"; - preserve_split = "yes"; - }; - - master = { - new_status = "master"; - special_scale_factor = 1; - no_gaps_when_only = false; - }; - - decoration = { - rounding = 7; - # active_opacity = 0.90; - # inactive_opacity = 0.90; - # fullscreen_opacity = 1.0; - - blur = { - enabled = true; - # size = 1; - # passes = 1; - size = 4; - passes = 1; - brightness = 1; - contrast = 1.400; - ignore_opacity = true; - popups = true; - noise = 0; - new_optimizations = true; - xray = true; - }; - - drop_shadow = true; - - shadow_ignore_window = true; - shadow_offset = "0 2"; - shadow_range = 20; - shadow_render_power = 3; - }; - - animations = { - enabled = true; - - bezier = [ - "fluent_decel, 0, 0.2, 0.4, 1" - "easeOutCirc, 0, 0.55, 0.45, 1" - "easeOutCubic, 0.33, 1, 0.68, 1" - "easeinoutsine, 0.37, 0, 0.63, 1" - ]; - - animation = [ - # Windows - "windowsIn, 1, 3, easeOutCubic, popin 30%" # window open - "windowsOut, 1, 3, fluent_decel, popin 70%" # window close. - "windowsMove, 1, 2, easeinoutsine, slide" # everything in between, moving, dragging, resizing. - - # Fade - "fadeIn, 1, 3, easeOutCubic" # fade in (open) -> layers and windows - "fadeOut, 1, 2, easeOutCubic" # fade out (close) -> layers and windows - "fadeSwitch, 0, 1, easeOutCirc" # fade on changing activewindow and its opacity - "fadeShadow, 1, 10, easeOutCirc" # fade on changing activewindow for shadows - "fadeDim, 1, 4, fluent_decel" # the easing of the dimming of inactive windows - "border, 1, 2.7, easeOutCirc" # for animating the border's color switch speed - "borderangle, 1, 30, fluent_decel, once" # for animating the border's gradient angle - styles: once (default), loop - "workspaces, 1, 4, easeOutCubic, fade" # styles: slide, slidevert, fade, slidefade, slidefadevert - ]; - - bind = - [ - "super, up, exec, pactl set-sink-volume @default_sink@ +10%" - "super, down, exec, pactl set-sink-volume @default_sink@ -10%" - "super, t, exec, swaync-client -t -sw" - "super, a, exec, firefox" - "super, q, exec, kitty --title Kitty" - "super shift, q, exec, [float;size 40% 30%;move onscreen cursor -50% -50%] kitty --title Kitty" - "super, c, killactive," - "super, e, exec, nemo" - "super, p, exec, [float;size 40% 25%;move onscreen cursor] [ ! -f /tmp/keyringfile ] && kitty toolbelt" - "super shift, m, exit," - "super, m, exec, fuzzel" - "super, r, exec, neovide" - "super, b, togglesplit, # dwindle" - "super, f, togglefloating" - "super, g, fullscreen" - "super, h, movefocus, l" - "super, l, movefocus, r" - "super, k, movefocus, u" - "super, j, movefocus, d" - "super shift, h, movewindow, l" - "super shift, l, movewindow, r" - "super shift, k, movewindow, u" - "super shift, j, movewindow, d" - "super, d, exec, switchmon" - "super, 1, exec, hyprctl 'dispatch workspace 1'" - "super, 2, exec, hyprctl 'dispatch workspace 2'" - "super, 3, exec, hyprctl 'dispatch workspace 3'" - "super, 4, exec, hyprctl 'dispatch workspace 4'" - "super, 5, exec, hyprctl 'dispatch workspace 5'" - "super, 6, exec, hyprctl 'dispatch workspace 6'" - "super shift, 1, movetoworkspace, 1" - "super shift, 2, movetoworkspace, 2" - "super shift, 3, movetoworkspace, 3" - "super shift, 4, movetoworkspace, 4" - "super shift, 5, movetoworkspace, 5" - "super shift, 6, movetoworkspace, 6" - "super, s, togglespecialworkspace, magic" - "super shift, s, movetoworkspace, special:magic" - ] - ++ screenshot_bind; - bindm = [ - "super, mouse:272, movewindow" - "super, mouse:273, resizewindow" - ]; - }; - }; - }; -} diff --git a/modules/home/environment/hyprland/default.nix b/modules/home/environment/hyprland/default.nix deleted file mode 100644 index 85e56be..0000000 --- a/modules/home/environment/hyprland/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - inputs, - host, - ... -}: { - imports = - [(import ./hyprland.nix)] - ++ [(import ./config.nix)]; -} diff --git a/modules/home/environment/hyprland/hyprland.nix b/modules/home/environment/hyprland/hyprland.nix deleted file mode 100644 index fabc026..0000000 --- a/modules/home/environment/hyprland/hyprland.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ - inputs, - pkgs, - ... -}: { - home.packages = with pkgs; [ - swaybg - inputs.hypr-contrib.packages.${pkgs.system}.grimblast - hyprpicker - grim - slurp - wl-clip-persist - wf-recorder - glib - wayland - direnv - ]; - systemd.user.targets.hyprland-session.Unit.Wants = ["xdg-desktop-autostart.target"]; - wayland.windowManager.hyprland = { - enable = true; - xwayland = { - enable = true; - }; - systemd.enable = true; - }; -} diff --git a/modules/home/environment/spicetify.nix b/modules/home/environment/spicetify.nix index 4a6ec3e..5848db3 100644 --- a/modules/home/environment/spicetify.nix +++ b/modules/home/environment/spicetify.nix @@ -1,43 +1,40 @@ -{ - pkgs, - lib, - inputs, - scheme, - ... -}: let +{lib, config, pkgs, inputs, scheme, ... }: let spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system}; in { - nixpkgs.config.allowUnfreePredicate = pkg: - builtins.elem (lib.getName pkg) [ - "spotify" - ]; + options = { + spicetifyOpts.enable = lib.mkEnableOption "enable my spicetify options"; + }; + config = lib.mkIf config.spicetifyOpts.enable { + nixpkgs.config.allowUnfreePredicate = pkg: + builtins.elem (lib.getName pkg) [ + "spotify" + ]; - imports = [inputs.spicetify-nix.homeManagerModules.default]; + programs.spicetify = { + enable = true; + enabledExtensions = with spicePkgs.extensions; [ + adblock + hidePodcasts + shuffle # shuffle+ (special characters are sanitized out of extension names) + ]; + #colorScheme = "custom"; - programs.spicetify = { - enable = true; - enabledExtensions = with spicePkgs.extensions; [ - adblock - hidePodcasts - shuffle # shuffle+ (special characters are sanitized out of extension names) - ]; - #colorScheme = "custom"; - - #customColorScheme = { - # text = scheme.base06; - # subtext = scheme.base04; - # sidebar-text = scheme.base04; - # main = scheme.base00; - # sidebar = scheme.base01; - # shadow = scheme.base01; - # selected-row = scheme.base08; - # button = scheme.base0D; - # button-active = scheme.base0C; - # button-disabled = scheme.base02; - # tab-active = scheme.base0E; - # notification = scheme.base0A; - # notification-error = scheme.base09; - # misc = scheme.base0F; - #}; + #customColorScheme = { + # text = scheme.base06; + # subtext = scheme.base04; + # sidebar-text = scheme.base04; + # main = scheme.base00; + # sidebar = scheme.base01; + # shadow = scheme.base01; + # selected-row = scheme.base08; + # button = scheme.base0D; + # button-active = scheme.base0C; + # button-disabled = scheme.base02; + # tab-active = scheme.base0E; + # notification = scheme.base0A; + # notification-error = scheme.base09; + # misc = scheme.base0F; + #}; + }; }; } diff --git a/modules/home/environment/starship.nix b/modules/home/environment/starship.nix index 6c51cd4..ecf75a3 100644 --- a/modules/home/environment/starship.nix +++ b/modules/home/environment/starship.nix @@ -1,58 +1,59 @@ -{ - lib, - inputs, - ... -}: { - programs.starship = { - enable = true; - enableZshIntegration = false; - settings = { - add_newline = true; - right_format = "($custom)"; +{config, lib, inputs, ... }: { + options = { + starshipConfig.enable = lib.mkEnableOption "enables my starship configuration"; + }; + config = lib.mkIf config.starshipConfig.enable { + programs.starship = { + enable = true; + enableZshIntegration = false; + settings = { + add_newline = true; + right_format = "($custom)"; - format = lib.concatStrings [ - "($username)($ssh_symbol)($hostname)(bold white)($cmd_duration)($character)" - "($git_branch)($git_status)($rust)($nix-shell)" - "($directory)" - "$line_break[οŒ“ > ](bold #89b4fa)" - ]; + format = lib.concatStrings [ + "($username)($ssh_symbol)($hostname)(bold white)($cmd_duration)($character)" + "($git_branch)($git_status)($rust)($nix-shell)" + "($directory)" + "$line_break[οŒ“ > ](bold #89b4fa)" + ]; - username = { - show_always = true; - style_user = "bold white"; - format = "[$user]($style)"; - }; - directory = { - format = "\n[$path](bold cyan)[/](bold green) "; - style = "bold #b4befe"; - }; + username = { + show_always = true; + style_user = "bold white"; + format = "[$user]($style)"; + }; + directory = { + format = "\n[$path](bold cyan)[/](bold green) "; + style = "bold #b4befe"; + }; - character = { - success_symbol = "[ -> ο€Œ](bold green)"; - error_symbol = "[ -> βœ—](bold red)"; - # error_symbol = "[οŒ“ ](bold #89dceb)[ βœ—](bold red)"; - }; + character = { + success_symbol = "[ -> ο€Œ](bold green)"; + error_symbol = "[ -> βœ—](bold red)"; + # error_symbol = "[οŒ“ ](bold #89dceb)[ βœ—](bold red)"; + }; - cmd_duration = { - format = "[ σ°”› $duration]($style)"; - disabled = false; - style = "bg:none fg:#f9e2af"; - show_notifications = false; - min_time_to_notify = 60000; - }; + cmd_duration = { + format = "[ σ°”› $duration]($style)"; + disabled = false; + style = "bg:none fg:#f9e2af"; + show_notifications = false; + min_time_to_notify = 60000; + }; - git_branch = { - format = "\non [$symbol$branch](bold purple)"; - symbol = "ξ‚  "; - truncation_length = 15; - style = "bold purple"; - }; + git_branch = { + format = "\non [$symbol$branch](bold purple)"; + symbol = "ξ‚  "; + truncation_length = 15; + style = "bold purple"; + }; - custom.shellver = { - command = "zsh --version"; - when = ''test $SHELL = "/run/current-system/sw/bin/zsh"''; - symbol = "ξš‘"; - style = "bold magenta"; + custom.shellver = { + command = "zsh --version"; + when = ''test $SHELL = "/run/current-system/sw/bin/zsh"''; + symbol = "ξš‘"; + style = "bold magenta"; + }; }; }; }; diff --git a/modules/home/environment/stylix.nix b/modules/home/environment/stylix.nix index dbae785..2205b74 100644 --- a/modules/home/environment/stylix.nix +++ b/modules/home/environment/stylix.nix @@ -1,18 +1,18 @@ -{ - pkgs, - scheme, - wallpaper, - ... -}: { - stylix = { - enable = true; - autoEnable = true; - targets = { - # fzf.enable = true; - # kitty.enable = true; - # vesktop.enable = true; - waybar.enable = false; - btop.enable = false; +{lib, config, pkgs, scheme, wallpaper, ... }: { + options = { + stylixHomeOpts.enable = lib.mkEnableOption "enables my stylix Home-Manager options"; + }; + config = lib.mkIf config.stylixHomeOpts.enable { + stylix = { + enable = true; + autoEnable = true; + targets = { + # fzf.enable = true; + # kitty.enable = true; + # vesktop.enable = true; + waybar.enable = false; + btop.enable = false; + }; }; }; } diff --git a/modules/home/environment/swaync.nix b/modules/home/environment/swaync.nix index b069463..a4036de 100644 --- a/modules/home/environment/swaync.nix +++ b/modules/home/environment/swaync.nix @@ -1,743 +1,748 @@ -{pkgs, ...}: { - home.packages = with pkgs; [swaynotificationcenter]; - xdg.configFile."swaync/style.css".text = '' - @define-color shadow rgba(0, 0, 0, 0.25); - /* - * - * Catppuccin Mocha palette - * Maintainer: rubyowo - * - */ - - @define-color base #1E1D2E; - @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: "NotoSansMono Nerd Font"; - background-clip: border-box; - } - - /* #notifications_box { */ - /* border: solid 4px red; */ - /* } */ - - label { - color: @text; - } - - .notification { - border: @lavender; - box-shadow: none; - /* margin: 0px; */ - /* margin: -15px -10px -15px -10px; */ - border-radius: 4px; - background: inherit; - /* background: @theme_bg_color; */ - /* background: shade(alpha(@borders, 2.55), 0.25); */ - } - - .notification button { - background: transparent; - border-radius: 0px; - border: none; - margin: 0px; - padding: 0px; - } - - .notification button:hover { - background: @surface0; - /* background: @insensitive_bg_color; */ - } - - - .notification-content { - min-height: 64px; - margin: 10px; - padding: 0px; - border-radius: 0px; - } - - .close-button { - background: @crust; - color: @surface2; - } - - .notification-default-action, - .notification-action { - background: transparent; - border: none; - } - - - .notification-default-action { - border-radius: 4px; - } - - /* When alternative actions are visible */ - .notification-default-action:not(:only-child) { - border-bottom-left-radius: 0px; - border-bottom-right-radius: 0px; - } - - .notification-action { - border-radius: 0px; - padding: 2px; - color: @text; - /* color: @theme_text_color; */ - } - - /* add bottom border radius to eliminate clipping */ - .notification-action:first-child { - border-bottom-left-radius: 4px; - } - - .notification-action:last-child { - border-bottom-right-radius: 4px; - } - - /*** Notification ***/ - /* Notification header */ - .summary { - color: @text; - /* color: @theme_text_color; */ - font-size: 16px; - padding: 0px; - } - - .time { - color: @subtext0; - /* color: alpha(@theme_text_color, 0.9); */ - font-size: 12px; - text-shadow: none; - margin: 0px 0px 0px 0px; - padding: 2px 0px; - } - - .body { - font-size: 14px; - font-weight: 500; - color: @subtext1; - /* color: alpha(@text, 0.9); */ - /* color: alpha(@theme_text_color, 0.9); */ - text-shadow: none; - margin: 0px 0px 0px 0px; - } - - .body-image { - border-radius: 4px; - } - - /* The "Notifications" and "Do Not Disturb" text widget */ - .top-action-title { - color: @text; - /* color: @theme_text_color; */ - text-shadow: none; - } - - /* Control center */ - - .control-center { - /* background: transparent; */ - background: @crust; - /* background: @theme_bg_color; */ - /* border: 1px solid @surface0; */ - border-radius: 5px; - /* box-shadow: 0px 0px 2px black; */ - } - - /* .right.overlay-indicator { */ - /* border: solid 5px red; */ - /* } */ - - .control-center-list { - /* background: @base; */ - background: @crust; - min-height: 5px; - /* border: 1px solid @surface1; */ - border-top: none; - border-radius: 0px 0px 4px 4px; - } - - .control-center-list-placeholder, - .notification-group-icon, - .notification-group { - /* opacity: 1.0; */ - /* opacity: 0; */ - color: alpha(@theme_text_color, 0.50); - } - - .notification-group { - /* unset the annoying focus thingie */ - all: unset; - border: none; - opacity: 0; - padding: 0px; - box-shadow: none; - /* selectable: no; */ - } - .notification-group > box { - all: unset; - background: @mantle; - /* background: alpha(currentColor, 0.072); */ - padding: 8px; - margin: 0px; - /* margin: 0px -5px; */ - border: none; - border-radius: 4px; - box-shadow: none; - } - - - .notification-row { - outline: none; - transition: all 1s ease; - background: @base; - /* background: @theme_bg_color; */ - border: 1px solid @crust; - margin: 10px 5px 0px 5px; - border-radius: 4px; - /* box-shadow: 0px 0px 4px black; */ - /* background: alpha(currentColor, 0.05); */ - } - - .notification-row:focus, - .notification-row:hover { - box-shadow: none; - } - - .control-center-list > row, - .control-center-list > row:focus, - .control-center-list > row:hover { - background: transparent; - border: none; - margin: 0px; - padding: 5px 10px 5px 10px; - box-shadow: none; - } - - .control-center-list > row:last-child { - padding: 5px 10px 10px 10px; - } - - - /* Window behind control center and on all other monitors */ - .blank-window { - background: transparent; - } - - /*** Widgets ***/ - - /* Title widget */ - .widget-title { - margin: 0px; - background: inherit; - /* background: @theme_bg_color; */ - border-radius: 4px 4px 0px 0px; - /* border: 1px solid @surface1; */ - border-bottom: none; - padding-bottom: 20px; - } - - .widget-title > label { - margin: 18px 10px; - font-size: 20px; - font-weight: 500; - } - - .widget-title > button { - font-weight: 700; - padding: 7px 3px; - margin-right: 10px; - background: @mantle; - color: @text; - /* color: @theme_text_color; */ - /* border: none; */ - border-radius: 4px; - } - .widget-title > button:hover { - background: @base; - /* background: alpha(currentColor, 0.1); */ - } - - /* Label widget */ - .widget-label { - margin: 0px; - padding: 0px; - min-height: 5px; - background: @mantle; - /* background: @theme_bg_color; */ - border-radius: 0px 0px 4px 4px; - /* border: 1px solid @surface1; */ - border-top: none; - } - .widget-label > label { - font-size: 0px; - font-weight: 400; - } - - /* Menubar */ - .widget-menubar { - background: inherit; - /* background: @theme_bg_color; */ - /* border: 1px solid @surface1; */ - border-top: none; - border-bottom: none; - } - .widget-menubar > box > box { - margin: 5px 10px 5px 10px; - min-height: 40px; - border-radius: 4px; - background: transparent; - } - .widget-menubar > box > box > button { - background: @mantle; - /* background: alpha(currentColor, 0.05); */ - min-width: 85px; - min-height: 50px; - margin-right: 13px; - font-size: 17px; - padding: 0px; - } - .widget-menubar > box > box > button:nth-child(4) { - margin-right: 0px; - } - .widget-menubar button:focus { - box-shadow: none; - } - .widget-menubar button:focus:hover { - background: @base; - /* background: alpha(currentColor,0.1); */ - box-shadow: none; - } - - .widget-menubar > box > revealer > box { - margin: 5px 10px 5px 10px; - background: @mantle; - /* background: alpha(currentColor, 0.05); */ - border-radius: 4px; - } - .widget-menubar > box > revealer > box > button { - background: transparent; - min-height: 50px; - padding: 0px; - margin: 5px; - } - - /* Buttons grid */ - .widget-buttons-grid { - /* background-color: @theme_bg_color; */ - background-color: @mantle; - /* border: 1px solid @surface1; */ - border-top: none; - border-bottom: none; - font-size: 14px; - font-weight: 500; - margin: 0px; - padding: 5px; - border-radius: 0px; - } - - .widget-buttons-grid > flowbox > flowboxchild { - background: @mantle; - /* background: alpha(currentColor, 0.05); */ - border-radius: 4px; - min-height: 50px; - min-width: 85px; - margin: 5px; - padding: 0px; - } - - .widget-buttons-grid > flowbox > flowboxchild > button { - background: transparent; - border-radius: 4px; - margin: 0px; - border: none; - box-shadow: none; - } - - - .widget-buttons-grid > flowbox > flowboxchild > button:hover { - background: @mantle; - /* background: alpha(currentColor, 0.1); */ - } - - /* Mpris widget */ - .widget-mpris { - padding: 10px; - padding-bottom: 35px; - padding-top: 35px; - margin-bottom: -33px; - } - .widget-mpris > box { - padding: 0px; - margin: -5px 0px -10px 0px; - padding: 0px; - border-radius: 4px; - /* background: alpha(currentColor, 0.05); */ - background: @mantle; - } - .widget-mpris > box > button:nth-child(1), - .widget-mpris > box > button:nth-child(3) { - margin-bottom: 0px; - } - .widget-mpris > box > button:nth-child(1) { - margin-left: -25px; - margin-right: -25px; - opacity: 0; - } - .widget-mpris > box > button:nth-child(3) { - margin-left: -25px; - margin-right: -25px; - opacity: 0; - } - - .widget-mpris-album-art { - all: unset; - } - - /* Player button box */ - .widget-mpris > box > carousel > widget > box > box:nth-child(2) { - margin: 5px 0px -5px 90px; - } - - /* Player buttons */ - .widget-mpris > box > carousel > widget > box > box:nth-child(2) > button { - border-radius: 4px; - } - .widget-mpris > box > carousel > widget > box > box:nth-child(2) > button:hover { - background: alpha(currentColor, 0.1); - } - carouselindicatordots { - opacity: 0; - } - - .widget-mpris-title { - color: #eeeeee; - font-weight: bold; - font-size: 1.25rem; - text-shadow: 0px 0px 5px rgba(0, 0, 0, 0.5); - } - .widget-mpris-subtitle { - color: #eeeeee; - font-size: 1rem; - text-shadow: 0px 0px 3px rgba(0, 0, 0, 1); - } - - .widget-mpris-player { - border-radius: 0px; - margin: 0px; - } - .widget-mpris-player > box > image { - margin: 0px 0px -48px 0px; - } - - .notification-group > box.vertical { - /* border: solid 5px red; */ - margin-top: 3px - } - - /* Backlight and volume widgets */ - .widget-backlight, - .widget-volume { - background-color: @crust; - /* background-color: @theme_bg_color; */ - /* border: 1px solid @surface1; */ - border-top: none; - border-bottom: none; font-size: 13px; - font-weight: 600; - border-radius: 0px; - margin: 0px; - padding: 0px; - } - .widget-volume > box { - background: @mantle; - /* background: alpha(currentColor, 0.05); */ - border-radius: 4px; - margin: 5px 10px 5px 10px; - min-height: 50px; - } - .widget-volume > box > label { - min-width: 50px; - padding: 0px; - } - .widget-volume > box > button { - min-width: 50px; - box-shadow: none; - padding: 0px; - } - .widget-volume > box > button:hover { - /* background: alpha(currentColor, 0.05); */ - background: @surface0; - } - .widget-volume > revealer > list { - background: @mantle; - /* background: alpha(currentColor, 0.05); */ - border-radius: 4px; - margin-top: 5px; - padding: 0px; - } - .widget-volume > revealer > list > row { - padding-left: 10px; - min-height: 40px; - background: transparent; - } - .widget-volume > revealer > list > row:hover { - background: transparent; - box-shadow: none; - border-radius: 4px; - } - .widget-backlight > scale { - background: @mantle; - /* background: alpha(currentColor, 0.05); */ - border-radius: 0px 4px 4px 0px; - margin: 5px 10px 5px 0px; - padding: 0px 10px 0px 0px; - min-height: 50px; - } - .widget-backlight > label { - background: @surface0; - /* background: alpha(currentColor, 0.05); */ - margin: 5px 0px 5px 10px; - border-radius: 4px 0px 0px 4px; - padding: 0px; - min-height: 50px; - min-width: 50px; - } - - /* DND widget */ - .widget-dnd { - margin: 8px; - font-size: 1.1rem; - padding-top: 20px; - } - - .widget-dnd>switch { - font-size: initial; - border-radius: 12px; - background: @surface0; - border: 1px solid @lavender; - box-shadow: none; - } - - .widget-dnd>switch:checked { - background: @surface2; - } - - .widget-dnd>switch slider { - background: @lavender; - border-radius: 12px; - } - - /* Toggles */ - .toggle:checked { - background: @surface1; - /* background: @theme_selected_bg_color; */ - } - /*.toggle:not(:checked) { - color: rgba(128, 128, 128, 0.5); - }*/ - .toggle:checked:hover { - background: @surface2; - /* background: alpha(@theme_selected_bg_color, 0.75); */ - } - - /* Sliders */ - scale { - padding: 0px; - margin: 0px 10px 0px 10px; - } - - scale trough { - border-radius: 4px; - background: @surface0; - /* background: alpha(currentColor, 0.1); */ - } - - scale highlight { - border-radius: 5px; - min-height: 10px; - margin-right: -5px; - } - - scale slider { - margin: -10px; - min-width: 10px; - min-height: 10px; - background: transparent; - box-shadow: none; - padding: 0px; - } - scale slider:hover { - } - - .right.overlay-indicator { - all: unset; - } - ''; - xdg.configFile."swaync/config.json".text = '' - { - "positionX": "right", - "positionY": "top", - "layer": "overlay", - "layer-shell": "true", - "cssPriority": "application", - "control-center-margin-top": 10, - "control-center-margin-bottom": 10, - "control-center-margin-right": 10, - "control-center-margin-left": 10, - "notification-icon-size": 64, - "notification-body-image-height": 128, - "notification-body-image-width": 200, - "timeout": 10, - "timeout-low": 5, - "timeout-critical": 0, - "fit-to-screen": true, - "control-center-width": 400, - "control-center-height": 650, - "notification-window-width": 350, - "keyboard-shortcuts": true, - "image-visibility": "when-available", - "transition-time": 200, - "hide-on-clear": false, - "hide-on-action": true, - "script-fail-notify": true, - "widgets": [ - "title", - "menubar#desktop", - "volume", - "backlight#mobile", - "mpris", - "dnd", - "notifications" - ], - "widget-config": { - "title": { - "text": "Notifications", - "clear-all-button": true, - "button-text": " Clear All " - }, - "menubar#desktop": { - "menu#powermode-buttons": { - "label": " σ°Œͺ ", - "position": "left", - "actions": [ - { - "label": "Performance", - "command": "powerprofilesctl set performance" - }, - { - "label": "Balanced", - "command": "powerprofilesctl set balanced" - }, - { - "label": "Power-saver", - "command": "powerprofilesctl set power-saver" - } - ] - }, - "menu#screenshot": { - "label": "  ", - "position": "left", - "actions": [ - { - "label": "σ°Ή‘ Whole screen", - "command": "grimblast --notify --cursor --freeze copy output" - }, - { - "label": "σ°©­ Window / Region", - "command": "grimblast --notify --cursor --freeze copy area" - } - ] - }, - "menu#record": { - "label": " σ°•§ ", - "position": "left", - "actions": [ - { - "label": " Record screen", - "command": "record screen & ; swaync-client -t" - }, - { - "label": " Record selection", - "command": "record area & ; swaync-client -t" - }, - { - "label": "ο“₯ Record GIF", - "command": "record gif & ; swaync-client -t" - }, - { - "label": "󰻃 Stop", - "command": "record stop" - } - ] - }, - "menu#power-buttons": { - "label": "  ", - "position": "left", - "actions": [ - { - "label": "ο€£ Lock", - "command": "swaylock" - }, - { - "label": " Reboot", - "command": "systemctl reboot" - }, - { - "label": " Shut down", - "command": "systemctl poweroff" - } - ] - } - }, - "backlight#mobile": { - "label": " σ°ƒ  ", - "device": "panel" - }, - "volume": { - "label": "", - "expand-button-label": "οƒ—", - "collapse-button-label": "οƒ˜", - "show-per-app": true, - "show-per-app-icon": true, - "show-per-app-label": false - }, - "dnd": { - "text": " Do Not Disturb" - }, - "mpris": { - "image-size": 85, - "image-radius": 5 - } - } - } - ''; +{lib, config, pkgs, ...}: { + options = { + swayncConfig.enable = lib.mkEnableOption "enables my swaync configuration"; + }; + config = lib.mkIf config.swayncConfig.enable { + home.packages = with pkgs; [swaynotificationcenter]; + xdg.configFile."swaync/style.css".text = '' + @define-color shadow rgba(0, 0, 0, 0.25); + /* + * + * Catppuccin Mocha palette + * Maintainer: rubyowo + * + */ + + @define-color base #1E1D2E; + @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: "NotoSansMono Nerd Font"; + background-clip: border-box; + } + + /* #notifications_box { */ + /* border: solid 4px red; */ + /* } */ + + label { + color: @text; + } + + .notification { + border: @lavender; + box-shadow: none; + /* margin: 0px; */ + /* margin: -15px -10px -15px -10px; */ + border-radius: 4px; + background: inherit; + /* background: @theme_bg_color; */ + /* background: shade(alpha(@borders, 2.55), 0.25); */ + } + + .notification button { + background: transparent; + border-radius: 0px; + border: none; + margin: 0px; + padding: 0px; + } + + .notification button:hover { + background: @surface0; + /* background: @insensitive_bg_color; */ + } + + + .notification-content { + min-height: 64px; + margin: 10px; + padding: 0px; + border-radius: 0px; + } + + .close-button { + background: @crust; + color: @surface2; + } + + .notification-default-action, + .notification-action { + background: transparent; + border: none; + } + + + .notification-default-action { + border-radius: 4px; + } + + /* When alternative actions are visible */ + .notification-default-action:not(:only-child) { + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; + } + + .notification-action { + border-radius: 0px; + padding: 2px; + color: @text; + /* color: @theme_text_color; */ + } + + /* add bottom border radius to eliminate clipping */ + .notification-action:first-child { + border-bottom-left-radius: 4px; + } + + .notification-action:last-child { + border-bottom-right-radius: 4px; + } + + /*** Notification ***/ + /* Notification header */ + .summary { + color: @text; + /* color: @theme_text_color; */ + font-size: 16px; + padding: 0px; + } + + .time { + color: @subtext0; + /* color: alpha(@theme_text_color, 0.9); */ + font-size: 12px; + text-shadow: none; + margin: 0px 0px 0px 0px; + padding: 2px 0px; + } + + .body { + font-size: 14px; + font-weight: 500; + color: @subtext1; + /* color: alpha(@text, 0.9); */ + /* color: alpha(@theme_text_color, 0.9); */ + text-shadow: none; + margin: 0px 0px 0px 0px; + } + + .body-image { + border-radius: 4px; + } + + /* The "Notifications" and "Do Not Disturb" text widget */ + .top-action-title { + color: @text; + /* color: @theme_text_color; */ + text-shadow: none; + } + + /* Control center */ + + .control-center { + /* background: transparent; */ + background: @crust; + /* background: @theme_bg_color; */ + /* border: 1px solid @surface0; */ + border-radius: 5px; + /* box-shadow: 0px 0px 2px black; */ + } + + /* .right.overlay-indicator { */ + /* border: solid 5px red; */ + /* } */ + + .control-center-list { + /* background: @base; */ + background: @crust; + min-height: 5px; + /* border: 1px solid @surface1; */ + border-top: none; + border-radius: 0px 0px 4px 4px; + } + + .control-center-list-placeholder, + .notification-group-icon, + .notification-group { + /* opacity: 1.0; */ + /* opacity: 0; */ + color: alpha(@theme_text_color, 0.50); + } + + .notification-group { + /* unset the annoying focus thingie */ + all: unset; + border: none; + opacity: 0; + padding: 0px; + box-shadow: none; + /* selectable: no; */ + } + .notification-group > box { + all: unset; + background: @mantle; + /* background: alpha(currentColor, 0.072); */ + padding: 8px; + margin: 0px; + /* margin: 0px -5px; */ + border: none; + border-radius: 4px; + box-shadow: none; + } + + + .notification-row { + outline: none; + transition: all 1s ease; + background: @base; + /* background: @theme_bg_color; */ + border: 1px solid @crust; + margin: 10px 5px 0px 5px; + border-radius: 4px; + /* box-shadow: 0px 0px 4px black; */ + /* background: alpha(currentColor, 0.05); */ + } + + .notification-row:focus, + .notification-row:hover { + box-shadow: none; + } + + .control-center-list > row, + .control-center-list > row:focus, + .control-center-list > row:hover { + background: transparent; + border: none; + margin: 0px; + padding: 5px 10px 5px 10px; + box-shadow: none; + } + + .control-center-list > row:last-child { + padding: 5px 10px 10px 10px; + } + + + /* Window behind control center and on all other monitors */ + .blank-window { + background: transparent; + } + + /*** Widgets ***/ + + /* Title widget */ + .widget-title { + margin: 0px; + background: inherit; + /* background: @theme_bg_color; */ + border-radius: 4px 4px 0px 0px; + /* border: 1px solid @surface1; */ + border-bottom: none; + padding-bottom: 20px; + } + + .widget-title > label { + margin: 18px 10px; + font-size: 20px; + font-weight: 500; + } + + .widget-title > button { + font-weight: 700; + padding: 7px 3px; + margin-right: 10px; + background: @mantle; + color: @text; + /* color: @theme_text_color; */ + /* border: none; */ + border-radius: 4px; + } + .widget-title > button:hover { + background: @base; + /* background: alpha(currentColor, 0.1); */ + } + + /* Label widget */ + .widget-label { + margin: 0px; + padding: 0px; + min-height: 5px; + background: @mantle; + /* background: @theme_bg_color; */ + border-radius: 0px 0px 4px 4px; + /* border: 1px solid @surface1; */ + border-top: none; + } + .widget-label > label { + font-size: 0px; + font-weight: 400; + } + + /* Menubar */ + .widget-menubar { + background: inherit; + /* background: @theme_bg_color; */ + /* border: 1px solid @surface1; */ + border-top: none; + border-bottom: none; + } + .widget-menubar > box > box { + margin: 5px 10px 5px 10px; + min-height: 40px; + border-radius: 4px; + background: transparent; + } + .widget-menubar > box > box > button { + background: @mantle; + /* background: alpha(currentColor, 0.05); */ + min-width: 85px; + min-height: 50px; + margin-right: 13px; + font-size: 17px; + padding: 0px; + } + .widget-menubar > box > box > button:nth-child(4) { + margin-right: 0px; + } + .widget-menubar button:focus { + box-shadow: none; + } + .widget-menubar button:focus:hover { + background: @base; + /* background: alpha(currentColor,0.1); */ + box-shadow: none; + } + + .widget-menubar > box > revealer > box { + margin: 5px 10px 5px 10px; + background: @mantle; + /* background: alpha(currentColor, 0.05); */ + border-radius: 4px; + } + .widget-menubar > box > revealer > box > button { + background: transparent; + min-height: 50px; + padding: 0px; + margin: 5px; + } + + /* Buttons grid */ + .widget-buttons-grid { + /* background-color: @theme_bg_color; */ + background-color: @mantle; + /* border: 1px solid @surface1; */ + border-top: none; + border-bottom: none; + font-size: 14px; + font-weight: 500; + margin: 0px; + padding: 5px; + border-radius: 0px; + } + + .widget-buttons-grid > flowbox > flowboxchild { + background: @mantle; + /* background: alpha(currentColor, 0.05); */ + border-radius: 4px; + min-height: 50px; + min-width: 85px; + margin: 5px; + padding: 0px; + } + + .widget-buttons-grid > flowbox > flowboxchild > button { + background: transparent; + border-radius: 4px; + margin: 0px; + border: none; + box-shadow: none; + } + + + .widget-buttons-grid > flowbox > flowboxchild > button:hover { + background: @mantle; + /* background: alpha(currentColor, 0.1); */ + } + + /* Mpris widget */ + .widget-mpris { + padding: 10px; + padding-bottom: 35px; + padding-top: 35px; + margin-bottom: -33px; + } + .widget-mpris > box { + padding: 0px; + margin: -5px 0px -10px 0px; + padding: 0px; + border-radius: 4px; + /* background: alpha(currentColor, 0.05); */ + background: @mantle; + } + .widget-mpris > box > button:nth-child(1), + .widget-mpris > box > button:nth-child(3) { + margin-bottom: 0px; + } + .widget-mpris > box > button:nth-child(1) { + margin-left: -25px; + margin-right: -25px; + opacity: 0; + } + .widget-mpris > box > button:nth-child(3) { + margin-left: -25px; + margin-right: -25px; + opacity: 0; + } + + .widget-mpris-album-art { + all: unset; + } + + /* Player button box */ + .widget-mpris > box > carousel > widget > box > box:nth-child(2) { + margin: 5px 0px -5px 90px; + } + + /* Player buttons */ + .widget-mpris > box > carousel > widget > box > box:nth-child(2) > button { + border-radius: 4px; + } + .widget-mpris > box > carousel > widget > box > box:nth-child(2) > button:hover { + background: alpha(currentColor, 0.1); + } + carouselindicatordots { + opacity: 0; + } + + .widget-mpris-title { + color: #eeeeee; + font-weight: bold; + font-size: 1.25rem; + text-shadow: 0px 0px 5px rgba(0, 0, 0, 0.5); + } + .widget-mpris-subtitle { + color: #eeeeee; + font-size: 1rem; + text-shadow: 0px 0px 3px rgba(0, 0, 0, 1); + } + + .widget-mpris-player { + border-radius: 0px; + margin: 0px; + } + .widget-mpris-player > box > image { + margin: 0px 0px -48px 0px; + } + + .notification-group > box.vertical { + /* border: solid 5px red; */ + margin-top: 3px + } + + /* Backlight and volume widgets */ + .widget-backlight, + .widget-volume { + background-color: @crust; + /* background-color: @theme_bg_color; */ + /* border: 1px solid @surface1; */ + border-top: none; + border-bottom: none; font-size: 13px; + font-weight: 600; + border-radius: 0px; + margin: 0px; + padding: 0px; + } + .widget-volume > box { + background: @mantle; + /* background: alpha(currentColor, 0.05); */ + border-radius: 4px; + margin: 5px 10px 5px 10px; + min-height: 50px; + } + .widget-volume > box > label { + min-width: 50px; + padding: 0px; + } + .widget-volume > box > button { + min-width: 50px; + box-shadow: none; + padding: 0px; + } + .widget-volume > box > button:hover { + /* background: alpha(currentColor, 0.05); */ + background: @surface0; + } + .widget-volume > revealer > list { + background: @mantle; + /* background: alpha(currentColor, 0.05); */ + border-radius: 4px; + margin-top: 5px; + padding: 0px; + } + .widget-volume > revealer > list > row { + padding-left: 10px; + min-height: 40px; + background: transparent; + } + .widget-volume > revealer > list > row:hover { + background: transparent; + box-shadow: none; + border-radius: 4px; + } + .widget-backlight > scale { + background: @mantle; + /* background: alpha(currentColor, 0.05); */ + border-radius: 0px 4px 4px 0px; + margin: 5px 10px 5px 0px; + padding: 0px 10px 0px 0px; + min-height: 50px; + } + .widget-backlight > label { + background: @surface0; + /* background: alpha(currentColor, 0.05); */ + margin: 5px 0px 5px 10px; + border-radius: 4px 0px 0px 4px; + padding: 0px; + min-height: 50px; + min-width: 50px; + } + + /* DND widget */ + .widget-dnd { + margin: 8px; + font-size: 1.1rem; + padding-top: 20px; + } + + .widget-dnd>switch { + font-size: initial; + border-radius: 12px; + background: @surface0; + border: 1px solid @lavender; + box-shadow: none; + } + + .widget-dnd>switch:checked { + background: @surface2; + } + + .widget-dnd>switch slider { + background: @lavender; + border-radius: 12px; + } + + /* Toggles */ + .toggle:checked { + background: @surface1; + /* background: @theme_selected_bg_color; */ + } + /*.toggle:not(:checked) { + color: rgba(128, 128, 128, 0.5); + }*/ + .toggle:checked:hover { + background: @surface2; + /* background: alpha(@theme_selected_bg_color, 0.75); */ + } + + /* Sliders */ + scale { + padding: 0px; + margin: 0px 10px 0px 10px; + } + + scale trough { + border-radius: 4px; + background: @surface0; + /* background: alpha(currentColor, 0.1); */ + } + + scale highlight { + border-radius: 5px; + min-height: 10px; + margin-right: -5px; + } + + scale slider { + margin: -10px; + min-width: 10px; + min-height: 10px; + background: transparent; + box-shadow: none; + padding: 0px; + } + scale slider:hover { + } + + .right.overlay-indicator { + all: unset; + } + ''; + xdg.configFile."swaync/config.json".text = '' + { + "positionX": "right", + "positionY": "top", + "layer": "overlay", + "layer-shell": "true", + "cssPriority": "application", + "control-center-margin-top": 10, + "control-center-margin-bottom": 10, + "control-center-margin-right": 10, + "control-center-margin-left": 10, + "notification-icon-size": 64, + "notification-body-image-height": 128, + "notification-body-image-width": 200, + "timeout": 10, + "timeout-low": 5, + "timeout-critical": 0, + "fit-to-screen": true, + "control-center-width": 400, + "control-center-height": 650, + "notification-window-width": 350, + "keyboard-shortcuts": true, + "image-visibility": "when-available", + "transition-time": 200, + "hide-on-clear": false, + "hide-on-action": true, + "script-fail-notify": true, + "widgets": [ + "title", + "menubar#desktop", + "volume", + "backlight#mobile", + "mpris", + "dnd", + "notifications" + ], + "widget-config": { + "title": { + "text": "Notifications", + "clear-all-button": true, + "button-text": " Clear All " + }, + "menubar#desktop": { + "menu#powermode-buttons": { + "label": " σ°Œͺ ", + "position": "left", + "actions": [ + { + "label": "Performance", + "command": "powerprofilesctl set performance" + }, + { + "label": "Balanced", + "command": "powerprofilesctl set balanced" + }, + { + "label": "Power-saver", + "command": "powerprofilesctl set power-saver" + } + ] + }, + "menu#screenshot": { + "label": "  ", + "position": "left", + "actions": [ + { + "label": "σ°Ή‘ Whole screen", + "command": "grimblast --notify --cursor --freeze copy output" + }, + { + "label": "σ°©­ Window / Region", + "command": "grimblast --notify --cursor --freeze copy area" + } + ] + }, + "menu#record": { + "label": " σ°•§ ", + "position": "left", + "actions": [ + { + "label": " Record screen", + "command": "record screen & ; swaync-client -t" + }, + { + "label": " Record selection", + "command": "record area & ; swaync-client -t" + }, + { + "label": "ο“₯ Record GIF", + "command": "record gif & ; swaync-client -t" + }, + { + "label": "󰻃 Stop", + "command": "record stop" + } + ] + }, + "menu#power-buttons": { + "label": "  ", + "position": "left", + "actions": [ + { + "label": "ο€£ Lock", + "command": "swaylock" + }, + { + "label": " Reboot", + "command": "systemctl reboot" + }, + { + "label": " Shut down", + "command": "systemctl poweroff" + } + ] + } + }, + "backlight#mobile": { + "label": " σ°ƒ  ", + "device": "panel" + }, + "volume": { + "label": "", + "expand-button-label": "οƒ—", + "collapse-button-label": "οƒ˜", + "show-per-app": true, + "show-per-app-icon": true, + "show-per-app-label": false + }, + "dnd": { + "text": " Do Not Disturb" + }, + "mpris": { + "image-size": 85, + "image-radius": 5 + } + } + } + ''; + }; } diff --git a/modules/home/environment/userpkgs.nix b/modules/home/environment/userpkgs.nix index ea2df14..fc9943b 100644 --- a/modules/home/environment/userpkgs.nix +++ b/modules/home/environment/userpkgs.nix @@ -1,8 +1,4 @@ -{ - pkgs, - host, - ... -}: let +{lib, config, pkgs, host, ... }: let desktop = host == "oganesson"; extraFigletFonts = pkgs.fetchFromGitHub { owner = "xero"; @@ -32,35 +28,40 @@ ] else []; in { - home.packages = with pkgs; - [ - chafa - nemo - flavours - ags - sassc - gtk3 - sqlite - gimp - imagemagick - yt-dlp - vlc - lolcat - speedtest-cli - vesktop - qbittorrent - neovide - zsh - zsh-syntax-highlighting - zsh-history-substring-search - zsh-autosuggestions - audacity - rustup - libreoffice - gtrash - ripgrep - toilet-extrafonts - python3 - ] - ++ desktop_pkgs; + options = { + userPkgs.enable = lib.mkEnableOption "enables my default user packages"; + }; + config = lib.mkIf config.userPkgs.enable { + home.packages = with pkgs; + [ + chafa + nemo + flavours + ags + sassc + gtk3 + sqlite + gimp + imagemagick + yt-dlp + vlc + lolcat + speedtest-cli + vesktop + qbittorrent + neovide + zsh + zsh-syntax-highlighting + zsh-history-substring-search + zsh-autosuggestions + audacity + rustup + libreoffice + gtrash + ripgrep + toilet-extrafonts + python3 + ] + ++ desktop_pkgs; + }; } diff --git a/modules/home/environment/waybar.nix b/modules/home/environment/waybar.nix new file mode 100644 index 0000000..4f6e911 --- /dev/null +++ b/modules/home/environment/waybar.nix @@ -0,0 +1,518 @@ +{pkgs, scheme, host, lib, config, ...}: + +let + desktop = host == "oganesson"; + workspaces = { + format = "{icon}"; + format-icons = { + "1" = "δΈ€"; + "2" = "二"; + "3" = "δΈ‰"; + "4" = "ε››"; + "5" = "δΊ”"; + "6" = "ε…­"; + }; + persistent-workspaces = + if desktop + then { + "HDMI-A-1" = [1 2 3]; + "DP-1" = [4 5 6]; + } + else { + "eDP-1" = [1 2 3 4]; + }; + }; + bg = { + darkester = scheme.base00; + darkest = scheme.base01; + darker = scheme.base02; + dark = scheme.base03; + }; + fg = { + lightester = scheme.base07; + lightest = scheme.base06; + lighter = scheme.base05; + light = scheme.base04; + }; + colors = { + color0 = scheme.base08; + color1 = scheme.base09; + color2 = scheme.base0A; + color3 = scheme.base0B; + color4 = scheme.base0C; + color5 = scheme.base0D; + color6 = scheme.base0E; + color7 = scheme.base0F; + }; + monitors = + if desktop + then [ + "DP-1" + "HDMI-A-1" + ] + else [ + "eDP-1" + ]; +in { + options = { + waybarConfig.enable = lib.mkEnableOption "enables my waybar configuration"; + }; + config = { + programs.waybar = { + enable = true; + package = pkgs.waybar.overrideAttrs (oa: { + mesonFlags = (oa.mesonFlags or []) ++ ["-Dexperimental=true"]; + }); + settings = { + mainBar = { + layer = "bottom"; + output = builtins.elemAt monitors 0; + position = "top"; + name = "mainBar"; + margin-left = 8; + margin-top = 5; + margin-right = + if desktop + then 8 + else 5; + mode = "dock"; + "gtk-layer-shell" = true; + + modules-left = [ + "hyprland/workspaces" + "cava" + ]; + modules-center = [ + "hyprland/window" + ]; + modules-right = [ + "group/hardware" + "clock" + "group/powerbtns" + ]; + + "hyprland/workspaces" = workspaces; + + cava = { + framerate = 30; + autosens = 1; + sensitivity = 1; + bars = 14; + lower_cutoff_freq = 50; + higher_cutoff_freq = 10000; + method = "pulse"; + source = "auto"; + hide_on_silence = true; + stereo = true; + reverse = true; + bar_delimiter = 0; + monstercat = false; + waves = false; + noise_reduction = 0.77; + input_delay = 2; + format-icons = ["▁" "β–‚" "β–ƒ" "β–„" "β–…" "β–†" "β–‡" "β–ˆ"]; + }; + + "group/hardware" = { + orientation = "inherit"; + modules = [ + "custom/disk-icon" + "memory" + "cpu" + ]; + }; + + "custom/disk-icon" = { + exec = '' + df /dev/disk/by-partlabel/disk-main-home /dev/disk/by-partlabel/disk-main-nix | awk ' + function format(size) { + if (size >= 1024) return sprintf("%.1fTB", size / 1024) + else return sprintf("%.1fGB", size) + } + $6 == "/home" { + home_usage = $3 / 1024 / 1024 + home_total = $2 / 1024 / 1024 + home_percent = $5 + sub(/%/,"",home_percent) + } + $6 == "/nix" { + nix_usage = $3 / 1024 / 1024 + nix_total = $2 / 1024 / 1024 + nix_percent = $5 + } + END { + printf "{\"class\": \"disk-icon\", \"tooltip\": \"/home: %s / %s\\n/nix: %s / %s\", \"percentage\": \"%s\"}\n", + format(home_usage), format(home_total), format(nix_usage), format(nix_total), home_percent + }' | jq --unbuffered --compact-output + ''; + interval = 60; + return-type = "json"; + rotate = 270; + format = "{icon}"; + format-icons = [ + "󰝦" + "σ°ͺž" + "σ°ͺŸ" + "σ°ͺ " + "σ°ͺ‘" + "σ°ͺ’" + "σ°ͺ£" + "σ°ͺ€" + "σ°ͺ₯" + ]; + }; + + memory = { + interval = 1; + rotate = 270; + format = "{icon}"; + format-icons = [ + "󰝦" + "σ°ͺž" + "σ°ͺŸ" + "σ°ͺ " + "σ°ͺ‘" + "σ°ͺ’" + "σ°ͺ£" + "σ°ͺ€" + "σ°ͺ₯" + ]; + max-length = 10; + tooltip-format = "RAM: {used:0.1f} GB / {total:0.1f} GB"; + }; + + cpu = { + interval = 1; + rotate = 270; + format = "{icon}"; + format-icons = [ + "󰝦" + "σ°ͺž" + "σ°ͺŸ" + "σ°ͺ " + "σ°ͺ‘" + "σ°ͺ’" + "σ°ͺ£" + "σ°ͺ€" + "σ°ͺ₯" + ]; + tooltip-format = "CPU: {usage:0.1f}%"; + }; + + "custom/power" = { + on-click = "shutdown now"; + tooltip = false; + format = " "; + }; + + "custom/logout" = { + on-click = "hyprctl dispatch exit"; + tooltip = false; + format = "σ°—½ "; + }; + + "custom/reboot" = { + on-click = "reboot"; + tooltip = false; + format = "ξ«’ "; + }; + + "group/powerbtns" = { + orientation = "horizontal"; + drawer = { + transition-duration = 500; + children-class = "power-drawer"; + transition-left-to-right = false; + }; + modules = [ + "custom/power" + "custom/logout" + "custom/reboot" + ]; + }; + + clock = { + format = "{:%I:%M %p}"; + tooltip = false; + }; + }; + sideBar = { + layer = "bottom"; + output = + if desktop + then builtins.elemAt monitors 1 + else builtins.elemAt monitors 0; + position = "right"; + margin-top = 8; + margin-right = 5; + margin-bottom = 8; + name = "sideBar"; + mode = "dock"; + "gtk-layer-shell" = true; + + modules-left = + if desktop + then [ + "hyprland/workspaces" + ] + else [ + "group/brightness" + "battery" + ]; + modules-center = [ + ]; + modules-right = [ + "network" + "group/audio" + ]; + + "hyprland/workspaces" = workspaces; + + "pulseaudio/slider" = { + orientation = "vertical"; + }; + + "group/audio" = { + orientation = "vertical"; + modules = [ + "pulseaudio/slider" + "pulseaudio" + ]; + }; + + pulseaudio = { + format = "{icon}"; + format-muted = " "; + format-icons = { + default = [ + "ο€§ " + " " + ]; + }; + on-click = "pactl set-sink-mute @DEFAULT_SINK@ toggle"; + on-click-right = "hyprctl dispatch exec '[float;size 40% 55%] pavucontrol'"; + }; + + network = { + interval = 30; + format-wifi = "σ°–© "; + tooltip-format-wifi = "{essid} ({signalStrength}%)"; + format-ethernet = " "; + tooltip-format-ethernet = "{ifname}"; + format-disconnected = "σ°–ͺ "; + tooltip-format-disconnected = "Disconnected"; + on-click = "hyprctl dispatch exec '[float;size 40% 55%] kitty nmtui'"; + }; + + battery = { + bat = "BAT1"; + interval = 1; + tooltip-format = "{capacity}%\nTil empty: {time}"; + tooltip-format-charging = "{capacity}%\nTil full: {time}"; + format = "{icon}"; + format-icons = [ + "󰁺" + "󰁻" + "󰁽" + "󰁾" + "󰁿" + "σ°‚€" + "󰂁" + "σ°‚‚" + "󰁹" + ]; + format-charging = "σ°‚„"; + }; + + "group/brightness" = { + orientation = "vertical"; + modules = [ + "backlight" + "backlight/slider" + ]; + }; + backlight = { + format = "σ°ƒ "; + tooltip = "{percentage}%"; + }; + "backlight/slider" = { + min = 10; + max = 100; + orientation = "vertical"; + rotate = 180; + }; + }; + }; + style = '' + * { + border: none; + border-radius: 0; + font-size: 16px; + font-family: "JetBrains Mono Nerd Font"; + } + + window#waybar { + border-radius: 20px; + border: 3px solid #${colors.color7}; + background: rgba(46,52,64,0.15); + margin: 20px; + } + window#waybar.empty #window { + background: none; + } + + #workspaces { + margin: 3px; + background: #${bg.dark}; + border-radius: 20px; + } + + #workspaces button:hover { + border-radius: 20px; + } + + #workspaces button.active { + background: #${fg.lightester}; + border-radius: 20px; + color: #${bg.darkest}; + } + + #cava { + background: #${bg.dark}; + border-radius: 20px; + margin: 3px 3px 3px 6px; + padding: 0px 15px 0px 15px; + color: #${colors.color6}; + } + + #window { + margin: 3px; + background: #${bg.dark}; + border-radius: 20px; + padding: 0 15px 0 15px; + font-weight: bold; + } + + #hardware { + margin: 3px; + padding: 0 10px 0 10px; + background: #${bg.dark}; + border-radius: 20px; + } + + #custom-disk-icon, #cpu, #memory { + margin-bottom: 4px; + font-size: 20px; + font-weight: bold; + } + + #custom-disk-icon { + color: #${colors.color4}; + } + + #memory { + color: #${colors.color1}; + } + + #cpu { + color: #${colors.color3}; + } + + #clock { + font-weight: bold; + background: #${bg.dark}; + border-radius: 20px; + margin: 3px; + padding: 0 10px 0 10px; + font-size: 18px; + } + + #powerbtns { + background: #${bg.dark}; + border-radius: 20px; + margin: 3px; + padding: 0 5px 0 10px; + } + + #custom-power { + color: #${colors.color0}; + font-size: 18px; + } + + #custom-logout { + color: #${colors.color4}; + font-size: 18px; + } + + #custom-reboot { + color: #${colors.color2}; + font-size: 18px; + } + + #audio { + background: #${bg.dark}; + border-radius: 20px; + margin: 3px; + padding: 5px 0 10px 0; + } + + #pulseaudio { + color: #${colors.color4}; + font-size: 18px; + } + + #backlight-slider slider, + #pulseaudio-slider slider { + background: #${colors.color4}; + background-color: transparent; + box-shadow: none; + } + + #backlight-slider trough, + #pulseaudio-slider trough { + min-width: 9px; + min-height: 90px; + border-radius: 8px; + background: #343434; + } + + #backlight-slider highlight, + #pulseaudio-slider highlight { + border-radius: 8px; + background-color: #2096C0; + } + + #network { + color: #${colors.color3}; + font-size: 20px; + background: #${bg.dark}; + border-radius: 20px; + margin: 3px; + padding: 5px 0 5px 6px; + } + + #brightness { + background: #${bg.dark}; + border-radius: 20px; + margin: 3px; + padding: 10px 0px 5px 0; + } + + #backlight { + color: #${colors.color2}; + font-size: 18px; + padding: 0 4px 0 0; + } + + #battery { + color: #${colors.color4}; + font-size: 20px; + background: #${bg.dark}; + border-radius: 20px; + margin: 3px; + padding: 5px 0 5px 0px; + } + ''; + }; + }; +} diff --git a/modules/home/environment/waybar/default.nix b/modules/home/environment/waybar/default.nix deleted file mode 100644 index 9335a1e..0000000 --- a/modules/home/environment/waybar/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{...}: { - imports = - [(import ./waybar.nix)] - ++ [(import ./settings.nix)] - ++ [(import ./style.nix)]; -} diff --git a/modules/home/environment/waybar/settings.nix b/modules/home/environment/waybar/settings.nix deleted file mode 100644 index 1b7b719..0000000 --- a/modules/home/environment/waybar/settings.nix +++ /dev/null @@ -1,323 +0,0 @@ -{host, ...}: -# Grocery list: -# Clock -# CPU/MEM meters -# Home folder and Nix store storage tracking? -# Workspaces (per monitor would be nice) -# A separate bar for both monitors -# secondary monitor will have a vertical bar on the left side -# Can contain more info with two bars -let - desktop = host == "oganesson"; - workspaces = { - format = "{icon}"; - format-icons = { - "1" = "δΈ€"; - "2" = "二"; - "3" = "δΈ‰"; - "4" = "ε››"; - "5" = "δΊ”"; - "6" = "ε…­"; - }; - persistent-workspaces = - if desktop - then { - "HDMI-A-1" = [1 2 3]; - "DP-1" = [4 5 6]; - } - else { - "eDP-1" = [1 2 3 4]; - }; - }; - monitors = - if desktop - then [ - "DP-1" - "HDMI-A-1" - ] - else [ - "eDP-1" - ]; -in { - programs.waybar.settings.mainBar = { - layer = "bottom"; - output = builtins.elemAt monitors 0; - position = "top"; - name = "mainBar"; - margin-left = 8; - margin-top = 5; - margin-right = - if desktop - then 8 - else 5; - mode = "dock"; - "gtk-layer-shell" = true; - - modules-left = [ - "hyprland/workspaces" - "cava" - ]; - modules-center = [ - "hyprland/window" - ]; - modules-right = [ - "group/hardware" - "clock" - "group/powerbtns" - ]; - - "hyprland/workspaces" = workspaces; - - cava = { - framerate = 30; - autosens = 1; - sensitivity = 1; - bars = 14; - lower_cutoff_freq = 50; - higher_cutoff_freq = 10000; - method = "pulse"; - source = "auto"; - hide_on_silence = true; - stereo = true; - reverse = true; - bar_delimiter = 0; - monstercat = false; - waves = false; - noise_reduction = 0.77; - input_delay = 2; - format-icons = ["▁" "β–‚" "β–ƒ" "β–„" "β–…" "β–†" "β–‡" "β–ˆ"]; - }; - - "group/hardware" = { - orientation = "inherit"; - modules = [ - "custom/disk-icon" - "memory" - "cpu" - ]; - }; - - "custom/disk-icon" = { - exec = '' - df /dev/disk/by-partlabel/disk-main-home /dev/disk/by-partlabel/disk-main-nix | awk ' - function format(size) { - if (size >= 1024) return sprintf("%.1fTB", size / 1024) - else return sprintf("%.1fGB", size) - } - $6 == "/home" { - home_usage = $3 / 1024 / 1024 - home_total = $2 / 1024 / 1024 - home_percent = $5 - sub(/%/,"",home_percent) - } - $6 == "/nix" { - nix_usage = $3 / 1024 / 1024 - nix_total = $2 / 1024 / 1024 - nix_percent = $5 - } - END { - printf "{\"class\": \"disk-icon\", \"tooltip\": \"/home: %s / %s\\n/nix: %s / %s\", \"percentage\": \"%s\"}\n", - format(home_usage), format(home_total), format(nix_usage), format(nix_total), home_percent - }' | jq --unbuffered --compact-output - ''; - interval = 60; - return-type = "json"; - rotate = 270; - format = "{icon}"; - format-icons = [ - "󰝦" - "σ°ͺž" - "σ°ͺŸ" - "σ°ͺ " - "σ°ͺ‘" - "σ°ͺ’" - "σ°ͺ£" - "σ°ͺ€" - "σ°ͺ₯" - ]; - }; - - memory = { - interval = 1; - rotate = 270; - format = "{icon}"; - format-icons = [ - "󰝦" - "σ°ͺž" - "σ°ͺŸ" - "σ°ͺ " - "σ°ͺ‘" - "σ°ͺ’" - "σ°ͺ£" - "σ°ͺ€" - "σ°ͺ₯" - ]; - max-length = 10; - tooltip-format = "RAM: {used:0.1f} GB / {total:0.1f} GB"; - }; - - cpu = { - interval = 1; - rotate = 270; - format = "{icon}"; - format-icons = [ - "󰝦" - "σ°ͺž" - "σ°ͺŸ" - "σ°ͺ " - "σ°ͺ‘" - "σ°ͺ’" - "σ°ͺ£" - "σ°ͺ€" - "σ°ͺ₯" - ]; - tooltip-format = "CPU: {usage:0.1f}%"; - }; - - "custom/power" = { - on-click = "shutdown now"; - tooltip = false; - format = " "; - }; - - "custom/logout" = { - on-click = "hyprctl dispatch exit"; - tooltip = false; - format = "σ°—½ "; - }; - - "custom/reboot" = { - on-click = "reboot"; - tooltip = false; - format = "ξ«’ "; - }; - - "group/powerbtns" = { - orientation = "horizontal"; - drawer = { - transition-duration = 500; - children-class = "power-drawer"; - transition-left-to-right = false; - }; - modules = [ - "custom/power" - "custom/logout" - "custom/reboot" - ]; - }; - - clock = { - format = "{:%I:%M %p}"; - tooltip = false; - }; - }; - - # ------------------------------------------ - - programs.waybar.settings.sideBar = { - layer = "bottom"; - output = - if desktop - then builtins.elemAt monitors 1 - else builtins.elemAt monitors 0; - position = "right"; - margin-top = 8; - margin-right = 5; - margin-bottom = 8; - name = "sideBar"; - mode = "dock"; - "gtk-layer-shell" = true; - - modules-left = - if desktop - then [ - "hyprland/workspaces" - ] - else [ - "group/brightness" - "battery" - ]; - modules-center = [ - ]; - modules-right = [ - "network" - "group/audio" - ]; - - "hyprland/workspaces" = workspaces; - - "pulseaudio/slider" = { - orientation = "vertical"; - }; - - "group/audio" = { - orientation = "vertical"; - modules = [ - "pulseaudio/slider" - "pulseaudio" - ]; - }; - - pulseaudio = { - format = "{icon}"; - format-muted = " "; - format-icons = { - default = [ - "ο€§ " - " " - ]; - }; - on-click = "pactl set-sink-mute @DEFAULT_SINK@ toggle"; - on-click-right = "hyprctl dispatch exec '[float;size 40% 55%] pavucontrol'"; - }; - - network = { - interval = 30; - format-wifi = "σ°–© "; - tooltip-format-wifi = "{essid} ({signalStrength}%)"; - format-ethernet = " "; - tooltip-format-ethernet = "{ifname}"; - format-disconnected = "σ°–ͺ "; - tooltip-format-disconnected = "Disconnected"; - on-click = "hyprctl dispatch exec '[float;size 40% 55%] kitty nmtui'"; - }; - - battery = { - bat = "BAT1"; - interval = 1; - tooltip-format = "{capacity}%\nTil empty: {time}"; - tooltip-format-charging = "{capacity}%\nTil full: {time}"; - format = "{icon}"; - format-icons = [ - "󰁺" - "󰁻" - "󰁽" - "󰁾" - "󰁿" - "σ°‚€" - "󰂁" - "σ°‚‚" - "󰁹" - ]; - format-charging = "σ°‚„"; - }; - - "group/brightness" = { - orientation = "vertical"; - modules = [ - "backlight" - "backlight/slider" - ]; - }; - backlight = { - format = "σ°ƒ "; - tooltip = "{percentage}%"; - }; - "backlight/slider" = { - min = 10; - max = 100; - orientation = "vertical"; - rotate = 180; - }; - }; -} diff --git a/modules/home/environment/waybar/style.nix b/modules/home/environment/waybar/style.nix deleted file mode 100644 index b47afd5..0000000 --- a/modules/home/environment/waybar/style.nix +++ /dev/null @@ -1,195 +0,0 @@ -{scheme, ...}: let - bg = { - darkester = scheme.base00; - darkest = scheme.base01; - darker = scheme.base02; - dark = scheme.base03; - }; - fg = { - lightester = scheme.base07; - lightest = scheme.base06; - lighter = scheme.base05; - light = scheme.base04; - }; - colors = { - color0 = scheme.base08; - color1 = scheme.base09; - color2 = scheme.base0A; - color3 = scheme.base0B; - color4 = scheme.base0C; - color5 = scheme.base0D; - color6 = scheme.base0E; - color7 = scheme.base0F; - }; -in { - programs.waybar.style = '' - * { - border: none; - border-radius: 0; - font-size: 16px; - font-family: "JetBrains Mono Nerd Font"; - } - - window#waybar { - border-radius: 20px; - border: 3px solid #${colors.color7}; - background: rgba(46,52,64,0.15); - margin: 20px; - } - window#waybar.empty #window { - background: none; - } - - #workspaces { - margin: 3px; - background: #${bg.dark}; - border-radius: 20px; - } - - #workspaces button:hover { - border-radius: 20px; - } - - #workspaces button.active { - background: #${fg.lightester}; - border-radius: 20px; - color: #${bg.darkest}; - } - - #cava { - background: #${bg.dark}; - border-radius: 20px; - margin: 3px 3px 3px 6px; - padding: 0px 15px 0px 15px; - color: #${colors.color6}; - } - - #window { - margin: 3px; - background: #${bg.dark}; - border-radius: 20px; - padding: 0 15px 0 15px; - font-weight: bold; - } - - #hardware { - margin: 3px; - padding: 0 10px 0 10px; - background: #${bg.dark}; - border-radius: 20px; - } - - #custom-disk-icon, #cpu, #memory { - margin-bottom: 4px; - font-size: 20px; - font-weight: bold; - } - - #custom-disk-icon { - color: #${colors.color4}; - } - - #memory { - color: #${colors.color1}; - } - - #cpu { - color: #${colors.color3}; - } - - #clock { - font-weight: bold; - background: #${bg.dark}; - border-radius: 20px; - margin: 3px; - padding: 0 10px 0 10px; - font-size: 18px; - } - - #powerbtns { - background: #${bg.dark}; - border-radius: 20px; - margin: 3px; - padding: 0 5px 0 10px; - } - - #custom-power { - color: #${colors.color0}; - font-size: 18px; - } - - #custom-logout { - color: #${colors.color4}; - font-size: 18px; - } - - #custom-reboot { - color: #${colors.color2}; - font-size: 18px; - } - - #audio { - background: #${bg.dark}; - border-radius: 20px; - margin: 3px; - padding: 5px 0 10px 0; - } - - #pulseaudio { - color: #${colors.color4}; - font-size: 18px; - } - - #backlight-slider slider, - #pulseaudio-slider slider { - background: #${colors.color4}; - background-color: transparent; - box-shadow: none; - } - - #backlight-slider trough, - #pulseaudio-slider trough { - min-width: 9px; - min-height: 90px; - border-radius: 8px; - background: #343434; - } - - #backlight-slider highlight, - #pulseaudio-slider highlight { - border-radius: 8px; - background-color: #2096C0; - } - - #network { - color: #${colors.color3}; - font-size: 20px; - background: #${bg.dark}; - border-radius: 20px; - margin: 3px; - padding: 5px 0 5px 6px; - } - - #brightness { - background: #${bg.dark}; - border-radius: 20px; - margin: 3px; - padding: 10px 0px 5px 0; - } - - #backlight { - color: #${colors.color2}; - font-size: 18px; - padding: 0 4px 0 0; - } - - #battery { - color: #${colors.color4}; - font-size: 20px; - background: #${bg.dark}; - border-radius: 20px; - margin: 3px; - padding: 5px 0 5px 0px; - } - ''; -} diff --git a/modules/home/environment/waybar/waybar.nix b/modules/home/environment/waybar/waybar.nix deleted file mode 100644 index 7f0aea2..0000000 --- a/modules/home/environment/waybar/waybar.nix +++ /dev/null @@ -1,8 +0,0 @@ -{pkgs, ...}: { - programs.waybar = { - enable = true; - }; - programs.waybar.package = pkgs.waybar.overrideAttrs (oa: { - mesonFlags = (oa.mesonFlags or []) ++ ["-Dexperimental=true"]; - }); -} diff --git a/modules/home/environment/zshell.nix b/modules/home/environment/zshell.nix index 5b75403..949bbd0 100644 --- a/modules/home/environment/zshell.nix +++ b/modules/home/environment/zshell.nix @@ -1,187 +1,192 @@ -{self, ...}: { - programs.zoxide = { - enable = true; - enableZshIntegration = true; +{lib, config, self, ...}: { + options = { + zshConfig.enable = lib.mkEnableOption "enables my zsh configuration"; }; - programs.zsh = { - enable = true; - - sessionVariables = { - SOUNDS_ENABLED = "1"; - EDITOR = "nvim"; - SUDO_EDITOR = "nvim"; - VISUAL = "nvim"; - LANG = "en_US.UTF-8"; - BROWSER = "firefox"; - FLAKEPATH = "$HOME/.sysflake"; - }; - - oh-my-zsh = { + config = lib.mkIf config.zshConfig.enable { + programs.zoxide = { enable = true; - plugins = ["git" "fzf"]; + enableZshIntegration = true; }; - - enableCompletion = true; - history = { - path = "$HOME/.zsh_history"; - save = 10000; - size = 10000; - share = true; - }; - - autosuggestion = { + programs.zsh = { enable = true; - highlight = "fg=#4C566A,underline"; - }; - - shellAliases = { - grep = "grep --color=auto"; - yazi = "y"; - vi = "nvim"; - mv = "mv -v"; - cp = "cp -vr"; - gt = "gtrash"; - gtp = "playshellsound ${self}/assets/sound/rm.wav; gtrash put"; - sr = "source ~/.zshrc"; - ".." = "cd .."; - rm = "echo 'use \"gtp\" instead'"; - psg = "ps aux | grep -v grep | grep -i -e VSZ -e"; - mkdir = "mkdir -p"; - pk = "pkill -9 -f"; - svcu = "systemctl --user"; - svc = "sudo systemctl"; - viflake = "nvim flake.nix"; - - #git - "ga" = "playshellsound ${self}/assets/sound/gitadd.wav; git add"; - gcomm = "gitcommit_sfx"; - gpush = "gitpush_sfx"; - gpull = "gitpull_sfx"; - greb = "gitrebase_sfx"; - }; - initExtra = '' - playshellsound() { - if [ $# -ne 1 ]; then - echo "Usage: playshellsound " - return 1 - fi - if ! scheck; then - return 0 - else - runbg aplay "$1" - fi - } - gitrebase_sfx() { - if git rebase "$@"; then - playshellsound ${self}/assets/sound/gitrebase.wav - return 0 - else - playshellsound ${self}/assets/sound/error.wav - return 1 - fi - } - gitcommit_sfx() { - if git commit "$@"; then - playshellsound ${self}/assets/sound/gitcommit.wav - return 0 - else - playshellsound ${self}/assets/sound/error.wav - return 1 - fi - } - gitpush_sfx() { - if git push "$@"; then - playshellsound ${self}/assets/sound/gitpush.wav - return 0 - else - playshellsound ${self}/assets/sound/error.wav - return 1 - fi - } - gitpull_sfx() { - if git pull "$@"; then - playshellsound ${self}/assets/sound/gitpull.wav - return 0 - else - playshellsound ${self}/assets/sound/error.wav - return 1 - fi - } - unalias ls - ls() { - eza -1 --group-directories-first --icons "$@" - playshellsound ${self}/assets/sound/ls.wav - return 0 - } - - mkcd() { - mkdir -p "$1" && cd "$1" - } - - y() { - local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" - yazi "$@" --cwd-file="$tmp" - if cwd="$(command cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then - builtin cd -- "$cwd" - fi - rm -f -- "$tmp" - } - - cd() { - local prev_sounds_enabled="$SOUNDS_ENABLED" - SOUNDS_ENABLED=0 - eza -1 --group-directories-first --icons "$@" - SOUNDS_ENABLED=$prev_sounds_enabled - builtin cd "$@" - playshellsound /nix/store/7a9w7np3qrvmzxjbs7xj05qq2yccgfsj-source/assets/sound/cd.wav - return 0 - } - if [ ! -e $HOME/.zsh_history ]; then - touch $HOME/.zsh_history - chmod 600 $HOME/.zsh_history - fi - setopt APPEND_HISTORY # Append history to the history file (don't overwrite) - setopt INC_APPEND_HISTORY # Append to the history file incrementally - setopt SHARE_HISTORY # Share history between all zsh sessions sessionVariables = { - setopt CORRECT - setopt NO_NOMATCH - setopt LIST_PACKED - setopt ALWAYS_TO_END - setopt GLOB_COMPLETE - setopt COMPLETE_ALIASES - setopt COMPLETE_IN_WORD - setopt AUTO_CD - setopt AUTO_CONTINUE - setopt LONG_LIST_JOBS - setopt HIST_VERIFY - setopt SHARE_HISTORY - setopt HIST_IGNORE_SPACE - setopt HIST_SAVE_NO_DUPS - setopt HIST_IGNORE_ALL_DUPS - setopt EXTENDED_GLOB - setopt TRANSIENT_RPROMPT - setopt INTERACTIVE_COMMENTS + SOUNDS_ENABLED = "1"; + EDITOR = "nvim"; + SUDO_EDITOR = "nvim"; + VISUAL = "nvim"; + LANG = "en_US.UTF-8"; + BROWSER = "firefox"; + FLAKEPATH = "$HOME/.sysflake"; + }; - autoload -U compinit # completion - autoload -U terminfo # terminfo keys - zmodload -i zsh/complist # menu completion - autoload -U promptinit # prompt + oh-my-zsh = { + enable = true; + plugins = ["git" "fzf"]; + }; - autoload -U up-line-or-beginning-search; zle -N up-line-or-beginning-search - autoload -U down-line-or-beginning-search; zle -N down-line-or-beginning-search + enableCompletion = true; + history = { + path = "$HOME/.zsh_history"; + save = 10000; + size = 10000; + share = true; + }; - bindkey -v - type starship_zle-keymap-select >/dev/null || \ - { - eval "$(starship init zsh)" - } - unalias ls - clear - splash - playshellsound ${self}/assets/sound/sh-source.wav - [ ! -f $FLAKEPATH/flake.nix ] && echo "WARNING: flake.nix not found at \$FLAKEPATH. Shell aliases for editing config files won't work correctly!" && echo "Edit the FLAKEPATH session variable in zshell.nix to point to the path where you saved the system configuration flake." - ''; + autosuggestion = { + enable = true; + highlight = "fg=#4C566A,underline"; + }; + + shellAliases = { + grep = "grep --color=auto"; + yazi = "y"; + vi = "nvim"; + mv = "mv -v"; + cp = "cp -vr"; + gt = "gtrash"; + gtp = "playshellsound ${self}/assets/sound/rm.wav; gtrash put"; + sr = "source ~/.zshrc"; + ".." = "cd .."; + rm = "echo 'use \"gtp\" instead'"; + psg = "ps aux | grep -v grep | grep -i -e VSZ -e"; + mkdir = "mkdir -p"; + pk = "pkill -9 -f"; + svcu = "systemctl --user"; + svc = "sudo systemctl"; + viflake = "nvim flake.nix"; + + #git + "ga" = "playshellsound ${self}/assets/sound/gitadd.wav; git add"; + gcomm = "gitcommit_sfx"; + gpush = "gitpush_sfx"; + gpull = "gitpull_sfx"; + greb = "gitrebase_sfx"; + }; + initExtra = '' + playshellsound() { + if [ $# -ne 1 ]; then + echo "Usage: playshellsound " + return 1 + fi + if ! scheck; then + return 0 + else + runbg aplay "$1" + fi + } + gitrebase_sfx() { + if git rebase "$@"; then + playshellsound ${self}/assets/sound/gitrebase.wav + return 0 + else + playshellsound ${self}/assets/sound/error.wav + return 1 + fi + } + gitcommit_sfx() { + if git commit "$@"; then + playshellsound ${self}/assets/sound/gitcommit.wav + return 0 + else + playshellsound ${self}/assets/sound/error.wav + return 1 + fi + } + gitpush_sfx() { + if git push "$@"; then + playshellsound ${self}/assets/sound/gitpush.wav + return 0 + else + playshellsound ${self}/assets/sound/error.wav + return 1 + fi + } + gitpull_sfx() { + if git pull "$@"; then + playshellsound ${self}/assets/sound/gitpull.wav + return 0 + else + playshellsound ${self}/assets/sound/error.wav + return 1 + fi + } + unalias ls + ls() { + eza -1 --group-directories-first --icons "$@" + playshellsound ${self}/assets/sound/ls.wav + return 0 + } + + mkcd() { + mkdir -p "$1" && cd "$1" + } + + y() { + local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" + yazi "$@" --cwd-file="$tmp" + if cwd="$(command cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then + builtin cd -- "$cwd" + fi + rm -f -- "$tmp" + } + + cd() { + local prev_sounds_enabled="$SOUNDS_ENABLED" + SOUNDS_ENABLED=0 + eza -1 --group-directories-first --icons "$@" + SOUNDS_ENABLED=$prev_sounds_enabled + builtin cd "$@" + playshellsound /nix/store/7a9w7np3qrvmzxjbs7xj05qq2yccgfsj-source/assets/sound/cd.wav + return 0 + } + if [ ! -e $HOME/.zsh_history ]; then + touch $HOME/.zsh_history + chmod 600 $HOME/.zsh_history + fi + setopt APPEND_HISTORY # Append history to the history file (don't overwrite) + setopt INC_APPEND_HISTORY # Append to the history file incrementally + setopt SHARE_HISTORY # Share history between all zsh sessions + + sessionVariables = { + setopt CORRECT + setopt NO_NOMATCH + setopt LIST_PACKED + setopt ALWAYS_TO_END + setopt GLOB_COMPLETE + setopt COMPLETE_ALIASES + setopt COMPLETE_IN_WORD + setopt AUTO_CD + setopt AUTO_CONTINUE + setopt LONG_LIST_JOBS + setopt HIST_VERIFY + setopt SHARE_HISTORY + setopt HIST_IGNORE_SPACE + setopt HIST_SAVE_NO_DUPS + setopt HIST_IGNORE_ALL_DUPS + setopt EXTENDED_GLOB + setopt TRANSIENT_RPROMPT + setopt INTERACTIVE_COMMENTS + + autoload -U compinit # completion + autoload -U terminfo # terminfo keys + zmodload -i zsh/complist # menu completion + autoload -U promptinit # prompt + + autoload -U up-line-or-beginning-search; zle -N up-line-or-beginning-search + autoload -U down-line-or-beginning-search; zle -N down-line-or-beginning-search + + bindkey -v + type starship_zle-keymap-select >/dev/null || \ + { + eval "$(starship init zsh)" + } + unalias ls + clear + splash + playshellsound ${self}/assets/sound/sh-source.wav + [ ! -f $FLAKEPATH/flake.nix ] && echo "WARNING: flake.nix not found at \$FLAKEPATH. Shell aliases for editing config files won't work correctly!" && echo "Edit the FLAKEPATH session variable in zshell.nix to point to the path where you saved the system configuration flake." + ''; + }; }; } diff --git a/modules/home/files.nix b/modules/home/files.nix index 1ad7540..56ca33b 100644 --- a/modules/home/files.nix +++ b/modules/home/files.nix @@ -1,109 +1,114 @@ -{self, ...}: { - home.file.".config/neofetch/config.conf".text = '' - username=$(whoami) - name_length=''${#username} - total_width=40 - side_length=$(( (total_width - name_length - 2) / 2 )) +{lib, config, self, ...}: { + options = { + homeFiles.enable = lib.mkEnableOption "enables declared custom files"; + }; + config = lib.mkIf config.homeFiles.enable { + home.file.".config/neofetch/config.conf".text = '' + username=$(whoami) + name_length=''${#username} + total_width=40 + side_length=$(( (total_width - name_length - 2) / 2 )) - top_line=$(printf "─%.0s" $(seq 1 $side_length)) - top_line="$top_line $username " - top_line+=$(printf "─%.0s" $(seq 1 $side_length)) + top_line=$(printf "─%.0s" $(seq 1 $side_length)) + top_line="$top_line $username " + top_line+=$(printf "─%.0s" $(seq 1 $side_length)) - if (( (total_width - name_length) % 2 != 0 )); then - top_line+="─" - fi + if (( (total_width - name_length) % 2 != 0 )); then + top_line+="─" + fi - print_info() { - prin "β”Œ$top_line┐" - info " ​ ​ οŒ“ " distro - info " ​ ​ ξœ’ " kernel - info " ​ ​ ο’ˆ " wm - info " ​ ​ ο’‰ " shell - info " ​ ​ ξž• " term - info " ​ ​ ο€± " term_font - info " ​ ​ 󰏗 " packages - prin "β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜" - info cols - prin "\n \n \n \n \n ''${cl3}ο„‘ \n \n ''${cl5}ο„‘ \n \n ''${cl2}ο„‘ \n \n ''${cl6}ο„‘ \n \n ''${cl4}ο„‘ \n \n ''${cl1}ο„‘ \n \n ''${cl7}ο„‘ \n \n ''${cl0}ο„‘" - } + print_info() { + prin "β”Œ$top_line┐" + info " ​ ​ οŒ“ " distro + info " ​ ​ ξœ’ " kernel + info " ​ ​ ο’ˆ " wm + info " ​ ​ ο’‰ " shell + info " ​ ​ ξž• " term + info " ​ ​ ο€± " term_font + info " ​ ​ 󰏗 " packages + prin "β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜" + info cols + prin "\n \n \n \n \n ''${cl3}ο„‘ \n \n ''${cl5}ο„‘ \n \n ''${cl2}ο„‘ \n \n ''${cl6}ο„‘ \n \n ''${cl4}ο„‘ \n \n ''${cl1}ο„‘ \n \n ''${cl7}ο„‘ \n \n ''${cl0}ο„‘" + } - kernel_shorthand="on" - distro_shorthand="on" - os_arch="off" - uptime_shorthand="on" - memory_percent="on" - package_managers="off" - shell_path="off" - shell_version="on" - speed_type="bios_limit" - speed_shorthand="on" - gtk_shorthand="on" - gtk2="on" - gtk3="on" - colors=(distro) - bold="on" - underline_enabled="on" - underline_char="-" - separator=" ο…Έ " - color_blocks="off" - block_range=(0 15) # Colorblocks + kernel_shorthand="on" + distro_shorthand="on" + os_arch="off" + uptime_shorthand="on" + memory_percent="on" + package_managers="off" + shell_path="off" + shell_version="on" + speed_type="bios_limit" + speed_shorthand="on" + gtk_shorthand="on" + gtk2="on" + gtk3="on" + colors=(distro) + bold="on" + underline_enabled="on" + underline_char="-" + separator=" ο…Έ " + color_blocks="off" + block_range=(0 15) # Colorblocks - # Colors for custom colorblocks - magenta="\033[1;35m" - green="\033[1;32m" - white="\033[1;37m" - blue="\033[1;34m" - red="\033[1;31m" - black="\033[1;40;30m" - yellow="\033[1;33m" - cyan="\033[1;36m" - reset="\033[0m" - bgyellow="\033[1;43;33m" - bgwhite="\033[1;47;37m" - cl0="''${reset}" - cl1="''${magenta}" - cl2="''${green}" - cl3="''${white}" - cl4="''${blue}" - cl5="''${red}" - cl6="''${yellow}" - cl7="''${cyan}" - cl8="''${black}" - cl9="''${bgyellow}" - cl10="''${bgwhite}" + # Colors for custom colorblocks + magenta="\033[1;35m" + green="\033[1;32m" + white="\033[1;37m" + blue="\033[1;34m" + red="\033[1;31m" + black="\033[1;40;30m" + yellow="\033[1;33m" + cyan="\033[1;36m" + reset="\033[0m" + bgyellow="\033[1;43;33m" + bgwhite="\033[1;47;37m" + cl0="''${reset}" + cl1="''${magenta}" + cl2="''${green}" + cl3="''${white}" + cl4="''${blue}" + cl5="''${red}" + cl6="''${yellow}" + cl7="''${cyan}" + cl8="''${black}" + cl9="''${bgyellow}" + cl10="''${bgwhite}" - block_width=4 - block_height=1 + block_width=4 + block_height=1 - bar_char_elapsed="-" - bar_char_total="=" - bar_border="on" - bar_length=15 - bar_color_elapsed="distro" - bar_color_total="distro" + bar_char_elapsed="-" + bar_char_total="=" + bar_border="on" + bar_length=15 + bar_color_elapsed="distro" + bar_color_total="distro" - cpu_display="on" - memory_display="on" - battery_display="on" - disk_display="on" + cpu_display="on" + memory_display="on" + battery_display="on" + disk_display="on" - image_backend="kitty" - image_source="${self}/assets/images/nixos-logo.png" - image_size="250px" - image_loop="off" + image_backend="kitty" + image_source="${self}/assets/images/nixos-logo.png" + image_size="250px" + image_loop="off" - aascii_distro="auto" - ascii_colors=(distro) - ascii_bold="on" + aascii_distro="auto" + ascii_colors=(distro) + ascii_bold="on" - crop_mode="normal" - crop_offset="center" + crop_mode="normal" + crop_offset="center" - gap=2 + gap=2 - yoffset=0 - xoffset=0 + yoffset=0 + xoffset=0 - stdout="off" - ''; + stdout="off" + ''; + }; } diff --git a/modules/home/hm-modules.nix b/modules/home/hm-modules.nix new file mode 100644 index 0000000..5ee024a --- /dev/null +++ b/modules/home/hm-modules.nix @@ -0,0 +1,58 @@ +{ + inputs, + nixpkgs, + config, + self, + username, + host, + lib, + ... +}: { + imports = [ + ./programs + ./environment + ./scripts + ./files.nix + ]; + + hyprlandConfig.enable = lib.mkDefault true; + autojumpOpts.enable = lib.mkDefault true; + stylixHomeOpts.enable = lib.mkDefault true; + waybarConfig.enable = lib.mkDefault true; + gtkOpts.enable = lib.mkDefault true; + spicetifyOpts.enable = lib.mkDefault true; + starshipConfig.enable = lib.mkDefault true; + btopConfig.enable = lib.mkDefault true; + swayncConfig.enable = lib.mkDefault true; + userPkgs.enable = lib.mkDefault true; + cavaOpts.enable = lib.mkDefault true; + ezaOpts.enable = lib.mkDefault true; + firefoxConfig.enable = lib.mkDefault true; + fuzzelConfig.enable = lib.mkDefault true; + fzfOpts.enable = lib.mkDefault true; + gitConfig.enable = lib.mkDefault true; + kittyConfig.enable = lib.mkDefault true; + yaziConfig.enable = lib.mkDefault true; + zshConfig.enable = lib.mkDefault true; + homeFiles.enable = lib.mkDefault true; + passConfig.enable = lib.mkDefault true; + batOpts.enable = lib.mkDefault true; + + pagedmovScripts.enable = lib.mkDefault true; + pagedmovScripts.commandScripts.invoke.enable = lib.mkDefault true; + pagedmovScripts.commandScripts.runbg.enable = lib.mkDefault true; + pagedmovScripts.commandScripts.splash.enable = lib.mkDefault true; + pagedmovScripts.commandScripts.toolbelt.enable = lib.mkDefault true; + pagedmovScripts.commandScripts.viconf.enable = lib.mkDefault true; + + pagedmovScripts.hyprlandControls.chpaper.enable = lib.mkDefault true; + pagedmovScripts.hyprlandControls.scheck.enable = lib.mkDefault true; + pagedmovScripts.hyprlandControls.chscheme.enable = lib.mkDefault true; + pagedmovScripts.hyprlandControls.keyring.enable = lib.mkDefault true; + pagedmovScripts.hyprlandControls.moveonscreen.enable = lib.mkDefault true; + pagedmovScripts.hyprlandControls.switchmon.enable = lib.mkDefault true; + + pagedmovScripts.nixShortcuts.garbage-collect.enable = lib.mkDefault true; + pagedmovScripts.nixShortcuts.nsp.enable = lib.mkDefault true; + pagedmovScripts.nixShortcuts.rebuild.enable = lib.mkDefault true; +} diff --git a/modules/home/home-manager.nix b/modules/home/home-manager.nix index 57ba567..28f2f71 100644 --- a/modules/home/home-manager.nix +++ b/modules/home/home-manager.nix @@ -27,10 +27,8 @@ in { } else {}; programs.home-manager.enable = true; imports = [ - ./programs - ./environment - ./scripts - ./files.nix + inputs.spicetify-nix.homeManagerModules.default + ./hm-modules.nix ]; home = { username = "${username}"; diff --git a/modules/home/programs/autojump.nix b/modules/home/programs/autojump.nix index 543fdcc..c50cfe7 100644 --- a/modules/home/programs/autojump.nix +++ b/modules/home/programs/autojump.nix @@ -1,6 +1,11 @@ -{...}: { - programs.autojump = { - enable = true; - enableZshIntegration = true; +{lib, config, ...}: { + options = { + autojumpOpts.enable = lib.mkEnableOption "enables my autojump options"; + }; + config = lib.mkIf config.autojumpOpts.enable { + programs.autojump = { + enable = true; + enableZshIntegration = true; + }; }; } diff --git a/modules/home/programs/bat.nix b/modules/home/programs/bat.nix index c080434..ba5637c 100644 --- a/modules/home/programs/bat.nix +++ b/modules/home/programs/bat.nix @@ -1,8 +1,13 @@ -{inputs, ...}: { - programs.bat = { - enable = true; - config = { - pager = "less -FR"; +{lib, config, inputs, ...}: { + options = { + batOpts.enable = lib.mkEnableOption "enables my bat options"; + }; + config = lib.mkIf config.batOpts.enable { + programs.bat = { + enable = true; + config = { + pager = "less -FR"; + }; }; }; } diff --git a/modules/home/programs/btop.nix b/modules/home/programs/btop.nix index 8bb94ff..62559d2 100644 --- a/modules/home/programs/btop.nix +++ b/modules/home/programs/btop.nix @@ -1,19 +1,24 @@ -{pkgs, ...}: { - programs.btop = { - enable = true; - - settings = { - update_ms = 500; - vim_keys = true; - color_theme = "nord"; - theme_background = true; - temp_scale = "fahrenheit"; - graph_symbol = "block"; - disks_filter = "exclude=/boot /"; - show_swap = false; - swap_disk = false; - }; +{lib, config, pkgs, ...}: { + options = { + btopConfig.enable = lib.mkEnableOption "enables my btop config"; }; + config = lib.mkIf config.btopConfig.enable { + programs.btop = { + enable = true; - home.packages = with pkgs; [nvtopPackages.intel]; + settings = { + update_ms = 500; + vim_keys = true; + color_theme = "nord"; + theme_background = true; + temp_scale = "fahrenheit"; + graph_symbol = "block"; + disks_filter = "exclude=/boot /"; + show_swap = false; + swap_disk = false; + }; + }; + + home.packages = with pkgs; [nvtopPackages.intel]; + }; } diff --git a/modules/home/programs/cava.nix b/modules/home/programs/cava.nix index 571dabb..596e997 100644 --- a/modules/home/programs/cava.nix +++ b/modules/home/programs/cava.nix @@ -1,9 +1,10 @@ -{ - inputs, - pkgs, - ... -}: { - programs.cava = { - enable = true; +{lib, config, inputs, pkgs, ... }: { + options = { + cavaOpts.enable = lib.mkEnableOption "enables my cava settings"; + }; + config = lib.mkIf config.cavaOpts.enable { + programs.cava = { + enable = true; + }; }; } diff --git a/modules/home/programs/eza.nix b/modules/home/programs/eza.nix index 2e4545d..2a5f480 100644 --- a/modules/home/programs/eza.nix +++ b/modules/home/programs/eza.nix @@ -1,9 +1,14 @@ -{...}: { - programs.eza = { - enable = true; - enableZshIntegration = false; - extraOptions = ["-1" "-h" "--group-directories-first"]; - icons = "auto"; - git = true; +{lib, config, ...}: { + options = { + ezaOpts.enable = lib.mkEnableOption "enables my eza options"; + }; + config = lib.mkIf config.ezaOpts.enable { + programs.eza = { + enable = true; + enableZshIntegration = false; + extraOptions = ["-1" "-h" "--group-directories-first"]; + icons = "auto"; + git = true; + }; }; } diff --git a/modules/home/programs/firefox.nix b/modules/home/programs/firefox.nix index 206feee..495615b 100644 --- a/modules/home/programs/firefox.nix +++ b/modules/home/programs/firefox.nix @@ -1,127 +1,127 @@ -{ - nur, - username, - self, - ... -}: { - programs.firefox = { - enable = true; - policies = { - DisableTelemetry = true; - DisableFirefoxStudies = true; - EnableTrackingProtection = { - Value = true; - Locked = true; - Cryptomining = true; - Fingerprinting = true; +{lib, config, nur, username, self, ... }: { + options = { + firefoxConfig.enable = lib.mkEnableOption "enables my firefox configuration"; + }; + config = lib.mkIf config.firefoxConfig.enable { + programs.firefox = { + enable = true; + policies = { + DisableTelemetry = true; + DisableFirefoxStudies = true; + EnableTrackingProtection = { + Value = true; + Locked = true; + Cryptomining = true; + Fingerprinting = true; + }; + DisablePocket = true; + DisableFirefoxAccounts = true; + DisableAccounts = true; + DisableFirefoxScreenshots = true; + OverrideFirstRunPage = ""; + OverridePostUpdatePage = ""; + DontCheckDefaultBrowser = true; + DisplayBookmarksToolbar = "always"; # alternatives: "always" or "newtab" + DisplayMenuBar = "default-off"; # alternatives: "always", "never" or "default-on" + SearchBar = "unified"; # alternative: "separate" isDefault = true; + }; + profiles.${username} = { + name = "${username}"; + bookmarks = [ + { + name = "Nix Sites"; + toolbar = true; + bookmarks = [ + { + name = "NixOS Wiki"; + url = "https://nixos.wiki/wiki/Main_Page"; + } + { + name = "Nixpkgs Reference Manual"; + url = "https://nixos.org/manual/nixpkgs/stable/"; + } + { + name = "NixOS Manual"; + url = "https://nixos.org/manual/nixos/stable/"; + } + { + name = "NixOS Options"; + url = "https://search.nixos.org/options"; + } + { + name = "Home Manager Options"; + url = "https://home-manager-options.extranix.com/"; + } + { + name = "Nixpkgs Package Search"; + url = "https://search.nixos.org/packages"; + } + { + name = "Noogle - Nixpkgs Function Docs"; + url = "https://noogle.dev"; + } + { + name = "Nixvim Docs"; + url = "https://nix-community.github.io/nixvim/"; + } + ]; + } + { + name = "Rust Manual"; + url = "https://doc.rust-lang.org/book/ch01-03-hello-cargo.html"; + } + { + name = "ChatGPT"; + url = "https://chatgpt.com/"; + } + { + name = "DataAnnotation"; + url = "https://app.dataannotation.tech/users/sign_in"; + } + { + name = "Nerd Fonts Cheatsheet"; + url = "https://www.nerdfonts.com/cheat-sheet"; + } + ]; + extensions = with nur.repos.rycee.firefox-addons; [ + darkreader + adnauseam + cookie-autodelete + disconnect + firefox-color + vimium + firenvim + privacy-badger + new-tab-override + ]; + extraConfig = '' + "browser.startup.homepage" = "${self}/glasshouse-desktop/home/firefox/homepage.html"; + "browser.active_color" = "#EE0000"; + "browser.active_color.dark" = "#FF6666"; + "browser.anchor_color" = "#0000EE"; + "browser.anchor_color.dark" = "#8C8CFF"; + "browser.display.background_color" = "#FFFFFF"; + "browser.display.background_color.dark" = "#1C1B22"; + "browser.display.document_color_use" = "1"; + "browser.display.foreground_color" = "#000000"; + "browser.display.foreground_color.dark" = "#FBFBFE"; + "browser.display.suppress_canvas_background_image_on_forced_colors" = "true"; + "browser.display.use_system_colors" = "false"; + "browser.newtabpage.activity-stream.newNewtabExperience.colors" = "#0090ED,#FF4F5F,#2AC3A2,#FF7139,#A172FF,#FFA437,#FF2A8A"; + "browser.theme.colorway-closet" = "true"; + "browser.theme.colorway-migration" = "true"; + "browser.theme.windows.accent-color-in-tabs.enabled" = "false"; + "browser.visited_color" = "#551A8B"; + "browser.visited_color.dark" = "#FFADFF"; + "browser.newtabpage.pinned" = [{ + title = "Homepage"; + url = "${self}/glasshouse-desktop/home/firefox/homepage.html"; + }]; + "devtools.defaultColorUnit" = "authored"; + "editor.background_color" = "#FFFFFF"; + "editor.use_custom_colors" = "false"; + ''; }; - DisablePocket = true; - DisableFirefoxAccounts = true; - DisableAccounts = true; - DisableFirefoxScreenshots = true; - OverrideFirstRunPage = ""; - OverridePostUpdatePage = ""; - DontCheckDefaultBrowser = true; - DisplayBookmarksToolbar = "always"; # alternatives: "always" or "newtab" - DisplayMenuBar = "default-off"; # alternatives: "always", "never" or "default-on" - SearchBar = "unified"; # alternative: "separate" isDefault = true; - }; - profiles.${username} = { - name = "${username}"; - bookmarks = [ - { - name = "Nix Sites"; - toolbar = true; - bookmarks = [ - { - name = "NixOS Wiki"; - url = "https://nixos.wiki/wiki/Main_Page"; - } - { - name = "Nixpkgs Reference Manual"; - url = "https://nixos.org/manual/nixpkgs/stable/"; - } - { - name = "NixOS Manual"; - url = "https://nixos.org/manual/nixos/stable/"; - } - { - name = "NixOS Options"; - url = "https://search.nixos.org/options"; - } - { - name = "Home Manager Options"; - url = "https://home-manager-options.extranix.com/"; - } - { - name = "Nixpkgs Package Search"; - url = "https://search.nixos.org/packages"; - } - { - name = "Noogle - Nixpkgs Function Docs"; - url = "https://noogle.dev"; - } - { - name = "Nixvim Docs"; - url = "https://nix-community.github.io/nixvim/"; - } - ]; - } - { - name = "Rust Manual"; - url = "https://doc.rust-lang.org/book/ch01-03-hello-cargo.html"; - } - { - name = "ChatGPT"; - url = "https://chatgpt.com/"; - } - { - name = "DataAnnotation"; - url = "https://app.dataannotation.tech/users/sign_in"; - } - { - name = "Nerd Fonts Cheatsheet"; - url = "https://www.nerdfonts.com/cheat-sheet"; - } - ]; - extensions = with nur.repos.rycee.firefox-addons; [ - darkreader - adnauseam - cookie-autodelete - disconnect - firefox-color - vimium - firenvim - privacy-badger - new-tab-override - ]; - extraConfig = '' - "browser.startup.homepage" = "${self}/glasshouse-desktop/home/firefox/homepage.html"; - "browser.active_color" = "#EE0000"; - "browser.active_color.dark" = "#FF6666"; - "browser.anchor_color" = "#0000EE"; - "browser.anchor_color.dark" = "#8C8CFF"; - "browser.display.background_color" = "#FFFFFF"; - "browser.display.background_color.dark" = "#1C1B22"; - "browser.display.document_color_use" = "1"; - "browser.display.foreground_color" = "#000000"; - "browser.display.foreground_color.dark" = "#FBFBFE"; - "browser.display.suppress_canvas_background_image_on_forced_colors" = "true"; - "browser.display.use_system_colors" = "false"; - "browser.newtabpage.activity-stream.newNewtabExperience.colors" = "#0090ED,#FF4F5F,#2AC3A2,#FF7139,#A172FF,#FFA437,#FF2A8A"; - "browser.theme.colorway-closet" = "true"; - "browser.theme.colorway-migration" = "true"; - "browser.theme.windows.accent-color-in-tabs.enabled" = "false"; - "browser.visited_color" = "#551A8B"; - "browser.visited_color.dark" = "#FFADFF"; - "browser.newtabpage.pinned" = [{ - title = "Homepage"; - url = "${self}/glasshouse-desktop/home/firefox/homepage.html"; - }]; - "devtools.defaultColorUnit" = "authored"; - "editor.background_color" = "#FFFFFF"; - "editor.use_custom_colors" = "false"; - ''; }; }; } diff --git a/modules/home/programs/fuzzel.nix b/modules/home/programs/fuzzel.nix index 5d6352c..dc8865d 100644 --- a/modules/home/programs/fuzzel.nix +++ b/modules/home/programs/fuzzel.nix @@ -1,23 +1,28 @@ -{lib, ...}: { - programs.fuzzel = { - enable = true; - settings = { - main = { - line-height = 25; - fields = "name,generic,comment,categories,filename,keywords"; - terminal = "kitty"; - prompt = "' ➜ '"; - layer = "top"; - lines = 10; - width = 35; - horizontal-pad = 25; - inner-pad = 5; +{config, lib, ...}: { + options = { + fuzzelConfig.enable = lib.mkEnableOption "enables my fuzzel configuration"; + }; + config = lib.mkIf config.fuzzelConfig.enable { + programs.fuzzel = { + enable = true; + settings = { + main = { + line-height = 25; + fields = "name,generic,comment,categories,filename,keywords"; + terminal = "kitty"; + prompt = "' ➜ '"; + layer = "top"; + lines = 10; + width = 35; + horizontal-pad = 25; + inner-pad = 5; + }; + border = { + radius = 15; + width = 3; + }; + colors.background = lib.mkForce "2e344080"; }; - border = { - radius = 15; - width = 3; - }; - colors.background = lib.mkForce "2e344080"; }; }; } diff --git a/modules/home/programs/fzf.nix b/modules/home/programs/fzf.nix index ae15f68..d32a9c0 100644 --- a/modules/home/programs/fzf.nix +++ b/modules/home/programs/fzf.nix @@ -1,6 +1,11 @@ -{...}: { - programs.fzf = { - enable = true; - enableZshIntegration = true; +{lib, config, ...}: { + options = { + fzfOpts.enable = lib.mkEnableOption "enables my fzf options"; + }; + config = lib.mkIf config.fzfOpts.enable { + programs.fzf = { + enable = true; + enableZshIntegration = true; + }; }; } diff --git a/modules/home/programs/git.nix b/modules/home/programs/git.nix index c740392..3f3a14f 100644 --- a/modules/home/programs/git.nix +++ b/modules/home/programs/git.nix @@ -1,7 +1,12 @@ -{username, ...}: { - programs.git = { - enable = true; - userEmail = "${username}@gmail.com"; - userName = "${username}"; +{lib, config, username, ...}: { + options = { + gitConfig.enable = lib.mkEnableOption "enables my git configuration"; + }; + config = lib.mkIf config.gitConfig.enable { + programs.git = { + enable = true; + userEmail = "${username}@gmail.com"; + userName = "${username}"; + }; }; } diff --git a/modules/home/programs/kitty.nix b/modules/home/programs/kitty.nix index 57c67b4..e162341 100644 --- a/modules/home/programs/kitty.nix +++ b/modules/home/programs/kitty.nix @@ -1,73 +1,74 @@ -{ - pkgs, - scheme, - ... -}: { - programs.kitty = { - enable = true; +{lib, config, pkgs, scheme, ... }: { + options = { + kittyConfig.enable = lib.mkEnableOption "enables my kitty configuration"; + }; + config = lib.mkIf config.kittyConfig.enable { + programs.kitty = { + enable = true; - settings = { - confirm_os_window_close = 0; - window_padding_width = 4; - scrollback_lines = 10000; - enable_audio_bell = false; - allow_remote_control = true; - mouse_hide_wait = 60; + settings = { + confirm_os_window_close = 0; + window_padding_width = 4; + scrollback_lines = 10000; + enable_audio_bell = false; + allow_remote_control = true; + mouse_hide_wait = 60; - ## Tabs - tab_title_template = "{index}"; - active_tab_font_style = "normal"; - inactive_tab_font_style = "normal"; - tab_bar_style = "powerline"; - tab_powerline_style = "round"; + ## Tabs + tab_title_template = "{index}"; + active_tab_font_style = "normal"; + inactive_tab_font_style = "normal"; + tab_bar_style = "powerline"; + tab_powerline_style = "round"; + }; + + keybindings = { + ## Tabs + "alt+1" = "goto_tab 1"; + "alt+2" = "goto_tab 2"; + "alt+3" = "goto_tab 3"; + "alt+4" = "goto_tab 4"; + + ## Unbind + "ctrl+shift+left" = "no_op"; + "ctrl+shift+right" = "no_op"; + }; + + extraConfig = '' + background #${scheme.base00} + foreground #${scheme.base05} + selection_background #${scheme.base05} + selection_foreground #${scheme.base00} + url_color #${scheme.base04} + cursor #${scheme.base05} + active_border_color #${scheme.base03} + inactive_border_color #${scheme.base01} + active_tab_background #${scheme.base00} + active_tab_foreground #${scheme.base05} + inactive_tab_background #${scheme.base01} + inactive_tab_foreground #${scheme.base04} + tab_bar_background #${scheme.base01} + + # normal + color0 #${scheme.base01} + color1 #${scheme.base08} + color2 #${scheme.base0B} + color3 #${scheme.base0A} + color4 #${scheme.base0D} + color5 #${scheme.base0E} + color6 #${scheme.base0C} + color7 #${scheme.base05} + + # bright + color8 #${scheme.base03} + color9 #${scheme.base09} + color10 #${scheme.base01} + color11 #${scheme.base02} + color12 #${scheme.base04} + color13 #${scheme.base06} + color14 #${scheme.base0F} + color15 #${scheme.base07} + ''; }; - - keybindings = { - ## Tabs - "alt+1" = "goto_tab 1"; - "alt+2" = "goto_tab 2"; - "alt+3" = "goto_tab 3"; - "alt+4" = "goto_tab 4"; - - ## Unbind - "ctrl+shift+left" = "no_op"; - "ctrl+shift+right" = "no_op"; - }; - - extraConfig = '' - background #${scheme.base00} - foreground #${scheme.base05} - selection_background #${scheme.base05} - selection_foreground #${scheme.base00} - url_color #${scheme.base04} - cursor #${scheme.base05} - active_border_color #${scheme.base03} - inactive_border_color #${scheme.base01} - active_tab_background #${scheme.base00} - active_tab_foreground #${scheme.base05} - inactive_tab_background #${scheme.base01} - inactive_tab_foreground #${scheme.base04} - tab_bar_background #${scheme.base01} - - # normal - color0 #${scheme.base01} - color1 #${scheme.base08} - color2 #${scheme.base0B} - color3 #${scheme.base0A} - color4 #${scheme.base0D} - color5 #${scheme.base0E} - color6 #${scheme.base0C} - color7 #${scheme.base05} - - # bright - color8 #${scheme.base03} - color9 #${scheme.base09} - color10 #${scheme.base01} - color11 #${scheme.base02} - color12 #${scheme.base04} - color13 #${scheme.base06} - color14 #${scheme.base0F} - color15 #${scheme.base07} - ''; }; } diff --git a/modules/home/programs/password-store.nix b/modules/home/programs/password-store.nix index 88a15d7..5bed03e 100644 --- a/modules/home/programs/password-store.nix +++ b/modules/home/programs/password-store.nix @@ -1,10 +1,15 @@ -{username, ...}: let +{lib, config, username, ...}: let home = "/home/${username}"; in { - programs.password-store = { - enable = true; - settings = { - PASSWORD_STORE_DIR = "${home}/.password-store"; + options = { + passConfig.enable = lib.mkEnableOption "enables my pass config"; + }; + config = lib.mkIf config.passConfig.enable { + programs.password-store = { + enable = true; + settings = { + PASSWORD_STORE_DIR = "${home}/.password-store"; + }; }; }; } diff --git a/modules/home/programs/yazi.nix b/modules/home/programs/yazi.nix index eba75bb..4fa3fba 100644 --- a/modules/home/programs/yazi.nix +++ b/modules/home/programs/yazi.nix @@ -1,6 +1,11 @@ -{...}: { - programs.yazi = { - enable = true; - enableZshIntegration = true; +{lib, config, ...}: { + options = { + yaziConfig.enable = lib.mkEnableOption "enables my yazi config"; + }; + config = lib.mkIf config.yaziConfig.enable { + programs.yazi = { + enable = true; + enableZshIntegration = true; + }; }; } diff --git a/modules/home/scripts/default.nix b/modules/home/scripts/default.nix index 39089fd..cc221f1 100644 --- a/modules/home/scripts/default.nix +++ b/modules/home/scripts/default.nix @@ -1,5 +1,7 @@ { host, + lib, + config, self, pkgs, ... @@ -16,10 +18,6 @@ self = self; pkgs = pkgs; }; - scheck = import ./commands/s_check.nix { - self = self; - pkgs = pkgs; - }; runbg = import ./commands/runbg.nix { self = self; pkgs = pkgs; @@ -32,6 +30,7 @@ self = self; pkgs = pkgs; }; + scheck = import ./wm-controls/s_check.nix { self = self; pkgs = pkgs;}; switchmon = import ./wm-controls/switchmon.nix { self = self; pkgs = pkgs; @@ -51,20 +50,56 @@ }; chpaper = import ./wm-controls/chpaper.nix {pkgs = pkgs;}; in { - home.packages = [ - chpaper - chscheme - keyring - garbage-collect - invoke - rebuild - nsp - runbg - scheck - splash - switchmon - moveonscreen - toolbelt - viconf - ]; + options = { + pagedmovScripts.enable = lib.mkEnableOption "enables pagedmov's scripts"; + + pagedmovScripts.commandScripts.invoke.enable = + lib.mkEnableOption "enables the invoke command"; + pagedmovScripts.commandScripts.runbg.enable = + lib.mkEnableOption "enables the runbg command - written by FrostPhoenix"; + pagedmovScripts.commandScripts.splash.enable = + lib.mkEnableOption "enables the splash screen when opening a terminal"; + pagedmovScripts.commandScripts.toolbelt.enable = + lib.mkEnableOption "enables the toolbelt command"; + pagedmovScripts.commandScripts.viconf.enable = + lib.mkEnableOption "enables the viconf command"; + + pagedmovScripts.hyprlandControls.chpaper.enable = + lib.mkEnableOption "enables the chpaper command"; + pagedmovScripts.hyprlandControls.scheck.enable = + lib.mkEnableOption "enables the chpaper command"; + pagedmovScripts.hyprlandControls.chscheme.enable = + lib.mkEnableOption "enables the chscheme command"; + pagedmovScripts.hyprlandControls.keyring.enable = + lib.mkEnableOption "enables the keyring command"; + pagedmovScripts.hyprlandControls.moveonscreen.enable = + lib.mkEnableOption "enables the moveonscreen command, makes sure that the edges of floating windows are always on screen"; + pagedmovScripts.hyprlandControls.switchmon.enable = + lib.mkEnableOption "moves your cursor to the center of your second monitor; currently only supports two monitors"; + + pagedmovScripts.nixShortcuts.garbage-collect.enable = + lib.mkEnableOption "enables the garbage-collect script, runs nixos garbage collection and empties the gtrash bin"; + pagedmovScripts.nixShortcuts.nsp.enable = + lib.mkEnableOption "enables nsp, essentially an alias for 'nix-shell -p'"; + pagedmovScripts.nixShortcuts.rebuild.enable = + lib.mkEnableOption "enables rebuild, an alias for 'sudo nixos-rebuild switch --flake $FLAKEPATH#$(hostname)'"; + }; + config = lib.mkIf config.pagedmovScripts.enable { + home.packages = lib.optionals config.pagedmovScripts.commandScripts.invoke.enable [ invoke ] + ++ lib.optionals config.pagedmovScripts.commandScripts.runbg.enable [ runbg ] + ++ lib.optionals config.pagedmovScripts.commandScripts.splash.enable [ splash ] + ++ lib.optionals config.pagedmovScripts.commandScripts.toolbelt.enable [ toolbelt ] + ++ lib.optionals config.pagedmovScripts.commandScripts.viconf.enable [ viconf ] + + ++ lib.optionals config.pagedmovScripts.hyprlandControls.chpaper.enable [ chpaper ] + ++ lib.optionals config.pagedmovScripts.hyprlandControls.chpaper.enable [ scheck ] + ++ lib.optionals config.pagedmovScripts.hyprlandControls.chscheme.enable [ chscheme ] + ++ lib.optionals config.pagedmovScripts.hyprlandControls.keyring.enable [ keyring ] + ++ lib.optionals config.pagedmovScripts.hyprlandControls.moveonscreen.enable [ moveonscreen ] + ++ lib.optionals config.pagedmovScripts.hyprlandControls.switchmon.enable [ switchmon ] + + ++ lib.optionals config.pagedmovScripts.nixShortcuts.garbage-collect.enable [ garbage-collect ] + ++ lib.optionals config.pagedmovScripts.nixShortcuts.nsp.enable [ nsp ] + ++ lib.optionals config.pagedmovScripts.nixShortcuts.rebuild.enable [ rebuild ]; + }; } diff --git a/modules/home/scripts/commands/s_check.nix b/modules/home/scripts/wm-controls/s_check.nix similarity index 100% rename from modules/home/scripts/commands/s_check.nix rename to modules/home/scripts/wm-controls/s_check.nix diff --git a/modules/sys/configuration.nix b/modules/sys/default.nix similarity index 100% rename from modules/sys/configuration.nix rename to modules/sys/default.nix diff --git a/modules/sys/environment/issue.nix b/modules/sys/environment/issue.nix index ffc781d..90e89f9 100644 --- a/modules/sys/environment/issue.nix +++ b/modules/sys/environment/issue.nix @@ -1,29 +1,34 @@ -{...}: { - environment.etc."issue".text = '' +{lib, config, ...}: { + options = { + issue.enable = lib.mkEnableOption "enables custom /etc/issue splash screen for the tty"; + }; + config = lib.mkIf config.issue.enable { + environment.etc."issue".text = '' - \e[38;5;27mβ–“β–“β–“β–“ \e[38;5;81mβ–’β–’β–’β–’ β–’β–’β–’β–’ - \e[38;5;27mβ–“β–“β–“β–“ \e[38;5;81mβ–’β–’β–’β–’ β–’β–’β–’β–’ \e[38;5;27m β–“β–“β–“ - \e[38;5;27mβ–“β–“β–“β–“ \e[38;5;81mβ–’β–’β–’β–’β–’β–’β–’β–’ \e[38;5;27m β–“β–“β–“ β–“β–“ β–“β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’β–’β–’β–’β–’β–’β–’ β–’β–’β–’β–’β–’β–’β–’β–’β–’ - \e[38;5;27mβ–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“\e[38;5;81mβ–’β–’β–’β–’β–’β–’ \e[38;5;27mβ–“β–“ \e[38;5;27m β–“β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“ \e[38;5;81m β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’ β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’ - \e[38;5;27mβ–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“\e[38;5;81mβ–’β–’β–’β–’ \e[38;5;27mβ–“β–“β–“ \e[38;5;27m β–“β–“β–“β–“β–“β–“ β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’β–’β–’ β–’β–’β–’β–’β–’ β–’β–’β–’β–’ β–’β–’β–’β–’β–’ - \e[38;5;81mβ–’β–’β–’β–’ \e[38;5;81mβ–’β–’β–’β–’ \e[38;5;27mβ–“β–“β–“β–“ \e[38;5;27m β–“β–“β–“β–“β–“β–“β–“ β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’β–’ β–’β–’β–’β–’ β–’β–’β–’β–’ - \e[38;5;81mβ–’β–’β–’β–’ \e[38;5;81mβ–’β–’β–’β–’\e[38;5;27mβ–“β–“β–“β–“ \e[38;5;27m β–“β–“β–“β–“β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“ β–“β–“β–“ \e[38;5;81m β–’β–’β–’ β–’β–’β–’ β–’β–’β–’β–’ - \e[38;5;81mβ–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’ \e[38;5;81mβ–’β–’\e[38;5;27mβ–“β–“β–“β–“ \e[38;5;27m β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’ β–’β–’β–’ β–’β–’β–’β–’β–’ - \e[38;5;81m β–’β–’β–’β–’β–’β–’β–’β–’β–’\e[38;5;27m \e[38;5;27mβ–“β–“β–“β–“β–“β–“β–“β–“β–“ \e[38;5;27m β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’ β–’β–’β–’ β–’β–’β–’β–’β–’β–’β–’β–’β–’ - \e[38;5;81mβ–’β–’β–’β–’\e[38;5;27mβ–“β–“ \e[38;5;27mβ–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“ \e[38;5;27m β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“ β–“β–“β–“β–“β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’ β–’β–’β–’ β–’β–’β–’β–’β–’β–’β–’β–’β–’ - \e[38;5;81mβ–’β–’β–’β–’\e[38;5;27mβ–“β–“β–“β–“ \e[38;5;27mβ–“β–“β–“β–“ \e[38;5;27m β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“ β–“β–“β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’ β–’β–’β–’ β–’β–’β–’β–’β–’ - \e[38;5;81mβ–’β–’β–’β–’ \e[38;5;27mβ–“β–“β–“β–“ \e[38;5;27mβ–“β–“β–“β–“ \e[38;5;27m β–“β–“β–“β–“ β–“β–“β–“β–“β–“β–“β–“β–“ β–“β–“β–“ β–“β–“β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’ β–’β–’β–’ β–’β–’β–’β–’ - \e[38;5;81mβ–’β–’β–’ \e[38;5;27mβ–“β–“β–“β–“\e[38;5;81mβ–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’ \e[38;5;27m β–“β–“β–“β–“ β–“β–“β–“β–“β–“β–“β–“ β–“β–“β–“ β–“β–“β–“β–“β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’β–’ β–’β–’β–’β–’ β–’β–’β–’β–’ - \e[38;5;81mβ–’β–’ \e[38;5;27mβ–“β–“β–“β–“β–“β–“\e[38;5;81mβ–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’ \e[38;5;27m β–“β–“β–“β–“ β–“β–“β–“β–“β–“β–“ β–“β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’β–’β–’ β–’β–’β–’β–’β–’ β–’β–’β–’β–’β–’ β–’β–’β–’β–’β–’ - \e[38;5;27mβ–“β–“β–“β–“β–“β–“β–“β–“ \e[38;5;81mβ–’β–’β–’β–’ \e[38;5;27m β–“β–“β–“β–“ β–“β–“β–“β–“β–“ β–“β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’ β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’ - \e[38;5;27mβ–“β–“β–“β–“ β–“β–“β–“β–“ \e[38;5;81mβ–’β–’β–’β–’ \e[38;5;27m β–“β–“ β–“β–“β–“ β–“β–“β–“ β–“β–“β–“ β–“β–“β–“ \e[38;5;81m β–’β–’β–’β–’β–’β–’β–’β–’β–’ β–’β–’β–’β–’β–’β–’β–’β–’β–’ - \e[38;5;27mβ–“β–“β–“β–“ β–“β–“β–“β–“ \e[38;5;81mβ–’β–’β–’β–’ + \e[38;5;27mβ–“β–“β–“β–“ \e[38;5;81mβ–’β–’β–’β–’ β–’β–’β–’β–’ + \e[38;5;27mβ–“β–“β–“β–“ \e[38;5;81mβ–’β–’β–’β–’ β–’β–’β–’β–’ \e[38;5;27m β–“β–“β–“ + \e[38;5;27mβ–“β–“β–“β–“ \e[38;5;81mβ–’β–’β–’β–’β–’β–’β–’β–’ \e[38;5;27m β–“β–“β–“ β–“β–“ β–“β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’β–’β–’β–’β–’β–’β–’ β–’β–’β–’β–’β–’β–’β–’β–’β–’ + \e[38;5;27mβ–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“\e[38;5;81mβ–’β–’β–’β–’β–’β–’ \e[38;5;27mβ–“β–“ \e[38;5;27m β–“β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“ \e[38;5;81m β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’ β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’ + \e[38;5;27mβ–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“\e[38;5;81mβ–’β–’β–’β–’ \e[38;5;27mβ–“β–“β–“ \e[38;5;27m β–“β–“β–“β–“β–“β–“ β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’β–’β–’ β–’β–’β–’β–’β–’ β–’β–’β–’β–’ β–’β–’β–’β–’β–’ + \e[38;5;81mβ–’β–’β–’β–’ \e[38;5;81mβ–’β–’β–’β–’ \e[38;5;27mβ–“β–“β–“β–“ \e[38;5;27m β–“β–“β–“β–“β–“β–“β–“ β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’β–’ β–’β–’β–’β–’ β–’β–’β–’β–’ + \e[38;5;81mβ–’β–’β–’β–’ \e[38;5;81mβ–’β–’β–’β–’\e[38;5;27mβ–“β–“β–“β–“ \e[38;5;27m β–“β–“β–“β–“β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“ β–“β–“β–“ \e[38;5;81m β–’β–’β–’ β–’β–’β–’ β–’β–’β–’β–’ + \e[38;5;81mβ–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’ \e[38;5;81mβ–’β–’\e[38;5;27mβ–“β–“β–“β–“ \e[38;5;27m β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’ β–’β–’β–’ β–’β–’β–’β–’β–’ + \e[38;5;81m β–’β–’β–’β–’β–’β–’β–’β–’β–’\e[38;5;27m \e[38;5;27mβ–“β–“β–“β–“β–“β–“β–“β–“β–“ \e[38;5;27m β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’ β–’β–’β–’ β–’β–’β–’β–’β–’β–’β–’β–’β–’ + \e[38;5;81mβ–’β–’β–’β–’\e[38;5;27mβ–“β–“ \e[38;5;27mβ–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“ \e[38;5;27m β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“ β–“β–“β–“β–“β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’ β–’β–’β–’ β–’β–’β–’β–’β–’β–’β–’β–’β–’ + \e[38;5;81mβ–’β–’β–’β–’\e[38;5;27mβ–“β–“β–“β–“ \e[38;5;27mβ–“β–“β–“β–“ \e[38;5;27m β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“ β–“β–“β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’ β–’β–’β–’ β–’β–’β–’β–’β–’ + \e[38;5;81mβ–’β–’β–’β–’ \e[38;5;27mβ–“β–“β–“β–“ \e[38;5;27mβ–“β–“β–“β–“ \e[38;5;27m β–“β–“β–“β–“ β–“β–“β–“β–“β–“β–“β–“β–“ β–“β–“β–“ β–“β–“β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’ β–’β–’β–’ β–’β–’β–’β–’ + \e[38;5;81mβ–’β–’β–’ \e[38;5;27mβ–“β–“β–“β–“\e[38;5;81mβ–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’ \e[38;5;27m β–“β–“β–“β–“ β–“β–“β–“β–“β–“β–“β–“ β–“β–“β–“ β–“β–“β–“β–“β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’β–’ β–’β–’β–’β–’ β–’β–’β–’β–’ + \e[38;5;81mβ–’β–’ \e[38;5;27mβ–“β–“β–“β–“β–“β–“\e[38;5;81mβ–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’ \e[38;5;27m β–“β–“β–“β–“ β–“β–“β–“β–“β–“β–“ β–“β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’β–’β–’ β–’β–’β–’β–’β–’ β–’β–’β–’β–’β–’ β–’β–’β–’β–’β–’ + \e[38;5;27mβ–“β–“β–“β–“β–“β–“β–“β–“ \e[38;5;81mβ–’β–’β–’β–’ \e[38;5;27m β–“β–“β–“β–“ β–“β–“β–“β–“β–“ β–“β–“β–“β–“β–“ β–“β–“β–“β–“ β–“β–“β–“β–“ \e[38;5;81m β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’ β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’ + \e[38;5;27mβ–“β–“β–“β–“ β–“β–“β–“β–“ \e[38;5;81mβ–’β–’β–’β–’ \e[38;5;27m β–“β–“ β–“β–“β–“ β–“β–“β–“ β–“β–“β–“ β–“β–“β–“ \e[38;5;81m β–’β–’β–’β–’β–’β–’β–’β–’β–’ β–’β–’β–’β–’β–’β–’β–’β–’β–’ + \e[38;5;27mβ–“β–“β–“β–“ β–“β–“β–“β–“ \e[38;5;81mβ–’β–’β–’β–’ - \e[1;32mSystem Maintainer\e[0m: Kyler Clay - \e[1;32mContact\e[0m: kylerclay@proton.me - 470-403-8522 + \e[1;32mSystem Maintainer\e[0m: Kyler Clay + \e[1;32mContact\e[0m: kylerclay@proton.me + 470-403-8522 - Run '\e[1;35mnixos-help\e[0m' for the NixOS manual. - Run '\e[1;35mHyprland\e[0m' to enter the desktop environment. - ''; + Run '\e[1;35mnixos-help\e[0m' for the NixOS manual. + Run '\e[1;35mHyprland\e[0m' to enter the desktop environment. + ''; + }; } diff --git a/modules/sys/environment/nix.nix b/modules/sys/environment/nix.nix new file mode 100644 index 0000000..c62537b --- /dev/null +++ b/modules/sys/environment/nix.nix @@ -0,0 +1,21 @@ +{lib, config, ... }: { + options = { + nixSettings.enable = lib.mkEnableOption "enables my nixos settings"; + }; + config = lib.mkIf config.nixSettings.enable { + nix = { + settings = { + auto-optimise-store = true; + experimental-features = ["nix-command" "flakes"]; + substituters = ["https://nix-gaming.cachix.org"]; + }; + gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 7d"; + }; + }; + time.timeZone = "America/New_York"; + i18n.defaultLocale = "en_US.UTF-8"; + }; +} diff --git a/modules/sys/environment/sddm.nix b/modules/sys/environment/sddm.nix index a9c7996..a3116c9 100644 --- a/modules/sys/environment/sddm.nix +++ b/modules/sys/environment/sddm.nix @@ -1,24 +1,30 @@ { pkgs, self, + lib, config, ... }: { - environment.systemPackages = [ - ( - pkgs.catppuccin-sddm.override { - flavor = "mocha"; - font = "JetBrains Mono Nerd Font"; - fontSize = "14"; - loginBackground = true; - background = "${self}/assets/wallpapers/dark-waves.jpg"; - } - ) - ]; - services.displayManager.sddm = { - enable = true; - wayland.enable = true; - theme = "catppuccin-mocha"; - package = pkgs.kdePackages.sddm; + options = { + sddmOpts.enable = lib.mkEnableOption "enables custom sddm configuration"; + }; + config = lib.mkIf config.sddmOpts.enable { + environment.systemPackages = [ + ( + pkgs.catppuccin-sddm.override { + flavor = "mocha"; + font = "JetBrains Mono Nerd Font"; + fontSize = "14"; + loginBackground = true; + background = "${self}/assets/wallpapers/dark-waves.jpg"; + } + ) + ]; + services.displayManager.sddm = { + enable = true; + wayland.enable = true; + theme = "catppuccin-mocha"; + package = pkgs.kdePackages.sddm; + }; }; } diff --git a/modules/sys/environment/stylix.nix b/modules/sys/environment/stylix.nix index edb5ce5..06660ae 100644 --- a/modules/sys/environment/stylix.nix +++ b/modules/sys/environment/stylix.nix @@ -2,44 +2,51 @@ pkgs, scheme, wallpaper, + lib, + config, ... }: { - stylix = { - enable = true; - base16Scheme = scheme; - image = wallpaper; - polarity = "dark"; - autoEnable = true; - opacity.terminal = 0.5; - targets = { - console.enable = true; - feh.enable = true; - grub.enable = true; - gtk.enable = true; - nixos-icons.enable = true; - }; - cursor = { - package = pkgs.bibata-cursors; - name = "Bibata-Modern-Ice"; - }; - fonts = { - monospace = { - package = pkgs.nerdfonts.override {fonts = ["JetBrainsMono"];}; - name = "JetBrains Mono Nerd Font"; + options = { + stylixOpts.enable = lib.mkEnableOption "enables custom stylix options"; + }; + config = lib.mkIf config.stylixOpts.enable { + stylix = { + enable = true; + base16Scheme = scheme; + image = wallpaper; + polarity = "dark"; + autoEnable = true; + opacity.terminal = 0.5; + targets = { + console.enable = true; + feh.enable = true; + grub.enable = true; + gtk.enable = true; + nixos-icons.enable = true; }; - sansSerif = { - package = pkgs.nerdfonts.override {fonts = ["JetBrainsMono"];}; - name = "JetBrains Mono Nerd Font"; + cursor = { + package = pkgs.bibata-cursors; + name = "Bibata-Modern-Ice"; }; - serif = { - package = pkgs.nerdfonts.override {fonts = ["JetBrainsMono"];}; - name = "JetBrains Mono Nerd Font"; - }; - sizes = { - desktop = 10; - applications = 14; - terminal = 14; - popups = 16; + fonts = { + monospace = { + package = pkgs.nerdfonts.override {fonts = ["JetBrainsMono"];}; + name = "JetBrains Mono Nerd Font"; + }; + sansSerif = { + package = pkgs.nerdfonts.override {fonts = ["JetBrainsMono"];}; + name = "JetBrains Mono Nerd Font"; + }; + serif = { + package = pkgs.nerdfonts.override {fonts = ["JetBrainsMono"];}; + name = "JetBrains Mono Nerd Font"; + }; + sizes = { + desktop = 10; + applications = 14; + terminal = 14; + popups = 16; + }; }; }; }; diff --git a/modules/sys/hardware/bootloader.nix b/modules/sys/hardware/bootloader.nix index 04347b5..a7be490 100644 --- a/modules/sys/hardware/bootloader.nix +++ b/modules/sys/hardware/bootloader.nix @@ -1,8 +1,14 @@ -{pkgs, ...}: { - boot = { - loader.systemd-boot.enable = true; - loader.efi.canTouchEfiVariables = true; - loader.systemd-boot.configurationLimit = 10; - kernelPackages = pkgs.linuxPackages_latest; +{pkgs, lib, config, ...}: { + options = { + # make this enabled by default!!! + bootLoader.enable = lib.mkEnableOption "enables bootloader config"; + }; + config = lib.mkIf config.bootLoader.enable { + boot = { + loader.systemd-boot.enable = true; + loader.efi.canTouchEfiVariables = true; + loader.systemd-boot.configurationLimit = 10; + kernelPackages = pkgs.linuxPackages_latest; + }; }; } diff --git a/modules/sys/hardware/default.nix b/modules/sys/hardware/default.nix index 7d75833..c2d7219 100644 --- a/modules/sys/hardware/default.nix +++ b/modules/sys/hardware/default.nix @@ -10,5 +10,6 @@ }: { imports = [(import ./bootloader.nix)] - ++ [(import ./network.nix)]; + ++ [(import ./network.nix)] + ++ [(import ./powerprofiles.nix)]; } diff --git a/modules/sys/hardware/network.nix b/modules/sys/hardware/network.nix index 971fdc4..fa2ded1 100644 --- a/modules/sys/hardware/network.nix +++ b/modules/sys/hardware/network.nix @@ -1,20 +1,24 @@ -{host, ...}: let +{host, lib, config, ...}: let desktop = host == "oganesson"; in { - networking = { - networkmanager.enable = true; - hostName = - if desktop - then "oganesson" - else "mercury"; - hosts = { - "192.168.1.201" = ["glasshaus"]; - "192.168.1.111" = ["argon"]; - "192.168.1.223" = ["mercury"]; - }; - firewall = { - enable = true; - allowedTCPPorts = [30000]; + options = { + networkModule.enable = lib.mkEnableOption "enables network configuration"; + }; + config = lib.mkIf config.networkModule.enable { + networking = { + networkmanager.enable = true; + hostName = + if desktop + then "oganesson" + else "mercury"; + hosts = { + "192.168.1.201" = ["xenon"]; + "192.168.1.111" = ["argon"]; + "192.168.1.223" = ["mercury"]; + }; + firewall = { + enable = true; + }; }; }; } diff --git a/modules/sys/hardware/powerprofiles.nix b/modules/sys/hardware/powerprofiles.nix new file mode 100644 index 0000000..1ff26b9 --- /dev/null +++ b/modules/sys/hardware/powerprofiles.nix @@ -0,0 +1,51 @@ +{lib, config, ... }: { + options = { + powerProfiles.enable = lib.mkEnableOption "enables power profiles"; + }; + config = lib.mkIf config.powerProfiles.enable { + services = { + keyd = { + enable = true; + keyboards.default = { + ids = ["*"]; + settings.main = { + capslock = "esc"; + }; + }; + }; + + power-profiles-daemon.enable = true; + + upower = { + enable = true; + percentageLow = 20; + percentageCritical = 5; + percentageAction = 3; + criticalPowerAction = "PowerOff"; + }; + + tlp.settings = { + CPU_ENERGY_PERF_POLICY_ON_AC = "power"; + CPU_ENERGY_PERF_POLICY_ON_BAT = "power"; + + CPU_BOOST_ON_AC = 1; + CPU_BOOST_ON_BAT = 1; + + CPU_HWP_DYN_BOOST_ON_AC = 1; + CPU_HWP_DYN_BOOST_ON_BAT = 1; + + PLATFORM_PROFILE_ON_AC = "performance"; + PLATFORM_PROFILE_ON_BAT = "performance"; + + INTEL_GPU_MIN_FREQ_ON_AC = 500; + INTEL_GPU_MIN_FREQ_ON_BAT = 500; + # INTEL_GPU_MAX_FREQ_ON_AC=0; + # INTEL_GPU_MAX_FREQ_ON_BAT=0; + # INTEL_GPU_BOOST_FREQ_ON_AC=0; + # INTEL_GPU_BOOST_FREQ_ON_BAT=0; + + PCIE_ASPM_ON_AC = "default"; + PCIE_ASPM_ON_BAT = "powersupersave"; + }; + }; + }; diff --git a/modules/sys/software/default.nix b/modules/sys/software/default.nix index f48cb43..a37ed94 100644 --- a/modules/sys/software/default.nix +++ b/modules/sys/software/default.nix @@ -18,5 +18,6 @@ in { ++ [(import ./programs.nix)] ++ [(import ./services.nix)] ++ [(import ./nixvim)] + ++ [(import ./module-test.nix)] ++ desktop_modules; } diff --git a/modules/sys/software/gaming/gaming_pkgs.nix b/modules/sys/software/gaming/gaming_pkgs.nix index f2685f3..054e5f8 100644 --- a/modules/sys/software/gaming/gaming_pkgs.nix +++ b/modules/sys/software/gaming/gaming_pkgs.nix @@ -1,5 +1,10 @@ -{pkgs, ...}: { - environment.systemPackages = with pkgs; [ - snes9x-gtk - ]; +{lib, config, pkgs, ...}: { + options = { + gamingPkgs.enable = lib.mkEnableOption "enables gaming packages"; + }; + config = lib.mkIf config.gamingPkgs.enable { + environment.systemPackages = with pkgs; [ + snes9x-gtk + ]; + }; } diff --git a/modules/sys/software/gaming/steam.nix b/modules/sys/software/gaming/steam.nix index c45fa4b..34fb53e 100644 --- a/modules/sys/software/gaming/steam.nix +++ b/modules/sys/software/gaming/steam.nix @@ -1,6 +1,11 @@ -{...}: { - programs.steam = { - enable = true; - remotePlay.openFirewall = true; +{lib, config, ...}: { + options = { + steamOpts.enable = lib.mkEnableOption "enables steam configuration"; + }; + config = lib.mkIf config.steamOpts.enable { + programs.steam = { + enable = true; + remotePlay.openFirewall = true; + }; }; } diff --git a/modules/sys/software/module-test.nix b/modules/sys/software/module-test.nix new file mode 100644 index 0000000..0f8a2e4 --- /dev/null +++ b/modules/sys/software/module-test.nix @@ -0,0 +1,11 @@ +{ pkgs, lib, config, ... }: +{ + options = { + testmodule.enable = lib.mkEnableOption "enables test module"; + }; + config = lib.mkIf config.testmodule.enable { + environment.systemPackages = with pkgs; [ + hello + ]; + }; +} diff --git a/modules/sys/software/packages.nix b/modules/sys/software/packages.nix index af3b804..be01caf 100644 --- a/modules/sys/software/packages.nix +++ b/modules/sys/software/packages.nix @@ -1,79 +1,79 @@ -{ - pkgs, - inputs, - ... -}: { - environment.systemPackages = with pkgs; [ - alejandra - alsa-lib - alsa-utils - bc - cava - cabal-install - clang - clang-tools - cliphist - cmake - fail2ban - feh - ffmpeg-full - fuse - git - gnumake - gst_all_1.gstreamer - htop - hyprland - hyprland-workspaces - hyprpicker - imagemagick - inetutils - kitty - libclang - libcxx - lolcat - lsof - lua-language-server - luarocks - mesa - mpd - mullvad - mesa - neofetch - nh - nix-index - nix-output-monitor - nix-prefetch-scripts - nixos-option - nix-search-cli - nvd - openssl - p7zip - jq - pamixer - parted - pavucontrol - pkg-config - playerctl - protonmail-bridge - protontricks - pyright - socat - sox - stress - tor - tree - unrar - unzip - usbutils - vim - vscode-langservers-extracted - vulkan-loader - wget - wine - wl-clipboard - xpad - libnotify - file - libvirt-glib - ]; +{lib, config, pkgs, inputs, ... }: { + options = { + sysPkgs.enable = lib.mkEnableOption "enables default system packages"; + }; + config = lib.mkIf config.sysPkgs.enable { + environment.systemPackages = with pkgs; [ + alejandra + alsa-lib + alsa-utils + bc + cava + cabal-install + clang + clang-tools + cliphist + cmake + fail2ban + feh + ffmpeg-full + fuse + git + gnumake + gst_all_1.gstreamer + htop + hyprland-workspaces + hyprpicker + imagemagick + inetutils + kitty + libclang + libcxx + lolcat + lsof + lua-language-server + luarocks + mesa + mpd + mullvad + mesa + neofetch + nh + nix-index + nix-output-monitor + nix-prefetch-scripts + nixos-option + nix-search-cli + nvd + openssl + p7zip + jq + pamixer + parted + pavucontrol + pkg-config + playerctl + protonmail-bridge + protontricks + pyright + socat + sox + stress + tor + tree + unrar + unzip + usbutils + vim + vscode-langservers-extracted + vulkan-loader + wget + wine + wl-clipboard + xpad + libnotify + file + libvirt-glib + ]; + }; } diff --git a/modules/sys/software/programs.nix b/modules/sys/software/programs.nix index 1e51364..e49f20b 100644 --- a/modules/sys/software/programs.nix +++ b/modules/sys/software/programs.nix @@ -1,17 +1,22 @@ -{pkgs, ...}: { - programs = { - hyprland.enable = true; - zsh.enable = true; - nix-ld = { - enable = true; - libraries = with pkgs; [ - stdenv.cc.cc - ffmpeg-full - ]; - }; - gnupg.agent = { - enable = true; - enableSSHSupport = true; +{lib, config, pkgs, ...}: { + options = { + sysProgs.enable = lib.mkEnableOption "enables default system programs"; + }; + config = lib.mkIf config.sysProgs.enable { + programs = { + hyprland.enable = true; + zsh.enable = true; + nix-ld = { + enable = true; + libraries = with pkgs; [ + stdenv.cc.cc + ffmpeg-full + ]; + }; + gnupg.agent = { + enable = true; + enableSSHSupport = true; + }; }; }; } diff --git a/modules/sys/software/services.nix b/modules/sys/software/services.nix index 77a6e08..c99399d 100644 --- a/modules/sys/software/services.nix +++ b/modules/sys/software/services.nix @@ -1,19 +1,24 @@ -{...}: { - services = { - pipewire = { - enable = true; - pulse.enable = true; - wireplumber.enable = true; - alsa.enable = true; - alsa.support32Bit = true; - }; - udev.enable = true; - dbus.enable = true; - mullvad-vpn.enable = true; - blueman.enable = true; - openssh = { - enable = true; - allowSFTP = true; +{lib, config, ...}: { + options = { + sysServices.enable = lib.mkEnableOption "enables default system services"; + }; + config = lib.mkIf config.sysServices.enable { + services = { + pipewire = { + enable = true; + pulse.enable = true; + wireplumber.enable = true; + alsa.enable = true; + alsa.support32Bit = true; + }; + udev.enable = true; + dbus.enable = true; + mullvad-vpn.enable = true; + blueman.enable = true; + openssh = { + enable = true; + allowSFTP = true; + }; }; }; } diff --git a/modules/sys/software/virtualization.nix b/modules/sys/software/virtualization.nix index 57a0cc0..c2d3206 100644 --- a/modules/sys/software/virtualization.nix +++ b/modules/sys/software/virtualization.nix @@ -1,4 +1,9 @@ -{username, ...}: { - virtualisation.libvirtd.enable = true; - programs.virt-manager.enable = true; +{lib, config, username, ...}: { + options = { + virtOpts.enable = lib.mkEnableOption "enables virtualization"; + }; + config = lib.mkIf config.virtOpts.enable { + virtualisation.libvirtd.enable = true; + programs.virt-manager.enable = true; + }; } From e035de79e48026e40034449e6d1b3507082fe886 Mon Sep 17 00:00:00 2001 From: pagedmov Date: Fri, 1 Nov 2024 21:09:05 -0400 Subject: [PATCH 03/12] cleaned up scripts/default.nix, learned that inherit can be used instead of 'var = var' in arguments --- hosts/laptop/config.nix | 2 -- modules/home/scripts/default.nix | 57 ++++++++------------------------ 2 files changed, 14 insertions(+), 45 deletions(-) diff --git a/hosts/laptop/config.nix b/hosts/laptop/config.nix index 4db8d36..7b6b1de 100644 --- a/hosts/laptop/config.nix +++ b/hosts/laptop/config.nix @@ -30,7 +30,5 @@ ]; }; - time.timeZone = "America/New_York"; - i18n.defaultLocale = "en_US.UTF-8"; } diff --git a/modules/home/scripts/default.nix b/modules/home/scripts/default.nix index cc221f1..3e3a4f4 100644 --- a/modules/home/scripts/default.nix +++ b/modules/home/scripts/default.nix @@ -6,49 +6,20 @@ pkgs, ... }: let - keyring = import ./wm-controls/keyring.nix { - self = self; - pkgs = pkgs; - }; - invoke = import ./commands/invoke.nix { - self = self; - pkgs = pkgs; - }; - splash = import ./commands/splash.nix { - self = self; - pkgs = pkgs; - }; - runbg = import ./commands/runbg.nix { - self = self; - pkgs = pkgs; - }; - garbage-collect = import ./nix/garbage-collect.nix { - self = self; - pkgs = pkgs; - }; - nsp = import ./nix/nsp.nix { - self = self; - pkgs = pkgs; - }; - scheck = import ./wm-controls/s_check.nix { self = self; pkgs = pkgs;}; - switchmon = import ./wm-controls/switchmon.nix { - self = self; - pkgs = pkgs; - }; - rebuild = import ./nix/rebuild.nix { - host = host; - self = self; - pkgs = pkgs; - }; - moveonscreen = import ./wm-controls/moveonscreen.nix {pkgs = pkgs;}; - toolbelt = import ./commands/toolbelt.nix {pkgs = pkgs;}; - viconf = import ./commands/viconf.nix { - pkgs = pkgs; - }; - chscheme = import ./wm-controls/chscheme.nix { - pkgs = pkgs; - }; - chpaper = import ./wm-controls/chpaper.nix {pkgs = pkgs;}; + keyring = import ./wm-controls/keyring.nix { inherit self pkgs; }; + invoke = import ./commands/invoke.nix { inherit self pkgs; }; + splash = import ./commands/splash.nix { inherit self pkgs; }; + runbg = import ./commands/runbg.nix { inherit self pkgs; }; + garbage-collect = import ./nix/garbage-collect.nix { inherit self pkgs; }; + nsp = import ./nix/nsp.nix { inherit self pkgs; }; + scheck = import ./wm-controls/s_check.nix { inherit self pkgs; }; + switchmon = import ./wm-controls/switchmon.nix { inherit self pkgs; }; + rebuild = import ./nix/rebuild.nix { inherit host self pkgs; }; + moveonscreen = import ./wm-controls/moveonscreen.nix { inherit pkgs; }; + toolbelt = import ./commands/toolbelt.nix { inherit pkgs; }; + viconf = import ./commands/viconf.nix { inherit pkgs; }; + chscheme = import ./wm-controls/chscheme.nix { inherit pkgs; }; + chpaper = import ./wm-controls/chpaper.nix { inherit pkgs; }; in { options = { pagedmovScripts.enable = lib.mkEnableOption "enables pagedmov's scripts"; From 08bed40c52067ffcad5624cf1d23c0688d1820d7 Mon Sep 17 00:00:00 2001 From: pagedmov Date: Fri, 1 Nov 2024 21:30:26 -0400 Subject: [PATCH 04/12] added home-manager modules as an output in flake.nix, allowing for machine-specific home-manager configs --- flake.nix | 10 +++--- hosts/desktop/config.nix | 5 ++- .../desktop/home.nix | 34 ++++++++++--------- modules/default.nix | 31 ----------------- modules/home/{hm-modules.nix => default.nix} | 0 modules/sys/default.nix | 16 ++++++++- modules/sys/environment/default.nix | 1 + modules/sys/hardware/powerprofiles.nix | 1 + 8 files changed, 45 insertions(+), 53 deletions(-) rename modules/home/home-manager.nix => hosts/desktop/home.nix (58%) delete mode 100644 modules/default.nix rename modules/home/{hm-modules.nix => default.nix} (100%) diff --git a/flake.nix b/flake.nix index 782c0ab..4241a9d 100644 --- a/flake.nix +++ b/flake.nix @@ -67,6 +67,8 @@ ) {} colors; in { + homeManagerModules.default = ./modules/home/default.nix; + nixosConfigurations = { oganesson = nixpkgs.lib.nixosSystem { specialArgs = { @@ -75,8 +77,8 @@ }; inherit system; modules = [ - ./hosts/desktop - ./modules + ./hosts/desktop/config.nix + ./modules/sys stylix.nixosModules.stylix nixvim.nixosModules.nixvim nur.nixosModules.nur @@ -89,8 +91,8 @@ inherit self inputs scheme wallpaper username; }; modules = [ - ./hosts/laptop - ./modules + ./hosts/laptop/config.nix + ./modules/sys stylix.nixosModules.stylix nixvim.nixosModules.nixvim nur.nixosModules.nur diff --git a/hosts/desktop/config.nix b/hosts/desktop/config.nix index c9bfa9f..b4fe253 100644 --- a/hosts/desktop/config.nix +++ b/hosts/desktop/config.nix @@ -1,7 +1,10 @@ {pkgs, ...}: { system.stateVersion = "24.05"; nixpkgs.config.allowUnfree = true; - imports = [ ./hardware.nix ]; + imports = [ + ./hardware.nix + ./home.nix + ]; nix = { settings = { auto-optimise-store = true; diff --git a/modules/home/home-manager.nix b/hosts/desktop/home.nix similarity index 58% rename from modules/home/home-manager.nix rename to hosts/desktop/home.nix index 28f2f71..0deb437 100644 --- a/modules/home/home-manager.nix +++ b/hosts/desktop/home.nix @@ -5,12 +5,12 @@ inputs, username, wallpaper, + lib, scheme, config, ... }: let nur = config.nur; - desktop = (host == "oganesson"); in { imports = [inputs.home-manager.nixosModules.home-manager]; home-manager = { @@ -18,22 +18,24 @@ in { useGlobalPkgs = true; backupFileExtension = "backup"; extraSpecialArgs = {inherit self inputs host wallpaper scheme username nur;}; - users.${username} = { - dconf.settings = if desktop then { - "org/virt-manager/virt-manager/connections" = { - autoconnect = ["qemu:///system"]; - uris = ["qemu:///system"]; + users = { + ${username} = { + imports = [ + inputs.spicetify-nix.homeManagerModules.default + inputs.self.outputs.homeManagerModules.default + ]; + dconf.settings = lib.mkIf config.virtOpts.enable { + "org/virt-manager/virt-manager/connections" = { + autoconnect = ["qemu:///system"]; + uris = ["qemu:///system"]; + }; + }; + programs.home-manager.enable = true; + home = { + username = "${username}"; + homeDirectory = "/home/${username}"; + stateVersion = "24.05"; }; - } else {}; - programs.home-manager.enable = true; - imports = [ - inputs.spicetify-nix.homeManagerModules.default - ./hm-modules.nix - ]; - home = { - username = "${username}"; - homeDirectory = "/home/${username}"; - stateVersion = "24.05"; }; }; }; diff --git a/modules/default.nix b/modules/default.nix deleted file mode 100644 index 675df72..0000000 --- a/modules/default.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ - inputs, - nixpkgs, - config, - self, - username, - host, - lib, - ... -}: { - imports = [ - ./sys/hardware - ./sys/software - ./sys/environment - ./home/home-manager.nix - ]; - - networkModule.enable = lib.mkDefault true; - nixSettings.enable = lib.mkDefault true; - bootLoader.enable = lib.mkDefault true; - issue.enable = lib.mkDefault true; - sddmOpts.enable = lib.mkDefault true; - stylixOpts.enable = lib.mkDefault true; - gamingPkgs.enable = lib.mkDefault true; - steamOpts.enable = lib.mkDefault true; - sysPkgs.enable = lib.mkDefault true; - sysProgs.enable = lib.mkDefault true; - sysServices.enable = lib.mkDefault true; - virtOpts.enable = lib.mkDefault true; - powerProfiles.enable = lib.mkDefault false; -} diff --git a/modules/home/hm-modules.nix b/modules/home/default.nix similarity index 100% rename from modules/home/hm-modules.nix rename to modules/home/default.nix diff --git a/modules/sys/default.nix b/modules/sys/default.nix index 81c1de4..f64d5a4 100644 --- a/modules/sys/default.nix +++ b/modules/sys/default.nix @@ -5,12 +5,26 @@ self, username, host, + lib, ... }: { imports = [ ./hardware ./software ./environment - ../home/home-manager.nix ]; + + networkModule.enable = lib.mkDefault true; + nixSettings.enable = lib.mkDefault true; + bootLoader.enable = lib.mkDefault true; + issue.enable = lib.mkDefault true; + sddmOpts.enable = lib.mkDefault true; + stylixOpts.enable = lib.mkDefault true; + gamingPkgs.enable = lib.mkDefault true; + steamOpts.enable = lib.mkDefault true; + sysPkgs.enable = lib.mkDefault true; + sysProgs.enable = lib.mkDefault true; + sysServices.enable = lib.mkDefault true; + virtOpts.enable = lib.mkDefault true; + powerProfiles.enable = lib.mkDefault false; } diff --git a/modules/sys/environment/default.nix b/modules/sys/environment/default.nix index 2f70861..0447f39 100644 --- a/modules/sys/environment/default.nix +++ b/modules/sys/environment/default.nix @@ -11,5 +11,6 @@ imports = [(import ./sddm.nix)] ++ [(import ./issue.nix)] + ++ [(import ./nix.nix)] ++ [(import ./stylix.nix)]; } diff --git a/modules/sys/hardware/powerprofiles.nix b/modules/sys/hardware/powerprofiles.nix index 1ff26b9..0b686b2 100644 --- a/modules/sys/hardware/powerprofiles.nix +++ b/modules/sys/hardware/powerprofiles.nix @@ -49,3 +49,4 @@ }; }; }; +} From 99b13fd9798f7fe1214038bd590799cff8777481 Mon Sep 17 00:00:00 2001 From: pagedmov Date: Fri, 1 Nov 2024 22:00:08 -0400 Subject: [PATCH 05/12] gave files.nix it's own directory, renamed all of the options ending with 'Opts' to end with 'Config' instead for consistency. --- hosts/desktop/home.nix | 2 +- modules/home/default.nix | 45 ++++++++----------- modules/home/environment/gtk.nix | 4 +- modules/home/environment/spicetify.nix | 4 +- modules/home/environment/stylix.nix | 4 +- modules/home/files/default.nix | 7 +++ .../home/{files.nix => files/neofetch.nix} | 0 modules/home/programs/autojump.nix | 4 +- modules/home/programs/bat.nix | 4 +- modules/home/programs/cava.nix | 4 +- modules/home/programs/eza.nix | 4 +- modules/home/programs/fzf.nix | 4 +- modules/home/scripts/default.nix | 42 ++++++++++------- modules/sys/default.nix | 8 ++-- modules/sys/environment/sddm.nix | 4 +- modules/sys/environment/stylix.nix | 4 +- modules/sys/software/gaming/steam.nix | 4 +- modules/sys/software/virtualization.nix | 4 +- 18 files changed, 81 insertions(+), 71 deletions(-) create mode 100644 modules/home/files/default.nix rename modules/home/{files.nix => files/neofetch.nix} (100%) diff --git a/hosts/desktop/home.nix b/hosts/desktop/home.nix index 0deb437..85a47ed 100644 --- a/hosts/desktop/home.nix +++ b/hosts/desktop/home.nix @@ -24,7 +24,7 @@ in { inputs.spicetify-nix.homeManagerModules.default inputs.self.outputs.homeManagerModules.default ]; - dconf.settings = lib.mkIf config.virtOpts.enable { + dconf.settings = lib.mkIf config.virtConfig.enable { "org/virt-manager/virt-manager/connections" = { autoconnect = ["qemu:///system"]; uris = ["qemu:///system"]; diff --git a/modules/home/default.nix b/modules/home/default.nix index 5ee024a..265ae0f 100644 --- a/modules/home/default.nix +++ b/modules/home/default.nix @@ -12,47 +12,40 @@ ./programs ./environment ./scripts - ./files.nix + ./files ]; + # ./files + homeFiles.enable = lib.mkDefault true; + + # ./environment hyprlandConfig.enable = lib.mkDefault true; - autojumpOpts.enable = lib.mkDefault true; - stylixHomeOpts.enable = lib.mkDefault true; + autojumpConfig.enable = lib.mkDefault true; + stylixHomeConfig.enable = lib.mkDefault true; waybarConfig.enable = lib.mkDefault true; - gtkOpts.enable = lib.mkDefault true; - spicetifyOpts.enable = lib.mkDefault true; + gtkConfig.enable = lib.mkDefault true; + spicetifyConfig.enable = lib.mkDefault true; starshipConfig.enable = lib.mkDefault true; + + # ./programs btopConfig.enable = lib.mkDefault true; swayncConfig.enable = lib.mkDefault true; userPkgs.enable = lib.mkDefault true; - cavaOpts.enable = lib.mkDefault true; - ezaOpts.enable = lib.mkDefault true; + cavaConfig.enable = lib.mkDefault true; + ezaConfig.enable = lib.mkDefault true; firefoxConfig.enable = lib.mkDefault true; fuzzelConfig.enable = lib.mkDefault true; - fzfOpts.enable = lib.mkDefault true; + fzfConfig.enable = lib.mkDefault true; gitConfig.enable = lib.mkDefault true; kittyConfig.enable = lib.mkDefault true; yaziConfig.enable = lib.mkDefault true; zshConfig.enable = lib.mkDefault true; - homeFiles.enable = lib.mkDefault true; passConfig.enable = lib.mkDefault true; - batOpts.enable = lib.mkDefault true; + batConfig.enable = lib.mkDefault true; + # ./scripts pagedmovScripts.enable = lib.mkDefault true; - pagedmovScripts.commandScripts.invoke.enable = lib.mkDefault true; - pagedmovScripts.commandScripts.runbg.enable = lib.mkDefault true; - pagedmovScripts.commandScripts.splash.enable = lib.mkDefault true; - pagedmovScripts.commandScripts.toolbelt.enable = lib.mkDefault true; - pagedmovScripts.commandScripts.viconf.enable = lib.mkDefault true; - - pagedmovScripts.hyprlandControls.chpaper.enable = lib.mkDefault true; - pagedmovScripts.hyprlandControls.scheck.enable = lib.mkDefault true; - pagedmovScripts.hyprlandControls.chscheme.enable = lib.mkDefault true; - pagedmovScripts.hyprlandControls.keyring.enable = lib.mkDefault true; - pagedmovScripts.hyprlandControls.moveonscreen.enable = lib.mkDefault true; - pagedmovScripts.hyprlandControls.switchmon.enable = lib.mkDefault true; - - pagedmovScripts.nixShortcuts.garbage-collect.enable = lib.mkDefault true; - pagedmovScripts.nixShortcuts.nsp.enable = lib.mkDefault true; - pagedmovScripts.nixShortcuts.rebuild.enable = lib.mkDefault true; + pagedmovScripts.commandScripts.enable = lib.mkDefault true; + pagedmovScripts.hyprlandControls.enable = lib.mkDefault true; + pagedmovScripts.nixShortcuts.enable = lib.mkDefault true; } diff --git a/modules/home/environment/gtk.nix b/modules/home/environment/gtk.nix index 40aa5d5..b7f5c4e 100644 --- a/modules/home/environment/gtk.nix +++ b/modules/home/environment/gtk.nix @@ -1,8 +1,8 @@ {lib, config, pkgs, ... }: { options = { - gtkOpts.enable = lib.mkEnableOption "enable my gtk options"; + gtkConfig.enable = lib.mkEnableOption "enable my gtk options"; }; - config = lib.mkIf config.gtkOpts.enable { + config = lib.mkIf config.gtkConfig.enable { fonts.fontconfig.enable = true; home.packages = with pkgs; [ (nerdfonts.override { diff --git a/modules/home/environment/spicetify.nix b/modules/home/environment/spicetify.nix index 5848db3..9475520 100644 --- a/modules/home/environment/spicetify.nix +++ b/modules/home/environment/spicetify.nix @@ -2,9 +2,9 @@ spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system}; in { options = { - spicetifyOpts.enable = lib.mkEnableOption "enable my spicetify options"; + spicetifyConfig.enable = lib.mkEnableOption "enable my spicetify options"; }; - config = lib.mkIf config.spicetifyOpts.enable { + config = lib.mkIf config.spicetifyConfig.enable { nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "spotify" diff --git a/modules/home/environment/stylix.nix b/modules/home/environment/stylix.nix index 2205b74..2557b3a 100644 --- a/modules/home/environment/stylix.nix +++ b/modules/home/environment/stylix.nix @@ -1,8 +1,8 @@ {lib, config, pkgs, scheme, wallpaper, ... }: { options = { - stylixHomeOpts.enable = lib.mkEnableOption "enables my stylix Home-Manager options"; + stylixHomeConfig.enable = lib.mkEnableOption "enables my stylix Home-Manager options"; }; - config = lib.mkIf config.stylixHomeOpts.enable { + config = lib.mkIf config.stylixHomeConfig.enable { stylix = { enable = true; autoEnable = true; diff --git a/modules/home/files/default.nix b/modules/home/files/default.nix new file mode 100644 index 0000000..46c0ae7 --- /dev/null +++ b/modules/home/files/default.nix @@ -0,0 +1,7 @@ +{ ... }: + +# This folder is for programs that do not have existing configuration modules in NixOS. +# Basically a to-do list for stuff I need to write my own modules for. +{ + imports = [ ./neofetch.nix ]; +} diff --git a/modules/home/files.nix b/modules/home/files/neofetch.nix similarity index 100% rename from modules/home/files.nix rename to modules/home/files/neofetch.nix diff --git a/modules/home/programs/autojump.nix b/modules/home/programs/autojump.nix index c50cfe7..33e5c49 100644 --- a/modules/home/programs/autojump.nix +++ b/modules/home/programs/autojump.nix @@ -1,8 +1,8 @@ {lib, config, ...}: { options = { - autojumpOpts.enable = lib.mkEnableOption "enables my autojump options"; + autojumpConfig.enable = lib.mkEnableOption "enables my autojump options"; }; - config = lib.mkIf config.autojumpOpts.enable { + config = lib.mkIf config.autojumpConfig.enable { programs.autojump = { enable = true; enableZshIntegration = true; diff --git a/modules/home/programs/bat.nix b/modules/home/programs/bat.nix index ba5637c..dc71d72 100644 --- a/modules/home/programs/bat.nix +++ b/modules/home/programs/bat.nix @@ -1,8 +1,8 @@ {lib, config, inputs, ...}: { options = { - batOpts.enable = lib.mkEnableOption "enables my bat options"; + batConfig.enable = lib.mkEnableOption "enables my bat options"; }; - config = lib.mkIf config.batOpts.enable { + config = lib.mkIf config.batConfig.enable { programs.bat = { enable = true; config = { diff --git a/modules/home/programs/cava.nix b/modules/home/programs/cava.nix index 596e997..185079f 100644 --- a/modules/home/programs/cava.nix +++ b/modules/home/programs/cava.nix @@ -1,8 +1,8 @@ {lib, config, inputs, pkgs, ... }: { options = { - cavaOpts.enable = lib.mkEnableOption "enables my cava settings"; + cavaConfig.enable = lib.mkEnableOption "enables my cava settings"; }; - config = lib.mkIf config.cavaOpts.enable { + config = lib.mkIf config.cavaConfig.enable { programs.cava = { enable = true; }; diff --git a/modules/home/programs/eza.nix b/modules/home/programs/eza.nix index 2a5f480..d81806f 100644 --- a/modules/home/programs/eza.nix +++ b/modules/home/programs/eza.nix @@ -1,8 +1,8 @@ {lib, config, ...}: { options = { - ezaOpts.enable = lib.mkEnableOption "enables my eza options"; + ezaConfig.enable = lib.mkEnableOption "enables my eza options"; }; - config = lib.mkIf config.ezaOpts.enable { + config = lib.mkIf config.ezaConfig.enable { programs.eza = { enable = true; enableZshIntegration = false; diff --git a/modules/home/programs/fzf.nix b/modules/home/programs/fzf.nix index d32a9c0..9ec84d1 100644 --- a/modules/home/programs/fzf.nix +++ b/modules/home/programs/fzf.nix @@ -1,8 +1,8 @@ {lib, config, ...}: { options = { - fzfOpts.enable = lib.mkEnableOption "enables my fzf options"; + fzfConfig.enable = lib.mkEnableOption "enables my fzf options"; }; - config = lib.mkIf config.fzfOpts.enable { + config = lib.mkIf config.fzfConfig.enable { programs.fzf = { enable = true; enableZshIntegration = true; diff --git a/modules/home/scripts/default.nix b/modules/home/scripts/default.nix index 3e3a4f4..bd3c7b1 100644 --- a/modules/home/scripts/default.nix +++ b/modules/home/scripts/default.nix @@ -22,39 +22,49 @@ chpaper = import ./wm-controls/chpaper.nix { inherit pkgs; }; in { options = { - pagedmovScripts.enable = lib.mkEnableOption "enables pagedmov's scripts"; + pagedmovScripts.enable = lib.mkEnableOption "Enables all pagedmov's scripts"; + # Enable or disable by group + pagedmovScripts.commandScripts.enable = + lib.mkEnableOption "Enables all command scripts"; + pagedmovScripts.hyprlandControls.enable = + lib.mkEnableOption "Enables all Hyprland control scripts"; + pagedmovScripts.nixShortcuts.enable = + lib.mkEnableOption "Enables all Nix shortcut scripts"; + + # These options override individual scripts pagedmovScripts.commandScripts.invoke.enable = - lib.mkEnableOption "enables the invoke command"; + lib.mkDefault (config.pagedmovScripts.commandScripts.enable) // lib.mkEnableOption "Enables the invoke command"; pagedmovScripts.commandScripts.runbg.enable = - lib.mkEnableOption "enables the runbg command - written by FrostPhoenix"; + lib.mkDefault (config.pagedmovScripts.commandScripts.enable) // lib.mkEnableOption "Enables the runbg command - written by FrostPhoenix"; pagedmovScripts.commandScripts.splash.enable = - lib.mkEnableOption "enables the splash screen when opening a terminal"; + lib.mkDefault (config.pagedmovScripts.commandScripts.enable) // lib.mkEnableOption "Enables the splash screen when opening a terminal"; pagedmovScripts.commandScripts.toolbelt.enable = - lib.mkEnableOption "enables the toolbelt command"; + lib.mkDefault (config.pagedmovScripts.commandScripts.enable) // lib.mkEnableOption "Enables the toolbelt command"; pagedmovScripts.commandScripts.viconf.enable = - lib.mkEnableOption "enables the viconf command"; + lib.mkDefault (config.pagedmovScripts.commandScripts.enable) // lib.mkEnableOption "Enables the viconf command"; pagedmovScripts.hyprlandControls.chpaper.enable = - lib.mkEnableOption "enables the chpaper command"; + lib.mkDefault (config.pagedmovScripts.hyprlandControls.enable) // lib.mkEnableOption "Enables the chpaper command"; pagedmovScripts.hyprlandControls.scheck.enable = - lib.mkEnableOption "enables the chpaper command"; + lib.mkDefault (config.pagedmovScripts.hyprlandControls.enable) // lib.mkEnableOption "Enables the scheck command"; pagedmovScripts.hyprlandControls.chscheme.enable = - lib.mkEnableOption "enables the chscheme command"; + lib.mkDefault (config.pagedmovScripts.hyprlandControls.enable) // lib.mkEnableOption "Enables the chscheme command"; pagedmovScripts.hyprlandControls.keyring.enable = - lib.mkEnableOption "enables the keyring command"; + lib.mkDefault (config.pagedmovScripts.hyprlandControls.enable) // lib.mkEnableOption "Enables the keyring command"; pagedmovScripts.hyprlandControls.moveonscreen.enable = - lib.mkEnableOption "enables the moveonscreen command, makes sure that the edges of floating windows are always on screen"; + lib.mkDefault (config.pagedmovScripts.hyprlandControls.enable) // lib.mkEnableOption "Ensures floating windows remain on screen"; pagedmovScripts.hyprlandControls.switchmon.enable = - lib.mkEnableOption "moves your cursor to the center of your second monitor; currently only supports two monitors"; + lib.mkDefault (config.pagedmovScripts.hyprlandControls.enable) // lib.mkEnableOption "Moves cursor to the center of the second monitor"; pagedmovScripts.nixShortcuts.garbage-collect.enable = - lib.mkEnableOption "enables the garbage-collect script, runs nixos garbage collection and empties the gtrash bin"; + lib.mkDefault (config.pagedmovScripts.nixShortcuts.enable) // lib.mkEnableOption "Enables the garbage-collect script"; pagedmovScripts.nixShortcuts.nsp.enable = - lib.mkEnableOption "enables nsp, essentially an alias for 'nix-shell -p'"; + lib.mkDefault (config.pagedmovScripts.nixShortcuts.enable) // lib.mkEnableOption "Enables nsp as an alias for 'nix-shell -p'"; pagedmovScripts.nixShortcuts.rebuild.enable = - lib.mkEnableOption "enables rebuild, an alias for 'sudo nixos-rebuild switch --flake $FLAKEPATH#$(hostname)'"; + lib.mkDefault (config.pagedmovScripts.nixShortcuts.enable) // lib.mkEnableOption "Enables rebuild as an alias for 'sudo nixos-rebuild switch'"; }; + config = lib.mkIf config.pagedmovScripts.enable { home.packages = lib.optionals config.pagedmovScripts.commandScripts.invoke.enable [ invoke ] ++ lib.optionals config.pagedmovScripts.commandScripts.runbg.enable [ runbg ] @@ -63,7 +73,7 @@ in { ++ lib.optionals config.pagedmovScripts.commandScripts.viconf.enable [ viconf ] ++ lib.optionals config.pagedmovScripts.hyprlandControls.chpaper.enable [ chpaper ] - ++ lib.optionals config.pagedmovScripts.hyprlandControls.chpaper.enable [ scheck ] + ++ lib.optionals config.pagedmovScripts.hyprlandControls.scheck.enable [ scheck ] ++ lib.optionals config.pagedmovScripts.hyprlandControls.chscheme.enable [ chscheme ] ++ lib.optionals config.pagedmovScripts.hyprlandControls.keyring.enable [ keyring ] ++ lib.optionals config.pagedmovScripts.hyprlandControls.moveonscreen.enable [ moveonscreen ] diff --git a/modules/sys/default.nix b/modules/sys/default.nix index f64d5a4..0ba1757 100644 --- a/modules/sys/default.nix +++ b/modules/sys/default.nix @@ -18,13 +18,13 @@ nixSettings.enable = lib.mkDefault true; bootLoader.enable = lib.mkDefault true; issue.enable = lib.mkDefault true; - sddmOpts.enable = lib.mkDefault true; - stylixOpts.enable = lib.mkDefault true; + sddmConfig.enable = lib.mkDefault true; + stylixConfig.enable = lib.mkDefault true; gamingPkgs.enable = lib.mkDefault true; - steamOpts.enable = lib.mkDefault true; + steamConfig.enable = lib.mkDefault true; sysPkgs.enable = lib.mkDefault true; sysProgs.enable = lib.mkDefault true; sysServices.enable = lib.mkDefault true; - virtOpts.enable = lib.mkDefault true; + virtConfig.enable = lib.mkDefault true; powerProfiles.enable = lib.mkDefault false; } diff --git a/modules/sys/environment/sddm.nix b/modules/sys/environment/sddm.nix index a3116c9..93458e9 100644 --- a/modules/sys/environment/sddm.nix +++ b/modules/sys/environment/sddm.nix @@ -6,9 +6,9 @@ ... }: { options = { - sddmOpts.enable = lib.mkEnableOption "enables custom sddm configuration"; + sddmConfig.enable = lib.mkEnableOption "enables custom sddm configuration"; }; - config = lib.mkIf config.sddmOpts.enable { + config = lib.mkIf config.sddmConfig.enable { environment.systemPackages = [ ( pkgs.catppuccin-sddm.override { diff --git a/modules/sys/environment/stylix.nix b/modules/sys/environment/stylix.nix index 06660ae..c84620e 100644 --- a/modules/sys/environment/stylix.nix +++ b/modules/sys/environment/stylix.nix @@ -7,9 +7,9 @@ ... }: { options = { - stylixOpts.enable = lib.mkEnableOption "enables custom stylix options"; + stylixConfig.enable = lib.mkEnableOption "enables custom stylix options"; }; - config = lib.mkIf config.stylixOpts.enable { + config = lib.mkIf config.stylixConfig.enable { stylix = { enable = true; base16Scheme = scheme; diff --git a/modules/sys/software/gaming/steam.nix b/modules/sys/software/gaming/steam.nix index 34fb53e..630b339 100644 --- a/modules/sys/software/gaming/steam.nix +++ b/modules/sys/software/gaming/steam.nix @@ -1,8 +1,8 @@ {lib, config, ...}: { options = { - steamOpts.enable = lib.mkEnableOption "enables steam configuration"; + steamConfig.enable = lib.mkEnableOption "enables steam configuration"; }; - config = lib.mkIf config.steamOpts.enable { + config = lib.mkIf config.steamConfig.enable { programs.steam = { enable = true; remotePlay.openFirewall = true; diff --git a/modules/sys/software/virtualization.nix b/modules/sys/software/virtualization.nix index c2d3206..35bc716 100644 --- a/modules/sys/software/virtualization.nix +++ b/modules/sys/software/virtualization.nix @@ -1,8 +1,8 @@ {lib, config, username, ...}: { options = { - virtOpts.enable = lib.mkEnableOption "enables virtualization"; + virtConfig.enable = lib.mkEnableOption "enables virtualization"; }; - config = lib.mkIf config.virtOpts.enable { + config = lib.mkIf config.virtConfig.enable { virtualisation.libvirtd.enable = true; programs.virt-manager.enable = true; }; From 36ec78ac3f92e61a37fa0d4ce8f0549b6d137321 Mon Sep 17 00:00:00 2001 From: pagedmov Date: Fri, 1 Nov 2024 22:30:31 -0400 Subject: [PATCH 06/12] scripts can now be enabled or disabled by group and each script has it's own override enable option --- modules/home/default.nix | 8 +-- modules/home/scripts/default.nix | 104 +++++++++++++++++-------------- 2 files changed, 60 insertions(+), 52 deletions(-) diff --git a/modules/home/default.nix b/modules/home/default.nix index 265ae0f..db36626 100644 --- a/modules/home/default.nix +++ b/modules/home/default.nix @@ -44,8 +44,8 @@ batConfig.enable = lib.mkDefault true; # ./scripts - pagedmovScripts.enable = lib.mkDefault true; - pagedmovScripts.commandScripts.enable = lib.mkDefault true; - pagedmovScripts.hyprlandControls.enable = lib.mkDefault true; - pagedmovScripts.nixShortcuts.enable = lib.mkDefault true; + movScripts.enable = lib.mkDefault true; + movScripts.commandScripts.enable = lib.mkDefault true; + movScripts.hyprlandControls.enable = lib.mkDefault true; + movScripts.nixShortcuts.enable = lib.mkDefault true; } diff --git a/modules/home/scripts/default.nix b/modules/home/scripts/default.nix index bd3c7b1..d9f7beb 100644 --- a/modules/home/scripts/default.nix +++ b/modules/home/scripts/default.nix @@ -20,67 +20,75 @@ viconf = import ./commands/viconf.nix { inherit pkgs; }; chscheme = import ./wm-controls/chscheme.nix { inherit pkgs; }; chpaper = import ./wm-controls/chpaper.nix { inherit pkgs; }; + scriptOverride = + doc: + group: + name: + lib.mkEnableOption + "${doc}" // { + default = config.movScripts.enable && config.movScripts.${group}.enable; + }; in { options = { - pagedmovScripts.enable = lib.mkEnableOption "Enables all pagedmov's scripts"; + movScripts.enable = lib.mkEnableOption "Enables all pagedmov's scripts"; # Enable or disable by group - pagedmovScripts.commandScripts.enable = + movScripts.commandScripts.enable = lib.mkEnableOption "Enables all command scripts"; - pagedmovScripts.hyprlandControls.enable = + movScripts.hyprlandControls.enable = lib.mkEnableOption "Enables all Hyprland control scripts"; - pagedmovScripts.nixShortcuts.enable = + movScripts.nixShortcuts.enable = lib.mkEnableOption "Enables all Nix shortcut scripts"; - # These options override individual scripts - pagedmovScripts.commandScripts.invoke.enable = - lib.mkDefault (config.pagedmovScripts.commandScripts.enable) // lib.mkEnableOption "Enables the invoke command"; - pagedmovScripts.commandScripts.runbg.enable = - lib.mkDefault (config.pagedmovScripts.commandScripts.enable) // lib.mkEnableOption "Enables the runbg command - written by FrostPhoenix"; - pagedmovScripts.commandScripts.splash.enable = - lib.mkDefault (config.pagedmovScripts.commandScripts.enable) // lib.mkEnableOption "Enables the splash screen when opening a terminal"; - pagedmovScripts.commandScripts.toolbelt.enable = - lib.mkDefault (config.pagedmovScripts.commandScripts.enable) // lib.mkEnableOption "Enables the toolbelt command"; - pagedmovScripts.commandScripts.viconf.enable = - lib.mkDefault (config.pagedmovScripts.commandScripts.enable) // lib.mkEnableOption "Enables the viconf command"; + # Individual options using scriptOverride or mkEnableOption directly + movScripts.commandScripts.invoke.enable = + scriptOverride "Enables the invoke command" "commandScripts" "invoke"; + movScripts.commandScripts.runbg.enable = + scriptOverride "Enables the runbg command - written by FrostPhoenix" "commandScripts" "runbg"; + movScripts.commandScripts.splash.enable = + scriptOverride "Enables the splash screen when opening a terminal" "commandScripts" "splash"; + movScripts.commandScripts.toolbelt.enable = + scriptOverride "Enables the toolbelt command" "commandScripts" "toolbelt"; + movScripts.commandScripts.viconf.enable = + scriptOverride "Enables the viconf command" "commandScripts" "viconf"; - pagedmovScripts.hyprlandControls.chpaper.enable = - lib.mkDefault (config.pagedmovScripts.hyprlandControls.enable) // lib.mkEnableOption "Enables the chpaper command"; - pagedmovScripts.hyprlandControls.scheck.enable = - lib.mkDefault (config.pagedmovScripts.hyprlandControls.enable) // lib.mkEnableOption "Enables the scheck command"; - pagedmovScripts.hyprlandControls.chscheme.enable = - lib.mkDefault (config.pagedmovScripts.hyprlandControls.enable) // lib.mkEnableOption "Enables the chscheme command"; - pagedmovScripts.hyprlandControls.keyring.enable = - lib.mkDefault (config.pagedmovScripts.hyprlandControls.enable) // lib.mkEnableOption "Enables the keyring command"; - pagedmovScripts.hyprlandControls.moveonscreen.enable = - lib.mkDefault (config.pagedmovScripts.hyprlandControls.enable) // lib.mkEnableOption "Ensures floating windows remain on screen"; - pagedmovScripts.hyprlandControls.switchmon.enable = - lib.mkDefault (config.pagedmovScripts.hyprlandControls.enable) // lib.mkEnableOption "Moves cursor to the center of the second monitor"; + movScripts.hyprlandControls.chpaper.enable = + scriptOverride "Enables the chpaper command" "hyprlandControls" "chpaper"; + movScripts.hyprlandControls.scheck.enable = + scriptOverride "Enables the scheck command" "hyprlandControls" "scheck"; + movScripts.hyprlandControls.chscheme.enable = + scriptOverride "Enables the chscheme command" "hyprlandControls" "chscheme"; + movScripts.hyprlandControls.keyring.enable = + scriptOverride "Enables the keyring command" "hyprlandControls" "keyring"; + movScripts.hyprlandControls.moveonscreen.enable = + scriptOverride "Ensures floating windows remain on screen" "hyprlandControls" "moveonscreen"; + movScripts.hyprlandControls.switchmon.enable = + scriptOverride "Moves cursor to the center of the second monitor" "hyprlandControls" "switchmon"; - pagedmovScripts.nixShortcuts.garbage-collect.enable = - lib.mkDefault (config.pagedmovScripts.nixShortcuts.enable) // lib.mkEnableOption "Enables the garbage-collect script"; - pagedmovScripts.nixShortcuts.nsp.enable = - lib.mkDefault (config.pagedmovScripts.nixShortcuts.enable) // lib.mkEnableOption "Enables nsp as an alias for 'nix-shell -p'"; - pagedmovScripts.nixShortcuts.rebuild.enable = - lib.mkDefault (config.pagedmovScripts.nixShortcuts.enable) // lib.mkEnableOption "Enables rebuild as an alias for 'sudo nixos-rebuild switch'"; + movScripts.nixShortcuts.garbage-collect.enable = + scriptOverride "Enables the garbage-collect script" "nixShortcuts" "garbage-collect"; + movScripts.nixShortcuts.nsp.enable = + scriptOverride "Enables nsp as an alias for 'nix-shell -p'" "nixShortcuts" "nsp"; + movScripts.nixShortcuts.rebuild.enable = + scriptOverride "Enables rebuild as an alias for 'sudo nixos-rebuild switch'" "nixShortcuts" "rebuild"; }; - config = lib.mkIf config.pagedmovScripts.enable { - home.packages = lib.optionals config.pagedmovScripts.commandScripts.invoke.enable [ invoke ] - ++ lib.optionals config.pagedmovScripts.commandScripts.runbg.enable [ runbg ] - ++ lib.optionals config.pagedmovScripts.commandScripts.splash.enable [ splash ] - ++ lib.optionals config.pagedmovScripts.commandScripts.toolbelt.enable [ toolbelt ] - ++ lib.optionals config.pagedmovScripts.commandScripts.viconf.enable [ viconf ] + config = lib.mkIf config.movScripts.enable { + home.packages = lib.optionals config.movScripts.commandScripts.invoke.enable [ invoke ] + ++ lib.optionals config.movScripts.commandScripts.runbg.enable [ runbg ] + ++ lib.optionals config.movScripts.commandScripts.splash.enable [ splash ] + ++ lib.optionals config.movScripts.commandScripts.toolbelt.enable [ toolbelt ] + ++ lib.optionals config.movScripts.commandScripts.viconf.enable [ viconf ] - ++ lib.optionals config.pagedmovScripts.hyprlandControls.chpaper.enable [ chpaper ] - ++ lib.optionals config.pagedmovScripts.hyprlandControls.scheck.enable [ scheck ] - ++ lib.optionals config.pagedmovScripts.hyprlandControls.chscheme.enable [ chscheme ] - ++ lib.optionals config.pagedmovScripts.hyprlandControls.keyring.enable [ keyring ] - ++ lib.optionals config.pagedmovScripts.hyprlandControls.moveonscreen.enable [ moveonscreen ] - ++ lib.optionals config.pagedmovScripts.hyprlandControls.switchmon.enable [ switchmon ] + ++ lib.optionals config.movScripts.hyprlandControls.chpaper.enable [ chpaper ] + ++ lib.optionals config.movScripts.hyprlandControls.scheck.enable [ scheck ] + ++ lib.optionals config.movScripts.hyprlandControls.chscheme.enable [ chscheme ] + ++ lib.optionals config.movScripts.hyprlandControls.keyring.enable [ keyring ] + ++ lib.optionals config.movScripts.hyprlandControls.moveonscreen.enable [ moveonscreen ] + ++ lib.optionals config.movScripts.hyprlandControls.switchmon.enable [ switchmon ] - ++ lib.optionals config.pagedmovScripts.nixShortcuts.garbage-collect.enable [ garbage-collect ] - ++ lib.optionals config.pagedmovScripts.nixShortcuts.nsp.enable [ nsp ] - ++ lib.optionals config.pagedmovScripts.nixShortcuts.rebuild.enable [ rebuild ]; + ++ lib.optionals config.movScripts.nixShortcuts.garbage-collect.enable [ garbage-collect ] + ++ lib.optionals config.movScripts.nixShortcuts.nsp.enable [ nsp ] + ++ lib.optionals config.movScripts.nixShortcuts.rebuild.enable [ rebuild ]; }; } From 4aec3066a0f0a2ea6c3b9e3eaeb8e7f206386bea Mon Sep 17 00:00:00 2001 From: pagedmov Date: Fri, 1 Nov 2024 23:39:56 -0400 Subject: [PATCH 07/12] made module options false by default --- hosts/desktop/config.nix | 15 +++++++++++++++ hosts/desktop/home.nix | 37 ++++++++++++++++++++++++++++++++++++- modules/sys/default.nix | 24 ++++++++++++------------ 3 files changed, 63 insertions(+), 13 deletions(-) diff --git a/hosts/desktop/config.nix b/hosts/desktop/config.nix index b4fe253..dda1bf7 100644 --- a/hosts/desktop/config.nix +++ b/hosts/desktop/config.nix @@ -5,6 +5,21 @@ ./hardware.nix ./home.nix ]; + + # My module options + networkModule.enable = true; + nixSettings.enable = true; + bootLoader.enable = true; + issue.enable = true; + sddmConfig.enable = true; + stylixConfig.enable = true; + gamingPkgs.enable = true; + steamConfig.enable = true; + sysPkgs.enable = true; + sysProgs.enable = true; + sysServices.enable = true; + virtConfig.enable = true; + nix = { settings = { auto-optimise-store = true; diff --git a/hosts/desktop/home.nix b/hosts/desktop/home.nix index 85a47ed..7c8fd22 100644 --- a/hosts/desktop/home.nix +++ b/hosts/desktop/home.nix @@ -20,17 +20,52 @@ in { extraSpecialArgs = {inherit self inputs host wallpaper scheme username nur;}; users = { ${username} = { + programs.home-manager.enable = true; imports = [ inputs.spicetify-nix.homeManagerModules.default inputs.self.outputs.homeManagerModules.default ]; + + # My custom home-manager modules + homeFiles.enable = true; + + # modules/home/environment + hyprlandConfig.enable = true; + autojumpConfig.enable = true; + stylixHomeConfig.enable = true; + waybarConfig.enable = true; + gtkConfig.enable = true; + spicetifyConfig.enable = true; + starshipConfig.enable = true; + + # modules/home/programs + btopConfig.enable = true; + swayncConfig.enable = true; + userPkgs.enable = true; + cavaConfig.enable = true; + ezaConfig.enable = true; + firefoxConfig.enable = true; + fuzzelConfig.enable = true; + fzfConfig.enable = true; + gitConfig.enable = true; + kittyConfig.enable = true; + yaziConfig.enable = true; + zshConfig.enable = true; + passConfig.enable = true; + batConfig.enable = true; + + # modules/home/scripts + movScripts.enable = true; + movScripts.commandScripts.enable = true; + movScripts.hyprlandControls.enable = true; + movScripts.nixShortcuts.enable = true; + dconf.settings = lib.mkIf config.virtConfig.enable { "org/virt-manager/virt-manager/connections" = { autoconnect = ["qemu:///system"]; uris = ["qemu:///system"]; }; }; - programs.home-manager.enable = true; home = { username = "${username}"; homeDirectory = "/home/${username}"; diff --git a/modules/sys/default.nix b/modules/sys/default.nix index 0ba1757..e617c81 100644 --- a/modules/sys/default.nix +++ b/modules/sys/default.nix @@ -14,17 +14,17 @@ ./environment ]; - networkModule.enable = lib.mkDefault true; - nixSettings.enable = lib.mkDefault true; - bootLoader.enable = lib.mkDefault true; - issue.enable = lib.mkDefault true; - sddmConfig.enable = lib.mkDefault true; - stylixConfig.enable = lib.mkDefault true; - gamingPkgs.enable = lib.mkDefault true; - steamConfig.enable = lib.mkDefault true; - sysPkgs.enable = lib.mkDefault true; - sysProgs.enable = lib.mkDefault true; - sysServices.enable = lib.mkDefault true; - virtConfig.enable = lib.mkDefault true; + networkModule.enable = lib.mkDefault false; + nixSettings.enable = lib.mkDefault false; + bootLoader.enable = lib.mkDefault false; + issue.enable = lib.mkDefault false; + sddmConfig.enable = lib.mkDefault false; + stylixConfig.enable = lib.mkDefault false; + gamingPkgs.enable = lib.mkDefault false; + steamConfig.enable = lib.mkDefault false; + sysPkgs.enable = lib.mkDefault false; + sysProgs.enable = lib.mkDefault false; + sysServices.enable = lib.mkDefault false; + virtConfig.enable = lib.mkDefault false; powerProfiles.enable = lib.mkDefault false; } From b982fd076d2e408620dc43385cd5c59ca126b5d1 Mon Sep 17 00:00:00 2001 From: pagedmov Date: Sat, 2 Nov 2024 05:14:36 -0400 Subject: [PATCH 08/12] added basic documentation for module options --- docs/options/home_options.md | 230 ++++++++++++++++++++++++++++++ docs/options/system_options.md | 79 ++++++++++ modules/home/default.nix | 52 +++---- modules/sys/software/packages.nix | 3 + 4 files changed, 338 insertions(+), 26 deletions(-) create mode 100644 docs/options/home_options.md create mode 100644 docs/options/system_options.md diff --git a/docs/options/home_options.md b/docs/options/home_options.md new file mode 100644 index 0000000..5ac3ccb --- /dev/null +++ b/docs/options/home_options.md @@ -0,0 +1,230 @@ +# Home-Manager Options + +## homeFiles.enable + - Enables my declared files + - Type: Boolean + - Default: true + - Defined in 'modules/home/files/neofetch.nix' + +## hyprlandConfig.enable + - Enables my custom hyprland configuration + - Type: Boolean + - Default: true + - Defined in 'modules/home/environment/hyprland.nix' + +## autojumpConfig.enable + - Enables my autojump options + - Type: Boolean + - Default: true + - Defined in 'modules/home/programs/autojump.nix' + +## stylixHomeConfig.enable + - Enables my stylix home-manager options + - Type: Boolean + - Default: true + - Defined in 'modules/home/environment/stylix.nix' + +## waybarConfig.enable + - Enables my custom waybar configuration + - Type: Boolean + - Default: true + - Defined in 'modules/home/environment/waybar.nix' + +## gtkConfig.enable + - Enables my gtk configuration + - Type: Boolean + - Default: true + - Defined in 'modules/home/environment/gtk.nix' + +## spicetifyConfig.enable + - Enables my spicetify configuration + - Type: Boolean + - Default: true + - Defined in 'modules/home/environment/spicetify.nix' + +## starshipConfig.enable + - Enables my starship configuration + - Type: Boolean + - Default: true + - Defined in 'modules/home/environment/starship.nix' + +## btopConfig.enable + - Enables my btop configuration + - Type: Boolean + - Default: true + - Defined in 'modules/home/programs/btop.nix' + +## swayncConfig.enable + - Enables my swaync configuration + - Type: Boolean + - Default: true + - Defined in 'modules/home/environment/swaync.nix' + +## userPkgs.enable + - Enables my default user packages + - Type: Boolean + - Default: true + - Defined in 'modules/home/environment/userpkgs.nix' + +## cavaConfig.enable + - Enables my cava configuration + - Type: Boolean + - Default: true + - Defined in 'modules/home/programs/cava.nix' + +## ezaConfig.enable + - Enables my eza configuration + - Type: Boolean + - Default: true + - Defined in 'modules/home/programs/eza.nix' + +## firefoxConfig.enable + - Enables my firefox configuration + - Type: Boolean + - Default: true + - Defined in 'modules/home/programs/firefox.nix' + +## fuzzelConfig.enable + - Enables my fuzzel configuration + - Type: Boolean + - Default: true + - Defined in 'modules/home/programs/fuzzel.nix' + +## fzfConfig.enable + - Enables my fzf configuration + - Type: Boolean + - Default: true + - Defined in 'modules/home/programs/fzf.nix' + +## gitConfig.enable + - Enables my git configuration + - Type: Boolean + - Default: true + - Defined in 'modules/home/programs/git.nix' + +## kittyConfig.enable + - Enables my kitty configuration + - Type: Boolean + - Default: true + - Defined in 'modules/home/programs/kitty.nix' + +## yaziConfig.enable + - Enables my yazi configuration + - Type: Boolean + - Default: true + - Defined in 'modules/home/programs/yazi.nix' + +## zshConfig.enable + - Enables my zsh configuration + - Type: Boolean + - Default: true + - Defined in 'modules/home/environment/zshell.nix' + +## passConfig.enable + - Enables my password-store configuration + - Type: Boolean + - Default: true + - Defined in 'modules/home/programs/password-store.nix' + +## batConfig.enable + - Enables my bat configuration + - Type: Boolean + - Default: true + - Defined in 'modules/home/programs/bat.nix' + +## movScripts.enable + - Enables my custom script binaries + - Type: Boolean + - Default: true + - Defined in 'modules/home/scripts/default.nix' + +## movScripts.commandScripts +### enable + - Enables my custom command scripts + - Type: Boolean + - Default: true + - Defined in 'modules/home/scripts/default.nix' +### invoke.enable + - Enables the invoke command + - Type: Boolean + - Default: true + - Defined in 'modules/home/scripts/default.nix' +### runbg.enable + - Enables the runbg command + - Type: Boolean + - Default: true + - Defined in 'modules/home/scripts/default.nix' +### splash.enable + - Enables the splash command + - Type: Boolean + - Default: true + - Defined in 'modules/home/scripts/default.nix' +### toolbelt.enable + - Enables the toolbelt command + - Type: Boolean + - Default: true + - Defined in 'modules/home/scripts/default.nix' +### viconf.enable + - Enables the viconf command + - Type: Boolean + - Default: true + - Defined in 'modules/home/scripts/default.nix' + +## movScripts.hyprlandControls +### enable + - Enables my hyprland control shortcut scripts + - Type: Boolean + - Default: true + - Defined in 'modules/home/scripts/default.nix' +### chpaper.enable + - Enables the chpaper command + - Type: Boolean + - Default: true + - Defined in 'modules/home/scripts/default.nix' +### scheck.enable + - Enables the scheck command + - Type: Boolean + - Default: true + - Defined in 'modules/home/scripts/default.nix' +### chscheme.enable + - Enables the chscheme command + - Type: Boolean + - Default: true + - Defined in 'modules/home/scripts/default.nix' +### keyring.enable + - Enables the keyring command + - Type: Boolean + - Default: true + - Defined in 'modules/home/scripts/default.nix' +### moveonscreen.enable + - Enables the moveonscreen command + - Type: Boolean + - Default: true + - Defined in 'modules/home/scripts/default.nix' +### switchmon.enable + - Enables the switchmon command + - Type: Boolean + - Default: true + - Defined in 'modules/home/scripts/default.nix' + +## movScripts.nixShortcuts +### enable + - Enables my NixOS aliases + - Type: Boolean + - Default: true + - Defined in 'modules/home/scripts/default.nix' +### garbage-collect.enable + - Enables the garbage-collect command + - Type: Boolean + - Default: true + - Defined in 'modules/home/scripts/default.nix' +### nsp.enable + - Enables the nsp command + - Type: Boolean + - Default: true + - Defined in 'modules/home/scripts/default.nix' +### rebuild.enable + - Enables the rebuild command + - Type: Boolean + - Default: true + - Defined in 'modules/home/scripts/default.nix' diff --git a/docs/options/system_options.md b/docs/options/system_options.md new file mode 100644 index 0000000..1724386 --- /dev/null +++ b/docs/options/system_options.md @@ -0,0 +1,79 @@ +# System Options + +## networkModule.enable + - Enables my network configuration + - Type: Boolean + - Default: false + - Defined in 'modules/sys/hardware/network.nix' + +## nixSettings.enable + - Enables my NixOS settings + - Type: Boolean + - Default: false + - Defined in 'modules/sys/environment/nix.nix' + +## bootLoader.enable + - Enables my bootloader settings + - Type: Boolean + - Default: false + - Defined in 'modules/sys/hardware/bootloader.nix' + +## issue.enable + - Enables my custom /etc/issue tty splash screen + - Type: Boolean + - Default: false + - Defined in 'modules/sys/environment/issue.nix' + +## sddmConfig.enable + - Enables my catppuccin-sddm configuration + - Type: Boolean + - Default: false + - Defined in 'modules/sys/environment/sddm.nix' + +## stylixConfig.enable + - Enables stylix for system theming + - Type: Boolean + - Default: false + - Defined in 'modules/sys/environment/stylix.nix' + +## gamingPkgs.enable + - Enables gaming-related packages + - Type: Boolean + - Default: false + - Defined in 'modules/sys/software/gaming/gaming_pkgs.nix' + +## steamConfig.enable + - Enables my Steam configuration + - Type: Boolean + - Default: false + - Defined in 'modules/sys/software/gaming/steam.nix' + +## sysPkgs.enable + - Installs my default system packages + - Type: Boolean + - Default: false + - Defined in 'modules/sys/software/packages.nix' + +## sysProgs.enable + - Enables + - Type: Boolean + - Default: false + - Defined in 'modules/sys/software/programs.nix' + +## sysServices.enable + - Description + - Type: Boolean + - Default: false + - Defined in 'modules/sys/software/services.nix' + +## virtConfig.enable + - Description + - Type: Boolean + - Default: false + - Defined in 'modules/sys/software/virtualization.nix' + +## powerProfiles.enable + - Description + - Type: Boolean + - Default: false + - Defined in 'modules/sys/hardware/powerprofiles.nix' diff --git a/modules/home/default.nix b/modules/home/default.nix index db36626..2943b06 100644 --- a/modules/home/default.nix +++ b/modules/home/default.nix @@ -16,36 +16,36 @@ ]; # ./files - homeFiles.enable = lib.mkDefault true; + homeFiles.enable = lib.mkDefault false; # ./environment - hyprlandConfig.enable = lib.mkDefault true; - autojumpConfig.enable = lib.mkDefault true; - stylixHomeConfig.enable = lib.mkDefault true; - waybarConfig.enable = lib.mkDefault true; - gtkConfig.enable = lib.mkDefault true; - spicetifyConfig.enable = lib.mkDefault true; - starshipConfig.enable = lib.mkDefault true; + hyprlandConfig.enable = lib.mkDefault false; + autojumpConfig.enable = lib.mkDefault false; + stylixHomeConfig.enable = lib.mkDefault false; + waybarConfig.enable = lib.mkDefault false; + gtkConfig.enable = lib.mkDefault false; + spicetifyConfig.enable = lib.mkDefault false; + starshipConfig.enable = lib.mkDefault false; # ./programs - btopConfig.enable = lib.mkDefault true; - swayncConfig.enable = lib.mkDefault true; - userPkgs.enable = lib.mkDefault true; - cavaConfig.enable = lib.mkDefault true; - ezaConfig.enable = lib.mkDefault true; - firefoxConfig.enable = lib.mkDefault true; - fuzzelConfig.enable = lib.mkDefault true; - fzfConfig.enable = lib.mkDefault true; - gitConfig.enable = lib.mkDefault true; - kittyConfig.enable = lib.mkDefault true; - yaziConfig.enable = lib.mkDefault true; - zshConfig.enable = lib.mkDefault true; - passConfig.enable = lib.mkDefault true; - batConfig.enable = lib.mkDefault true; + btopConfig.enable = lib.mkDefault false; + swayncConfig.enable = lib.mkDefault false; + userPkgs.enable = lib.mkDefault false; + cavaConfig.enable = lib.mkDefault false; + ezaConfig.enable = lib.mkDefault false; + firefoxConfig.enable = lib.mkDefault false; + fuzzelConfig.enable = lib.mkDefault false; + fzfConfig.enable = lib.mkDefault false; + gitConfig.enable = lib.mkDefault false; + kittyConfig.enable = lib.mkDefault false; + yaziConfig.enable = lib.mkDefault false; + zshConfig.enable = lib.mkDefault false; + passConfig.enable = lib.mkDefault false; + batConfig.enable = lib.mkDefault false; # ./scripts - movScripts.enable = lib.mkDefault true; - movScripts.commandScripts.enable = lib.mkDefault true; - movScripts.hyprlandControls.enable = lib.mkDefault true; - movScripts.nixShortcuts.enable = lib.mkDefault true; + movScripts.enable = lib.mkDefault false; + movScripts.commandScripts.enable = lib.mkDefault false; + movScripts.hyprlandControls.enable = lib.mkDefault false; + movScripts.nixShortcuts.enable = lib.mkDefault false; } diff --git a/modules/sys/software/packages.nix b/modules/sys/software/packages.nix index be01caf..96a62c6 100644 --- a/modules/sys/software/packages.nix +++ b/modules/sys/software/packages.nix @@ -44,6 +44,9 @@ nix-prefetch-scripts nixos-option nix-search-cli + nix-template + mkdocs + python3Packages.mkdocs-material nvd openssl p7zip From acfea079b1d67b4f95bff0f1bb343f35723963eb Mon Sep 17 00:00:00 2001 From: pagedMov Date: Sat, 2 Nov 2024 05:21:51 -0400 Subject: [PATCH 09/12] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 735bb0e..7bfc138 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,11 @@ Currently there are two complete system configurations available. These are: * **Mercury** - My laptop configuration. My laptop is a pretty weak machine so this configuration is stripped down a bit. The 'Xenon' config is my server configuration and is highly unlikely to be of use to anyone but me, as the setup has some very specific use-cases. +## Modules + +This config uses custom modules for the home-manager and system configurations. Basically every part of the configuration can be toggled using an option, and some configs have extra options as well. +All of the options declared in these modules can be found in the documentation under docs/options + ## Scripts ```chpaper``` - opens a fzf window with filenames and previews of images in $FLAKEPATH/assets/wallpapers. Picking one replaces the existing wallpaper path in $FLAKEPATH/flake.nix with the one you chose. From 44e1498e97155d698e07e6f175c2927834274609 Mon Sep 17 00:00:00 2001 From: pagedmov Date: Sat, 2 Nov 2024 05:49:22 -0400 Subject: [PATCH 10/12] fixed zshell.nix, decided to consolidate all declared home files into files.nix instead of having a dedicated directory --- hosts/desktop/home.nix | 42 ++++--- modules/home/default.nix | 2 +- modules/home/environment/starship.nix | 23 ++-- modules/home/environment/zshell.nix | 174 ++++---------------------- modules/home/files.nix | 120 ++++++++++++++++++ modules/home/files/default.nix | 7 -- modules/home/files/neofetch.nix | 114 ----------------- 7 files changed, 182 insertions(+), 300 deletions(-) create mode 100644 modules/home/files.nix delete mode 100644 modules/home/files/default.nix delete mode 100644 modules/home/files/neofetch.nix diff --git a/hosts/desktop/home.nix b/hosts/desktop/home.nix index 7c8fd22..1786879 100644 --- a/hosts/desktop/home.nix +++ b/hosts/desktop/home.nix @@ -27,32 +27,34 @@ in { ]; # My custom home-manager modules + + # modules/home/files homeFiles.enable = true; # modules/home/environment - hyprlandConfig.enable = true; - autojumpConfig.enable = true; + hyprlandConfig.enable = true; + autojumpConfig.enable = true; stylixHomeConfig.enable = true; - waybarConfig.enable = true; - gtkConfig.enable = true; - spicetifyConfig.enable = true; - starshipConfig.enable = true; + waybarConfig.enable = true; + gtkConfig.enable = true; + spicetifyConfig.enable = true; + starshipConfig.enable = true; # modules/home/programs - btopConfig.enable = true; - swayncConfig.enable = true; - userPkgs.enable = true; - cavaConfig.enable = true; - ezaConfig.enable = true; - firefoxConfig.enable = true; - fuzzelConfig.enable = true; - fzfConfig.enable = true; - gitConfig.enable = true; - kittyConfig.enable = true; - yaziConfig.enable = true; - zshConfig.enable = true; - passConfig.enable = true; - batConfig.enable = true; + btopConfig.enable = true; + swayncConfig.enable = true; + userPkgs.enable = true; + cavaConfig.enable = true; + ezaConfig.enable = true; + firefoxConfig.enable = true; + fuzzelConfig.enable = true; + fzfConfig.enable = true; + gitConfig.enable = true; + kittyConfig.enable = true; + yaziConfig.enable = true; + zshConfig.enable = true; + passConfig.enable = true; + batConfig.enable = true; # modules/home/scripts movScripts.enable = true; diff --git a/modules/home/default.nix b/modules/home/default.nix index 2943b06..005fd6c 100644 --- a/modules/home/default.nix +++ b/modules/home/default.nix @@ -12,7 +12,7 @@ ./programs ./environment ./scripts - ./files + ./files.nix ]; # ./files diff --git a/modules/home/environment/starship.nix b/modules/home/environment/starship.nix index a4d4e73..d5801cc 100644 --- a/modules/home/environment/starship.nix +++ b/modules/home/environment/starship.nix @@ -11,7 +11,7 @@ right_format = "($custom)"; format = lib.concatStrings [ - "($username)($ssh_symbol)($hostname)(bold white)($cmd_duration)($character)" + "($ssh_symbol)($username)($hostname)(bold white)($cmd_duration)($character)" "($git_branch)($git_status)($rust)($nix-shell)" "($directory)" "$line_break[οŒ“ > ](bold #89b4fa)" @@ -48,17 +48,18 @@ style = "bold purple"; }; - hostname = { - ssh_symbol = "🌐"; - ssh_only = false; - format = "[$ssh_symbol](bold blue)[$hostname](bold red)"; - }; + hostname = { + ssh_symbol = "🌐"; + ssh_only = false; + format = "[@](bold blue)[$hostname](bold red)"; + }; - custom.shellver = { - command = "zsh --version"; - when = ''test $SHELL = "/run/current-system/sw/bin/zsh"''; - symbol = "ξš‘"; - style = "bold magenta"; + custom.shellver = { + command = "zsh --version"; + when = ''test $SHELL = "/run/current-system/sw/bin/zsh"''; + symbol = "ξš‘"; + style = "bold magenta"; + }; }; }; }; diff --git a/modules/home/environment/zshell.nix b/modules/home/environment/zshell.nix index 84750d5..10f8620 100644 --- a/modules/home/environment/zshell.nix +++ b/modules/home/environment/zshell.nix @@ -9,128 +9,25 @@ }; programs.zsh = { enable = true; - highlight = "fg=#4C566A,underline"; - }; - shellAliases = { - grep = "grep --color=auto"; - yazi = "y"; - vi = "nvim"; - mv = "mv -v"; - cp = "cp -vr"; - gt = "gtrash"; - gtp = "playshellsound ${self}/assets/sound/rm.wav; gtrash put"; - sr = "source ~/.zshrc"; - ".." = "cd .."; - rm = "echo 'use \"gtp\" instead'"; - psg = "ps aux | grep -v grep | grep -i -e VSZ -e"; - mkdir = "mkdir -p"; - pk = "pkill -9 -f"; - svcu = "systemctl --user"; - svc = "sudo systemctl"; - viflake = "nvim flake.nix"; - - #git - "ga" = "playshellsound ${self}/assets/sound/gitadd.wav; git add"; - gco = "gitcheckout_sfx"; - gcomm = "gitcommit_sfx"; - gpush = "gitpush_sfx"; - gpull = "gitpull_sfx"; - greb = "gitrebase_sfx"; - }; - initExtra = '' - playshellsound() { - if [ $# -ne 1 ]; then - echo "Usage: playshellsound " - return 1 - fi - if ! scheck; then - return 0 - else - runbg aplay "$1" - fi - } - gitcheckout_sfx() { - if git checkout "$@"; then - playshellsound ${self}/assets/sound/gitcheckout.wav - return 0 - else - playshellsound ${self}/assets/sound/error.wav - return 1 - fi - } - gitrebase_sfx() { - if git rebase "$@"; then - playshellsound ${self}/assets/sound/gitrebase.wav - return 0 - else - playshellsound ${self}/assets/sound/error.wav - return 1 - fi - } - gitcommit_sfx() { - if git commit "$@"; then - playshellsound ${self}/assets/sound/gitcommit.wav - return 0 - else - playshellsound ${self}/assets/sound/error.wav - return 1 - fi - } - gitpush_sfx() { - if git push "$@"; then - playshellsound ${self}/assets/sound/gitpush.wav - return 0 - else - playshellsound ${self}/assets/sound/error.wav - return 1 - fi - } - gitpull_sfx() { - if git pull "$@"; then - playshellsound ${self}/assets/sound/gitpull.wav - return 0 - else - playshellsound ${self}/assets/sound/error.wav - return 1 - fi - } - unalias ls - ls() { - eza -1 --group-directories-first --icons "$@" - playshellsound ${self}/assets/sound/ls.wav - return 0 - } - - mkcd() { - mkdir -p "$1" && cd "$1" - } - - y() { - local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" - yazi "$@" --cwd-file="$tmp" - if cwd="$(command cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then - builtin cd -- "$cwd" - fi - rm -f -- "$tmp" - } - - cd() { - local prev_sounds_enabled="$SOUNDS_ENABLED" - SOUNDS_ENABLED=0 - eza -1 --group-directories-first --icons "$@" - SOUNDS_ENABLED=$prev_sounds_enabled - builtin cd "$@" - playshellsound /nix/store/7a9w7np3qrvmzxjbs7xj05qq2yccgfsj-source/assets/sound/cd.wav - return 0 - } - if [ ! -e $HOME/.zsh_history ]; then - touch $HOME/.zsh_history - chmod 600 $HOME/.zsh_history - fi - setopt APPEND_HISTORY # Append history to the history file (don't overwrite) - setopt INC_APPEND_HISTORY # Append to the history file incrementally - setopt SHARE_HISTORY # Share history between all zsh sessions + shellAliases = { + grep = "grep --color=auto"; + yazi = "y"; + vi = "nvim"; + mv = "mv -v"; + cp = "cp -vr"; + gt = "gtrash"; + gtp = "playshellsound ${self}/assets/sound/rm.wav; gtrash put"; + sr = "source ~/.zshrc"; + ".." = "cd .."; + rm = "echo 'use \"gtp\" instead'"; + psg = "ps aux | grep -v grep | grep -i -e VSZ -e"; + mkdir = "mkdir -p"; + pk = "pkill -9 -f"; + svcu = "systemctl --user"; + svc = "sudo systemctl"; + viflake = "nvim flake.nix"; + }; sessionVariables = { SOUNDS_ENABLED = "1"; @@ -160,31 +57,6 @@ highlight = "fg=#4C566A,underline"; }; - shellAliases = { - grep = "grep --color=auto"; - yazi = "y"; - vi = "nvim"; - mv = "mv -v"; - cp = "cp -vr"; - gt = "gtrash"; - gtp = "playshellsound ${self}/assets/sound/rm.wav; gtrash put"; - sr = "source ~/.zshrc"; - ".." = "cd .."; - rm = "echo 'use \"gtp\" instead'"; - psg = "ps aux | grep -v grep | grep -i -e VSZ -e"; - mkdir = "mkdir -p"; - pk = "pkill -9 -f"; - svcu = "systemctl --user"; - svc = "sudo systemctl"; - viflake = "nvim flake.nix"; - - #git - "ga" = "playshellsound ${self}/assets/sound/gitadd.wav; git add"; - gcomm = "gitcommit_sfx"; - gpush = "gitpush_sfx"; - gpull = "gitpull_sfx"; - greb = "gitrebase_sfx"; - }; initExtra = '' playshellsound() { if [ $# -ne 1 ]; then @@ -197,6 +69,15 @@ runbg aplay "$1" fi } + gitcheckout_sfx() { + if git checkout "$@"; then + playshellsound ${self}/assets/sound/gitcheckout.wav + return 0 + else + playshellsound ${self}/assets/sound/error.wav + return 1 + fi + } gitrebase_sfx() { if git rebase "$@"; then playshellsound ${self}/assets/sound/gitrebase.wav @@ -270,7 +151,6 @@ setopt INC_APPEND_HISTORY # Append to the history file incrementally setopt SHARE_HISTORY # Share history between all zsh sessions - sessionVariables = { setopt CORRECT setopt NO_NOMATCH setopt LIST_PACKED diff --git a/modules/home/files.nix b/modules/home/files.nix new file mode 100644 index 0000000..7081622 --- /dev/null +++ b/modules/home/files.nix @@ -0,0 +1,120 @@ +{ lib, self, config, ... }: + +# This folder is for programs that do not have existing configuration modules in NixOS. +# Basically a to-do list for stuff I need to write my own modules for. +{ + options = { + homeFiles.enable = lib.mkEnableOption "enables declared custom files"; + }; + config = { + home.file = { + ".config/neofetch/config.conf".text = '' + username=$(whoami) + name_length=''${#username} + total_width=40 + side_length=$(( (total_width - name_length - 2) / 2 )) + + top_line=$(printf "─%.0s" $(seq 1 $side_length)) + top_line="$top_line $username " + top_line+=$(printf "─%.0s" $(seq 1 $side_length)) + + if (( (total_width - name_length) % 2 != 0 )); then + top_line+="─" + fi + + print_info() { + prin "β”Œ$top_line┐" + info " ​ ​ οŒ“ " distro + info " ​ ​ ξœ’ " kernel + info " ​ ​ ο’ˆ " wm + info " ​ ​ ο’‰ " shell + info " ​ ​ ξž• " term + info " ​ ​ ο€± " term_font + info " ​ ​ 󰏗 " packages + prin "β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜" + info cols + prin "\n \n \n \n \n ''${cl3}ο„‘ \n \n ''${cl5}ο„‘ \n \n ''${cl2}ο„‘ \n \n ''${cl6}ο„‘ \n \n ''${cl4}ο„‘ \n \n ''${cl1}ο„‘ \n \n ''${cl7}ο„‘ \n \n ''${cl0}ο„‘" + } + + kernel_shorthand="on" + distro_shorthand="on" + os_arch="off" + uptime_shorthand="on" + memory_percent="on" + package_managers="off" + shell_path="off" + shell_version="on" + speed_type="bios_limit" + speed_shorthand="on" + gtk_shorthand="on" + gtk2="on" + gtk3="on" + colors=(distro) + bold="on" + underline_enabled="on" + underline_char="-" + separator=" ο…Έ " + color_blocks="off" + block_range=(0 15) # Colorblocks + + # Colors for custom colorblocks + magenta="\033[1;35m" + green="\033[1;32m" + white="\033[1;37m" + blue="\033[1;34m" + red="\033[1;31m" + black="\033[1;40;30m" + yellow="\033[1;33m" + cyan="\033[1;36m" + reset="\033[0m" + bgyellow="\033[1;43;33m" + bgwhite="\033[1;47;37m" + cl0="''${reset}" + cl1="''${magenta}" + cl2="''${green}" + cl3="''${white}" + cl4="''${blue}" + cl5="''${red}" + cl6="''${yellow}" + cl7="''${cyan}" + cl8="''${black}" + cl9="''${bgyellow}" + cl10="''${bgwhite}" + + block_width=4 + block_height=1 + + bar_char_elapsed="-" + bar_char_total="=" + bar_border="on" + bar_length=15 + bar_color_elapsed="distro" + bar_color_total="distro" + + cpu_display="on" + memory_display="on" + battery_display="on" + disk_display="on" + + image_backend="kitty" + image_source="${self}/assets/images/nixos-logo.png" + image_size="250px" + image_loop="off" + + aascii_distro="auto" + ascii_colors=(distro) + ascii_bold="on" + + crop_mode="normal" + crop_offset="center" + + gap=2 + + yoffset=0 + xoffset=0 + + stdout="off" + ''; + }; + }; +} diff --git a/modules/home/files/default.nix b/modules/home/files/default.nix deleted file mode 100644 index 46c0ae7..0000000 --- a/modules/home/files/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ ... }: - -# This folder is for programs that do not have existing configuration modules in NixOS. -# Basically a to-do list for stuff I need to write my own modules for. -{ - imports = [ ./neofetch.nix ]; -} diff --git a/modules/home/files/neofetch.nix b/modules/home/files/neofetch.nix deleted file mode 100644 index 56ca33b..0000000 --- a/modules/home/files/neofetch.nix +++ /dev/null @@ -1,114 +0,0 @@ -{lib, config, self, ...}: { - options = { - homeFiles.enable = lib.mkEnableOption "enables declared custom files"; - }; - config = lib.mkIf config.homeFiles.enable { - home.file.".config/neofetch/config.conf".text = '' - username=$(whoami) - name_length=''${#username} - total_width=40 - side_length=$(( (total_width - name_length - 2) / 2 )) - - top_line=$(printf "─%.0s" $(seq 1 $side_length)) - top_line="$top_line $username " - top_line+=$(printf "─%.0s" $(seq 1 $side_length)) - - if (( (total_width - name_length) % 2 != 0 )); then - top_line+="─" - fi - - print_info() { - prin "β”Œ$top_line┐" - info " ​ ​ οŒ“ " distro - info " ​ ​ ξœ’ " kernel - info " ​ ​ ο’ˆ " wm - info " ​ ​ ο’‰ " shell - info " ​ ​ ξž• " term - info " ​ ​ ο€± " term_font - info " ​ ​ 󰏗 " packages - prin "β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜" - info cols - prin "\n \n \n \n \n ''${cl3}ο„‘ \n \n ''${cl5}ο„‘ \n \n ''${cl2}ο„‘ \n \n ''${cl6}ο„‘ \n \n ''${cl4}ο„‘ \n \n ''${cl1}ο„‘ \n \n ''${cl7}ο„‘ \n \n ''${cl0}ο„‘" - } - - kernel_shorthand="on" - distro_shorthand="on" - os_arch="off" - uptime_shorthand="on" - memory_percent="on" - package_managers="off" - shell_path="off" - shell_version="on" - speed_type="bios_limit" - speed_shorthand="on" - gtk_shorthand="on" - gtk2="on" - gtk3="on" - colors=(distro) - bold="on" - underline_enabled="on" - underline_char="-" - separator=" ο…Έ " - color_blocks="off" - block_range=(0 15) # Colorblocks - - # Colors for custom colorblocks - magenta="\033[1;35m" - green="\033[1;32m" - white="\033[1;37m" - blue="\033[1;34m" - red="\033[1;31m" - black="\033[1;40;30m" - yellow="\033[1;33m" - cyan="\033[1;36m" - reset="\033[0m" - bgyellow="\033[1;43;33m" - bgwhite="\033[1;47;37m" - cl0="''${reset}" - cl1="''${magenta}" - cl2="''${green}" - cl3="''${white}" - cl4="''${blue}" - cl5="''${red}" - cl6="''${yellow}" - cl7="''${cyan}" - cl8="''${black}" - cl9="''${bgyellow}" - cl10="''${bgwhite}" - - block_width=4 - block_height=1 - - bar_char_elapsed="-" - bar_char_total="=" - bar_border="on" - bar_length=15 - bar_color_elapsed="distro" - bar_color_total="distro" - - cpu_display="on" - memory_display="on" - battery_display="on" - disk_display="on" - - image_backend="kitty" - image_source="${self}/assets/images/nixos-logo.png" - image_size="250px" - image_loop="off" - - aascii_distro="auto" - ascii_colors=(distro) - ascii_bold="on" - - crop_mode="normal" - crop_offset="center" - - gap=2 - - yoffset=0 - xoffset=0 - - stdout="off" - ''; - }; -} From eae58c0f135875529d3229aafc9f9f5df2e1243b Mon Sep 17 00:00:00 2001 From: pagedmov Date: Sat, 2 Nov 2024 06:35:01 -0400 Subject: [PATCH 11/12] laptop config has now integrated the module refactoring. Also updated flake.lock and fixed missing git aliases from previous commit --- flake.lock | 32 +++++----- flake.nix | 2 +- hosts/laptop/config.nix | 43 ++++++++----- hosts/laptop/home.nix | 96 +++++++++++++++++++++++++++++ modules/home/environment/zshell.nix | 7 +++ modules/sys/software/default.nix | 11 +--- 6 files changed, 151 insertions(+), 40 deletions(-) create mode 100644 hosts/laptop/home.nix diff --git a/flake.lock b/flake.lock index 959e710..b09005c 100644 --- a/flake.lock +++ b/flake.lock @@ -356,11 +356,11 @@ ] }, "locked": { - "lastModified": 1730016908, - "narHash": "sha256-bFCxJco7d8IgmjfNExNz9knP8wvwbXU4s/d53KOK6U0=", + "lastModified": 1730490306, + "narHash": "sha256-AvCVDswOUM9D368HxYD25RsSKp+5o0L0/JHADjLoD38=", "owner": "nix-community", "repo": "home-manager", - "rev": "e83414058edd339148dc142a8437edb9450574c8", + "rev": "1743615b61c7285976f85b303a36cdf88a556503", "type": "github" }, "original": { @@ -472,11 +472,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1730373668, - "narHash": "sha256-8p5JTUGFuhnyuF9lD98ioeE3zYaCmsizLWk4Y3KszAI=", + "lastModified": 1730499652, + "narHash": "sha256-De3YRKpowtm15xN7hK0PdBpu96wwSyQE+qFoq9Gi6lM=", "ref": "refs/heads/main", - "rev": "93b4478e70af6ffb08a4a66a6d0364c3296db296", - "revCount": 5396, + "rev": "32b18179dd789cde948c97eb3c2ebbdd6af36bf7", + "revCount": 5402, "submodules": true, "type": "git", "url": "https://github.com/hyprwm/Hyprland" @@ -822,11 +822,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1730368298, - "narHash": "sha256-5z4pDqRSSovXPPtN1BNEJOkGoCd/XSYuCWh8AsvoTio=", + "lastModified": 1730499477, + "narHash": "sha256-olt0Sx4alDxv3ko9BgbV3SsE2KQ/Tf0/Az1Fr9s2Y6U=", "owner": "nix-community", "repo": "nixvim", - "rev": "42ea1626cb002fa759a6b1e2841bfc80a4e59615", + "rev": "356896f58dde22ee16481b7c954e340dceec340d", "type": "github" }, "original": { @@ -837,11 +837,11 @@ }, "nur": { "locked": { - "lastModified": 1730411166, - "narHash": "sha256-o1JcjEnWhnxkkKXYN1gQeO53RUsQExFsgMOJ/FzuFX0=", + "lastModified": 1730540878, + "narHash": "sha256-JYfoVW5lsfv4bo87U6mqbC3Jh+EBImU5iUsHJlOkyAI=", "owner": "nix-community", "repo": "NUR", - "rev": "761c6a7d6859126681d206126ba26ec58306d068", + "rev": "57df81c2bcabc503171defb232a0e11710ddaaf9", "type": "github" }, "original": { @@ -918,11 +918,11 @@ ] }, "locked": { - "lastModified": 1730348281, - "narHash": "sha256-c5lP7JFqWlrEScvPXKxg7Z2+f5wdlznYZPjEa5jmEkw=", + "lastModified": 1730521028, + "narHash": "sha256-vZtg4J+jOADDKgS+s821PeJiTXfawan8mzX3JM3xjqc=", "owner": "gerg-l", "repo": "spicetify-nix", - "rev": "22d250d6a4dcc492a2d8836d3f2c901a09e7cb76", + "rev": "191323d81e19efa0be5071e17263851e62f35685", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 4241a9d..3bf797d 100644 --- a/flake.nix +++ b/flake.nix @@ -67,7 +67,7 @@ ) {} colors; in { - homeManagerModules.default = ./modules/home/default.nix; + homeManagerModules.default = ./modules/home; nixosConfigurations = { oganesson = nixpkgs.lib.nixosSystem { diff --git a/hosts/laptop/config.nix b/hosts/laptop/config.nix index 7b6b1de..bd52d19 100644 --- a/hosts/laptop/config.nix +++ b/hosts/laptop/config.nix @@ -1,7 +1,10 @@ {pkgs, config, ...}: { system.stateVersion = "24.05"; nixpkgs.config.allowUnfree = true; - imports = [ ./hardware.nix ]; + imports = [ + ./hardware.nix + ./home.nix + ]; powerProfiles.enable = true; boot = { @@ -14,21 +17,31 @@ ++ [pkgs.cpupower-gui]; }; - environment = { - variables = { - PATH = "${pkgs.clang-tools}/bin:$PATH"; - }; - shells = with pkgs; [ - zsh - bash - ]; - systemPackages = with pkgs; [ - acpi - brightnessctl - cpupower-gui - powertop - ]; + networkModule.enable = true; + nixSettings.enable = true; + bootLoader.enable = true; + issue.enable = true; + sddmConfig.enable = true; + stylixConfig.enable = true; + sysPkgs.enable = true; + sysProgs.enable = true; + sysServices.enable = true; + + environment = { + variables = { + PATH = "${pkgs.clang-tools}/bin:$PATH"; }; + shells = with pkgs; [ + zsh + bash + ]; + systemPackages = with pkgs; [ + acpi + brightnessctl + cpupower-gui + powertop + ]; + }; } diff --git a/hosts/laptop/home.nix b/hosts/laptop/home.nix new file mode 100644 index 0000000..1786879 --- /dev/null +++ b/hosts/laptop/home.nix @@ -0,0 +1,96 @@ +{ + host, + pkgs, + self, + inputs, + username, + wallpaper, + lib, + scheme, + config, + ... +}: let + nur = config.nur; +in { + imports = [inputs.home-manager.nixosModules.home-manager]; + home-manager = { + useUserPackages = true; + useGlobalPkgs = true; + backupFileExtension = "backup"; + extraSpecialArgs = {inherit self inputs host wallpaper scheme username nur;}; + users = { + ${username} = { + programs.home-manager.enable = true; + imports = [ + inputs.spicetify-nix.homeManagerModules.default + inputs.self.outputs.homeManagerModules.default + ]; + + # My custom home-manager modules + + # modules/home/files + homeFiles.enable = true; + + # modules/home/environment + hyprlandConfig.enable = true; + autojumpConfig.enable = true; + stylixHomeConfig.enable = true; + waybarConfig.enable = true; + gtkConfig.enable = true; + spicetifyConfig.enable = true; + starshipConfig.enable = true; + + # modules/home/programs + btopConfig.enable = true; + swayncConfig.enable = true; + userPkgs.enable = true; + cavaConfig.enable = true; + ezaConfig.enable = true; + firefoxConfig.enable = true; + fuzzelConfig.enable = true; + fzfConfig.enable = true; + gitConfig.enable = true; + kittyConfig.enable = true; + yaziConfig.enable = true; + zshConfig.enable = true; + passConfig.enable = true; + batConfig.enable = true; + + # modules/home/scripts + movScripts.enable = true; + movScripts.commandScripts.enable = true; + movScripts.hyprlandControls.enable = true; + movScripts.nixShortcuts.enable = true; + + dconf.settings = lib.mkIf config.virtConfig.enable { + "org/virt-manager/virt-manager/connections" = { + autoconnect = ["qemu:///system"]; + uris = ["qemu:///system"]; + }; + }; + home = { + username = "${username}"; + homeDirectory = "/home/${username}"; + stateVersion = "24.05"; + }; + }; + }; + }; + + users = { + groups.persist = {}; + users = { + root.initialPassword = "1234"; + ${username} = { + isNormalUser = true; + initialPassword = "1234"; + shell = pkgs.zsh; + extraGroups = ["wheel" "persist" "libvirtd"]; + }; + }; + }; + security.sudo.extraConfig = '' + ${username} ALL=(ALL) NOPASSWD: /etc/profiles/per-user/${username}/bin/rebuild + ''; + nix.settings.allowed-users = ["${username}"]; +} diff --git a/modules/home/environment/zshell.nix b/modules/home/environment/zshell.nix index 10f8620..4ed1723 100644 --- a/modules/home/environment/zshell.nix +++ b/modules/home/environment/zshell.nix @@ -27,6 +27,13 @@ svcu = "systemctl --user"; svc = "sudo systemctl"; viflake = "nvim flake.nix"; + + #git + "ga" = "playshellsound ${self}/assets/sound/gitadd.wav; git add"; + gcomm = "gitcommit_sfx"; + gpush = "gitpush_sfx"; + gpull = "gitpull_sfx"; + greb = "gitrebase_sfx"; }; sessionVariables = { diff --git a/modules/sys/software/default.nix b/modules/sys/software/default.nix index a37ed94..e2f7de3 100644 --- a/modules/sys/software/default.nix +++ b/modules/sys/software/default.nix @@ -6,18 +6,13 @@ username, host, ... -}: let - desktop = host == "oganesson"; - desktop_modules = - if desktop - then [(import ./virtualization.nix)] ++ [(import ./gaming)] - else []; -in { +}: { imports = [(import ./packages.nix)] ++ [(import ./programs.nix)] ++ [(import ./services.nix)] ++ [(import ./nixvim)] ++ [(import ./module-test.nix)] - ++ desktop_modules; + ++ [(import ./virtualization.nix)] + ++ [(import ./gaming)]; } From 2c0b8b4cd382bc6d63ec1de23e155d33df3bd36e Mon Sep 17 00:00:00 2001 From: pagedmov Date: Sat, 2 Nov 2024 07:15:54 -0400 Subject: [PATCH 12/12] moved keyd from powerprofiles to sys/services.nix --- modules/sys/hardware/powerprofiles.nix | 9 --------- modules/sys/software/services.nix | 9 +++++++++ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/modules/sys/hardware/powerprofiles.nix b/modules/sys/hardware/powerprofiles.nix index 0b686b2..25377fd 100644 --- a/modules/sys/hardware/powerprofiles.nix +++ b/modules/sys/hardware/powerprofiles.nix @@ -4,15 +4,6 @@ }; config = lib.mkIf config.powerProfiles.enable { services = { - keyd = { - enable = true; - keyboards.default = { - ids = ["*"]; - settings.main = { - capslock = "esc"; - }; - }; - }; power-profiles-daemon.enable = true; diff --git a/modules/sys/software/services.nix b/modules/sys/software/services.nix index c99399d..6177879 100644 --- a/modules/sys/software/services.nix +++ b/modules/sys/software/services.nix @@ -4,6 +4,15 @@ }; config = lib.mkIf config.sysServices.enable { services = { + keyd = { + enable = true; + keyboards.default = { + ids = ["*"]; + settings.main = { + capslock = "esc"; + }; + }; + }; pipewire = { enable = true; pulse.enable = true;