From 0c8fa3a2a270747f3dbb54fe8792f3f0aec997e3 Mon Sep 17 00:00:00 2001 From: Ryan Schanzenbacher Date: Mon, 3 Aug 2026 01:22:44 -0400 Subject: Initial commit: combined darwin + guix-linux home-manager flake Supersedes nix-dotfiles (darwin) and guix-dotfiles' ad-hoc nix-home-manager flake (linux). See README.md/MIGRATION.md. --- users/ryan/linux.nix | 162 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 users/ryan/linux.nix (limited to 'users/ryan/linux.nix') diff --git a/users/ryan/linux.nix b/users/ryan/linux.nix new file mode 100644 index 0000000..a86cad1 --- /dev/null +++ b/users/ryan/linux.nix @@ -0,0 +1,162 @@ +{ config, pkgs, lib, inputs, ... }: + +{ + imports = [ + ./linux/firefox-nightly + ]; + + home.username = "ryan"; + home.homeDirectory = "/home/ryan"; + home.stateVersion = "23.11"; # Please read the comment before changing. + + nixpkgs.config.allowUnfree = true; + + programs.zsh.shellAliases = { + ls = "ls -p --color=auto"; + spt = "spotify_player"; + python = "python3"; + }; + + # `nix shell nixpkgs#...`/`nix run nixpkgs#...` etc. resolve `nixpkgs` to + # this flake's own pinned input instead of fetching latest nixpkgs-unstable. + # This is the standalone-HM equivalent of RyanMac's /etc/nix/flake-registry.json. + # HM owns the whole ~/.config/nix directory (including nix.conf) so this + # doesn't end up writing through guix-dotfiles' `nix-config` symlink - see + # MIGRATION.md. + xdg.configFile."nix/nix.conf".text = "experimental-features = nix-command flakes\n"; + xdg.configFile."nix/registry.json".text = builtins.toJSON { + version = 2; + flakes = [ + { + from = { type = "indirect"; id = "nixpkgs"; }; + to = { + type = "path"; + path = inputs.nixpkgs.outPath; + lastModified = inputs.nixpkgs.lastModified; + narHash = inputs.nixpkgs.narHash; + }; + } + ]; + }; + + # Non-NixOS (Guix), so HM has to write its own fontconfig instead of + # relying on a system module. + fonts.fontconfig.enable = true; + fonts.fontconfig.defaultFonts = { + monospace = [ "DejaVu Sans Mono" ]; + sansSerif = [ "DejaVu Sans" ]; + serif = [ "DejaVu Serif" ]; + }; + + # Cursor theme. Replaces the previously hand-vendored Bibata asset (which + # embedded oddly-versioned theme names) with nixpkgs' own build - see the + # comment in linux/hypr/hyprland.conf for the corresponding env var change. + home.pointerCursor = { + enable = true; + package = pkgs.bibata-cursors; + name = "Bibata-Modern-Classic"; + size = 24; + gtk.enable = true; + x11.enable = true; + }; + + # gpg-agent itself is enabled in common.nix; nixpkgs' pinentry here instead + # of depending on Guix's system profile path. + services.gpg-agent.pinentry.package = pkgs.pinentry-qt; + + wayland.windowManager.hyprland = { + enable = true; + package = pkgs.hyprland; + portalPackage = pkgs.xdg-desktop-portal-hyprland; + extraConfig = builtins.readFile ./linux/hypr/hyprland.conf; + }; + + xdg.configFile = { + "hypr/monitors.conf".source = ./linux/hypr/monitors.conf; + "hypr/kanshi.conf".source = ./linux/hypr/kanshi.conf; + "hypr/pyprland.toml".source = ./linux/hypr/pyprland.toml; + "hypr/hypridle.conf".source = ./linux/hypr/hypridle.conf; + "hypr/hyprlock.conf".source = ./linux/hypr/hyprlock.conf; + "hypr/scripts" = { source = ./linux/hypr/scripts; recursive = true; }; + "hypr/family_guy.mp4".source = ./linux/hypr/family_guy.mp4; + "hypr/subwaysurfer.webm".source = ./linux/hypr/subwaysurfer.webm; + + "waybar" = { source = ./linux/waybar; recursive = true; }; + "alacritty" = { source = ./linux/alacritty; recursive = true; }; + "foot" = { source = ./linux/foot; recursive = true; }; + "wpaperd" = { source = ./linux/wpaperd; recursive = true; }; + "mpv" = { source = ./linux/mpv; recursive = true; }; + + "pulse/client.conf".source = ./linux/pulseaudio/client.conf; + "spotify-player/app.toml".source = ./linux/spotify-player/app.toml; + }; + + home.file = { + ".local/share/mailvelope" = { source = ./linux/mailvelope; recursive = true; }; + ".local/share/tridactyl" = { source = ./linux/tridactyl; recursive = true; }; + ".mozilla/native-messaging-hosts/tridactyl.json".source = ./linux/tridactyl/tridactyl.json; + }; + + home.packages = with pkgs; [ + rustup + zoxide + pnpm + gcc + pkg-config + wttrbar + wl-clip-persist + gifski + waypaper + spotify-player + xwayland + xdg-desktop-portal + xdg-desktop-portal-gtk + mpv + imv + libva + libvdpau + hypridle + hyprpicker + wpaperd + wl-mirror + pyprland + satty + fluxcd + sops + restic + kdePackages.kdenlive + bluetui + supercell-wx + chromium + + # foot is Guix system-packaged and is the terminal actually wired into + # the WM; alacritty's config was carried over from guix-dotfiles but + # nothing provided its binary there either - see MIGRATION.md. + alacritty + + # Nerd Fonts, replacing the hand-vendored ttf files that used to live in + # guix-dotfiles/home-config/fonts (Fira Code and "Monofur For Powerline" + # dropped - superseded by these, unreferenced anywhere) + nerd-fonts.anonymice + nerd-fonts.monofur + nerd-fonts.lilex + nerd-fonts.fira-code + noto-fonts + dejavu_fonts + liberation_ttf + noto-fonts-cjk-sans + noto-fonts-color-emoji + + # hyprlock built by nix needs Guix's PAM/fontconfig libs preloaded to run + # under the Guix system profile - same interop hack as before. + (pkgs.writeScriptBin "hyprlock" '' + #! ${pkgs.bash}/bin/bash + export LD_PRELOAD="/run/current-system/profile/lib/libpam.so.0:/run/current-system/profile/lib/libfontconfig.so:$LD_PRELOAD" + exec ${pkgs.hyprlock}/bin/hyprlock "$@" + '') + + # Guix's mesa doesn't match nixpkgs', so GL apps built by nix need nixGL. + inputs.nixgl.packages.${pkgs.system}.nixGLIntel + inputs.clipboard-sync.packages.${pkgs.system}.default + ]; +} -- cgit v1.3.1