diff --git a/lib/default.nix b/lib/default.nix index b66d67d..f7a8b1c 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -45,4 +45,6 @@ lib.makeExtensible (_: rec { lib.mapAttrs' mkModule modulesInDir; mapModules' = f: dir: lib.attrValues (mapModules f dir); + + listModules = mapModules' (path: path); }) diff --git a/modules/config/bin/default.nix b/modules/config/bin/default.nix index 7f4520e..5cbf5ed 100644 --- a/modules/config/bin/default.nix +++ b/modules/config/bin/default.nix @@ -9,7 +9,6 @@ let cfg = config.my.bin; cycleSinks = import ./cycleSinks.nix { inherit pkgs; }; protonge = import ./protonge.nix { inherit pkgs; }; - randomWallpaper = import ./randomWallpaper.nix { inherit pkgs; }; share = import ./share.nix { inherit pkgs; }; sxhkdHelp = import ./sxhkdHelp.nix { inherit pkgs; }; in @@ -17,10 +16,9 @@ in options.my.bin.enable = mkEnableOption "bin"; config = mkIf cfg.enable { - environment.systemPackages = with pkgs; [ + environment.systemPackages = [ cycleSinks protonge - randomWallpaper share sxhkdHelp ]; diff --git a/modules/config/bin/randomWallpaper.nix b/modules/config/bin/randomWallpaper.nix deleted file mode 100644 index e9be064..0000000 --- a/modules/config/bin/randomWallpaper.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ pkgs }: -pkgs.writeShellApplication { - name = "randomWallpaper"; - - runtimeInputs = with pkgs; [ findutils coreutils feh hyprland jq ]; - - text = '' - wallpaper="$(find ~/.config/wallpapers/ -type f,l | shuf -n 1)" - if [ -z ''${WAYLAND_DISPLAY+x} ]; then - feh --bg-fill "$wallpaper" - else - hyprctl hyprpaper preload "$wallpaper" - hyprctl monitors -j | jq '.[].name' | xargs -I{} hyprctl hyprpaper wallpaper '{}',"$wallpaper" - hyprctl hyprpaper unload all - fi - ''; -} diff --git a/modules/config/default.nix b/modules/config/default.nix index f2be122..1a044e4 100644 --- a/modules/config/default.nix +++ b/modules/config/default.nix @@ -1,10 +1,5 @@ +{ lib, ... }: + { - imports = [ - ./bin - ./nix.nix - ./shell.nix - ./theming - ./wallpapers.nix - ./yubikey.nix - ]; + imports = lib.my.listModules ./.; } diff --git a/modules/profiles/base.nix b/modules/profiles/base.nix index e2d4b4b..9f35c6a 100644 --- a/modules/profiles/base.nix +++ b/modules/profiles/base.nix @@ -32,10 +32,6 @@ in time.timeZone = "Europe/Berlin"; my = { - nix = { - gc.enable = true; - optimise.enable = true; - }; bin.enable = true; shell = { abbreviations = { @@ -63,6 +59,10 @@ in git.enable = true; gpg.enable = true; navi.enable = true; + nix = { + gc.enable = true; + optimise.enable = true; + }; tmux.enable = true; tmux.keybinds = { prefix = { diff --git a/modules/profiles/desktop.nix b/modules/profiles/desktop.nix index 855c581..ac348a0 100644 --- a/modules/profiles/desktop.nix +++ b/modules/profiles/desktop.nix @@ -29,6 +29,7 @@ with lib; { spotify.enable = mkDefault true; ssh.enable = mkDefault true; thunar.enable = mkDefault true; + wallpaper.enable = mkDefault true; zathura.enable = mkDefault true; }; services = { diff --git a/modules/programs/bspwm/default.nix b/modules/programs/bspwm/default.nix index 81e1a60..fba274c 100644 --- a/modules/programs/bspwm/default.nix +++ b/modules/programs/bspwm/default.nix @@ -45,7 +45,7 @@ in focus_follows_pointer = true; }; startupPrograms = [ - "randomWallpaper" + "wallpaper -r" ]; extraConfig = builtins.readFile ./bspwmrc; }; diff --git a/modules/programs/default.nix b/modules/programs/default.nix index bf1d830..1a044e4 100644 --- a/modules/programs/default.nix +++ b/modules/programs/default.nix @@ -1,33 +1,5 @@ +{ lib, ... }: + { - imports = [ - ./adb.nix - ./bspwm - ./chromium.nix - ./code.nix - ./direnv.nix - ./firefox.nix - ./fish.nix - ./git.nix - ./gnome.nix - ./gpg.nix - ./helix.nix - ./hub.nix - ./hyprland - ./kakoune.nix - ./kitty.nix - ./ledger - ./logseq.nix - ./miracast.nix - ./navi - ./nvim - ./python.nix - ./rofi - ./spotify.nix - ./ssh.nix - ./sway.nix - ./thunar.nix - ./tmux.nix - ./zathura.nix - ./zsh.nix - ]; + imports = lib.my.listModules ./.; } diff --git a/modules/programs/hyprland/config.nix b/modules/programs/hyprland/config.nix index bbc63ef..5feef36 100644 --- a/modules/programs/hyprland/config.nix +++ b/modules/programs/hyprland/config.nix @@ -165,26 +165,26 @@ in bind = $mainMod , RETURN , exec , kitty # XF86 keys - bind = , XF86AudioLowerVolume , exec , pamixer -d 5 - bind = , XF86AudioRaiseVolume , exec , pamixer -i 5 + binde = , XF86AudioLowerVolume , exec , pamixer -d 5 + binde = , XF86AudioRaiseVolume , exec , pamixer -i 5 bind = , XF86AudioMute , exec , pamixer -t bind = , XF86AudioNext , exec , playerctl -p "spotifyd,firefox" next bind = , XF86AudioPlay , exec , playerctl -p "spotifyd,firefox" play-pause bind = , XF86AudioPrev , exec , playerctl -p "spotifyd,firefox" previous - bind = , XF86MonBrightnessDown , exec , brightnessctl s 10%- - bind = , XF86MonBrightnessUp , exec , brightnessctl s 10%+ + binde = , XF86MonBrightnessDown , exec , brightnessctl s 10%- + binde = , XF86MonBrightnessUp , exec , brightnessctl s 10%+ # Move focus with mainMod + hjkl - bind = $mainMod, H, movefocus, l - bind = $mainMod, L, movefocus, r - bind = $mainMod, K, movefocus, u - bind = $mainMod, J, movefocus, d + binde = $mainMod, H, movefocus, l + binde = $mainMod, L, movefocus, r + binde = $mainMod, K, movefocus, u + binde = $mainMod, J, movefocus, d # Change current active window size with mainMod + SHIFT + hjkl - bind = $mainMod SHIFT, H, resizeactive, -10 0 - bind = $mainMod SHIFT, J, resizeactive, 0 10 - bind = $mainMod SHIFT, K, resizeactive, 0 -10 - bind = $mainMod SHIFT, L, resizeactive, 10 0 + binde = $mainMod SHIFT, H, resizeactive, -10 0 + binde = $mainMod SHIFT, J, resizeactive, 0 10 + binde = $mainMod SHIFT, K, resizeactive, 0 -10 + binde = $mainMod SHIFT, L, resizeactive, 10 0 # Move current active window with mainMod + ALT + hjkl bind = $mainMod ALT, H, movewindow, l @@ -223,6 +223,4 @@ in # Move/resize windows with mainMod + LMB/RMB and dragging bindm = $mainMod, mouse:272, movewindow bindm = $mainMod, mouse:273, resizewindow - - exec-once=randomWallpaper '' diff --git a/modules/programs/hyprland/default.nix b/modules/programs/hyprland/default.nix index f8db719..654a13a 100644 --- a/modules/programs/hyprland/default.nix +++ b/modules/programs/hyprland/default.nix @@ -30,9 +30,12 @@ in config = mkIf cfg.enable { my = { programs = { + wallpaper.enable = true; kitty.enable = true; rofi.enable = true; + }; + wallpapers.enable = true; services.dunst.enable = true; }; @@ -142,33 +145,41 @@ in }; in { - enable = true; - partOf = [ "graphical-session.target" ]; wantedBy = [ "graphical-session.target" ]; - after = [ "graphical-session.target" ]; serviceConfig = { + ExecStartPre = "${pkgs.coreutils}/bin/sleep 0.5"; ExecStart = "${pkgs.hyprpaper}/bin/hyprpaper -c ${config}"; - RestartSec = "1s"; + RestartSec = "500ms"; Restart = "on-failure"; }; }; + systemd.user.services.random-wallpaper = { + wantedBy = [ "graphical-session.target" ]; + requires = [ "hyprpaper.service" ]; + serviceConfig = { + ExecStartPre = "${pkgs.coreutils}/bin/sleep 0.5"; + ExecStart = "${getExe config.my.programs.wallpaper.package} -r"; + RestartSec = "500ms"; + Restart = "on-failure"; + }; + }; + # only consider graphical-session.target started when hyprland-sesstion.target is reached systemd.user.targets.hyprland-session = { + partOf = [ "graphical-session.target" ]; wantedBy = [ "graphical-session.target" ]; before = [ "graphical-session.target" ]; }; systemd.user.services.xdg-desktop-portal-hyprland = { - after = [ "hyprland-session.target" ]; - wantedBy = [ "hyprland-session.target" ]; + after = [ "hyrpland-session.target" ]; + requiredBy = [ "xdg-desktop-portal.service" ]; }; - home-manager.users.moritz.systemd.user.services.nextcloud-client = { - Service = { - RestartSec = "1s"; - Restart = "on-failure"; - }; + home-manager.users.moritz.systemd.user.services.nextcloud-client.Service = { + RestartSec = "500ms"; + Restart = "on-failure"; }; # add user packages for wayland and hyprland in particular @@ -229,7 +240,7 @@ in security.rtkit.enable = true; - # dekstop portal (for screensharing) + # desktop portal (for screensharing) xdg.portal = { enable = true; wlr.enable = mkForce false; diff --git a/modules/config/nix.nix b/modules/programs/nix.nix similarity index 96% rename from modules/config/nix.nix rename to modules/programs/nix.nix index 12fcc32..413936f 100644 --- a/modules/config/nix.nix +++ b/modules/programs/nix.nix @@ -6,10 +6,10 @@ with lib; let - cfg = config.my.nix; + cfg = config.my.programs.nix; in { - options.my.nix = { + options.my.programs.nix = { gc = { enable = mkEnableOption "nix-gc"; minimumFreedGB = mkOption { diff --git a/modules/programs/sway.nix b/modules/programs/sway.nix index 162a1b9..a11b077 100644 --- a/modules/programs/sway.nix +++ b/modules/programs/sway.nix @@ -71,7 +71,7 @@ in command = "systemctl --user restart waybar"; always = true; } - { command = "randomWallpaper"; } + { command = "wallpaper -r"; } ]; }; }; diff --git a/modules/programs/wallpaper/default.nix b/modules/programs/wallpaper/default.nix new file mode 100644 index 0000000..0412238 --- /dev/null +++ b/modules/programs/wallpaper/default.nix @@ -0,0 +1,30 @@ +{ lib, config, pkgs, ... }: + + +with lib; +let + cfg = config.my.programs.wallpaper; + + + script = pkgs.writeShellApplication { + name = "wallpaper"; + runtimeInputs = with pkgs; [ findutils coreutils feh hyprland jq fzf viu ]; + text = builtins.readFile ./wallpaper.sh; + }; +in +{ + options.my.programs.wallpaper = { + enable = mkEnableOption "wallpaper"; + package = mkOption { + type = types.package; + default = script; + }; + }; + + config = mkIf cfg.enable { + environment.systemPackages = + [ + cfg.package + ]; + }; +} diff --git a/modules/programs/wallpaper/wallpaper.sh b/modules/programs/wallpaper/wallpaper.sh new file mode 100644 index 0000000..5b52710 --- /dev/null +++ b/modules/programs/wallpaper/wallpaper.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash + +WALLPAPERS_PATH="$HOME/.config/wallpapers" +WALLPAPERS=$(find "$WALLPAPERS_PATH" -type f,l) + +function help() { + echo "Usage:" + echo -e " wallpaper [OPTIONS] [PATH]" + echo "" + echo "Options:" + echo -e " -h, --help \n\t Show this help message and exit" + echo -e " -r, --random \n\t Set a random wallpaper" + echo -e " -s, --set \n\t Set a wallpaper" +} + +function randomWallpaper() { + find ~/.config/wallpapers/ -type f,l | shuf -n 1 +} + +function setWallpaper() { + case "${XDG_CURRENT_DESKTOP,,}" in + hyprland) + hyprctl hyprpaper preload "$1" &>/dev/null + hyprctl monitors -j | jq '.[].name' | xargs -I{} -P 0 hyprctl hyprpaper wallpaper '{}',"$1" &>/dev/null + hyprctl hyprpaper unload all &>/dev/null + ;; + *) + feh --bg-fill "$1" &>/dev/null + ;; + esac +} + +# Parse arguments +# https://stackoverflow.com/a/14203146 +POSITIONAL=() +while [[ $# -gt 0 ]]; do + key="$1" + + case $key in + -h | --help) + help + exit 0 + ;; + -r | --random) + WALLPAPER=$(randomWallpaper) + shift # past argument + ;; + -s | --set) + WALLPAPER="$2" + shift # past argument + shift # past value + ;; + *) + POSITIONAL+=("$1") # save it in an array for later + shift # past argument + ;; + esac +done + +set -- "${POSITIONAL[@]}" # restore positional arguments + +if [[ $# -gt 1 ]]; then + help + exit 1 +fi + +if [[ $# -eq 1 ]]; then + WALLPAPER="$1" +fi + +if [[ -z ${WALLPAPER+x} ]]; then + WALLPAPER=$(echo "$WALLPAPERS" | fzf --preview="viu -sb -h 30 {}" --preview-window=right:70%:wrap) +fi + +WALLPAPER=$(realpath "$WALLPAPER") + +if [[ ! -e "$WALLPAPER" ]]; then + echo "File not found: $WALLPAPER" + exit 1 +fi + +echo "Setting wallpaper: '$WALLPAPER'" +setWallpaper "$WALLPAPER" diff --git a/modules/services/default.nix b/modules/services/default.nix index 9cadf62..1a044e4 100644 --- a/modules/services/default.nix +++ b/modules/services/default.nix @@ -1,13 +1,5 @@ +{ lib, ... }: + { - imports = [ - ./dunst.nix - ./gammastep.nix - ./kdeconnect.nix - ./mullvad.nix - ./openconnect.nix - ./picom.nix - ./printing.nix - ./synology-drive.nix - ./wireguard.nix - ]; + imports = lib.my.listModules ./.; } diff --git a/modules/virtualisation/default.nix b/modules/virtualisation/default.nix index bcc1863..1a044e4 100644 --- a/modules/virtualisation/default.nix +++ b/modules/virtualisation/default.nix @@ -1,6 +1,5 @@ +{ lib, ... }: + { - imports = [ - ./podman.nix - ./virtualisation.nix - ]; + imports = lib.my.listModules ./.; } diff --git a/overlays/default.nix b/overlays/default.nix index e3d2d4d..6713493 100644 --- a/overlays/default.nix +++ b/overlays/default.nix @@ -1,4 +1,4 @@ -{ inputs, lib }: +{ lib, ... }@args: lib.composeManyExtensions - (lib.my.mapModules' (file: import file { inherit inputs lib; }) ./.) + (lib.my.mapModules' (file: import file args) ./.)