diff --git a/.config/niri/config.kdl b/.config/niri/config.kdl index 82ba0ec..abf546a 100644 --- a/.config/niri/config.kdl +++ b/.config/niri/config.kdl @@ -2,7 +2,7 @@ input { keyboard { xkb { layout "us" - variant "dvp" + variant "dvorak" options "caps:backspace" } repeat-delay 350; diff --git a/flake.nix b/flake.nix index e56d8dd..a0b59f5 100644 --- a/flake.nix +++ b/flake.nix @@ -33,6 +33,16 @@ ]; }; + nixosConfigurations.hanni = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + specialArgs = { inputs = inputs; }; + modules = coreModules ++ [ + nixos-hardware.nixosModules.framework-16-7040-amd + ./nix/hosts/common/sys.nix + ./nix/hosts/hanni/sys.nix + ]; + }; + nixosConfigurations.chaewon = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; specialArgs = { inputs = inputs; }; diff --git a/nix/hosts/hanni/home.nix b/nix/hosts/hanni/home.nix new file mode 100644 index 0000000..00915ce --- /dev/null +++ b/nix/hosts/hanni/home.nix @@ -0,0 +1,335 @@ +{ inputs, configDir, config, pkgs, lib, ... }: { + imports = [ ../common/home.nix ]; + + # This value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It‘s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). + home.stateVersion = "23.11"; # Did you read the comment? + + home.packages = let + packages = with pkgs; [ + pavucontrol + pamixer + picom + rofi + notify-desktop + pass + just + zathura + libvterm + texliveFull + flameshot + brightnessctl + pinentry-gtk2 + bluez5-experimental + bluez-tools + blueman + dmenu + pipewire + dconf + mu + isync + openssl + meson + glib + stow + syncthing + nitrogen + networkmanager + nixfmt-classic + hurl + gh + libnotify + tokei + eza + typst + typst-live + gdb + ccls + clang-tools + valgrind + fzf + rofi + rofi-bluetooth + docker + awscli + bear + direnv + wasmtime + wabt + gleam + erlang + zip + framework-system-tools + ffmpeg + claude-code + prr + + niri + fuzzel + waybar + swaybg + swaylock + xwayland + xwayland-satellite + gammastep + nemo + xdg-desktop-portal + xdg-desktop-portal-wlr + wpaperd + swaynotificationcenter + + steam + obs-studio + vlc + easyeffects + thunderbird + signal-desktop + (prismlauncher.override { jdks = [ jdk23 jdk17 jdk8 ]; }) + tidal-hifi + zotero + mullvad-browser + networkmanagerapplet + pasystray + arandr + inkscape + zoom-us + gimp + libreoffice + peek + rofimoji + playerctl + protonmail-desktop + protonvpn-cli + protonvpn-gui + proton-pass + lutris + qbittorrent + davinci-resolve-studio + handbrake + zulip + protonmail-bridge + protonmail-bridge-gui + kdePackages.kdenlive + jan + vesktop + networkmanagerapplet + keymapp + + # Required by DVR + kitty + mesa-demos + vulkan-tools + clinfo + + aspell + aspellDicts.en + + nil + + emacs30-pgtk + alacritty + alacritty-theme + emacs-lsp-booster + code-cursor + + mu + msmtp + + semgrep + + ruff + + irony-server + + typescript-language-server + prettierd + + jdk23 + + ocaml + ocamlPackages.ocaml-lsp + dune_3 + opam + ocamlformat + + noto-fonts + fira-code + open-sans + inter + roboto-mono + jetbrains-mono + noto-fonts-cjk-sans + libertine + roboto + font-awesome + + adwaita-icon-theme + + ihaskell + ]; + emacsPackages = with pkgs.emacsPackages; [ mu4e ]; + pythonPackages = with pkgs.python312Packages; [ python-lsp-server ]; + in packages ++ emacsPackages ++ pythonPackages; + + home.sessionPath = [ + "$HOME/.local/share/racket/8.14/bin/" # This has to be updated every time Racket updates :( + ]; + + home.pointerCursor = { + gtk.enable = true; + x11.enable = true; + name = "Adwaita"; + package = pkgs.adwaita-icon-theme; + size = 16; + }; + + xresources.properties = { + "Xft.antialias" = true; + "Xft.rgba" = "rgb"; # type of anti-aliasing + "Xft.hinting" = 1; # font hinting + "Xft.hintstyle" = "hintslight"; + }; + + ### Services + + services.pasystray.enable = true; + services.easyeffects.enable = true; + + services.wpaperd = { + enable = true; + settings.eDP-2.path = "/home/priime/.wallpaper/mountain.jpg"; + }; + + services.emacs = { + enable = true; + defaultEditor = true; + package = pkgs.emacs30-pgtk; + }; + + services.gammastep = { + enable = true; + dawnTime = "6:00-7:00"; + duskTime = "20:00-21:00"; + temperature = { + day = 6500; + night = 2500; + }; + }; + + ### Programs + programs.home-manager.enable = true; + programs.mu.enable = true; + + programs.git = { + enable = true; + userName = "Lucas Sta Maria"; + userEmail = "lucas@priime.dev"; + signing = { + key = "2EAF5BA156A36810B057BF61F07FB16A826E3B47"; + signByDefault = true; + }; + extraConfig = { + pull.rebase = true; + github.user = "priime0"; + credential.helper = "store"; + merge.conflictstyle = "zdiff3"; + diff.algorithm = "histogram"; + }; + }; + + programs.direnv = { + enable = true; + enableFishIntegration = true; + nix-direnv.enable = true; + }; + + programs.alacritty = { + enable = true; + settings = { + terminal.shell = "fish"; + font.size = 10; + font.normal = { + family = "JetBrains Mono"; + style = "SemiBold"; + }; + font.bold = { + family = "JetBrains Mono"; + style = "Bold"; + }; + font.italic = { + family = "JetBrains Mono"; + style = "Italic"; + }; + font.bold_italic = { + family = "JetBrains Mono"; + style = "Bold Italic"; + }; + }; + }; + + programs.gh = { + enable = true; + settings.editor = "emacsclient"; + }; + + programs.firefox = { + enable = true; + policies = { + ExtensionSettings = { + "uBlock0@raymondhill.net" = { + install_url = + "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"; + installation_mode = "force_installed"; + allowed_in_private_browsing = true; + }; + "search@kagi.com" = { + install_url = + "https://addons.mozilla.org/firefox/downloads/latest/kagi-search-for-firefox/latest.xpi"; + installation_mode = "force_installed"; + allowed_in_private_browsing = true; + }; + "78272b6fa58f4a1abaac99321d503a20@proton.me" = { + install_url = + "https://addons.mozilla.org/firefox/downloads/latest/proton-pass/latest.xpi"; + installation_mode = "force_installed"; + allowed_in_private_browsing = true; + }; + }; + WebsiteFilter = { Block = [ "*://*.facebook.com/" ]; }; + FirefoxHome = { + Search = true; + TopSites = false; + SponsoredTopSites = false; + Highlights = false; + Pocket = false; + SponsoredPocket = false; + Snippets = false; + Locked = true; + }; + SearchEngines = { + Default = "Kagi"; + Add = [{ + Name = "Kagi"; + URLTemplate = "https://kagi.com/search?q={searchTerms}"; + Method = "GET"; + IconURL = "https://kagi.com/favicon.ico"; + Alias = "k"; + Description = "Kagi Search"; + }]; + }; + PromptForDownloadLocation = true; + PasswordManagerEnabled = false; + }; + }; + + programs.swaylock = { + enable = true; + settings = { color = "000000"; }; + }; + + programs.waybar = { enable = true; }; +} diff --git a/nix/hosts/hanni/hw.nix b/nix/hosts/hanni/hw.nix new file mode 100644 index 0000000..579d304 --- /dev/null +++ b/nix/hosts/hanni/hw.nix @@ -0,0 +1,40 @@ +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usbhid" "usb_storage" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/4cf1f4c9-3ab2-4bda-9818-298be4214150"; + fsType = "ext4"; + }; + + boot.initrd.luks.devices."luks-dab17d75-6b1e-414f-a67c-f25f89d5c36f".device = "/dev/disk/by-uuid/dab17d75-6b1e-414f-a67c-f25f89d5c36f"; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/C0DE-34B5"; + fsType = "vfat"; + options = [ "fmask=0077" "dmask=0077" ]; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/7af9a0d8-3014-431c-9325-561fa07d5a92"; } + ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp191s0.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp192s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/nix/hosts/hanni/sys.nix b/nix/hosts/hanni/sys.nix new file mode 100644 index 0000000..c9041fe --- /dev/null +++ b/nix/hosts/hanni/sys.nix @@ -0,0 +1,218 @@ +{ inputs, config, pkgs, lib, ... }: { + imports = [ ./hw.nix ../../modules/swaynotificationcenter.nix ]; + + networking.hostName = "hanni"; + time.timeZone = "America/Chicago"; + + # Bootloader + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + # Network Manager + networking.networkmanager.enable = true; + + # Security + security.rtkit.enable = true; + + # Fonts + fonts = { + fontDir.enable = true; + enableDefaultPackages = true; + fontconfig = { + enable = true; + defaultFonts = { monospace = [ "Roboto Mono" ]; }; + }; + packages = with pkgs; [ + noto-fonts + fira-code + open-sans + inter + roboto-mono + jetbrains-mono + noto-fonts-cjk-sans + libertine + roboto + font-awesome + ]; + }; + + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; + i18n.extraLocaleSettings = { + LC_ADDRESS = "en_US.UTF-8"; + LC_IDENTIFICATION = "en_US.UTF-8"; + LC_MEASUREMENT = "en_US.UTF-8"; + LC_MONETARY = "en_US.UTF-8"; + LC_NAME = "en_US.UTF-8"; + LC_NUMERIC = "en_US.UTF-8"; + LC_PAPER = "en_US.UTF-8"; + LC_TELEPHONE = "en_US.UTF-8"; + LC_TIME = "en_US.UTF-8"; + }; + + # Bluetooth + hardware.bluetooth.enable = true; + services.blueman.enable = true; + + # Audio + services.pipewire = { + enable = true; + pulse.enable = true; + }; + + # AMD + hardware.cpu.amd.updateMicrocode = true; + hardware.graphics = { + enable = true; + enable32Bit = true; + extraPackages = with pkgs; [ + mesa + libva + libvdpau-va-gl + vulkan-loader + vulkan-validation-layers + mesa.opencl + rocmPackages.clr.icd + ]; + }; + + hardware.openrazer.enable = true; + + hardware.keyboard.zsa.enable = true; + + # Swap + swapDevices = [{ + device = "/var/lib/swap"; + size = 16 * 1024; + }]; + boot.resumeDevice = "/var/lib/swap"; + + # Display Manager + services.displayManager.autoLogin.user = "priime"; + + xdg.portal = { + enable = true; + extraPortals = [ pkgs.xdg-desktop-portal-wlr ]; + config.common.default = "wlr"; + }; + + # Mouse + services.libinput.mouse = { middleEmulation = false; }; + + virtualisation.docker.enable = true; + + users.users.priime = { + isNormalUser = true; + description = "Lucas"; + extraGroups = [ "networkmanager" "wheel" "docker" ]; + packages = with pkgs; [ ]; + shell = pkgs.fish; + }; + + documentation.dev.enable = true; + + environment.variables = { + EDITOR = "emacsclient"; + CC = "gcc"; + LSP_USE_PLISTS = "true"; + MOZ_USE_XINPUT2 = "1"; + RUSTICL_ENABLE = "radeonsi"; + ROC_ENABLE_PRE_VEGA = "1"; + QT_QPA_PLATFORM = "xcb"; + }; + + ### Services + + # xserver + services.xserver = { + enable = true; + displayManager.lightdm.enable = true; + autoRepeatDelay = 350; + autoRepeatInterval = 17; + }; + + services.keyd = { + enable = true; + keyboards.default = { + ids = [ "32ac:0012" ]; + settings = { + main = { + capslock = "leftshift"; + leftshift = "noop"; + }; + }; + }; + }; + + services.swaynotificationcenter.enable = true; + + services.tailscale = { + enable = true; + useRoutingFeatures = "client"; + }; + + services.syncthing = { + enable = true; + user = "priime"; + dataDir = "/home/priime/syncthing"; + configDir = "/home/priime/.config/syncthing"; + overrideDevices = true; + overrideFolders = false; + settings = { }; + }; + + # Programs + ## Window Manager + programs.niri.enable = true; + programs.xwayland.enable = true; + + programs.kdeconnect = { + enable = true; + package = pkgs.kdePackages.kdeconnect-kde; + }; + programs.steam.enable = true; + programs.dconf.enable = true; + programs.obs-studio.enable = true; + + programs.fish = { + enable = true; + shellAliases = { + psax = "ps -ax | grep -i"; + ls = "eza"; + ll = "eza --all --long"; + e = "emacs"; + ed = "emacs --daemon"; + ec = ''emacsclient -n -c -a ""''; + }; + }; + + programs.gnupg.agent = { + enable = true; + enableSSHSupport = true; + pinentryPackage = lib.mkForce pkgs.pinentry-gtk2; + }; + + programs.msmtp = { + enable = true; + accounts = { + default = { + auth = true; + host = "smtp.fastmail.com"; + passwordeval = + "gpg --decrypt --no-tty -q ~/backupcodes/emacsframeworkfastmail.asc"; + user = "lucas@priime.dev"; + }; + }; + }; + + programs.nm-applet.enable = true; + + # This value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It‘s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). + system.stateVersion = "23.11"; # Did you read the comment? + home-manager.users.priime = { pkgs, ... }: { imports = [ ./home.nix ]; }; +}