diff --git a/default.nix b/default.nix index 64fb9ce..35e6439 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.nix-colors.homeManagerModules.default # >home manager modules >in non-hm modules + inputs.base16.nixosModule inputs.nix-index-database.nixosModules.default inputs.t2fanrd.nixosModules.t2fanrd inputs.niri.nixosModules.niri diff --git a/flake.lock b/flake.lock index 562163d..7963f91 100644 --- a/flake.lock +++ b/flake.lock @@ -1,18 +1,20 @@ { "nodes": { - "base16-schemes": { - "flake": false, + "base16": { + "inputs": { + "fromYaml": "fromYaml" + }, "locked": { - "lastModified": 1696158499, - "narHash": "sha256-5yIHgDTPjoX/3oDEfLSQ0eJZdFL1SaCfb9d6M0RmOTM=", - "owner": "tinted-theming", - "repo": "base16-schemes", - "rev": "a9112eaae86d9dd8ee6bb9445b664fba2f94037a", + "lastModified": 1755819240, + "narHash": "sha256-qcMhnL7aGAuFuutH4rq9fvAhCpJWVHLcHVZLtPctPlo=", + "owner": "senchopens", + "repo": "base16.nix", + "rev": "75ed5e5e3fce37df22e49125181fa37899c3ccd6", "type": "github" }, "original": { - "owner": "tinted-theming", - "repo": "base16-schemes", + "owner": "senchopens", + "repo": "base16.nix", "type": "github" } }, @@ -139,19 +141,19 @@ "type": "github" } }, - "fuzzel-catppuccin": { + "fromYaml": { "flake": false, "locked": { - "lastModified": 1771578346, - "narHash": "sha256-+/7lxQTRDZ0m+GAAFIjvFt8EXDeqZUtv0pLnNgaauZw=", - "owner": "catppuccin", - "repo": "fuzzel", - "rev": "879879da8a7dc58f173b4cd7987723fd19bef6d5", + "lastModified": 1731966426, + "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", + "owner": "SenchoPens", + "repo": "fromYaml", + "rev": "106af9e2f715e2d828df706c386a685698f3223b", "type": "github" }, "original": { - "owner": "catppuccin", - "repo": "fuzzel", + "owner": "SenchoPens", + "repo": "fromYaml", "type": "github" } }, @@ -380,25 +382,6 @@ "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": [ @@ -450,21 +433,6 @@ "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, @@ -561,40 +529,22 @@ "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", - "waybar-catppuccin": "waybar-catppuccin" + "vicinae-extensions": "vicinae-extensions" } }, "systems": { @@ -675,6 +625,22 @@ "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", @@ -742,22 +708,6 @@ "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 326097e..54fe00e 100644 --- a/flake.nix +++ b/flake.nix @@ -9,7 +9,8 @@ home-manager.inputs.nixpkgs.follows = "nixpkgs"; hardware.url = "github:nixos/nixos-hardware"; - nix-colors.url = "github:misterio77/nix-colors"; + + base16.url = "github:senchopens/base16.nix"; nix-index-database.url = "github:nix-community/nix-index-database"; nix-index-database.inputs.nixpkgs.follows = "nixpkgs"; @@ -29,12 +30,8 @@ catppuccin.url = "github:catppuccin/nix"; - 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; + tt-schemes.url = "github:tinted-theming/schemes"; + tt-schemes.flake = false; }; outputs = inputs @ { self, nixpkgs, systems, ... }: diff --git a/hosts/flubber-machine/default.nix b/hosts/flubber-machine/default.nix index 09f510c..f6aad81 100755 --- a/hosts/flubber-machine/default.nix +++ b/hosts/flubber-machine/default.nix @@ -66,10 +66,9 @@ 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; diff --git a/hosts/flubber-machine/hardware.nix b/hosts/flubber-machine/hardware.nix index 85398df..112917c 100755 --- a/hosts/flubber-machine/hardware.nix +++ b/hosts/flubber-machine/hardware.nix @@ -4,17 +4,19 @@ 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" "amdgpu" ]; - boot.extraModulePackages = [ ]; + boot.kernelModules = [ "kvm-amd" "zenergy" ]; + boot.extraModulePackages = with config.boot.kernelPackages; [ zenergy ]; 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 7ceb261..d09e768 100755 --- a/hosts/goopnet-interface/default.nix +++ b/hosts/goopnet-interface/default.nix @@ -63,10 +63,9 @@ 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; diff --git a/modules/desktop/awww.nix b/modules/desktop/awww.nix index 1eca551..0745cfd 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} | ${lib.getExe config.modules.desktop.rofi.package} -dmenu -sep '\n' -i -p "select a wallpaper") + file=$(ls ${cfg.wallpapersFolder} | dmenu -p "select a wallpaper") wallpaper="${cfg.wallpapersFolder}/$file" [ ! -f "$wallpaper" ] && exit 1 diff --git a/modules/desktop/cliphist.nix b/modules/desktop/cliphist.nix deleted file mode 100644 index 241d6b2..0000000 --- a/modules/desktop/cliphist.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ 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 820255a..93b51ec 100644 --- a/modules/desktop/dunst.nix +++ b/modules/desktop/dunst.nix @@ -12,20 +12,22 @@ in { hm.services.dunst = { enable = true; - settings = with config.colorScheme.palette; { + settings = let + inherit (config.modules.desktop.themes) rounding padding; + in with config.scheme.withHashtag; { global = { follow = "mouse"; width = 300; height = 145; - frame_color = "#${base02}"; + frame_color = "${base02}"; origin = "top-right"; # various non-color theming settings - offset = "15x15"; - padding = 15; - horizontal_padding = 15; - text_icon_padding = 15; - corner_radius = 8; + offset = let offset = builtins.toString (padding * 2); in "${offset}x${offset}"; + padding = padding; + horizontal_padding = padding; + text_icon_padding = padding; + corner_radius = rounding; gap_size = 0; frame_width = 1; @@ -33,7 +35,7 @@ in { progress_bar = true; progress_bar_frame_width = 1; - progress_bar_corner_radius = 8; + progress_bar_corner_radius = rounding; alignment = "left"; markup = "full"; @@ -56,19 +58,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 8162c65..3088db2 100644 --- a/modules/desktop/fonts.nix +++ b/modules/desktop/fonts.nix @@ -123,6 +123,8 @@ 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 deleted file mode 100644 index b468d24..0000000 --- a/modules/desktop/fuzzel.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ 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/hyprlock.nix b/modules/desktop/hyprlock.nix index b5e6849..45da687 100644 --- a/modules/desktop/hyprlock.nix +++ b/modules/desktop/hyprlock.nix @@ -20,7 +20,9 @@ in { enable = true; package = cfg.package; - settings = with config.colorScheme.palette; { + settings = let + inherit (config.modules.desktop.themes) rounding; + in with config.scheme; { general = { hide_cursor = false; text_trim = true; @@ -38,7 +40,7 @@ in { { size = "280, 280"; color = "rgb(${base00})"; - rounding = 48; + rounding = rounding; position = "0, 45"; halign = "center"; valign = "center"; @@ -52,8 +54,7 @@ in { position = "0, 105"; text = "cmd[update:1000] echo \"$(date +'%H')\""; font_size = 78; - # TODO: make more dynamic - color = "rgb(f5c2e7)"; # catppuccin pink + color = "rgb(${base05})"; font_family = config.modules.desktop.fonts.fonts.sansSerif.family; halign = "center"; valign = "center"; } @@ -100,7 +101,8 @@ in { { position = "0, -140"; size = "280, 48"; - outline_thickness = 2; + rounding = rounding; + outline_thickness = 1; dots_size = 0.3; fade_on_empty = false; placeholder_text = ""; diff --git a/modules/desktop/niri.nix b/modules/desktop/niri.nix index cded1ec..58f2d77 100644 --- a/modules/desktop/niri.nix +++ b/modules/desktop/niri.nix @@ -65,7 +65,7 @@ in { }; layout = { - gaps = 6; + gaps = config.modules.desktop.themes.padding; center-focused-column = "on-overflow"; @@ -229,7 +229,7 @@ in { # TODO: configure popups window-rules = [ { - geometry-corner-radius = allCorners 10.0; + geometry-corner-radius = allCorners (config.modules.desktop.themes.rounding * 1.0); clip-to-geometry = true; } { @@ -310,7 +310,6 @@ in { ]; # TODO: add shadows onto notifications. weird geometry beware !!! - # TODO: rounded vicinae layer-rules = [ { matches = [ @@ -318,13 +317,11 @@ 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$"; } @@ -339,13 +336,12 @@ 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.fonts.fonts.monospace.size * 1.0); # its 1em, so + geometry-corner-radius = allCorners (config.modules.desktop.themes.rounding * 1.0); } ]; @@ -354,7 +350,6 @@ 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; @@ -431,7 +426,7 @@ in { "Mod+Shift+Minus".action = set-window-height "-10%"; "Mod+Shift+Equal".action = set-window-height "+10%"; - "Print".action.screenshot = { show-pointer = false; }; + "Print".action.screenshot-screen = { show-pointer = false; }; "Mod+Grave".action = toggle-overview; @@ -457,7 +452,6 @@ 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 2e4a0ff..8246def 100644 --- a/modules/desktop/regreet.nix +++ b/modules/desktop/regreet.nix @@ -13,20 +13,25 @@ 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}" + in '' + output "${firstMonitor.name}" scale ${toString firstMonitor.scale} + workspace 1 output "${firstMonitor.name}" + for_window [all] move container to workspace 1 + '' else ""; in command: pkgs.writeText "kiosk-sway-config" '' ${monitorConfig} xwayland disable - exec '${command}; ${pkgs.sway}/bin/swaymsg exit' + exec '${swaymsg} workspace 1; ${command}; ${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 f216a8e..0309842 100644 --- a/modules/desktop/rofi.nix +++ b/modules/desktop/rofi.nix @@ -6,6 +6,7 @@ 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; @@ -23,5 +24,20 @@ 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 4c86288..42ac2a6 100644 --- a/modules/desktop/themes/catppuccin/default.nix +++ b/modules/desktop/themes/catppuccin/default.nix @@ -4,14 +4,16 @@ with lib; let cfg = config.modules.desktop.themes; accent = "pink"; + accentBase = "base17"; variant = "mocha"; dark = variant != "latte"; - colorScheme = inputs.nix-colors.colorSchemes.${"catppuccin-${variant}"}; + darkString = if dark then "dark" else "light"; + scheme = "${inputs.tt-schemes}/base24/catppuccin-${variant}.yaml"; pascalCase = s: (toUpper (substring 0 1 s)) + (toLower (substring 1 (stringLength s) s)); in { config = mkIf (cfg.active == "catppuccin") { - colorScheme = colorScheme; + scheme = scheme; modules.desktop.themes = { dark = dark; @@ -35,14 +37,13 @@ in { }; iconTheme = { - name = "WhiteSur-${if dark then "dark" else "light"}"; + name = "WhiteSur-${darkString}"; package = pkgs.whitesur-icon-theme; }; cursorTheme = { - name = "graphite-${if dark then "dark" else "light"}"; - package = pkgs.graphite-cursors; - size = 24; + name = "macOS"; + package = pkgs.apple-cursor; }; editor = { @@ -68,36 +69,24 @@ in { }; }; - niri = with colorScheme.palette; { - # TODO: make more dynamic - # catppuccin pink - accent = "#f5c2e7"; - inactive = "#${base02}"; - # catppuccin crust - shadow = "#11111b"; - # catppuccin crust - background = "#11111b"; + niri = let + colors = config.scheme.withHashtag; + in with colors; { + accent = colors.${accentBase}; + inactive = "${base02}"; + shadow = "${base11}"; + background = if dark then "${base11}" else "${base05}"; }; - waybar = builtins.concatStringsSep "\n" [ - "@import \"${inputs.waybar-catppuccin}/themes/${variant}.css\";" - "@define-color accent @${accent};" - (lib.readFile ./waybar.css) - ]; + waybarTop = "@define-color accent @${accentBase};"; - wob = with colorScheme.palette; { + wob = with config.scheme; { borderColor = "${base04}FF"; backgroundColor = "${base01}CC"; barColor = "${base05}FF"; }; - 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"; + rofiTop = "* { accent: @${accentBase}; }"; wezterm = '' config.color_scheme = 'Catppuccin ${pascalCase variant}' diff --git a/modules/desktop/themes/catppuccin/rofi.rasi b/modules/desktop/themes/config/rofi.rasi similarity index 66% rename from modules/desktop/themes/catppuccin/rofi.rasi rename to modules/desktop/themes/config/rofi.rasi index eccabf6..0197829 100644 --- a/modules/desktop/themes/catppuccin/rofi.rasi +++ b/modules/desktop/themes/config/rofi.rasi @@ -10,27 +10,27 @@ element-text, element-icon , mode-switcher { window { height: 500px; border: 1px; - border-radius: 1em; + border-radius: @roundingpx; border-color: @accent; - background-color: @base; + background-color: @base00; } mainbox { - background-color: @base; + background-color: @base00; } inputbar { margin: 10px 5px 5px 5px; children: [prompt, entry]; - background-color: @base; + background-color: @base00; padding: 1px; } prompt { background-color: transparent; padding: 1px; - text-color: @text; - border-radius: 1.5em; + text-color: @base05; + border-radius: @roundingpx; } textbox-prompt-colon { @@ -41,8 +41,8 @@ textbox-prompt-colon { entry { padding: 1px; margin: 0px; - text-color: @text; - background-color: @base; + text-color: @base05; + background-color: @base00; } listview { @@ -50,26 +50,26 @@ listview { margin: 5px 0px 0px 10px; columns: 1; lines: 10; - background-color: @base; + background-color: @base00; } element { padding: 1px; - background-color: @base; - text-color: @text; + background-color: @base00; + text-color: @base05; } element-icon {size: 12px;} element.selected { - background-color: @surface1; + background-color: @base03; text-color: @accent; } scrollbar { width: 4px ; border: 0; - handle-color: @text; + handle-color: @base05; handle-width: 8px ; padding: 0; } @@ -78,13 +78,13 @@ mode-switcher {spacing: 0;} button { spacing: 0; - background-color: @surface0; - text-color: @subtext1; + background-color: @base02; + text-color: @base04; vertical-align: 0.5; horizontal-align: 0.5; } button.selected { - background-color: @base; + background-color: @base00; text-color: @accent; } diff --git a/modules/desktop/themes/catppuccin/waybar.css b/modules/desktop/themes/config/waybar.css similarity index 69% rename from modules/desktop/themes/catppuccin/waybar.css rename to modules/desktop/themes/config/waybar.css index 09990f0..8da7f82 100644 --- a/modules/desktop/themes/catppuccin/waybar.css +++ b/modules/desktop/themes/config/waybar.css @@ -9,21 +9,21 @@ button, button:hover { } window#waybar { - color: @text; - background: alpha(@base, 0.9999999); - border-radius: 1em; + color: @base05; + background: alpha(@base00, 0.9999999); + border-radius: @roundingpx; font-family: "CozetteVector", monospace, "FontAwesome 6 Free", "Noto Sans CJK"; - font-size: 13px; + font-size: 13px; /* TODO: make this use proper font size */ font-style: normal; - border: 1px solid @surface0; + border: 1px solid @base02; } #workspaces, .modules-right box { - background-color: @surface0; + background-color: @base02; margin: 0 0.25em; padding: 0.15em 0.25em; - border-radius: 1em; + border-radius: @roundingpx; } .modules-right label.module { margin: 0 0.5em; @@ -37,32 +37,32 @@ window#waybar { } #workspaces { - background-color: @surface0; + background-color: @base02; padding: 0; } #workspaces button { background-color: transparent; - color: @text; + color: @base05; padding: 0 0.4em; transition: none; } #workspaces button:nth-child(1) { - border-top-left-radius: 1em; - border-bottom-left-radius: 1em; + border-top-left-radius: @roundingpx; + border-bottom-left-radius: @roundingpx; } #workspaces button:nth-last-child(1) { - border-top-right-radius: 1em; - border-bottom-right-radius: 1em; + border-top-right-radius: @roundingpx; + border-bottom-right-radius: @roundingpx; } #workspaces button.empty { - color: @overlay1; + color: @base04; } #workspaces button.visible { - background: @surface1; + background: @base03; } #workspaces button.focused { @@ -71,47 +71,44 @@ window#waybar { #workspaces button.active { background: @accent; - color: @surface0; + color: @base02; } #workspaces button:hover { background: rgba(255, 255, 255, 0.1); - color: @text; + color: @base05; box-shadow: none; } #workspaces button.active:hover { background: @accent; - color: @surface0; + color: @base02; } #workspaces button.urgent { - background: @red; - color: @surface0; + background: @base08; + color: @base02; } #window { background: transparent; } -window#waybar.floating #window { - color: @pink; -} #clock { - color: @lavender; + color: @base07; } #power-profiles-daemon { - color: @teal; + color: @base0C; } #cpu, #network { - color: @sapphire; + color: @base16; } #network.disabled, #network.disconnected { - color: @overlay1; + color: @base04; } @keyframes blink { to { - color: @text; + color: @base05; } } @@ -119,15 +116,15 @@ window#waybar.floating #window { animation-timing-function: linear; animation-iteration-count: infinite; animation-direction: alternate; - color: @lavender; + color: @base07; } #memory.warning { - color: @peach; + color: @base09; animation-name: blink; animation-duration: 3s; } #memory.critical { - color: @maroon; + color: @base12; animation-name: blink; animation-duration: 2s; } @@ -136,40 +133,40 @@ window#waybar.floating #window { animation-timing-function: linear; animation-iteration-count: infinite; animation-direction: alternate; - color: @green; + color: @base0B; } /* this here is ditto */ #battery.charging { - color: @green; + color: @base0B; } #battery.warning.discharging { - color: @peach; + color: @base09; animation-name: blink; animation-duration: 3s; } #battery.critical.discharging { - color: @maroon; + color: @base12; animation-name: blink; animation-duration: 2s; } #backlight, #custom-weather { - color: @yellow; + color: @base0A; } #pulseaudio { - color: @pink; + color: @base17; } #pulseaudio.muted { - color: @overlay1; + color: @base04; } #custom-power { - color: @red; + color: @base08; } #custom-wallpaper, #custom-rgb { - color: @overlay1; + color: @base04; } #privacy { @@ -178,7 +175,7 @@ window#waybar.floating #window { } #privacy-item { padding: 0 1px; - color: @text; + color: @base05; } box#playback { @@ -188,17 +185,17 @@ box#playback { } #mpris { - background-color: @surface0; + background-color: @base02; margin: 0 0.25em; padding: 0.15em 0.5em; - border-radius: 1em; + border-radius: @roundingpx; } #mpris.playing { color: @accent; - background: @surface0; + background: @base02; } #mpris.paused, #mpris.stopped { - color: @overlay1; + color: @base04; } window decoration { @@ -206,10 +203,10 @@ window decoration { } tooltip, window.popup menu { - background: @base; - border: 1px solid @surface2; + background: @base00; + border: 1px solid @base04; font-size: 12px; - color: @text; + color: @base05; } tooltip *, window.popup { font-family: CozetteVector, monospace; @@ -217,20 +214,20 @@ tooltip *, window.popup { tooltip * { padding: 0px; margin: 0px; - color: @text; + color: @base05; } window.popup separator { - background-color: @surface0; + background-color: @base02; } window.popup menuitem:disabled { - color: @overlay1; + color: @base04; } window.popup menuitem:hover { background-color: @accent; - color: @surface0; + color: @base02; } window.popup menuitem:hover > box { diff --git a/modules/desktop/themes/default.nix b/modules/desktop/themes/default.nix index 6bce02b..b155dc9 100644 --- a/modules/desktop/themes/default.nix +++ b/modules/desktop/themes/default.nix @@ -12,35 +12,38 @@ 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 str ""; - package = mkPackageOption pkgs "gtk" {}; + name = mkOpt (nullOr str) null; + package = mkOpt (nullOr package) null; }; kvantumTheme = { - name = mkOpt str ""; - package = mkPackageOption pkgs "kvantum" {}; + name = mkOpt (nullOr str) null; + package = mkOpt (nullOr package) null; }; iconTheme = { - name = mkOpt str ""; - package = mkPackageOption pkgs "icon" {}; + name = mkOpt (nullOr str) null; + package = mkOpt (nullOr package) null; }; cursorTheme = { - name = mkOpt str ""; - package = mkPackageOption pkgs "cursor" {}; + name = mkOpt (nullOr str) null; + package = mkOpt (nullOr package) null; size = mkOpt int 24; }; editor = { vscode = { colorTheme = { - name = mkOpt str ""; - extension = mkPackageOption pkgs "extension" {}; + name = mkOpt (nullOr str) null; + extension = mkOpt (nullOr package) null; }; iconTheme = { - name = mkOpt str ""; - extension = mkPackageOption pkgs "extension" {}; + name = mkOpt (nullOr str) null; + extension = mkOpt (nullOr package) null; }; }; }; @@ -52,7 +55,7 @@ in { background = mkOpt str ""; }; - waybar = mkOpt str ""; + waybarTop = mkOpt str ""; wob = { borderColor = mkOpt (nullOr str) null; @@ -60,9 +63,7 @@ in { barColor = mkOpt (nullOr str) null; }; - rofi = mkOpt (nullOr str) null; - - fuzzel = mkOpt (nullOr str) null; + rofiTop = mkOpt (nullOr str) null; wezterm = mkOpt (nullOr str) null; @@ -102,8 +103,8 @@ in { hm.qt = { enable = true; - platformTheme.name = "qtct"; - style.name = "kvantum"; + platformTheme.name = if (cfg.kvantumTheme.name != null) then "qtct" else "gtk3"; + style.name = mkIf (cfg.kvantumTheme.name != null) "kvantum"; }; hm.home.pointerCursor = { @@ -136,7 +137,16 @@ in { }; }; - hm.programs.waybar.style = cfg.waybar; + 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.services.wob.settings."" = { border_color = cfg.wob.borderColor; @@ -144,18 +154,16 @@ in { bar_color = cfg.wob.barColor; }; - # 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.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))); hm.services.vicinae.settings.theme = let themeConf = { @@ -179,7 +187,7 @@ in { Appearance = { icon_theme = cfg.iconTheme.name; standard_dialogs = "xdgdesktopportal"; - style = "kvantum"; + style = "kvantum"; # its ok if this is always the case, override it anyway }; Fonts = with config.modules.desktop.fonts.fonts; { @@ -187,22 +195,25 @@ in { fixed = ''"${monospace.family},-1,${toString monospace.size},5,${toString weight},${zeros},1"''; }; }; - in { - # technically could cause issues with KDE if we use that - # not a concern for now - "kdeglobals".text = '' - [Icons] - Theme=${cfg.iconTheme.name} - ''; + in mkMerge [ + { + # technically could cause issues with KDE if we use that + # not a concern for now + "kdeglobals".text = '' + [Icons] + Theme=${cfg.iconTheme.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); - }; + "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} + ''; + }) + ]; }; } diff --git a/modules/desktop/themes/gruvbox/gruvbox.nix b/modules/desktop/themes/gruvbox/gruvbox.nix new file mode 100644 index 0000000..d4f5565 --- /dev/null +++ b/modules/desktop/themes/gruvbox/gruvbox.nix @@ -0,0 +1,82 @@ +{ 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 2b6a52f..5d7c748 100644 --- a/modules/desktop/vicinae.nix +++ b/modules/desktop/vicinae.nix @@ -6,6 +6,7 @@ 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; @@ -29,14 +30,15 @@ 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 = false; + client_side_decorations.enabled = true; + client_side_decorations.border_width = 0; + client_side_decorations.rounding = config.modules.desktop.themes.rounding; layer_shell = { enabled = true; @@ -51,14 +53,24 @@ in { ]; providers = { + core.entrypoints = { + keybind-settings.enabled = false; + report-bug.enabled = false; + sponsor.enabled = false; + }; applications = { preferences = { defaultAction = "launch"; }; }; - files.enabled = false; + + manage-shortcuts.enabled = false; + theme.enabled = false; + developer.enabled = false; }; + fallbacks = [ "files:search" ]; + escape_key_behavior = "close_window"; font = let @@ -72,5 +84,20 @@ 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 f63fa3a..1e71a97 100644 --- a/modules/desktop/waybar.nix +++ b/modules/desktop/waybar.nix @@ -23,16 +23,18 @@ in { systemd.enable = true; package = cfg.package; - settings = { + settings = let + inherit (config.modules.desktop.themes) padding; + in { mainBar = mkMerge [ { layer = "top"; position = "top"; spacing = 4; height = 32; - margin-top = 6; - margin-left = 6; - margin-right = 6; + margin-top = padding; + margin-left = padding; + margin-right = padding; margin-bottom = 0; modules-left = [ "niri/workspaces" @@ -81,7 +83,16 @@ in { powerMenuScript = pkgs.writeShellScript "power-menu" '' set -euo pipefail - cmd=$(echo '⏻ shutdown|↻ reboot|󰒲 sleep| hibernate| lock|⎋ exit desktop environment' | ${lib.getExe config.modules.desktop.rofi.package} -dmenu -sep '|' -i -p 'what to do ?') + cmd=$( + printf "%s\n" \ + "⏻ shutdown" \ + "↻ reboot" \ + "󰒲 sleep" \ + " hibernate" \ + " lock" \ + "⎋ exit desktop environment" \ + | dmenu -p "what to do ?" + ) case "$cmd" in "⏻ shutdown") poweroff diff --git a/modules/hardware/rgb.nix b/modules/hardware/rgb.nix index 85c8f19..6f5ec07 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 | ${lib.getExe config.modules.desktop.rofi.package} -dmenu -i -p "select profile") + selected=$(printf '%s\n' "''${files[@]}" | xargs -n1 basename | dmenu -p "select profile") [[ -z "$selected" ]] && exit 0 diff --git a/modules/software/distractions/discord.nix b/modules/software/distractions/discord.nix index f7f3f11..3158185 100644 --- a/modules/software/distractions/discord.nix +++ b/modules/software/distractions/discord.nix @@ -17,8 +17,6 @@ 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 4f2fd23..be9fd21 100644 --- a/modules/software/editors/micro.nix +++ b/modules/software/editors/micro.nix @@ -28,7 +28,8 @@ in { }; }; - hm.xdg.configFile."micro/colorschemes/${schemeName}.micro".text = with config.colorScheme.palette; '' + # TODO: rework these.. + hm.xdg.configFile."micro/colorschemes/${schemeName}.micro".text = with config.scheme; '' 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 76bbbf3..89ea33b 100644 --- a/modules/software/system/fish.nix +++ b/modules/software/system/fish.nix @@ -24,9 +24,7 @@ in { programs.fish.enable = true; users.defaultUserShell = pkgs.fish; - hm.programs.fish = let - colorScript = nix-colors-lib.shellThemeFromScheme { scheme = config.colorScheme; }; - in { + hm.programs.fish = { enable = true; plugins = let mkPlugin = name: { @@ -43,7 +41,6 @@ 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 b4b98b1..163a60b 100644 --- a/modules/software/system/mpv.nix +++ b/modules/software/system/mpv.nix @@ -24,10 +24,10 @@ in { visualizer = { mode = "noalbumart"; }; - modernz = with config.colorScheme.palette; { + modernz = with config.scheme.withHashtag; { 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 8f96a9f..f64d193 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 = true + config.use_resize_increments = false config.initial_cols = 120 config.initial_rows = 40 config.window_background_opacity = 0.8 diff --git a/packages/loveletter/default.nix b/packages/loveletter/default.nix new file mode 100644 index 0000000..ab5a372 --- /dev/null +++ b/packages/loveletter/default.nix @@ -0,0 +1,28 @@ +{ 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 new file mode 100755 index 0000000..c877430 Binary files /dev/null and b/packages/loveletter/loveletter.ttf differ