From 5f17a04fbb32a908c9161c36d8f56ff3b73a1ecf Mon Sep 17 00:00:00 2001 From: Christoph Urlacher Date: Tue, 24 Mar 2026 11:54:51 +0100 Subject: [PATCH] Home: Extract common nixos/darwin packages/programs/module-configs into terminal+packages modules --- home/christoph/darwinix/default.nix | 124 +-------------- home/christoph/default.nix | 206 +----------------------- home/christoph/nixinator/default.nix | 1 + home/homemodules/darwin.nix | 3 + home/homemodules/default.nix | 2 + home/homemodules/packages/default.nix | 217 ++++++++++++++++++++++++++ home/homemodules/packages/options.nix | 7 + home/homemodules/terminal/default.nix | 43 +++++ home/homemodules/terminal/options.nix | 7 + 9 files changed, 289 insertions(+), 321 deletions(-) create mode 100644 home/homemodules/packages/default.nix create mode 100644 home/homemodules/packages/options.nix create mode 100644 home/homemodules/terminal/default.nix create mode 100644 home/homemodules/terminal/options.nix diff --git a/home/christoph/darwinix/default.nix b/home/christoph/darwinix/default.nix index 4d80b571..fb5306ec 100644 --- a/home/christoph/darwinix/default.nix +++ b/home/christoph/darwinix/default.nix @@ -8,17 +8,13 @@ inputs, ... }: { - config = let - inherit (config.homemodules) color; - in { + config = { paths = rec { nixflake = "${config.home.homeDirectory}/NixFlake"; dotfiles = "${nixflake}/config"; }; homemodules = { - bat.enable = true; - color = { scheme = "catppuccin-mocha"; accent = "mauve"; @@ -29,29 +25,8 @@ font = "MonoLisa Alt Script"; }; - fastfetch.enable = true; - fish.enable = true; - - git = { - enable = true; - - userName = "Christoph Urlacher"; - userEmail = "christoph.urlacher@protonmail.com"; - signCommits = true; - }; - - kitty.enable = true; - lazygit.enable = true; - - neovim = { - enable = true; - alias = true; - neovide = true; - }; - - ssh.enable = true; - tmux.enable = true; - yazi.enable = true; + packages.enable = true; + terminal.enable = true; }; home = { @@ -67,101 +42,12 @@ TERMINAL = "kitty"; }; - packages = with pkgs; [ - (ripgrep.override {withPCRE2 = true;}) - gdu - duf - sd - fclones - tealdeer - killall - atool - exiftool - ouch - ffmpegthumbnailer - mediainfo - file - unrar - p7zip - unzip - progress - tokei - nix-search-tv - nix-tree - just - - ffmpeg-full - imagemagick - - poppler-utils - pdf2svg - pandoc - - dig - tcpdump - gping - curlie - wget - doggo - rsync - rclone - httpie - speedtest-cli - - jellyfin-tui - - inputs.nps.packages.${pkgs.stdenv.hostPlatform.system}.default - - cachix - - # GUI - ripdrag - - # Darwin - # alt-tab-macos - # discord # HomeBrew - # obsidian # HomeBrew - # nextcloud-client # HomeBrew - # protonvpn-gui # HomeBrew - # iina - ]; + # packages = with pkgs; []; # Configured in homemodules/packages stateVersion = "25.11"; }; - # TODO: Deduplicate with other configs - programs = { - home-manager.enable = true; - - direnv = { - enable = true; - nix-direnv.enable = true; - }; - - eza = { - enable = true; - enableFishIntegration = config.homemodules.fish.enable; - }; - - fd.enable = true; - - fzf = { - enable = true; - enableFishIntegration = config.homemodules.fish.enable; - }; - - navi = { - enable = true; - enableFishIntegration = config.homemodules.fish.enable; - }; - - yt-dlp.enable = true; - - zoxide = { - enable = true; - enableFishIntegration = config.homemodules.fish.enable; - }; - }; + programs = {}; services = {}; }; diff --git a/home/christoph/default.nix b/home/christoph/default.nix index 1b81842c..7dbed2f3 100644 --- a/home/christoph/default.nix +++ b/home/christoph/default.nix @@ -33,9 +33,7 @@ in }; homemodules = { - bat.enable = true; beets.enable = !headless; - btop.enable = true; cava.enable = !headless; chromium = { @@ -71,8 +69,6 @@ in docs.enable = !headless; - fastfetch.enable = true; - firefox = { enable = !headless; wayland = true; @@ -81,39 +77,15 @@ in disableTabBar = true; }; - fish.enable = true; - - git = { - enable = true; - - userName = "Christoph Urlacher"; - userEmail = "christoph.urlacher@protonmail.com"; - signCommits = true; - }; - - kitty.enable = !headless; - lazygit.enable = true; mpd.enable = !headless; - - neovim = { - enable = true; - alias = true; - neovide = !headless; - }; - niri.enable = nixosConfig.programs.niri.enable; nnn.enable = false; # Use yazi + packages.enable = true; qutebrowser.enable = !headless; rmpc.enable = !headless; - - rofi = { - enable = false; - }; - - ssh.enable = true; - tmux.enable = true; + rofi.enable = false; + terminal.enable = true; waybar.enable = !headless; - yazi.enable = true; zathura.enable = !headless; }; @@ -275,171 +247,13 @@ in }; # Add stuff for your user as you see fit: - # TODO: Make the headless installations smaller. Don't install stuff here if !headless but in nixinator config. - packages = with pkgs; - lib.mkMerge [ - [ - # Shell utils - (ripgrep.override {withPCRE2 = true;}) # fast as fuck - gdu # Alternative to du-dust (I like it better) - duf # Disk usage analyzer (for all disk overview) - sd # Sed alternative - fclones # Duplicate file finder - tealdeer # Very fast tldr (so readable man) - killall - atool # Archive preview - exiftool - ouch # Unified compression/decompression - ffmpegthumbnailer # Video thumbnails - mediainfo # Media meta information - file # File meta information - unrar # Cooler WinRar - p7zip # Zip stuff - unzip # Unzip stuff - progress # Find coreutils processes and show their progress - tokei # Text file statistics in a project - playerctl # Media player control - pastel # Color tools - nvd # Nix rebuild diff - nix-search-tv # Search nixpkgs, nur, nixos options and homemanager options - nix-tree # Browse the nix store sorted by size (gdu for closures) - nurl # Generate nix fetcher sections based on URLs - python313 # Nicer scripting than bash - lazyjournal # Journalctl viewer - systemctl-tui - restic # Backups - gnumake - just # make alternative - binsider # .elf analyzer - jujutsu # git-like vcs - lurk # strace analysis - radare2 - - # Hardware/Software info - pciutils # lspci - mesa-demos # OpenGL info - wayland-utils # wayland-info - clinfo # OpenCL info - vulkan-tools # vulkaninfo - libva-utils # vainfo - vdpauinfo # Video-Decode and Presentation API for Unix info - hwloc # Generate CPU topology diagram - lm_sensors # Readout hardware sensors - acpica-tools # Dump ACPI tables etc. - smartmontools # Disk health - nvme-cli # NVME disk health - - # Video/Image/Audio utils - ffmpeg-full # I love ffmpeg (including ffplay) - ffmpeg-normalize # Normalize audio - imagemagick # Convert image (magic) - mp3val # Validate mp3 files - flac # Validate flac files - # spotdl - - # Document utils - poppler-utils # pdfunite - graphviz # generate graphs from code - d2 # generate diagrams from code - plantuml # generate diagrams - gnuplot # generate function plots - pdf2svg # extract vector graphics from pdf - pandoc # document converting madness - - # Networking - dig # Make DNS requests - tcpdump # Listen in on TCP traffic - traceroute # "Follow" a packet - gping # ping with graph - curlie # curl a'la httpie - wget # download that shit - doggo # dns client - rsync # cp on steroids - rclone # Rsync for cloud - httpie # Cool http client - cifs-utils # Mount samba shares - nfs-utils # Mount NFS shares - sshfs # Mount remote directories via SSH - speedtest-cli - - # Run unpatched binaries on NixOS - # Sets NIX_LD_LIBRARY_PATH and NIX_LD variables for nix-ld. - # Usage: "nix-alien-ld -- ". - inputs.nix-alien.packages.${pkgs.stdenv.hostPlatform.system}.nix-alien - - # Search nixpkgs - inputs.nps.packages.${pkgs.stdenv.hostPlatform.system}.default - - # Use NixCommunity binary cache - cachix - ] - (lib.mkIf (!headless) [ - ripdrag # drag & drop from terminal - veracrypt - wl-clipboard - - # Proton - protonvpn-gui - protonmail-bridge-gui - - # GUI stuff - nautilus # Just in case - signal-desktop - anki - font-manager # Previews fonts, but doesn't set them - nextcloud-client - keepassxc - thunderbird # TODO: Email module - obsidian - zotero - zeal # docs browser - # helvum # unmaintained - crosspipe - vlc - audacity - ferdium - gparted - # feishin # electron :( - jellyfin-tui - czkawka-full # file deduplicator - - # Office - kdePackages.wacomtablet # For xournalpp/krita - xournalpp # Write with a pen, like old people - hunspell # I cna't type - hunspellDicts.en_US - hunspellDicts.de_DE - - inputs.masssprings.packages.${stdenv.hostPlatform.system}.default - ]) - ]; + # packages = with pkgs; []; # Configured in homemodules/packages }; # home.file.".options-doc".source = "${pkgs.modules-options-doc}"; # Packages with extra options managed by HomeManager natively programs = { - # The home-manager management tool. - # Will only be enabled if HM is installed standalone. - home-manager.enable = true; - - direnv = { - enable = true; - nix-direnv.enable = true; - }; - - eza = { - enable = true; - enableFishIntegration = config.homemodules.fish.enable; - }; - - fd.enable = true; - - fzf = { - enable = true; - enableFishIntegration = config.homemodules.fish.enable; - }; - imv = { enable = !headless; settings = { @@ -467,11 +281,6 @@ in }; }; - navi = { - enable = true; - enableFishIntegration = config.homemodules.fish.enable; - }; - nix-index = { enable = true; enableFishIntegration = config.homemodules.fish.enable; @@ -501,13 +310,6 @@ in # pointer # ]; # }; - - yt-dlp.enable = true; - - zoxide = { - enable = true; - enableFishIntegration = config.homemodules.fish.enable; - }; }; services = { diff --git a/home/christoph/nixinator/default.nix b/home/christoph/nixinator/default.nix index c3616042..749b67ba 100644 --- a/home/christoph/nixinator/default.nix +++ b/home/christoph/nixinator/default.nix @@ -101,6 +101,7 @@ jellyfin-mpv-shim # tidal-hifi # tidal-dl-ng # TODO: Borked + # spotdl tiddl picard handbrake diff --git a/home/homemodules/darwin.nix b/home/homemodules/darwin.nix index a979a5a4..f0e7bc3b 100644 --- a/home/homemodules/darwin.nix +++ b/home/homemodules/darwin.nix @@ -2,6 +2,7 @@ imports = [ # My own HM modules ./bat + ./btop ./color ./fastfetch ./fish @@ -9,8 +10,10 @@ ./kitty ./lazygit ./neovim + ./packages ./paths ./ssh + ./terminal ./tmux ./yazi diff --git a/home/homemodules/default.nix b/home/homemodules/default.nix index 742ba68e..5797fac0 100644 --- a/home/homemodules/default.nix +++ b/home/homemodules/default.nix @@ -21,12 +21,14 @@ ./neovim ./niri ./nnn + ./packages ./paths ./qutebrowser ./rmpc ./rofi ./waybar ./ssh + ./terminal ./tmux ./yazi ./zathura diff --git a/home/homemodules/packages/default.nix b/home/homemodules/packages/default.nix new file mode 100644 index 00000000..4b342d87 --- /dev/null +++ b/home/homemodules/packages/default.nix @@ -0,0 +1,217 @@ +{ + config, + nixosConfig, + lib, + mylib, + pkgs, + headless, + inputs, + ... +}: let + inherit (config.homemodules) packages color; +in { + options.homemodules.packages = import ./options.nix {inherit lib mylib;}; + + config = lib.mkIf packages.enable { + home.packages = with pkgs; + lib.mkMerge [ + # Common packages + [ + # Shell utils + (ripgrep.override {withPCRE2 = true;}) # fast as fuck + gdu # Alternative to du-dust (I like it better) + duf # Disk usage analyzer (for all disk overview) + sd # Sed alternative + fclones # Duplicate file finder + tealdeer # Very fast tldr (so readable man) + killall + atool # Archive preview + exiftool + ouch # Unified compression/decompression + ffmpegthumbnailer # Video thumbnails + mediainfo # Media meta information + file # File meta information + unrar # Cooler WinRar + p7zip # Zip stuff + unzip # Unzip stuff + progress # Find coreutils processes and show their progress + tokei # Text file statistics in a project + + # Nix + nix-search-tv # Search nixpkgs, nur, nixos options and homemanager options + nix-tree # Browse the nix store sorted by size (gdu for closures) + inputs.nps.packages.${pkgs.stdenv.hostPlatform.system}.default # Search nixpkgs + + # Video/Image/Audio utils + ffmpeg-full # I love ffmpeg (including ffplay) + ffmpeg-normalize # Normalize audio + + # Document utils + poppler-utils # pdfunite + pdf2svg # extract vector graphics from pdf + pandoc # document converting madness + + # Networking + dig # Make DNS requests + tcpdump # Listen in on TCP traffic + gping # ping with graph + curlie # curl a'la httpie + wget # download that shit + doggo # dns client + rsync # cp on steroids + rclone # Rsync for cloud + httpie # Cool http client + speedtest-cli + + # Use NixCommunity binary cache + cachix + ] + + # Common !headless packages + (lib.optionals (!headless) [ + ripdrag # drag & drop from terminal + jellyfin-tui + ]) + + # Linux exclusive packages + (lib.optionals (pkgs.stdenv.isLinux) [ + pastel # Color tools + nvd # Nix rebuild diff + nurl # Generate nix fetcher sections based on URLs + python313 # Nicer scripting than bash + lazyjournal # Journalctl viewer + systemctl-tui + restic # Backups + gnumake + just # make alternative + binsider # .elf analyzer + jujutsu # git-like vcs + lurk # strace analysis + radare2 + + # Hardware/Software info + pciutils # lspci + mesa-demos # OpenGL info + wayland-utils # wayland-info + clinfo # OpenCL info + vulkan-tools # vulkaninfo + libva-utils # vainfo + vdpauinfo # Video-Decode and Presentation API for Unix info + hwloc # Generate CPU topology diagram + lm_sensors # Readout hardware sensors + acpica-tools # Dump ACPI tables etc. + smartmontools # Disk health + nvme-cli # NVME disk health + + # Video/Image/Audio utils + imagemagick # Convert image (magic) + mp3val # Validate mp3 files + flac # Validate flac files + + # Document utils + graphviz # generate graphs from code + d2 # generate diagrams from code + plantuml # generate diagrams + gnuplot # generate function plots + + # Networking + traceroute # "Follow" a packet + cifs-utils # Mount samba shares + nfs-utils # Mount NFS shares + sshfs # Mount remote directories via SSH + + # Run unpatched binaries on NixOS + # Sets NIX_LD_LIBRARY_PATH and NIX_LD variables for nix-ld. + # Usage: "nix-alien-ld -- ". + inputs.nix-alien.packages.${pkgs.stdenv.hostPlatform.system}.nix-alien + ]) + + # Linux exclusive packages (!headless) + (lib.optionals (pkgs.stdenv.isLinux && (!headless)) [ + veracrypt + wl-clipboard + + # Proton + protonvpn-gui + protonmail-bridge-gui + + # GUI stuff + nautilus # Just in case + signal-desktop + anki + font-manager # Previews fonts, but doesn't set them + nextcloud-client + keepassxc + thunderbird # TODO: Email module + obsidian + zotero + zeal # docs browser + # helvum # unmaintained + crosspipe + vlc + audacity + ferdium + gparted + # feishin # electron :( + jellyfin-tui + playerctl # Media player control + czkawka-full # file deduplicator + + # Office + kdePackages.wacomtablet # For xournalpp/krita + xournalpp # Write with a pen, like old people + hunspell # I cna't type + hunspellDicts.en_US + hunspellDicts.de_DE + + inputs.masssprings.packages.${stdenv.hostPlatform.system}.default + ]) + + # Darwin exclusive packages + (lib.optionals pkgs.stdenv.isDarwin [ + # Use homebrew instead + # alt-tab-macos + # discord + # obsidian + # nextcloud-client + # protonvpn-gui + # iina + ]) + ]; + + programs = { + # The home-manager management tool. + # Will only be enabled if HM is installed standalone. + home-manager.enable = true; + + direnv = { + enable = true; + nix-direnv.enable = true; + }; + + eza = { + enable = true; + enableFishIntegration = config.homemodules.fish.enable; + }; + + fd.enable = true; + + fzf = { + enable = true; + enableFishIntegration = config.homemodules.fish.enable; + }; + + navi = { + enable = true; + enableFishIntegration = config.homemodules.fish.enable; + }; + + yt-dlp.enable = true; + + zoxide = { + enable = true; + enableFishIntegration = config.homemodules.fish.enable; + }; + }; + }; +} diff --git a/home/homemodules/packages/options.nix b/home/homemodules/packages/options.nix new file mode 100644 index 00000000..afe2ebf6 --- /dev/null +++ b/home/homemodules/packages/options.nix @@ -0,0 +1,7 @@ +{ + lib, + mylib, + ... +}: { + enable = lib.mkEnableOption "Enable common packages"; +} diff --git a/home/homemodules/terminal/default.nix b/home/homemodules/terminal/default.nix new file mode 100644 index 00000000..34f55efa --- /dev/null +++ b/home/homemodules/terminal/default.nix @@ -0,0 +1,43 @@ +{ + config, + nixosConfig, + lib, + mylib, + pkgs, + headless, + ... +}: let + inherit (config.homemodules) terminal color; +in { + options.homemodules.terminal = import ./options.nix {inherit lib mylib;}; + + config = lib.mkIf terminal.enable { + homemodules = { + bat.enable = true; + btop.enable = true; + fastfetch.enable = true; + fish.enable = true; + + git = { + enable = true; + + userName = "Christoph Urlacher"; + userEmail = "christoph.urlacher@protonmail.com"; + signCommits = true; + }; + + kitty.enable = true; + lazygit.enable = true; + + neovim = { + enable = true; + alias = true; + neovide = !headless; + }; + + ssh.enable = true; + tmux.enable = true; + yazi.enable = true; + }; + }; +} diff --git a/home/homemodules/terminal/options.nix b/home/homemodules/terminal/options.nix new file mode 100644 index 00000000..70394a18 --- /dev/null +++ b/home/homemodules/terminal/options.nix @@ -0,0 +1,7 @@ +{ + lib, + mylib, + ... +}: { + enable = lib.mkEnableOption "Enable terminal tools"; +}