diff --git a/home-manager/home.nix b/home-manager/home.nix new file mode 100644 index 0000000..72c9673 --- /dev/null +++ b/home-manager/home.nix @@ -0,0 +1,230 @@ +{ config, pkgs, ... }: +let + unstable = import { + config = { + allowUnfree = true; + }; + }; +in +{ + # Home Manager needs a bit of information about you and the paths it should + # manage. + home.username = "buymymojo"; + home.homeDirectory = "/home/buymymojo"; + + # 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 = "24.11"; # Please read the comment before changing. + + home.file."jdks/zulujdk8".source = pkgs.zulu8; + home.file."jdks/zulujdk17".source = pkgs.zulu17; + home.file."jdks/zulujdk23".source = pkgs.zulu23; + + # The home.packages option allows you to install Nix packages into your + # environment. + home.packages = [ + pkgs.nextcloud-client + pkgs.yubioath-flutter + pkgs.xpipe + pkgs.qbittorrent + + + # pkgs.protonplus + pkgs.pcsx2 + pkgs.rpcs3 + pkgs.ryujinx + pkgs.heroic-unwrapped + pkgs.ludusavi + + + # === Minecraft === + pkgs.prismlauncher + # pkgs.zulu8 + # pkgs.zulu17 + # pkgs.zulu23 + # === Minecraft === + + # === CLI === + pkgs.bat + pkgs.btop + pkgs.rrsync + pkgs.ripgrep + pkgs.wl-clipboard + pkgs.poop # Compare the performance of multiple commands with a colorful terminal user interface + pkgs.age + # === CLI === + + # === Image CLI === + unstable.oxipng + unstable.image_optim + pkgs.jpegoptim + pkgs.libjxl + pkgs.libwebp + pkgs.imagemagick + # === Image CLI === + + # === Communication === + pkgs.vesktop + (unstable.discord.override { withMoonlight = true; }) # pkgs.discord fails to build because of `'anonymous lambda' called with unexpected argument` so we need to use unstable instead + pkgs.signal-desktop + pkgs.telegram-desktop + pkgs.thunderbird-latest-unwrapped + # === Communication === + + # === Game perf === + pkgs.mangojuice + pkgs.goverlay + # === Game perf === + + # === Dev tooling === + pkgs.rustup + pkgs.go + pkgs.pnpm + pkgs.zig + pkgs.maven + pkgs.gradle + + unstable.libreoffice-fresh + # pkgs.kdePackages.kate + pkgs.jetbrains.webstorm + pkgs.jetbrains.rider + pkgs.jetbrains.idea-community + # === Dev tooling === + + # === Media === + pkgs.gimp + pkgs.krita + pkgs.mpv + unstable.losslesscut-bin + # === Media === + + pkgs.polychromatic + + pkgs.orca-slicer + + pkgs.lazydocker + pkgs.distrobox + pkgs.boxbuddy + + unstable.godot + unstable.blender-hip + pkgs.freecad-wayland + pkgs.unityhub + pkgs.material-maker + + unstable.gpu-screen-recorder + unstable.gpu-screen-recorder-gtk + + # # It is sometimes useful to fine-tune packages, for example, by applying + # # overrides. You can do that directly here, just don't forget the + # # parentheses. Maybe you want to install Nerd Fonts with a limited number of + # # fonts? + # (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; }) + + # # You can also create simple shell scripts directly inside your + # # configuration. For example, this adds a command 'my-hello' to your + # # environment: + # (pkgs.writeShellScriptBin "my-hello" '' + # echo "Hello, ${config.home.username}!" + # '') + ]; + + # 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 + # ''; + }; + + programs.git = { + enable = true; + userName = "BuyMyMojo"; + userEmail = "hello+git@buymymojo.net"; + lfs.enable = true; + signing.key = "E7B7B8D20C8753C077F9B17119AB7AA462B8AB3B"; + signing.signByDefault = true; + extraConfig = { + init = { + + defaultBranch = "main"; + }; + }; + }; + + programs.obs-studio = { + enable = true; + plugins = with pkgs.obs-studio-plugins; [ + wlrobs + obs-vkcapture + obs-pipewire-audio-capture + obs-teleport + obs-source-record + obs-source-clone + obs-composite-blur + ]; + }; + + programs.ssh.enable = true; + programs.ssh.addKeysToAgent = "yes"; + + programs.ssh.matchBlocks = { + "*" = { + identityFile = "/home/buymymojo/.ssh/id_ed25519-mainpc"; + }; + + "game2.buymymojo.net" = { + hostname = "game2.buymymojo.net"; + user = "jumpbox"; + identityFile = "/home/buymymojo/.ssh/id_ed25519-mainpc"; + }; + + "git.aria.coffee" = { + hostname = "git.aria.coffee"; + user = "git"; + identityFile = "/home/buymymojo/.ssh/id_ed25519-mainpc"; + port = 23; + }; + }; + + programs.fish.enable = true; + + services.ssh-agent.enable = true; + services.syncthing.enable = true; + + # Home Manager can also manage your environment variables through + # 'home.sessionVariables'. These will be explicitly sourced when using a + # shell provided by Home Manager. If you don't want to manage your shell + # through Home Manager then you have to manually source 'hm-session-vars.sh' + # located at either + # + # ~/.nix-profile/etc/profile.d/hm-session-vars.sh + # + # or + # + # ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh + # + # or + # + # /etc/profiles/per-user/buymymojo/etc/profile.d/hm-session-vars.sh + # + home.sessionVariables = { + EDITOR = "code"; + NIXPKGS_ALLOW_UNFREE = "1"; + }; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; +}