From ed5b2071c511c94bb19616aecc043345621f918b Mon Sep 17 00:00:00 2001 From: Natalie Marks Date: Fri, 28 Mar 2025 21:09:28 -0700 Subject: [PATCH] refactor out common packages --- flake.nix | 4 +- hosts/desktop/configuration.nix | 34 +-- hosts/desktop/home.nix | 396 +++----------------------------- hosts/laptop/home.nix | 206 +---------------- hosts/shared/home-programs.nix | 65 ++++++ hosts/shared/packages.nix | 139 +++++++++++ 6 files changed, 240 insertions(+), 604 deletions(-) create mode 100644 hosts/shared/home-programs.nix create mode 100644 hosts/shared/packages.nix diff --git a/flake.nix b/flake.nix index bc97cf6..e1ee19d 100644 --- a/flake.nix +++ b/flake.nix @@ -102,9 +102,7 @@ } nixos-cosmic.nixosModules.default ]; - specialArgs = { - inherit inputs; - }; + specialArgs = inputs; }; }; darwinConfigurations = { diff --git a/hosts/desktop/configuration.nix b/hosts/desktop/configuration.nix index 819dbb3..662ce7a 100644 --- a/hosts/desktop/configuration.nix +++ b/hosts/desktop/configuration.nix @@ -276,9 +276,6 @@ packages = with pkgs; [ firefox vim - lua-language-server - texlive.combined.scheme-full - steam-run # thunderbird ]; }; @@ -299,37 +296,8 @@ lfs.enable = true; }; - # Allow unfree packages - # List packages installed in system profile. To search, run: - # $ nix search wget environment.systemPackages = with pkgs; [ - distrobox - fish - vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. - wget - git - unzip - ripgrep - clang - fd - cargo - python3 - python311Packages.pynvim - python311Packages.pip - steam - ruby - julia - xclip - nodePackages.npm - go - tailscale - ethtool - grub2 - - xdg-desktop-portal-gtk - - wineWowPackages.waylandFull - wineWowPackages.stable + vim ]; # Some programs need SUID wrappers, can be configured further or are diff --git a/hosts/desktop/home.nix b/hosts/desktop/home.nix index 293bb8e..a39101d 100644 --- a/hosts/desktop/home.nix +++ b/hosts/desktop/home.nix @@ -2,380 +2,46 @@ inputs, config, pkgs, + lib, zls, nix-options-search, ... -}: { - # wayland.windowManager.hyprland = { - # enable = true; - # # ... - # plugins = [ - # inputs.hyprland-plugins.packages.${pkgs.system}.hyprbars - # # ... - # ]; - # }; +}: let + shared-programs = import ../shared/home-programs.nix {inherit config pkgs lib;}; +in { + home = { + username = "nmarks"; + homeDirectory = "/home/nmarks"; - # Home Manager needs a bit of information about you and the paths it should - # manage. - home.username = "nmarks"; - home.homeDirectory = "/home/nmarks"; + # This value determines the Home Manager release that your configuration is + # compatible with. This helps avoid breakage when a new Home Manager release + # introduces backwards incompatible changes. + # + # You should not change this value, even if you update Home Manager. If you do + # want to update the value, then make sure to first check the Home Manager + # release notes. + stateVersion = "23.05"; # Please read the comment before changing. - # This value determines the Home Manager release that your configuration is - # compatible with. This helps avoid breakage when a new Home Manager release - # introduces backwards incompatible changes. - # - # You should not change this value, even if you update Home Manager. If you do - # want to update the value, then make sure to first check the Home Manager - # release notes. - home.stateVersion = "23.05"; # Please read the comment before changing. + packages = with pkgs; let + shared-packages = import ../shared/packages.nix {inherit pkgs;}; + in + shared-packages + ++ [ + zls.packages.x86_64-linux.zls + rust-bin.stable.latest.default + ]; + # programs.mangohud.enable = true; - # imports = [ - # ./zed-editor.nix - # ]; - - # imports = [discord/default.nix]; - # sys.discord.enable = true; - - # The home.packages option allows you to install Nix packages into your - # environment. - - home.packages = with pkgs; - [ - glance - rust-bin.stable.latest.default - just - libxkbcommon - imagemagick - lua51Packages.lua - lua51Packages.luarocks-nix - legcord - calibre - pyright - ruff - python312Packages.jedi-language-server - wofi - bottles - kdePackages.dolphin - path-of-building - tor - spotify - stremio - codespell - fzf - pavucontrol - efibootmgr - zigpkgs.master - ghostty - stylua - webcord - cachix - (btop.override {cudaSupport = true;}) - neofetch - direnv - R - typst - typst-live - tmux - zellij - distrobox - podman - qemu - vimgolf - lazygit - file - vesktop - (discord.override { - withMoonlight = true; - }) - # itch : THIS IS BROKEN FOR SOME REASON, need to pin it?? - qbittorrent - deno - imagemagick - pkg-config - mpv - comma - openconnect - gnumake - signal-desktop - zed-editor - #getting foundry to work! - #nodejs_21 - caddy - cloudflared - pm2 - #productivty - #Gaming - lutris - wineWowPackages.stable - winetricks - dxvk_2 - mangohud - vulkan-tools - prismlauncher - # for cmpm17 - exiftool - #for fun - cowsay - cmatrix - hyfetch - bat - eza - ollama - sl - fallout-ce - fallout2-ce - #LSP + formatters/linters - lua-language-server - nil - alejandra - statix - texlab - clang-tools - # rust-analyzer - #clippy - # rustfmt - #runpod - docker - nh - fastfetch - ] - ++ [zls.packages.x86_64-linux.zls]; - - programs.atuin = { - enable = true; - enableBashIntegration = true; - enableFishIntegration = true; - daemon.enable = true; + sessionVariables = { + EDITOR = "nvim"; + VISUAL = "nvim"; + TERMINAL = "ghostty"; + BROWSER = "firefox"; + }; }; - programs.direnv = { - enable = true; - #enableFishIntegration = true; - nix-direnv.enable = true; - }; + programs = shared-programs; - programs.neovim = { - viAlias = true; - vimAlias = true; - extraLuaPackages = ps: [ps.magick]; - extraPackages = [pkgs.imagemagick]; - }; - #Link neovim config into nix - #xdg.configFile.nvim.source = ./nvim; xdg.mimeApps.defaultApplications."inode/directory" = "dolphin.desktop"; - # xdg.mimeApps.defaultApplications = {"inode/directory" = "org.kde.dolphin.desktop";}; - programs.kitty = { - enable = true; - themeFile = "Catppuccin-Mocha"; - extraConfig = "font_family Iosevka NF - italic_font auto - bold_italic_font auto - bold_font auto"; - }; - - programs.mangohud.enable = true; - - programs.fish = { - enable = true; - - plugins = [ - { - name = "tide"; - src = pkgs.fishPlugins.tide.src; - } - ]; - shellAliases = { - # hm-update = "git add home.nix ; git commit -m 'updated home-manager config'; git push origin main; home-manager switch --flake ~/.dotfiles/#nmarks"; - # sys-update = "git add configuration.nix ; git commit -m 'updated system config'; git push origin main; sudo nixos-rebuild switch --flake ~/.dotfiles/#nmarks"; - # full-update = "sys-update; hm-update"; - reboot-windows = "sudo efibootmgr --bootnext 0000; sudo reboot -h now"; - }; - }; - - programs.hyfetch = { - enable = true; - settings = { - backend = "fastfetch"; - preset = "bisexual"; - mode = "rgb"; - light_dark = "dark"; - lightness = { - }; - color_align = { - mode = "horizontal"; - # custom_colors = []; - # fore_back = null; - }; - distro = null; - pride_month_shown = [ - ]; - pride_month_disable = false; - }; - }; - - services.glance = { - enable = true; - settings = { - pages = [ - { - name = "Home"; - columns = [ - { - size = "small"; - widgets = [ - { - type = "calendar"; - first-day-of-week = "monday"; - } - { - type = "rss"; - limit = 10; - collapse-after = 3; - cache = "12h"; - feeds = [ - { - url = "https://selfh.st/rss/"; - title = "selfh.st"; - limit = 4; - } - {url = "https://ciechanow.ski/atom.xml";} - { - url = "https://www.joshwcomeau.com/rss.xml"; - title = "Josh Comeau"; - } - {url = "https://samwho.dev/rss.xml";} - { - url = "https://ishadeed.com/feed.xml"; - title = "Ahmad Shadeed"; - } - ]; - } - ]; - } - { - size = "full"; - widgets = [ - { - type = "group"; - widgets = [{type = "hacker-news";} {type = "lobsters";}]; - } - { - type = "videos"; - channels = ["UCXuqSBlHAE6Xw-yeJA0Tunw" "UCR-DXc1voovS8nhAvccRZhg" "UCsBjURrPoezykLs9EqgamOA" "UCBJycsmduvYEL83R_U4JriQ" "UCHnyfMqiRRG1u-2MsSQLbXA"]; - } - { - type = "group"; - widgets = [ - { - type = "reddit"; - subreddit = "technology"; - show-thumbnails = true; - } - { - type = "reddit"; - subreddit = "selfhosted"; - show-thumbnails = true; - } - ]; - } - ]; - } - { - size = "small"; - widgets = [ - { - type = "weather"; - location = "London, United Kingdom"; - units = "metric"; - hour-format = "12h"; - } - { - type = "markets"; - symbol-link-template = "https://www.tradingview.com/symbols/{SYMBOL}/news"; - markets = [ - { - symbol = "SPY"; - name = "S&P 500"; - } - { - symbol = "BTC-USD"; - name = "Bitcoin"; - } - { - symbol = "NVDA"; - name = "NVIDIA"; - } - { - symbol = "AAPL"; - name = "Apple"; - } - { - symbol = "MSFT"; - name = "Microsoft"; - } - ]; - } - { - type = "releases"; - cache = "1d"; - repositories = ["glanceapp/glance" "go-gitea/gitea" "immich-app/immich" "syncthing/syncthing"]; - } - ]; - } - ]; - } - ]; - }; - }; - /* - programs.zsh = { - oh-my-zsh = { - enable = true; - plugins = [ "git" "extract"]; - }; - enableAutosuggestions = true; - enableCompletion = true; - syntaxHighlighting.enable = true; - - plugins = [ - {name = "powerlevel10k";src = pkgs.zsh-powerlevel10k;file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme";} - ]; - }; - */ - - # Home Manager is pretty good at managing dotfiles. The primary way to manage - # plain files is through 'home.file'. - home.file = { - # # Building this configuration will create a copy of 'dotfiles/screenrc' in - # # the Nix store. Activating the configuration will then make '~/.screenrc' a - # # symlink to the Nix store copy. - # ".screenrc".source = dotfiles/screenrc; - - # # You can also set the file content immediately. - # ".gradle/gradle.properties".text = '' - # org.gradle.console=verbose - # org.gradle.daemon.idletimeout=3600000 - # ''; - }; - - # You can also manage environment variables but you will have to manually - # source - # - # ~/.nix-profile/etc/profile.d/hm-session-vars.sh - # - # or - # - # /etc/profiles/per-user/nmarks/etc/profile.d/hm-session-vars.sh - # - # if you don't want to manage your shell through Home Manager. - home.sessionVariables = { - EDITOR = "nvim"; - VISUAL = "nvim"; - TERMINAL = "ghostty"; - BROWSER = "firefox"; - }; - - # Let Home Manager install and manage itself. - programs.home-manager.enable = true; } diff --git a/hosts/laptop/home.nix b/hosts/laptop/home.nix index 0850802..309be20 100644 --- a/hosts/laptop/home.nix +++ b/hosts/laptop/home.nix @@ -2,6 +2,7 @@ inputs, config, pkgs, + lib, ghostty, moonlight, ... @@ -21,210 +22,10 @@ allowUnfree = true; }; - # imports = [ - # ./zed-editor.nix - # ]; + home.packages = pkgs.callPackage ../shared/packages.nix {}; - # imports = [discord/default.nix]; - # sys.discord.enable = true; + programs = import ../shared/home-programs.nix {inherit config pkgs lib;}; - # The home.packages option allows you to install Nix packages into your - # environment. - - home.packages = with pkgs; [ - # ghostty.packages.aarch64-darwin.default - python312 - uv - fd - lua51Packages.lua - lua51Packages.luarocks - luajitPackages.magick - ripgrep - lemonade - anki-bin - wireguard-tools - ruff - python312Packages.jedi-language-server - tor - #spotify - #stremio - fzf - zigpkgs.master - stylua - cachix - btop - neofetch - direnv - tmux - zellij - qemu - vimgolf - lazygit - rustup - file - vesktop - discord - # itch : THIS IS BROKEN FOR SOME REASON, need to pin it?? - qbittorrent - deno - imagemagick - pkg-config - #mpv - comma - gnumake - #signal-desktop - #zed-editor - #getting foundry to work! - #nodejs_21 - #productivty - #todoist-electron - #Gaming - prismlauncher - # for cmpm17 - # binwalk - exiftool - #for fun - cowsay - cmatrix - hyfetch - bat - eza - ollama - sl - #LSP + formatters/linters - texlivePackages.chktex - lua-language-server - nil - alejandra - statix - texlab - clang-tools - # rust-analyzer - #clippy - # rustfmt - #runpod - docker - nh - fastfetch - ]; - programs.direnv = { - enable = true; - #enableFishIntegration = true; - nix-direnv.enable = true; - }; - - programs.neovim = { - viAlias = true; - vimAlias = true; - extraLuaPackages = ps: [ps.magick]; - extraPackages = [pkgs.imagemagick]; - }; - #Link neovim config into nix - #xdg.configFile.nvim.source = ./nvim; - #xdg.mimeApps.defaultApplications."inode/directory" = "dolphin.desktop"; - # xdg.mimeApps.defaultApplications = {"inode/directory" = "org.kde.dolphin.desktop";}; - - programs.atuin = { - enable = true; - enableBashIntegration = true; - enableFishIntegration = true; - daemon.enable = false; - }; - - programs.fish = { - enable = true; - - plugins = [ - { - name = "tide"; - src = pkgs.fishPlugins.tide.src; - } - ]; - shellAliases = { - # DYLD_FALLBACK_LIBRARY_PATH = "$(brew --prefix)/lib:$DYLD_FALLBACK_LIBRARY_PATH"; - }; - }; - - programs.moonlight-mod = { - enable = true; - stable = { - extensions = { - allActivites.enabled = true; - alwaysFocus.enabled = true; - - betterEmbedsYT = { - enabled = true; - config = { - fullDescription = false; - expandDescription = true; - }; - }; - }; - }; - }; - - programs.hyfetch = { - enable = true; - settings = { - backend = "fastfetch"; - preset = "bisexual"; - mode = "rgb"; - light_dark = "dark"; - lightness = { - }; - color_align = { - mode = "horizontal"; - # custom_colors = []; - # fore_back = null; - }; - distro = null; - pride_month_shown = [ - ]; - pride_month_disable = false; - }; - }; - - /* - programs.zsh = { - oh-my-zsh = { - enable = true; - plugins = [ "git" "extract"]; - }; - enableAutosuggestions = true; - enableCompletion = true; - syntaxHighlighting.enable = true; - - plugins = [ - {name = "powerlevel10k";src = pkgs.zsh-powerlevel10k;file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme";} - ]; - }; - */ - - # Home Manager is pretty good at managing dotfiles. The primary way to manage - # plain files is through 'home.file'. - home.file = { - # # Building this configuration will create a copy of 'dotfiles/screenrc' in - # # the Nix store. Activating the configuration will then make '~/.screenrc' a - # # symlink to the Nix store copy. - # ".screenrc".source = dotfiles/screenrc; - - # # You can also set the file content immediately. - # ".gradle/gradle.properties".text = '' - # org.gradle.console=verbose - # org.gradle.daemon.idletimeout=3600000 - # ''; - }; - - # You can also manage environment variables but you will have to manually - # source - # - # ~/.nix-profile/etc/profile.d/hm-session-vars.sh - # - # or - # - # /etc/profiles/per-user/nmarks/etc/profile.d/hm-session-vars.sh - # - # if you don't want to manage your shell through Home Manager. home.sessionVariables = { EDITOR = "nvim"; VISUAL = "nvim"; @@ -233,5 +34,4 @@ }; # Let Home Manager install and manage itself. - programs.home-manager.enable = true; } diff --git a/hosts/shared/home-programs.nix b/hosts/shared/home-programs.nix new file mode 100644 index 0000000..d374085 --- /dev/null +++ b/hosts/shared/home-programs.nix @@ -0,0 +1,65 @@ +{ + config, + pkgs, + lib, + ... +}: { + atuin = { + enable = true; + enableBashIntegration = true; + enableFishIntegration = true; + daemon.enable = true; + }; + + direnv = { + enable = true; + enableZshIntegration = true; + nix-direnv.enable = true; + }; + + kitty = { + enable = true; + themeFile = "Catppuccin-Mocha"; + extraConfig = "font_family Iosevka NF + italic_font auto + bold_italic_font auto + bold_font auto"; + }; + + hyfetch = { + enable = true; + settings = { + backend = "fastfetch"; + preset = "bisexual"; + mode = "rgb"; + light_dark = "dark"; + lightness = { + }; + color_align = { + mode = "horizontal"; + # custom_colors = []; + # fore_back = null; + }; + distro = null; + pride_month_shown = [ + ]; + pride_month_disable = false; + }; + }; + + fish = { + enable = true; + + plugins = [ + { + name = "tide"; + inherit (pkgs.fishPlugins.tide) src; + } + ]; + shellAliases = { + reboot-windows = "sudo efibootmgr --bootnext 0000; sudo reboot -h now"; + }; + }; + + home-manager.enable = true; +} diff --git a/hosts/shared/packages.nix b/hosts/shared/packages.nix new file mode 100644 index 0000000..83089f5 --- /dev/null +++ b/hosts/shared/packages.nix @@ -0,0 +1,139 @@ +{pkgs, ...}: +with pkgs; [ + #general development + just + pkg-config + gnumake + zed-editor + caddy + pm2 + clang-tools + wget + git + unzip + clang + + #productivity + glance + wofi + anki-bin + tailscale + + #nix tools + cachix + direnv + comma + nh + podman + docker + + #terminal stuff + ghostty + (btop.override {cudaSupport = true;}) + tmux + zellij + lazygit + fzf + neofetch + hyfetch + fastfetch + bat + eza + ollama + uv + fd + ripgrep + file + fish + ethtool + + #linux tools + pavucontrol + grub2 + efibootmgr + distrobox + qemu + openconnect + wireguard-tools + xdg-desktop-portal-gtk + xclip + + #image tools + imagemagick + + #chatting apps + legcord + webcord + (discord.override { + withMoonlight = true; + }) + vesktop + signal-desktop + + #media + calibre + kdePackages.dolphin + spotify + stremio + qbittorrent + mpv + + #language servers + typst-live + lua-language-server + nil + texlab + texlivePackages.chktex + + #formatters/linters + stylua + alejandra + statix + + #neovim deps + lua51Packages.lua + lua51Packages.luarocks-nix + codespell + typst + + #python + pyright + basedpyright + ruff + python312Packages.python + python312Packages.pynvim + python312Packages.pip + + #programming languages + R + deno + ruby + julia + nodePackages.npm + go + + #gaming + steam + bottles + path-of-building + lutris + wineWowPackages.stable + winetricks + dxvk_2 + mangohud + vulkan-tools + prismlauncher + steam-run + + #browsers + tor + firefox + + #math + texlive.combined.scheme-full + + #fun things + cowsay + cmatrix + sl +]