diff --git a/default.nix b/default.nix index c9918bb..64fb9ce 100755 --- a/default.nix +++ b/default.nix @@ -8,7 +8,7 @@ in { imports = [ inputs.home-manager.nixosModules.home-manager (mkAliasOptionModule ["hm"] ["home-manager" "users" config.user.name]) - inputs.base16.nixosModule + inputs.nix-colors.homeManagerModules.default # >home manager modules >in non-hm modules inputs.nix-index-database.nixosModules.default inputs.t2fanrd.nixosModules.t2fanrd inputs.niri.nixosModules.niri @@ -19,18 +19,34 @@ in { inputs.vicinae.homeManagerModules.default ]; - # i mostly disagree with state versions, just use the oldest one i have set up - # they seem reasonable at first but are so messy across multiple hosts - # a lot of the time they're used for stuff that isn't even state (looking at you, home-manager) - system.stateVersion = mkDefault "23.11"; + system.stateVersion = "23.11"; system.configurationRevision = with inputs; mkIf (self ? rev) self.rev; hm.home.stateVersion = config.system.stateVersion; - boot.kernelPackages = mkDefault pkgs.linuxPackages_latest; + boot = { + kernelPackages = mkDefault pkgs.linuxPackages_latest; + kernelParams = [ "pcie_aspm.policy=performance" ]; + }; + + # configure keymap in x11 + services.xserver.xkb = { + layout = "us"; + variant = "qwerty"; + }; + console = { + useXkbConfig = mkDefault true; + }; + + services.earlyoom.enable = true; - # TODO: drop geoclue entirely. too lazy 2 to that now services.automatic-timezoned.enable = mkDefault true; time.timeZone = mkDefault null; # handled by automatic-timezoned + + i18n = mkDefault { + defaultLocale = "en_US.UTF-8"; + supportedLocales = [ "en_US.UTF-8/UTF-8" ]; + }; + location.provider = mkDefault "geoclue2"; services.geoclue2 = { enable = mkDefault true; @@ -41,6 +57,10 @@ in { submissionNick = "geoclue"; }; - # git is needed for flakes, yet, isn't in `environment.corePackages` - environment.systemPackages = with pkgs; [ git ]; + hardware.enableRedistributableFirmware = true; + + environment.systemPackages = with pkgs; [ + openssh mosh + git + ]; } diff --git a/flake.lock b/flake.lock index 7963f91..562163d 100644 --- a/flake.lock +++ b/flake.lock @@ -1,20 +1,18 @@ { "nodes": { - "base16": { - "inputs": { - "fromYaml": "fromYaml" - }, + "base16-schemes": { + "flake": false, "locked": { - "lastModified": 1755819240, - "narHash": "sha256-qcMhnL7aGAuFuutH4rq9fvAhCpJWVHLcHVZLtPctPlo=", - "owner": "senchopens", - "repo": "base16.nix", - "rev": "75ed5e5e3fce37df22e49125181fa37899c3ccd6", + "lastModified": 1696158499, + "narHash": "sha256-5yIHgDTPjoX/3oDEfLSQ0eJZdFL1SaCfb9d6M0RmOTM=", + "owner": "tinted-theming", + "repo": "base16-schemes", + "rev": "a9112eaae86d9dd8ee6bb9445b664fba2f94037a", "type": "github" }, "original": { - "owner": "senchopens", - "repo": "base16.nix", + "owner": "tinted-theming", + "repo": "base16-schemes", "type": "github" } }, @@ -141,19 +139,19 @@ "type": "github" } }, - "fromYaml": { + "fuzzel-catppuccin": { "flake": false, "locked": { - "lastModified": 1731966426, - "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", - "owner": "SenchoPens", - "repo": "fromYaml", - "rev": "106af9e2f715e2d828df706c386a685698f3223b", + "lastModified": 1771578346, + "narHash": "sha256-+/7lxQTRDZ0m+GAAFIjvFt8EXDeqZUtv0pLnNgaauZw=", + "owner": "catppuccin", + "repo": "fuzzel", + "rev": "879879da8a7dc58f173b4cd7987723fd19bef6d5", "type": "github" }, "original": { - "owner": "SenchoPens", - "repo": "fromYaml", + "owner": "catppuccin", + "repo": "fuzzel", "type": "github" } }, @@ -382,6 +380,25 @@ "type": "github" } }, + "nix-colors": { + "inputs": { + "base16-schemes": "base16-schemes", + "nixpkgs-lib": "nixpkgs-lib_2" + }, + "locked": { + "lastModified": 1707825078, + "narHash": "sha256-hTfge2J2W+42SZ7VHXkf4kjU+qzFqPeC9k66jAUBMHk=", + "owner": "misterio77", + "repo": "nix-colors", + "rev": "b01f024090d2c4fc3152cd0cf12027a7b8453ba1", + "type": "github" + }, + "original": { + "owner": "misterio77", + "repo": "nix-colors", + "type": "github" + } + }, "nix-index-database": { "inputs": { "nixpkgs": [ @@ -433,6 +450,21 @@ "type": "github" } }, + "nixpkgs-lib_2": { + "locked": { + "lastModified": 1697935651, + "narHash": "sha256-qOfWjQ2JQSQL15KLh6D7xQhx0qgZlYZTYlcEiRuAMMw=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "e1e11fdbb01113d85c7f41cada9d2847660e3902", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, "nixpkgs-stable": { "locked": { "lastModified": 1776221942, @@ -529,22 +561,40 @@ "type": "github" } }, + "rofi-catppuccin": { + "flake": false, + "locked": { + "lastModified": 1752883501, + "narHash": "sha256-81eeFjwM/haPjIEWkZPp1JSDwhWbWDAuKtWiCg7P9Q0=", + "owner": "catppuccin", + "repo": "rofi", + "rev": "71fb15577ccb091df2f4fc1f65710edbc61b5a53", + "type": "github" + }, + "original": { + "owner": "catppuccin", + "repo": "rofi", + "type": "github" + } + }, "root": { "inputs": { - "base16": "base16", "cachyos-kernel": "cachyos-kernel", "catppuccin": "catppuccin", + "fuzzel-catppuccin": "fuzzel-catppuccin", "hardware": "hardware", "home-manager": "home-manager", "hyprlock": "hyprlock", "niri": "niri", + "nix-colors": "nix-colors", "nix-index-database": "nix-index-database", "nixpkgs": "nixpkgs_4", + "rofi-catppuccin": "rofi-catppuccin", "systems": "systems_2", "t2fanrd": "t2fanrd", - "tt-schemes": "tt-schemes", "vicinae": "vicinae", - "vicinae-extensions": "vicinae-extensions" + "vicinae-extensions": "vicinae-extensions", + "waybar-catppuccin": "waybar-catppuccin" } }, "systems": { @@ -625,22 +675,6 @@ "type": "github" } }, - "tt-schemes": { - "flake": false, - "locked": { - "lastModified": 1776808072, - "narHash": "sha256-FwuOyAWXsdG7/1TpndL0gYPzBh5XOi1gNliZB774VaA=", - "owner": "tinted-theming", - "repo": "schemes", - "rev": "d5ddce0697a91203fd3eccc40140890a69fc279e", - "type": "github" - }, - "original": { - "owner": "tinted-theming", - "repo": "schemes", - "type": "github" - } - }, "vicinae": { "inputs": { "nixpkgs": "nixpkgs_6", @@ -708,6 +742,22 @@ "type": "github" } }, + "waybar-catppuccin": { + "flake": false, + "locked": { + "lastModified": 1720870206, + "narHash": "sha256-za0y6hcN2rvN6Xjf31xLRe4PP0YyHu2i454ZPjr+lWA=", + "owner": "catppuccin", + "repo": "waybar", + "rev": "ee8ed32b4f63e9c417249c109818dcc05a2e25da", + "type": "github" + }, + "original": { + "owner": "catppuccin", + "repo": "waybar", + "type": "github" + } + }, "xwayland-satellite-stable": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index 54fe00e..326097e 100644 --- a/flake.nix +++ b/flake.nix @@ -9,8 +9,7 @@ home-manager.inputs.nixpkgs.follows = "nixpkgs"; hardware.url = "github:nixos/nixos-hardware"; - - base16.url = "github:senchopens/base16.nix"; + nix-colors.url = "github:misterio77/nix-colors"; nix-index-database.url = "github:nix-community/nix-index-database"; nix-index-database.inputs.nixpkgs.follows = "nixpkgs"; @@ -30,8 +29,12 @@ catppuccin.url = "github:catppuccin/nix"; - tt-schemes.url = "github:tinted-theming/schemes"; - tt-schemes.flake = false; + waybar-catppuccin.url = "github:catppuccin/waybar"; + waybar-catppuccin.flake = false; + fuzzel-catppuccin.url = "github:catppuccin/fuzzel"; + fuzzel-catppuccin.flake = false; + rofi-catppuccin.url = "github:catppuccin/rofi"; + rofi-catppuccin.flake = false; }; outputs = inputs @ { self, nixpkgs, systems, ... }: diff --git a/hosts/flubber-machine/default.nix b/hosts/flubber-machine/default.nix index 06db379..09f510c 100755 --- a/hosts/flubber-machine/default.nix +++ b/hosts/flubber-machine/default.nix @@ -33,22 +33,20 @@ boot.kernelPackages = pkgs.cachyosKernels.linuxPackages-cachyos-latest-lto-x86_64-v3; modules = { - core = { - # kernel - kernel.v4l2 = true; - kernel.zswap = true; - # security - security.useDoas = true; - }; + security.useDoas = true; + hardware = { - audio.enable = true; bluetooth.enable = true; + pipewire.enable = true; print.enable = true; pointer.enable = true; tablet.enable = true; networking.enable = true; rgb.enable = true; }; + dev = { + enable = true; + }; desktop = { # set to `x11` or `wayland`, improves compat envProto = "wayland"; @@ -59,6 +57,7 @@ # accessories hyprlock.enable = true; hypridle.enable = true; + hypridle.desktop = true; awww.enable = true; gnome-keyring.enable = true; mate-polkit.enable = true; @@ -67,9 +66,10 @@ waybar.enable = true; wob.enable = true; gammastep.enable = true; + # fuzzel.enable = true; + # cliphist.enable = true; wl-clip-persist.enable = true; vicinae.enable = true; - vicinae.dmenu = true; # display manager regreet.enable = true; @@ -93,20 +93,22 @@ system.flatpak.enable = true; system.mpv.enable = true; system.ananicy.enable = true; + system.zswap.enable = true; system.kdeconnect.enable = true; system.virt-manager.enable = true; # editors editors.micro.enable = true; editors.vscode.enable = true; + # dev + dev.git.enable = true; # distractions distractions.discord.enable = true; distractions.discord.vesktop = true; distractions.steam.enable = true; # tools - tools.direnv.enable = true; - tools.git.enable = true; tools.gpg.enable = true; tools.rbw.enable = true; + tools.noisetorch.enable = true; }; }; } diff --git a/hosts/flubber-machine/hardware.nix b/hosts/flubber-machine/hardware.nix index 112917c..85398df 100755 --- a/hosts/flubber-machine/hardware.nix +++ b/hosts/flubber-machine/hardware.nix @@ -4,19 +4,17 @@ imports = [ inputs.hardware.nixosModules.common-cpu-amd - inputs.hardware.nixosModules.common-cpu-amd-zenpower inputs.hardware.nixosModules.common-gpu-amd inputs.hardware.nixosModules.common-pc-ssd inputs.hardware.nixosModules.common-pc - inputs.hardware.nixosModules.msi-b550-a-pro # pro b550m-vc, not b550-a pro, but they use mostly the same chips (modulesPath + "/installer/scan/not-detected.nix") ]; boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "sdhci_pci" ]; boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-amd" "zenergy" ]; - boot.extraModulePackages = with config.boot.kernelPackages; [ zenergy ]; + boot.kernelModules = [ "kvm-amd" "amdgpu" ]; + boot.extraModulePackages = [ ]; boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; diff --git a/hosts/goopnet-interface/default.nix b/hosts/goopnet-interface/default.nix index 94b493a..7ceb261 100755 --- a/hosts/goopnet-interface/default.nix +++ b/hosts/goopnet-interface/default.nix @@ -31,19 +31,18 @@ ]); modules = { - core = { - laptop = true; - # kernel - kernel.zswap = true; - # security - security.useDoas = true; - }; + security.useDoas = true; + hardware = { - audio.enable = true; bluetooth.enable = true; + pipewire.enable = true; print.enable = true; pointer.enable = true; networking.enable = true; + networking.powersave = true; + }; + dev = { + enable = true; }; desktop = { # set to `x11` or `wayland`, improves compat @@ -64,9 +63,10 @@ batsignal.enable = true; wob.enable = true; gammastep.enable = true; + # cliphist.enable = true; + # fuzzel.enable = true; wl-clip-persist.enable = true; vicinae.enable = true; - vicinae.dmenu = true; # display manager regreet.enable = true; @@ -93,15 +93,16 @@ # editors editors.micro.enable = true; editors.vscode.enable = true; + # dev + dev.git.enable = true; # distractions distractions.discord.enable = true; distractions.discord.vesktop = true; distractions.steam.enable = true; # tools - tools.direnv.enable = true; - tools.git.enable = true; tools.gpg.enable = true; tools.rbw.enable = true; + tools.noisetorch.enable = true; }; }; } diff --git a/modules/core/default.nix b/modules/core/default.nix deleted file mode 100644 index 2110716..0000000 --- a/modules/core/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ config, lib, pkgs, ... }: - -with lib; -let - cfg = config.modules.core; -in { - options.modules.core = { - laptop = mkEnableOption "Enable laptop specific tweaks"; - }; - - config = { - # TODO: add something here loooool - }; -} diff --git a/modules/core/kernel.nix b/modules/core/kernel.nix deleted file mode 100644 index d9031b1..0000000 --- a/modules/core/kernel.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ lib, config, pkgs, ... }: - -with lib; -let - cfg = config.modules.core.kernel; -in { - options.modules.core.kernel = { - zswap = mkEnableOption "Enable zswap, a compressed RAM cache for swap pages"; - v4l2 = mkEnableOption "Enable support for v4l2 loopback devices"; - }; - - config = mkMerge [ - (mkIf cfg.zswap { - boot.kernelParams = [ - "zswap.enabled=1" - "zswap.shrinker_enabled=1" - "zswap.max_pool_percent=20" - "zswap.compressor=zstd" - "zswap.zpool=zsmalloc" - ]; - }) - (mkIf cfg.v4l2 { - boot.kernelModules = ["v4l2loopback"]; - boot.extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ]; - }) - ]; -} diff --git a/modules/core/locale.nix b/modules/core/locale.nix deleted file mode 100644 index db1ac03..0000000 --- a/modules/core/locale.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ lib, pkgs, inputs, config, ... }: - -with lib; -{ - i18n.defaultLocale = mkDefault "en_US.UTF-8"; - services.xserver.xkb = { - layout = "us"; - variant = "qwerty"; - }; - console = { - useXkbConfig = mkDefault true; - }; -} diff --git a/modules/desktop/awww.nix b/modules/desktop/awww.nix index 0745cfd..1eca551 100644 --- a/modules/desktop/awww.nix +++ b/modules/desktop/awww.nix @@ -44,7 +44,7 @@ in { default = pkgs.writeShellScript "awww-swap" '' set -euo pipefail - file=$(ls ${cfg.wallpapersFolder} | dmenu -p "select a wallpaper") + file=$(ls ${cfg.wallpapersFolder} | ${lib.getExe config.modules.desktop.rofi.package} -dmenu -sep '\n' -i -p "select a wallpaper") wallpaper="${cfg.wallpapersFolder}/$file" [ ! -f "$wallpaper" ] && exit 1 diff --git a/modules/desktop/cliphist.nix b/modules/desktop/cliphist.nix new file mode 100644 index 0000000..241d6b2 --- /dev/null +++ b/modules/desktop/cliphist.nix @@ -0,0 +1,32 @@ +{ lib, config, pkgs, inputs, ... }: + +with lib; +let + cfg = config.modules.desktop.cliphist; +in { + options.modules.desktop.cliphist = { + enable = mkEnableOption "enable cliphist, a clipboard manager for wayland"; + package = mkOption { + type = types.package; + default = pkgs.cliphist; + }; + summonScript = mkOption { + type = types.package; + default = pkgs.writeShellScript "cliphist-summon" '' + set -euo pipefail + + ${lib.getExe cfg.package} list | ${lib.getExe config.modules.desktop.fuzzel.package} --dmenu | ${lib.getExe cfg.package} decode | wl-copy + ''; + }; + }; + + config = mkIf cfg.enable { + hm.services.cliphist = { + enable = true; + allowImages = true; + package = cfg.package; + }; + + modules.desktop.rofi.enable = true; + }; +} diff --git a/modules/desktop/dunst.nix b/modules/desktop/dunst.nix index 93b51ec..820255a 100644 --- a/modules/desktop/dunst.nix +++ b/modules/desktop/dunst.nix @@ -12,22 +12,20 @@ in { hm.services.dunst = { enable = true; - settings = let - inherit (config.modules.desktop.themes) rounding padding; - in with config.scheme.withHashtag; { + settings = with config.colorScheme.palette; { global = { follow = "mouse"; width = 300; height = 145; - frame_color = "${base02}"; + frame_color = "#${base02}"; origin = "top-right"; # various non-color theming settings - offset = let offset = builtins.toString (padding * 2); in "${offset}x${offset}"; - padding = padding; - horizontal_padding = padding; - text_icon_padding = padding; - corner_radius = rounding; + offset = "15x15"; + padding = 15; + horizontal_padding = 15; + text_icon_padding = 15; + corner_radius = 8; gap_size = 0; frame_width = 1; @@ -35,7 +33,7 @@ in { progress_bar = true; progress_bar_frame_width = 1; - progress_bar_corner_radius = rounding; + progress_bar_corner_radius = 8; alignment = "left"; markup = "full"; @@ -58,19 +56,19 @@ in { }; urgency_low = { - background = "${base00}FF"; - foreground = "${base05}"; + background = "#${base00}FF"; + foreground = "#${base05}"; }; urgency_normal = { - background = "${base00}FF"; - foreground = "${base05}"; + background = "#${base00}FF"; + foreground = "#${base05}"; }; urgency_critical = { - background = "${base00}FF"; - foreground = "${base05}"; - frame_color = "${base08}"; # base16 spec says red + background = "#${base00}FF"; + foreground = "#${base05}"; + frame_color = "#${base08}"; # base16 spec says red }; }; }; diff --git a/modules/desktop/fonts.nix b/modules/desktop/fonts.nix index 3088db2..8162c65 100644 --- a/modules/desktop/fonts.nix +++ b/modules/desktop/fonts.nix @@ -123,8 +123,6 @@ in { noto-fonts-color-emoji noto-fonts-monochrome-emoji font-awesome - - pkgs.my.loveletter ]; }) ]); diff --git a/modules/desktop/fuzzel.nix b/modules/desktop/fuzzel.nix new file mode 100644 index 0000000..b468d24 --- /dev/null +++ b/modules/desktop/fuzzel.nix @@ -0,0 +1,38 @@ +{ lib, config, pkgs, ... }: + +with lib; +let + cfg = config.modules.desktop.fuzzel; +in { + options.modules.desktop.fuzzel = { + enable = mkEnableOption "Enable fuzzel, an application launcher similar to rofi's drun mode"; + package = mkOption { + type = types.package; + default = pkgs.fuzzel; + }; + }; + + config = mkIf cfg.enable { + hm.programs.fuzzel = { + enable = true; + package = cfg.package; + settings = { + main = { + terminal = "wezterm start"; + font = with config.modules.desktop.fonts.fonts.monospace; "${family}:pixelsize=${toString size}"; + prompt = "> "; + dpi-aware = "no"; + lines = 20; + width = 28; + letter-spacing = 0.5; + horizontal-pad = 32; + vertical-pad = 8; + }; + border = { + width = 1; + radius = config.modules.desktop.fonts.fonts.monospace.size; + }; + }; + }; + }; +} diff --git a/modules/desktop/hypridle.nix b/modules/desktop/hypridle.nix index 9a380cc..abc1143 100644 --- a/modules/desktop/hypridle.nix +++ b/modules/desktop/hypridle.nix @@ -11,6 +11,7 @@ in { default = pkgs.hypridle; example = "pkgs.hypridle"; }; + desktop = mkEnableOption "Extend screen dimming time and disable sleeping"; }; config = mkIf cfg.enable { @@ -29,12 +30,12 @@ in { listener = [ { - timeout = if config.modules.core.laptop + timeout = if !cfg.desktop then 60 * 2 # 2 min else 60 * 35; # 35 min on-timeout = "${pkgs.systemd}/bin/loginctl lock-session"; # lock computer } - ] ++ optionals (config.modules.core.laptop) [ + ] ++ optionals (!cfg.desktop) [ { timeout = 60; # 1 min on-timeout = "${lib.getExe pkgs.brightnessctl} -c backlight -s set 20"; # dim screen, save brightness state @@ -50,7 +51,7 @@ in { on-timeout = "${pkgs.systemd}/bin/systemctl suspend"; # sleep/suspend } ] ++ optional config.modules.desktop.niri.enable { - timeout = if config.modules.core.laptop + timeout = if !cfg.desktop then 90 # 1.5 min else 30 * 60; # 30 min on-timeout = "niri msg action power-off-monitors"; diff --git a/modules/desktop/hyprlock.nix b/modules/desktop/hyprlock.nix index cc349ab..b5e6849 100644 --- a/modules/desktop/hyprlock.nix +++ b/modules/desktop/hyprlock.nix @@ -20,9 +20,7 @@ in { enable = true; package = cfg.package; - settings = let - inherit (config.modules.desktop.themes) rounding; - in with config.scheme; { + settings = with config.colorScheme.palette; { general = { hide_cursor = false; text_trim = true; @@ -40,7 +38,7 @@ in { { size = "280, 280"; color = "rgb(${base00})"; - rounding = rounding; + rounding = 48; position = "0, 45"; halign = "center"; valign = "center"; @@ -54,7 +52,8 @@ in { position = "0, 105"; text = "cmd[update:1000] echo \"$(date +'%H')\""; font_size = 78; - color = "rgb(${base05})"; + # TODO: make more dynamic + color = "rgb(f5c2e7)"; # catppuccin pink font_family = config.modules.desktop.fonts.fonts.sansSerif.family; halign = "center"; valign = "center"; } @@ -74,7 +73,6 @@ in { font_family = config.modules.desktop.fonts.fonts.sansSerif.family; halign = "center"; valign = "center"; } - ] ++ optionals config.modules.core.laptop [ { position = "-15, -11"; halign = "right"; valign = "top"; @@ -102,8 +100,7 @@ in { { position = "0, -140"; size = "280, 48"; - rounding = rounding; - outline_thickness = 1; + outline_thickness = 2; dots_size = 0.3; fade_on_empty = false; placeholder_text = ""; diff --git a/modules/desktop/niri.nix b/modules/desktop/niri.nix index 58f2d77..cded1ec 100644 --- a/modules/desktop/niri.nix +++ b/modules/desktop/niri.nix @@ -65,7 +65,7 @@ in { }; layout = { - gaps = config.modules.desktop.themes.padding; + gaps = 6; center-focused-column = "on-overflow"; @@ -229,7 +229,7 @@ in { # TODO: configure popups window-rules = [ { - geometry-corner-radius = allCorners (config.modules.desktop.themes.rounding * 1.0); + geometry-corner-radius = allCorners 10.0; clip-to-geometry = true; } { @@ -310,6 +310,7 @@ in { ]; # TODO: add shadows onto notifications. weird geometry beware !!! + # TODO: rounded vicinae layer-rules = [ { matches = [ @@ -317,11 +318,13 @@ in { # obliterate all dmenu-like things--too dangerous to stream (clipboard history, passwords) { namespace = "^rofi$"; } { namespace = "^vicinae$"; } + { namespace = "^launcher$"; } ]; block-out-from = "screen-capture"; } { matches = [ + { namespace = "^launcher$"; } { namespace = "^rofi$"; } { namespace = "^vicinae$"; } { namespace = "^wob$"; } @@ -336,12 +339,13 @@ in { } # shadow rounded corner cases... # defined in program config but we need to edit geometry too for shadows!! + # monospace { matches = [ + { namespace = "^launcher$"; } { namespace = "^rofi$"; } - { namespace = "^vicinae$"; } ]; - geometry-corner-radius = allCorners (config.modules.desktop.themes.rounding * 1.0); + geometry-corner-radius = allCorners (config.modules.desktop.fonts.fonts.monospace.size * 1.0); # its 1em, so } ]; @@ -350,6 +354,7 @@ in { in { "Mod+Shift+Slash".action = show-hotkey-overlay; + # "Mod+D".action = spawn "fuzzel"; "Mod+D".action = spawn "vicinae" "vicinae://toggle"; "Mod+Q".action = close-window; @@ -426,7 +431,7 @@ in { "Mod+Shift+Minus".action = set-window-height "-10%"; "Mod+Shift+Equal".action = set-window-height "+10%"; - "Print".action.screenshot-screen = { show-pointer = false; }; + "Print".action.screenshot = { show-pointer = false; }; "Mod+Grave".action = toggle-overview; @@ -452,6 +457,7 @@ in { "XF86AudioNext".action = sh "${lib.getExe pkgs.playerctl} next"; "Mod+Shift+C".action = sh "${lib.getExe pkgs.hyprpicker} -a"; + # "Mod+V".action = sh "${config.modules.desktop.cliphist.summonScript}"; "Mod+V".action = spawn "vicinae" "vicinae://extensions/vicinae/clipboard/history"; "Mod+Shift+Control+T".action = toggle-debug-tint; diff --git a/modules/desktop/regreet.nix b/modules/desktop/regreet.nix index 8246def..2e4a0ff 100644 --- a/modules/desktop/regreet.nix +++ b/modules/desktop/regreet.nix @@ -13,25 +13,20 @@ in { services.greetd = { enable = true; settings = { - # TODO: fix focus requiring a mouse click default_session = let - swaymsg = "${pkgs.sway}/bin/swaymsg"; swayConfig = let monitors = config.modules.desktop.monitors; monitorConfig = if monitors.enable && (builtins.length monitors.monitors > 0) then let firstMonitor = builtins.head monitors.monitors; - in '' - output "${firstMonitor.name}" scale ${toString firstMonitor.scale} - workspace 1 output "${firstMonitor.name}" - for_window [all] move container to workspace 1 - '' + in + "output ${firstMonitor.name} scale ${toString firstMonitor.scale}" else ""; in command: pkgs.writeText "kiosk-sway-config" '' ${monitorConfig} xwayland disable - exec '${swaymsg} workspace 1; ${command}; ${swaymsg} exit' + exec '${command}; ${pkgs.sway}/bin/swaymsg exit' ''; swayKiosk = command: "${pkgs.dbus}/bin/dbus-run-session ${lib.getExe pkgs.sway} --unsupported-gpu --config ${swayConfig command}"; in { diff --git a/modules/desktop/rofi.nix b/modules/desktop/rofi.nix index 0309842..f216a8e 100644 --- a/modules/desktop/rofi.nix +++ b/modules/desktop/rofi.nix @@ -6,7 +6,6 @@ let in { options.modules.desktop.rofi = { enable = mkEnableOption "Enable rofi, a window switcher, run dialog and dmenu replacement"; - dmenu = mkEnableOption "Use as a replacement for dmenu"; package = mkOption { type = types.package; default = pkgs.rofi-unwrapped; @@ -24,20 +23,5 @@ in { show-icons = true; }; }; - - user.packages = mkIf cfg.dmenu [ (pkgs.writeShellScriptBin "dmenu" '' - set -euo pipefail - - prompt="select option" - - while [ $# -gt 0 ]; do - case "$1" in - -p) shift; prompt="$1" ;; - esac - shift - done - - rofi -dmenu -i -p "$prompt" - '') ]; }; } diff --git a/modules/desktop/themes/catppuccin/default.nix b/modules/desktop/themes/catppuccin/default.nix index 42ac2a6..4c86288 100644 --- a/modules/desktop/themes/catppuccin/default.nix +++ b/modules/desktop/themes/catppuccin/default.nix @@ -4,16 +4,14 @@ with lib; let cfg = config.modules.desktop.themes; accent = "pink"; - accentBase = "base17"; variant = "mocha"; dark = variant != "latte"; - darkString = if dark then "dark" else "light"; - scheme = "${inputs.tt-schemes}/base24/catppuccin-${variant}.yaml"; + colorScheme = inputs.nix-colors.colorSchemes.${"catppuccin-${variant}"}; pascalCase = s: (toUpper (substring 0 1 s)) + (toLower (substring 1 (stringLength s) s)); in { config = mkIf (cfg.active == "catppuccin") { - scheme = scheme; + colorScheme = colorScheme; modules.desktop.themes = { dark = dark; @@ -37,13 +35,14 @@ in { }; iconTheme = { - name = "WhiteSur-${darkString}"; + name = "WhiteSur-${if dark then "dark" else "light"}"; package = pkgs.whitesur-icon-theme; }; cursorTheme = { - name = "macOS"; - package = pkgs.apple-cursor; + name = "graphite-${if dark then "dark" else "light"}"; + package = pkgs.graphite-cursors; + size = 24; }; editor = { @@ -69,24 +68,36 @@ in { }; }; - niri = let - colors = config.scheme.withHashtag; - in with colors; { - accent = colors.${accentBase}; - inactive = "${base02}"; - shadow = "${base11}"; - background = if dark then "${base11}" else "${base05}"; + niri = with colorScheme.palette; { + # TODO: make more dynamic + # catppuccin pink + accent = "#f5c2e7"; + inactive = "#${base02}"; + # catppuccin crust + shadow = "#11111b"; + # catppuccin crust + background = "#11111b"; }; - waybarTop = "@define-color accent @${accentBase};"; + waybar = builtins.concatStringsSep "\n" [ + "@import \"${inputs.waybar-catppuccin}/themes/${variant}.css\";" + "@define-color accent @${accent};" + (lib.readFile ./waybar.css) + ]; - wob = with config.scheme; { + wob = with colorScheme.palette; { borderColor = "${base04}FF"; backgroundColor = "${base01}CC"; barColor = "${base05}FF"; }; - rofiTop = "* { accent: @${accentBase}; }"; + rofi = builtins.concatStringsSep "\n" [ + "@theme \"${inputs.rofi-catppuccin}/themes/catppuccin-${variant}.rasi\"" + "* { accent: @${accent}; }" + (lib.readFile ./rofi.rasi) + ]; + + fuzzel = "${inputs.fuzzel-catppuccin}/themes/catppuccin-${variant}/${accent}.ini"; wezterm = '' config.color_scheme = 'Catppuccin ${pascalCase variant}' diff --git a/modules/desktop/themes/config/rofi.rasi b/modules/desktop/themes/catppuccin/rofi.rasi similarity index 66% rename from modules/desktop/themes/config/rofi.rasi rename to modules/desktop/themes/catppuccin/rofi.rasi index 0197829..eccabf6 100644 --- a/modules/desktop/themes/config/rofi.rasi +++ b/modules/desktop/themes/catppuccin/rofi.rasi @@ -10,27 +10,27 @@ element-text, element-icon , mode-switcher { window { height: 500px; border: 1px; - border-radius: @roundingpx; + border-radius: 1em; border-color: @accent; - background-color: @base00; + background-color: @base; } mainbox { - background-color: @base00; + background-color: @base; } inputbar { margin: 10px 5px 5px 5px; children: [prompt, entry]; - background-color: @base00; + background-color: @base; padding: 1px; } prompt { background-color: transparent; padding: 1px; - text-color: @base05; - border-radius: @roundingpx; + text-color: @text; + border-radius: 1.5em; } textbox-prompt-colon { @@ -41,8 +41,8 @@ textbox-prompt-colon { entry { padding: 1px; margin: 0px; - text-color: @base05; - background-color: @base00; + text-color: @text; + background-color: @base; } listview { @@ -50,26 +50,26 @@ listview { margin: 5px 0px 0px 10px; columns: 1; lines: 10; - background-color: @base00; + background-color: @base; } element { padding: 1px; - background-color: @base00; - text-color: @base05; + background-color: @base; + text-color: @text; } element-icon {size: 12px;} element.selected { - background-color: @base03; + background-color: @surface1; text-color: @accent; } scrollbar { width: 4px ; border: 0; - handle-color: @base05; + handle-color: @text; handle-width: 8px ; padding: 0; } @@ -78,13 +78,13 @@ mode-switcher {spacing: 0;} button { spacing: 0; - background-color: @base02; - text-color: @base04; + background-color: @surface0; + text-color: @subtext1; vertical-align: 0.5; horizontal-align: 0.5; } button.selected { - background-color: @base00; + background-color: @base; text-color: @accent; } diff --git a/modules/desktop/themes/config/waybar.css b/modules/desktop/themes/catppuccin/waybar.css similarity index 69% rename from modules/desktop/themes/config/waybar.css rename to modules/desktop/themes/catppuccin/waybar.css index 8da7f82..09990f0 100644 --- a/modules/desktop/themes/config/waybar.css +++ b/modules/desktop/themes/catppuccin/waybar.css @@ -9,21 +9,21 @@ button, button:hover { } window#waybar { - color: @base05; - background: alpha(@base00, 0.9999999); - border-radius: @roundingpx; + color: @text; + background: alpha(@base, 0.9999999); + border-radius: 1em; font-family: "CozetteVector", monospace, "FontAwesome 6 Free", "Noto Sans CJK"; - font-size: 13px; /* TODO: make this use proper font size */ + font-size: 13px; font-style: normal; - border: 1px solid @base02; + border: 1px solid @surface0; } #workspaces, .modules-right box { - background-color: @base02; + background-color: @surface0; margin: 0 0.25em; padding: 0.15em 0.25em; - border-radius: @roundingpx; + border-radius: 1em; } .modules-right label.module { margin: 0 0.5em; @@ -37,32 +37,32 @@ window#waybar { } #workspaces { - background-color: @base02; + background-color: @surface0; padding: 0; } #workspaces button { background-color: transparent; - color: @base05; + color: @text; padding: 0 0.4em; transition: none; } #workspaces button:nth-child(1) { - border-top-left-radius: @roundingpx; - border-bottom-left-radius: @roundingpx; + border-top-left-radius: 1em; + border-bottom-left-radius: 1em; } #workspaces button:nth-last-child(1) { - border-top-right-radius: @roundingpx; - border-bottom-right-radius: @roundingpx; + border-top-right-radius: 1em; + border-bottom-right-radius: 1em; } #workspaces button.empty { - color: @base04; + color: @overlay1; } #workspaces button.visible { - background: @base03; + background: @surface1; } #workspaces button.focused { @@ -71,44 +71,47 @@ window#waybar { #workspaces button.active { background: @accent; - color: @base02; + color: @surface0; } #workspaces button:hover { background: rgba(255, 255, 255, 0.1); - color: @base05; + color: @text; box-shadow: none; } #workspaces button.active:hover { background: @accent; - color: @base02; + color: @surface0; } #workspaces button.urgent { - background: @base08; - color: @base02; + background: @red; + color: @surface0; } #window { background: transparent; } +window#waybar.floating #window { + color: @pink; +} #clock { - color: @base07; + color: @lavender; } #power-profiles-daemon { - color: @base0C; + color: @teal; } #cpu, #network { - color: @base16; + color: @sapphire; } #network.disabled, #network.disconnected { - color: @base04; + color: @overlay1; } @keyframes blink { to { - color: @base05; + color: @text; } } @@ -116,15 +119,15 @@ window#waybar { animation-timing-function: linear; animation-iteration-count: infinite; animation-direction: alternate; - color: @base07; + color: @lavender; } #memory.warning { - color: @base09; + color: @peach; animation-name: blink; animation-duration: 3s; } #memory.critical { - color: @base12; + color: @maroon; animation-name: blink; animation-duration: 2s; } @@ -133,40 +136,40 @@ window#waybar { animation-timing-function: linear; animation-iteration-count: infinite; animation-direction: alternate; - color: @base0B; + color: @green; } /* this here is ditto */ #battery.charging { - color: @base0B; + color: @green; } #battery.warning.discharging { - color: @base09; + color: @peach; animation-name: blink; animation-duration: 3s; } #battery.critical.discharging { - color: @base12; + color: @maroon; animation-name: blink; animation-duration: 2s; } #backlight, #custom-weather { - color: @base0A; + color: @yellow; } #pulseaudio { - color: @base17; + color: @pink; } #pulseaudio.muted { - color: @base04; + color: @overlay1; } #custom-power { - color: @base08; + color: @red; } #custom-wallpaper, #custom-rgb { - color: @base04; + color: @overlay1; } #privacy { @@ -175,7 +178,7 @@ window#waybar { } #privacy-item { padding: 0 1px; - color: @base05; + color: @text; } box#playback { @@ -185,17 +188,17 @@ box#playback { } #mpris { - background-color: @base02; + background-color: @surface0; margin: 0 0.25em; padding: 0.15em 0.5em; - border-radius: @roundingpx; + border-radius: 1em; } #mpris.playing { color: @accent; - background: @base02; + background: @surface0; } #mpris.paused, #mpris.stopped { - color: @base04; + color: @overlay1; } window decoration { @@ -203,10 +206,10 @@ window decoration { } tooltip, window.popup menu { - background: @base00; - border: 1px solid @base04; + background: @base; + border: 1px solid @surface2; font-size: 12px; - color: @base05; + color: @text; } tooltip *, window.popup { font-family: CozetteVector, monospace; @@ -214,20 +217,20 @@ tooltip *, window.popup { tooltip * { padding: 0px; margin: 0px; - color: @base05; + color: @text; } window.popup separator { - background-color: @base02; + background-color: @surface0; } window.popup menuitem:disabled { - color: @base04; + color: @overlay1; } window.popup menuitem:hover { background-color: @accent; - color: @base02; + color: @surface0; } window.popup menuitem:hover > box { diff --git a/modules/desktop/themes/default.nix b/modules/desktop/themes/default.nix index b155dc9..6bce02b 100644 --- a/modules/desktop/themes/default.nix +++ b/modules/desktop/themes/default.nix @@ -12,38 +12,35 @@ in { description = "Name of the theme to apply; see modules/desktop/themes for a list of valid options"; }; - rounding = mkOpt int 10; - padding = mkOpt int 6; - dark = mkOpt bool false; gtkTheme = { - name = mkOpt (nullOr str) null; - package = mkOpt (nullOr package) null; + name = mkOpt str ""; + package = mkPackageOption pkgs "gtk" {}; }; kvantumTheme = { - name = mkOpt (nullOr str) null; - package = mkOpt (nullOr package) null; + name = mkOpt str ""; + package = mkPackageOption pkgs "kvantum" {}; }; iconTheme = { - name = mkOpt (nullOr str) null; - package = mkOpt (nullOr package) null; + name = mkOpt str ""; + package = mkPackageOption pkgs "icon" {}; }; cursorTheme = { - name = mkOpt (nullOr str) null; - package = mkOpt (nullOr package) null; + name = mkOpt str ""; + package = mkPackageOption pkgs "cursor" {}; size = mkOpt int 24; }; editor = { vscode = { colorTheme = { - name = mkOpt (nullOr str) null; - extension = mkOpt (nullOr package) null; + name = mkOpt str ""; + extension = mkPackageOption pkgs "extension" {}; }; iconTheme = { - name = mkOpt (nullOr str) null; - extension = mkOpt (nullOr package) null; + name = mkOpt str ""; + extension = mkPackageOption pkgs "extension" {}; }; }; }; @@ -55,7 +52,7 @@ in { background = mkOpt str ""; }; - waybarTop = mkOpt str ""; + waybar = mkOpt str ""; wob = { borderColor = mkOpt (nullOr str) null; @@ -63,7 +60,9 @@ in { barColor = mkOpt (nullOr str) null; }; - rofiTop = mkOpt (nullOr str) null; + rofi = mkOpt (nullOr str) null; + + fuzzel = mkOpt (nullOr str) null; wezterm = mkOpt (nullOr str) null; @@ -103,8 +102,8 @@ in { hm.qt = { enable = true; - platformTheme.name = if (cfg.kvantumTheme.name != null) then "qtct" else "gtk3"; - style.name = mkIf (cfg.kvantumTheme.name != null) "kvantum"; + platformTheme.name = "qtct"; + style.name = "kvantum"; }; hm.home.pointerCursor = { @@ -137,16 +136,7 @@ in { }; }; - hm.programs.waybar.style = (builtins.replaceStrings - [ "@rounding" ] - [ (builtins.toString cfg.rounding) ] - (builtins.concatStringsSep "\n" ([ - cfg.waybarTop - (lib.readFile ./config/waybar.css) - ] - ++ lib.zipListsWith (name: hex: "@define-color base${name} #${hex};") - (builtins.genList (i: lib.fixedWidthString 2 "0" (lib.toUpper (lib.toHexString i))) 24) - config.scheme.toList))); + hm.programs.waybar.style = cfg.waybar; hm.services.wob.settings."" = { border_color = cfg.wob.borderColor; @@ -154,16 +144,18 @@ in { bar_color = cfg.wob.barColor; }; - hm.programs.rofi.theme = builtins.toFile "rofi.rasi" (builtins.replaceStrings - [ "@rounding" ] - [ (builtins.toString cfg.rounding) ] - (builtins.concatStringsSep "\n" ([ - cfg.rofiTop - (lib.readFile ./config/rofi.rasi) - ] - ++ lib.zipListsWith (name: hex: "* { base${name}: #${hex}; }") - (builtins.genList (i: lib.fixedWidthString 2 "0" (lib.toUpper (lib.toHexString i))) 24) - config.scheme.toList))); + # silly litle hack--rofi hm module doesn't play nice with strings + # so, we have to write the config to a file and then read it :P + # ...and then back to a string + hm.programs.rofi.theme = "${pkgs.writeTextFile { + name = "rofi-theme.rasi"; + text = cfg.rofi; + }}"; + + hm.programs.fuzzel.settings.main = { + include = cfg.fuzzel; + icon-theme = cfg.iconTheme.name; + }; hm.services.vicinae.settings.theme = let themeConf = { @@ -187,7 +179,7 @@ in { Appearance = { icon_theme = cfg.iconTheme.name; standard_dialogs = "xdgdesktopportal"; - style = "kvantum"; # its ok if this is always the case, override it anyway + style = "kvantum"; }; Fonts = with config.modules.desktop.fonts.fonts; { @@ -195,25 +187,22 @@ in { fixed = ''"${monospace.family},-1,${toString monospace.size},5,${toString weight},${zeros},1"''; }; }; - in mkMerge [ - { - # technically could cause issues with KDE if we use that - # not a concern for now - "kdeglobals".text = '' - [Icons] - Theme=${cfg.iconTheme.name} - ''; + in { + # technically could cause issues with KDE if we use that + # not a concern for now + "kdeglobals".text = '' + [Icons] + Theme=${cfg.iconTheme.name} + ''; - "qt5ct/qt5ct.conf".source = iniFmt.generate "qt5ct.conf" (mkQtctConf 5); - "qt6ct/qt6ct.conf".source = iniFmt.generate "qt6ct.conf" (mkQtctConf 6); - } - (mkIf (cfg.kvantumTheme.name != null) { - "Kvantum/${cfg.kvantumTheme.name}".source = "${cfg.kvantumTheme.package}/share/Kvantum/${cfg.kvantumTheme.name}"; - "Kvantum/kvantum.kvconfig".text = '' - [General] - theme=${cfg.kvantumTheme.name} - ''; - }) - ]; + "Kvantum/${cfg.kvantumTheme.name}".source = "${cfg.kvantumTheme.package}/share/Kvantum/${cfg.kvantumTheme.name}"; + "Kvantum/kvantum.kvconfig".text = '' + [General] + theme=${cfg.kvantumTheme.name} + ''; + + "qt5ct/qt5ct.conf".source = iniFmt.generate "qt5ct.conf" (mkQtctConf 5); + "qt6ct/qt6ct.conf".source = iniFmt.generate "qt6ct.conf" (mkQtctConf 6); + }; }; } diff --git a/modules/desktop/themes/gruvbox/gruvbox.nix b/modules/desktop/themes/gruvbox/gruvbox.nix deleted file mode 100644 index d4f5565..0000000 --- a/modules/desktop/themes/gruvbox/gruvbox.nix +++ /dev/null @@ -1,82 +0,0 @@ -{ inputs, config, lib, pkgs, system, ... }: - -with lib; -let - cfg = config.modules.desktop.themes; - # TODO: gruvbox theme doesn't use these that much - accent = "pink"; - accentBase = "base17"; - dark = true; - - darkString = if dark then "dark" else "light"; - scheme = "${inputs.tt-schemes}/base24/gruvbox-${if dark then "dark" else "light"}.yaml"; - pascalCase = s: (toUpper (substring 0 1 s)) + (toLower (substring 1 (stringLength s) s)); -in { - config = mkIf (cfg.active == "gruvbox") { - scheme = scheme; - - modules.desktop.themes = { - dark = dark; - - rounding = 0; - - gtkTheme = { - name = "Gruvbox-${pascalCase accent}-${pascalCase darkString}-Compact"; - package = pkgs.gruvbox-gtk-theme.override { - colorVariants = [ darkString ]; - themeVariants = [ accent ]; - tweakVariants = [ "macos" ]; - sizeVariants = [ "compact" ]; - }; - }; - - iconTheme = { - name = "Gruvbox-Plus-${pascalCase darkString}"; - package = pkgs.gruvbox-plus-icons; - }; - - cursorTheme = { - name = "macOS"; - package = pkgs.apple-cursor; - }; - - editor = { - vscode = { - colorTheme = { - name = "Gruvbox ${pascalCase darkString} Medium"; - extension = pkgs.vscode-extensions.jdinhlife.gruvbox; - }; - iconTheme = { - name = "material-icon-theme"; - extension = pkgs.vscode-extensions.pkief.material-icon-theme; - }; - }; - }; - - niri = let - colors = config.scheme.withHashtag; - in with colors; { - accent = colors.${accentBase}; - inactive = "${base02}"; - shadow = "${base11}"; - background = if dark then "${base11}" else "${base05}"; - }; - - waybarTop = "@define-color accent @${accentBase};"; - - wob = with config.scheme; { - borderColor = "${base04}FF"; - backgroundColor = "${base01}CC"; - barColor = "${base05}FF"; - }; - - rofiTop = "* { accent: @${accentBase}; }"; - - wezterm = '' - config.color_scheme = 'Gruvbox${pascalCase darkString}' - ''; - - vicinae = "gruvbox-${if dark then "dark" else "light"}"; - }; - }; -} diff --git a/modules/desktop/vicinae.nix b/modules/desktop/vicinae.nix index 5d7c748..2b6a52f 100644 --- a/modules/desktop/vicinae.nix +++ b/modules/desktop/vicinae.nix @@ -6,7 +6,6 @@ let in { options.modules.desktop.vicinae = { enable = mkEnableOption "Enable vicinae, a launcher built in react"; - dmenu = mkEnableOption "Use as a replacement for dmenu"; package = mkOption { type = types.package; default = inputs.vicinae.packages.${system}.default; @@ -30,15 +29,14 @@ in { # i disagree with these telemetry.system_info = false; + providers.core.entrypoints.sponsor.enable = false; pop_to_root_on_close = true; launcher_window = { opacity = 0.8; - client_side_decorations.enabled = true; - client_side_decorations.border_width = 0; - client_side_decorations.rounding = config.modules.desktop.themes.rounding; + client_side_decorations.enabled = false; layer_shell = { enabled = true; @@ -53,24 +51,14 @@ in { ]; providers = { - core.entrypoints = { - keybind-settings.enabled = false; - report-bug.enabled = false; - sponsor.enabled = false; - }; applications = { preferences = { defaultAction = "launch"; }; }; - - manage-shortcuts.enabled = false; - theme.enabled = false; - developer.enabled = false; + files.enabled = false; }; - fallbacks = [ "files:search" ]; - escape_key_behavior = "close_window"; font = let @@ -84,20 +72,5 @@ in { nix ] ++ optional config.modules.desktop.niri.enable niri; }; - - user.packages = mkIf cfg.dmenu [ (pkgs.writeShellScriptBin "dmenu" '' - set -euo pipefail - - prompt="select option" - - while [ $# -gt 0 ]; do - case "$1" in - -p) shift; prompt="$1" ;; - esac - shift - done - - vicinae dmenu --placeholder "$prompt" - '') ]; }; } diff --git a/modules/desktop/waybar.nix b/modules/desktop/waybar.nix index 198b9bc..f63fa3a 100644 --- a/modules/desktop/waybar.nix +++ b/modules/desktop/waybar.nix @@ -23,18 +23,16 @@ in { systemd.enable = true; package = cfg.package; - settings = let - inherit (config.modules.desktop.themes) padding; - in { + settings = { mainBar = mkMerge [ { layer = "top"; position = "top"; spacing = 4; height = 32; - margin-top = padding; - margin-left = padding; - margin-right = padding; + margin-top = 6; + margin-left = 6; + margin-right = 6; margin-bottom = 0; modules-left = [ "niri/workspaces" @@ -83,16 +81,7 @@ in { powerMenuScript = pkgs.writeShellScript "power-menu" '' set -euo pipefail - cmd=$( - printf "%s\n" \ - "⏻ shutdown" \ - "↻ reboot" \ - "󰒲 sleep" \ - " hibernate" \ - " lock" \ - "⎋ exit desktop environment" \ - | dmenu -p "what to do ?" - ) + cmd=$(echo '⏻ shutdown|↻ reboot|󰒲 sleep| hibernate| lock|⎋ exit desktop environment' | ${lib.getExe config.modules.desktop.rofi.package} -dmenu -sep '|' -i -p 'what to do ?') case "$cmd" in "⏻ shutdown") poweroff @@ -222,6 +211,20 @@ in { power-saver = " save"; }; }; + battery = { + interval = 30; + states = { + warning = 20; + critical = 10; + }; + design-capacity = false; + format = "{icon} {capacity}%"; + format-icons = ["" "" "" "" ""]; + format-critical = " {capacity}%"; + format-charging = " {capacity}%"; + tooltip = true; + tooltip-format = "{timeTo} ({power}W)"; + }; privacy = { icon-spacing = 0; icon-size = 12; @@ -312,22 +315,6 @@ in { return-type = "json"; }; } - (mkIf config.modules.core.laptop { - battery = { - interval = 30; - states = { - warning = 20; - critical = 10; - }; - design-capacity = false; - format = "{icon} {capacity}%"; - format-icons = ["" "" "" "" ""]; - format-critical = " {capacity}%"; - format-charging = " {capacity}%"; - tooltip = true; - tooltip-format = "{timeTo} ({power}W)"; - }; - }) (mkIf config.modules.desktop.awww.enable { "custom/wallpaper" = { format = ""; diff --git a/modules/core/fs/fstrim.nix b/modules/fs/fstrim.nix similarity index 100% rename from modules/core/fs/fstrim.nix rename to modules/fs/fstrim.nix diff --git a/modules/core/fs/lvm.nix b/modules/fs/lvm.nix similarity index 100% rename from modules/core/fs/lvm.nix rename to modules/fs/lvm.nix diff --git a/modules/core/fs/scrub.nix b/modules/fs/scrub.nix similarity index 100% rename from modules/core/fs/scrub.nix rename to modules/fs/scrub.nix diff --git a/modules/hardware/bluetooth.nix b/modules/hardware/bluetooth.nix index ad80ce4..f31d1f6 100644 --- a/modules/hardware/bluetooth.nix +++ b/modules/hardware/bluetooth.nix @@ -6,15 +6,11 @@ let in { options.modules.hardware.bluetooth = { enable = mkEnableOption "Enable bluetooth, a short-range communication technology"; - powerOnBoot = mkEnableOption { - default = !config.modules.core.laptop; - description = "Power up bluetooth devices on boot"; - }; }; config = mkIf cfg.enable { hardware.bluetooth.enable = true; - hardware.bluetooth.powerOnBoot = cfg.powerOnBoot; + hardware.bluetooth.powerOnBoot = true; hardware.bluetooth.settings = { General = { Experimental = true; diff --git a/modules/hardware/default.nix b/modules/hardware/default.nix deleted file mode 100644 index 08fb28a..0000000 --- a/modules/hardware/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ pkgs, ... }: -{ - config = { - hardware.enableRedistributableFirmware = true; - }; -} diff --git a/modules/hardware/networking.nix b/modules/hardware/networking.nix index c279b36..99069ab 100644 --- a/modules/hardware/networking.nix +++ b/modules/hardware/networking.nix @@ -6,10 +6,7 @@ let in { options.modules.hardware.networking = { enable = mkEnableOption "Enable NetworkManager, a daemon for configuring network interfaces"; - powersave = mkEnableOption { - default = config.modules.core.laptop; - description = "Enable power saving options over Wi-Fi"; - }; + powersave = mkEnableOption "Enable power saving options over Wi-Fi"; }; config = mkIf cfg.enable { diff --git a/modules/hardware/audio.nix b/modules/hardware/pipewire.nix similarity index 69% rename from modules/hardware/audio.nix rename to modules/hardware/pipewire.nix index a9db2d0..ade571f 100644 --- a/modules/hardware/audio.nix +++ b/modules/hardware/pipewire.nix @@ -2,10 +2,10 @@ with lib; let - cfg = config.modules.hardware.audio; + cfg = config.modules.hardware.pipewire; in { - options.modules.hardware.audio = { - enable = mkEnableOption "Enable audio through pipewire, a modern audio server"; + options.modules.hardware.pipewire = { + enable = mkEnableOption "Enable pipewire, a modern audio server"; }; config = mkIf cfg.enable { diff --git a/modules/hardware/rgb.nix b/modules/hardware/rgb.nix index 6f5ec07..85c8f19 100644 --- a/modules/hardware/rgb.nix +++ b/modules/hardware/rgb.nix @@ -21,7 +21,7 @@ in { find /var/lib/OpenRGB -name "*.orp" 2>/dev/null ) - selected=$(printf '%s\n' "''${files[@]}" | xargs -n1 basename | dmenu -p "select profile") + selected=$(printf '%s\n' "''${files[@]}" | xargs -n1 basename | ${lib.getExe config.modules.desktop.rofi.package} -dmenu -i -p "select profile") [[ -z "$selected" ]] && exit 0 diff --git a/modules/core/nix.nix b/modules/nix.nix similarity index 100% rename from modules/core/nix.nix rename to modules/nix.nix diff --git a/modules/core/security.nix b/modules/security.nix similarity index 77% rename from modules/core/security.nix rename to modules/security.nix index cdec7fa..4bc3f4b 100755 --- a/modules/core/security.nix +++ b/modules/security.nix @@ -2,9 +2,9 @@ with lib; let - cfg = config.modules.core.security; + cfg = config.modules.security; in { - options.modules.core.security = { + options.modules.security = { useDoas = mkEnableOption "use opendoas instead of sudo"; }; @@ -64,13 +64,28 @@ in { # personal computer? no firewall ty :3 networking.firewall.enable = false; - # stay up to date on firmware + services.usbguard = { + IPCAllowedUsers = [ "root" "${env.mainUser}" ]; + presentDevicePolicy = "allow"; + rules = '' + allow with-interface equals { 08:*:* } + + # reject devices with suspicious combination of interfaces (ex. mass storage + keyboard) + reject with-interface all-of { 08:*:* 03:00:* } + reject with-interface all-of { 08:*:* 03:01:* } + reject with-interface all-of { 08:*:* e0:*:* } + reject with-interface all-of { 08:*:* 02:*:* } + ''; + }; + services.fwupd.enable = true; } (mkIf cfg.useDoas { security.sudo.enable = false; security.doas.enable = true; - security.doas.extraRules = [ { users = [ config.user.name ]; noPass = true; persist = false; keepEnv = true; } ]; + security.doas.extraRules = [ + { users = [ config.user.name ]; noPass = true; persist = false; keepEnv = true; } + ]; environment.systemPackages = with pkgs; [ doas-sudo-shim ]; }) ]; diff --git a/modules/software/tools/git.nix b/modules/software/dev/git.nix similarity index 94% rename from modules/software/tools/git.nix rename to modules/software/dev/git.nix index eeade6e..ef26246 100644 --- a/modules/software/tools/git.nix +++ b/modules/software/dev/git.nix @@ -2,9 +2,9 @@ with lib; let - cfg = config.modules.software.tools.git; + cfg = config.modules.software.dev.git; in { - options.modules.software.tools.git = { + options.modules.software.dev.git = { enable = mkEnableOption "Enable git. You know what git is"; package = mkOption { type = types.package; diff --git a/modules/software/distractions/discord.nix b/modules/software/distractions/discord.nix index 3158185..f7f3f11 100644 --- a/modules/software/distractions/discord.nix +++ b/modules/software/distractions/discord.nix @@ -17,6 +17,8 @@ in { }; config = mkIf cfg.enable { - user.packages = [ finalPackage ]; + user.packages = [ + finalPackage + ]; }; } diff --git a/modules/software/editors/micro.nix b/modules/software/editors/micro.nix index be9fd21..4f2fd23 100644 --- a/modules/software/editors/micro.nix +++ b/modules/software/editors/micro.nix @@ -28,8 +28,7 @@ in { }; }; - # TODO: rework these.. - hm.xdg.configFile."micro/colorschemes/${schemeName}.micro".text = with config.scheme; '' + hm.xdg.configFile."micro/colorschemes/${schemeName}.micro".text = with config.colorScheme.palette; '' color-link default "#${base05},#${base00}" color-link comment "#${base03},#${base00}" color-link identifier "#${base0D},#${base00}" diff --git a/modules/software/system/fish.nix b/modules/software/system/fish.nix index 89ea33b..76bbbf3 100644 --- a/modules/software/system/fish.nix +++ b/modules/software/system/fish.nix @@ -24,7 +24,9 @@ in { programs.fish.enable = true; users.defaultUserShell = pkgs.fish; - hm.programs.fish = { + hm.programs.fish = let + colorScript = nix-colors-lib.shellThemeFromScheme { scheme = config.colorScheme; }; + in { enable = true; plugins = let mkPlugin = name: { @@ -41,6 +43,7 @@ in { ]; interactiveShellInit = '' ${lib.getExe pkgs.nix-your-shell} fish | source + sh ${colorScript} ''; functions.fish_greeting = '' ${lib.getExe pkgs.fastfetch} --logo-type small --key-width 11 -s title:separator:os:host:kernel:uptime:memory:swap diff --git a/modules/software/system/mpv.nix b/modules/software/system/mpv.nix index 163a60b..b4b98b1 100644 --- a/modules/software/system/mpv.nix +++ b/modules/software/system/mpv.nix @@ -24,10 +24,10 @@ in { visualizer = { mode = "noalbumart"; }; - modernz = with config.scheme.withHashtag; { + modernz = with config.colorScheme.palette; { bottomhover = "no"; hover_effect = ""; # these are weird lookin - seekbarfg_color = "${base0D}"; # blue is a sane default + seekbarfg_color = "#${base0D}"; # blue is a sane default }; }; diff --git a/modules/software/system/wezterm.nix b/modules/software/system/wezterm.nix index f64d193..8f96a9f 100644 --- a/modules/software/system/wezterm.nix +++ b/modules/software/system/wezterm.nix @@ -36,7 +36,7 @@ in { config.freetype_load_flags = 'MONOCHROME' config.enable_wayland = true config.use_fancy_tab_bar = false - config.use_resize_increments = false + config.use_resize_increments = true config.initial_cols = 120 config.initial_rows = 40 config.window_background_opacity = 0.8 diff --git a/modules/software/system/zswap.nix b/modules/software/system/zswap.nix new file mode 100644 index 0000000..fdfb5c1 --- /dev/null +++ b/modules/software/system/zswap.nix @@ -0,0 +1,21 @@ +{ lib, config, pkgs, ... }: + +with lib; +let + # TODO: move this dawg + cfg = config.modules.software.system.zswap; +in { + options.modules.software.system.zswap = { + enable = mkEnableOption "Enable zswap, a compressed RAM cache for swap pages"; + }; + + config = mkIf cfg.enable { + boot.kernelParams = [ + "zswap.enabled=1" + "zswap.shrinker_enabled=1" # high mem: shrink zswap, mv to swap + "zswap.max_pool_percent=20" # TODO: tune this (keep in mind shrinker is enabled) + "zswap.compressor=zstd" + "zswap.zpool=zsmalloc" + ]; + }; +} diff --git a/modules/software/tools/direnv.nix b/modules/software/tools/direnv.nix deleted file mode 100644 index 99893be..0000000 --- a/modules/software/tools/direnv.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ lib, config, ... }: - -with lib; -let - cfg = config.modules.software.tools.direnv; -in { - options.modules.software.tools.direnv = { - enable = mkEnableOption "Enable direnv, a shell extension that manages your environment"; - }; - - config = mkIf cfg.enable { - programs.direnv = { - enable = true; - silent = true; - nix-direnv.enable = true; - }; - }; -} diff --git a/modules/software/tools/noisetorch.nix b/modules/software/tools/noisetorch.nix new file mode 100644 index 0000000..4479532 --- /dev/null +++ b/modules/software/tools/noisetorch.nix @@ -0,0 +1,14 @@ +{ config, lib, ... }: + +with lib; +let + cfg = config.modules.software.tools.noisetorch; +in { + options.modules.software.tools.noisetorch = { + enable = mkEnableOption "Enable noisetorch, a microphone noise supression tool"; + }; + + config = mkIf cfg.enable { + programs.noisetorch.enable = true; + }; +} diff --git a/modules/core/user.nix b/modules/user.nix similarity index 100% rename from modules/core/user.nix rename to modules/user.nix diff --git a/modules/core/xdg.nix b/modules/xdg.nix similarity index 100% rename from modules/core/xdg.nix rename to modules/xdg.nix diff --git a/packages/loveletter/default.nix b/packages/loveletter/default.nix deleted file mode 100644 index ab5a372..0000000 --- a/packages/loveletter/default.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ lib, stdenvNoCC }: - -stdenvNoCC.mkDerivation { - pname = "loveletter"; - version = "1.0.0"; - - # i think i got this off of a cd collection on nyaa and it had some bootleg stuff too - # looks to be the same as http://www.konaka.com/alice6/lain/resources.html - # downloaded locally bcz the source's uptime isn't trustworthy - - src = ./.; - - installPhase = '' - runHook preInstall - - install -Dm644 -t $out/share/fonts/truetype ./loveletter.ttf - - runHook postInstall - ''; - - meta = with lib; { - description = "The LoveLetter font as featured in Serial Experiments Lain"; - homepage = "http://www.konaka.com/alice6/lain/resources.html"; - # idk what to put here: - # license = licenses.ofl; - platforms = platforms.all; - }; -} diff --git a/packages/loveletter/loveletter.ttf b/packages/loveletter/loveletter.ttf deleted file mode 100755 index c877430..0000000 Binary files a/packages/loveletter/loveletter.ttf and /dev/null differ