diff --git a/flake.lock b/flake.lock index e3543ec..8ea92bc 100644 --- a/flake.lock +++ b/flake.lock @@ -39,7 +39,28 @@ "root": { "inputs": { "home-manager": "home-manager", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "zen-browser": "zen-browser" + } + }, + "zen-browser": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1790843023, + "narHash": "sha256-vO6WFunNqHCjEaQc3ytshsGhHMqAIeW+5/rEJRLQLxQ=", + "owner": "youwen5", + "repo": "zen-browser-flake", + "rev": "710bb85c6cb4f186de8a710615be5b93b5f98885", + "type": "github" + }, + "original": { + "owner": "youwen5", + "repo": "zen-browser-flake", + "type": "github" } } }, diff --git a/flake.nix b/flake.nix index 20cea45..db8990d 100644 --- a/flake.nix +++ b/flake.nix @@ -27,5 +27,4 @@ desktop = mkHost "desktop"; }; }; - } diff --git a/hosts/desktop/configuration.nix b/hosts/desktop/configuration.nix index ee265d1..b9ab6fe 100644 --- a/hosts/desktop/configuration.nix +++ b/hosts/desktop/configuration.nix @@ -3,16 +3,16 @@ { imports = [ - /etc/nixos/hardware-configuration.nix + ./hardware-configuration.nix inputs.home-manager.nixosModules.default ../../modules/nixos/nvidia.nix ../../modules/nixos/bspwm.nix ../../modules/nixos/cups.nix ]; - nixpkgs.overlays = [ - (import ./ghidra-m32r-overlay.nix) - ]; + # nixpkgs.overlays = [ + # (import ./ghidra-m32r-overlay.nix) + # ]; # Extra Nix Settings nix.settings = { @@ -90,7 +90,7 @@ vlc kdePackages.kdenlive kicad - ghidra + # ghidra ]; }; @@ -101,9 +101,9 @@ }; - services.freenet = { - enable = true; - }; + # services.freenet = { + # enable = true; + # }; # Garbage Collection nix.gc = { diff --git a/hosts/desktop/home.nix b/hosts/desktop/home.nix index c6c00dc..f7fee8c 100644 --- a/hosts/desktop/home.nix +++ b/hosts/desktop/home.nix @@ -3,16 +3,18 @@ { home.username = "chris"; home.homeDirectory = "/home/chris"; - home.stateVersion = "26.05"; # Please read the comment before changing. + home.stateVersion = "25.11"; # Please read the comment before changing. programs.home-manager.enable = true; imports = [ ../../modules/home-manager/defaults.nix + ../../modules/home-manager/wallpaper.nix ../../modules/home-manager/sxhkd.nix ../../modules/home-manager/terminals/alacritty.nix - # ../../modules/home-manager/browsers/ugc.nix + ../../modules/home-manager/browsers/ugc.nix ../../modules/home-manager/bspwm.nix ../../modules/home-manager/polybar.nix + ../../modules/home-manager/browsers/zen.nix # ../../modules/home-manager/editors/helix.nix ]; @@ -21,4 +23,24 @@ editor = "hx"; browser = "zen"; }; + + my.bspwm.monitors = [ + { + name = "DP-0"; + xrandr = "--primary --auto --pos 1080x0"; + desktops = [ "1" "2" "3" "4" "5" "6" ]; + } + { + name = "DP-2"; + xrandr = "--auto --rotate left --pos 0x0"; + desktops = [ "7" "8" "9" ]; + } + ]; + + my.wallpapers = { + "DP-0" = "/data/Pictures/bg/wallhaven-mountains.jpg"; + "DP-2" = "/data/Pictures/bg/wallhaven-mountains.jpg"; + }; + + } diff --git a/modules/home-manager/bspwm.nix b/modules/home-manager/bspwm.nix index 0d0a9c2..c70f8c8 100644 --- a/modules/home-manager/bspwm.nix +++ b/modules/home-manager/bspwm.nix @@ -1,34 +1,65 @@ -{ lib, pkgs, ... }: +{ config, lib, pkgs, ... }: +let + cfg = config.my.bspwm; +in { - xdg.configFile."bspwm/bspwmrc" = { - executable = true; - text = '' - #!/bin/sh + options.my.bspwm.monitors = lib.mkOption { + default = [ ]; + description = "Monitors left to right. Empty means single-monitor defaults."; + type = lib.types.listOf (lib.types.submodule { + options = { + name = lib.mkOption { type = lib.types.str; }; + xrandr = lib.mkOption { + type = lib.types.str; + default = "--auto"; + description = "Arguments for xrandr --output ."; + }; + desktops = lib.mkOption { type = lib.types.listOf lib.types.str; }; + }; + }); + }; - bspc monitor -d 1 2 3 4 5 6 7 8 9 + config = { + xdg.configFile."bspwm/bspwmrc" = { + executable = true; + text = '' + #!/bin/sh - # Gaps and borders - bspc config window_gap 10 - bspc config border_width 2 - bspc config focused_border_color "#7aa2f7" - bspc config normal_border_color "#292e42" + ${lib.optionalString (cfg.monitors != [ ]) '' + ${pkgs.xrandr}/bin/xrandr ${lib.concatMapStringsSep " " + (m: "--output ${m.name} ${m.xrandr}") cfg.monitors} + ''} + ${if cfg.monitors == [ ] + then "bspc monitor -d 1 2 3 4 5 6 7 8 9" + else lib.concatMapStringsSep "\n" + (m: "bspc monitor ${m.name} -d ${lib.concatStringsSep " " m.desktops}") + cfg.monitors} - # Layout behaviour - bspc config split_ratio 0.50 - bspc config borderless_monocle true - bspc config gapless_monocle true + # Gaps and borders + bspc config window_gap 10 + bspc config border_width 2 + bspc config focused_border_color "#7aa2f7" + bspc config normal_border_color "#292e42" - # Launch polybar - ~/.config/polybar/launch.sh + # Layout behaviour + bspc config split_ratio 0.50 + bspc config borderless_monocle true + bspc config gapless_monocle true + + # Launch polybar + ~/.config/polybar/launch.sh + + # Wallpapers + [ -x ~/.config/wallpaper/set.sh ] && ~/.config/wallpaper/set.sh + ''; + }; + + home.activation.reloadBspwm = lib.hm.dag.entryAfter [ "linkGeneration" ] '' + if ${pkgs.procps}/bin/pgrep -x bspwm >/dev/null; then + PATH=${pkgs.bspwm}/bin:$PATH DISPLAY=:0 $HOME/.config/bspwm/bspwmrc \ + || echo "bspwmrc reload failed" >&2 + fi ''; }; - - home.activation.reloadBspwm = lib.hm.dag.entryAfter [ "linkGeneration" ] '' - if ${pkgs.procps}/bin/pgrep -x bspwm >/dev/null; then - PATH=${pkgs.bspwm}/bin:$PATH DISPLAY=:0 $HOME/.config/bspwm/bspwmrc \ - || echo "bspwmrc reload failed" >&2 - fi - ''; - } diff --git a/modules/home-manager/polybar.nix b/modules/home-manager/polybar.nix index 2e8c3c2..b73518a 100644 --- a/modules/home-manager/polybar.nix +++ b/modules/home-manager/polybar.nix @@ -1,4 +1,4 @@ -{ lib, pkgs, ... }: +{ pkgs, ... }: let polybar = pkgs.polybar.override { pulseSupport = true; }; @@ -18,6 +18,7 @@ in dim = #565f89 [bar/main] + monitor = ''${env:MONITOR:} width = 100% height = 22pt background = ''${colors.background} @@ -36,8 +37,15 @@ in tray-position = right + # Second monitor: same look, no tray, fewer modules (it's narrow when rotated) + [bar/secondary] + inherit = bar/main + modules-right = cpu memory + tray-position = none + [module/bspwm] type = internal/bspwm + pin-workspaces = true label-focused = %name% label-focused-background = ''${colors.primary} label-focused-foreground = ''${colors.background} @@ -73,19 +81,23 @@ in label-muted-foreground = ''${colors.dim} ''; + # One bar per monitor. The primary monitor gets "main" (with tray), others get "secondary". + # If no monitor is marked primary, the first one listed gets "main". xdg.configFile."polybar/launch.sh" = { executable = true; text = '' #!/bin/sh ${pkgs.procps}/bin/pkill -x polybar while ${pkgs.procps}/bin/pgrep -x polybar >/dev/null; do sleep 0.2; done - ${pkgs.util-linux}/bin/setsid -f ${polybar}/bin/polybar main + + LIST=$(${polybar}/bin/polybar --list-monitors) + PRIMARY=$(echo "$LIST" | ${pkgs.gnugrep}/bin/grep '(primary)' | ${pkgs.coreutils}/bin/cut -d: -f1) + [ -z "$PRIMARY" ] && PRIMARY=$(echo "$LIST" | ${pkgs.coreutils}/bin/head -n1 | ${pkgs.coreutils}/bin/cut -d: -f1) + + for m in $(echo "$LIST" | ${pkgs.coreutils}/bin/cut -d: -f1); do + if [ "$m" = "$PRIMARY" ]; then bar=main; else bar=secondary; fi + MONITOR=$m ${pkgs.util-linux}/bin/setsid -f ${polybar}/bin/polybar $bar + done ''; }; - - # home.activation.reloadPolybar = lib.hm.dag.entryAfter [ "writeBoundary" ] '' - # if ${pkgs.procps}/bin/pgrep -x bspwm >/dev/null; then - # DISPLAY=:0 $HOME/.config/polybar/launch.sh || true - # fi - # ''; } diff --git a/modules/home-manager/wallpaper.nix b/modules/home-manager/wallpaper.nix new file mode 100644 index 0000000..7690c91 --- /dev/null +++ b/modules/home-manager/wallpaper.nix @@ -0,0 +1,26 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.my.wallpapers; + args = lib.concatStringsSep " " (lib.mapAttrsToList + (monitor: img: "--output ${monitor} --zoom ${lib.escapeShellArg img}") cfg); +in +{ + options.my.wallpapers = lib.mkOption { + type = lib.types.attrsOf lib.types.path; + default = { }; + description = "Wallpaper image per monitor output name."; + }; + + config = lib.mkIf (cfg != { }) { + home.packages = [ pkgs.xwallpaper ]; + + xdg.configFile."wallpaper/set.sh" = { + executable = true; + text = '' + #!/bin/sh + ${pkgs.xwallpaper}/bin/xwallpaper ${args} + ''; + }; + }; +}