commit 863a046f423eb853e3138db5fe7467791f2b2823 Author: Jet Pham Date: Fri Aug 15 18:24:14 2025 -0700 feat: init flake diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..25e1dd2 --- /dev/null +++ b/configuration.nix @@ -0,0 +1,177 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). + +{ config, pkgs, ... }: + +{ + imports = + [ # Include the results of the hardware scan. + ./hardware-configuration.nix + ]; + + # Bootloader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + networking.hostName = "framework"; # Define your hostname. + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + hardware.bluetooth = { + enable = true; + powerOnBoot = true; + settings = { + General = { + Experimental = true; # Show battery charge of Bluetooth devices + }; + }; + }; + + # Enable networking + networking.networkmanager.enable = true; + + # Set your time zone. + time.timeZone = "America/Los_Angeles"; + + # 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"; + }; + + # Enable the X11 windowing system. + services.xserver.enable = true; + + # Enable keyd for key remapping + services.keyd = { + enable = true; + keyboards = { + default = { + ids = [ "*" ]; # Apply to all keyboards + settings = { + main = { + capslock = "esc"; + esc = "capslock"; + leftalt = "leftcontrol"; + leftcontrol = "leftalt"; + }; + }; + }; + }; + }; + + # Prevent trackpad interference with keyd + environment.etc."libinput/local-overrides.quirks".text = '' + [Serial Keyboards] + MatchUdevType=keyboard + MatchName=keyd virtual keyboard + AttrKeyboardIntegration=internal + ''; + + # Set Kitty as default terminal + xdg.terminal-exec = { + enable = true; + settings = { + default = [ "kitty.desktop" ]; + }; + }; + + # Enable the GNOME Desktop Environment. + services.displayManager.gdm.enable = true; + services.desktopManager.gnome.enable = true; + + # Configure keymap in X11 + services.xserver.xkb = { + layout = "us"; + variant = ""; + }; + + # Enable CUPS to print documents. + services.printing.enable = true; + + # Enable sound with pipewire. + services.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + # If you want to use JACK applications, uncomment this + #jack.enable = true; + + # use the example session manager (no others are packaged yet so this is enabled by default, + # no need to redefine it in your config for now) + #media-session.enable = true; + }; + + # Enable touchpad support (enabled default in most desktopManager). + # services.xserver.libinput.enable = true; + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.jet = { + isNormalUser = true; + description = "Jet"; + extraGroups = [ "networkmanager" "wheel" ]; + }; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # Enable the Flakes feature and the accompanying new nix command-line tool + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + git + helix # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + wget + vim + ]; + + environment.variables.EDITOR = "helix"; + environment.sessionVariables = { + TERMINAL = "kitty"; + }; + + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + # programs.gnupg.agent = { + # enable = true; + # enableSSHSupport = true; + # }; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + # services.openssh.enable = true; + + # Open ports in the firewall. + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + # networking.firewall.enable = false; + + # 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 = "25.05"; # Did you read the comment? + +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..95181ef --- /dev/null +++ b/flake.lock @@ -0,0 +1,91 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1755121891, + "narHash": "sha256-UtYkukiGnPRJ5rpd4W/wFVrLMh8fqtNkqHTPgHEtrqU=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "279ca5addcdcfa31ac852b3ecb39fc372684f426", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "zen-browser", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1752603129, + "narHash": "sha256-S+wmHhwNQ5Ru689L2Gu8n1OD6s9eU9n9mD827JNR+kw=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "e8c19a3cec2814c754f031ab3ae7316b64da085b", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1755027561, + "narHash": "sha256-IVft239Bc8p8Dtvf7UAACMG5P3ZV+3/aO28gXpGtMXI=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "005433b926e16227259a1843015b5b2b7f7d1fc3", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "nixpkgs": "nixpkgs", + "zen-browser": "zen-browser" + } + }, + "zen-browser": { + "inputs": { + "home-manager": "home-manager_2", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1755199018, + "narHash": "sha256-y7dM6ihF4feDgbssaeFxKXjsJb6Rzjz1brc17kSkcoQ=", + "owner": "0xc000022070", + "repo": "zen-browser-flake", + "rev": "8bf64e38baa26429c31d0623c3f16812b794b436", + "type": "github" + }, + "original": { + "owner": "0xc000022070", + "repo": "zen-browser-flake", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..fbe3de8 --- /dev/null +++ b/flake.nix @@ -0,0 +1,36 @@ +{ + description = "flake for jet with Home Manager enabled"; + # https://github.com/drakerossman/nixos-musings/blob/main/how-to-add-home-manager-to-nixos/flake.nix + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + home-manager.url = "github:nix-community/home-manager"; + home-manager.inputs.nixpkgs.follows = "nixpkgs"; + zen-browser = { + url = "github:0xc000022070/zen-browser-flake"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = inputs@{ + self, + nixpkgs, + home-manager, + ... + }: { + nixosConfigurations = { + jet = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + ./configuration.nix + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.extraSpecialArgs = { inherit inputs; }; + home-manager.users.jet = import ./home.nix; + } + ]; + }; + }; + }; +} diff --git a/hardware-configuration.nix b/hardware-configuration.nix new file mode 100644 index 0000000..eb976ee --- /dev/null +++ b/hardware-configuration.nix @@ -0,0 +1,38 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/687945b8-9e15-473d-b083-d3a3b12ac98f"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/407C-573B"; + fsType = "vfat"; + options = [ "fmask=0077" "dmask=0077" ]; + }; + + swapDevices = [ ]; + + # 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.wlp192s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/home.nix b/home.nix new file mode 100644 index 0000000..bcd19e4 --- /dev/null +++ b/home.nix @@ -0,0 +1,131 @@ +{ config, pkgs, inputs, ... }: + +{ + home.username = "jet"; + home.stateVersion = "23.05"; + + home.packages = with pkgs; [ + code-cursor + ghidra-bin + kitty + zellij + jujutsu + vlc + docker + btop + inputs.zen-browser.packages."${pkgs.system}".twilight-official + nerd-fonts.commit-mono + prismlauncher + steam + qbittorrent-enhanced + openexr # for omelia + gimp3 + obs-studio + inkscape + blender + kdePackages.kdenlive + android-studio + bat + zoxide + eza + ripgrep + ]; + + programs.eza = { + enable = true; + icons = "always"; + enableBashIntegration = true; + git = true; + }; + + programs.zoxide = { + enable = true; + enableBashIntegration = true; + }; + + programs.bash = { + enable = true; + shellAliases = { + ll = "eza -l"; + la = "eza -la"; + ".." = "cd .."; + gs = "git status"; + gc = "git commit"; + gp = "git push"; + gl = "git pull"; + cat = "bat"; + grep = "rg --color=auto"; + cls = "clear"; + j = "jj"; + jgf = "jj git fetch"; + jgp = "jj git push"; + jgc = "jj git clone --colocate"; + jd = "jj describe"; + }; + }; + + programs.kitty = { + enable = true; + settings = { + hide_window_decorations = "yes"; + draw_minimal_borders = "yes"; + font_family = "CommitMono Nerd Font"; + font_size = "12"; + confirm_os_window_close = "0"; + enable_audio_bell = "no"; + }; + keybindings = { + "ctrl+shift+c" = "copy_and_clear_or_interrupt"; + "ctrl+c" = "copy_and_clear_or_interrupt"; + "ctrl+shift+v" = "paste_from_clipboard"; + "ctrl+v" = "paste_from_clipboard"; + }; + themeFile = "GitHub_Dark_High_Contrast"; + }; + + programs.jujutsu = { + enable = true; + settings = { + user = { + email = "jetthomaspham@gmail.com"; + name = "Jet Pham"; + }; + + signing = { + behavior = "own"; + backend = "ssh"; + key = "~/.ssh/id_ed25519.pub"; + }; + + git = { + sign-on-push = true; + push-new-bookmarks = true; + }; + ui = { + editor = "hx"; + pager = "bat"; + }; + }; + }; + + # Override the Kitty desktop entry to always launch in fullscreen + xdg.desktopEntries.kitty = { + name = "Kitty"; + genericName = "Terminal Emulator"; + exec = "kitty --start-as=fullscreen"; + icon = "kitty"; + type = "Application"; + categories = ["System" "TerminalEmulator"]; + comment = "Fast, featureful, GPU based terminal emulator"; + }; + + # Autostart applications using proper desktop files + xdg.autostart = { + enable = true; + entries = [ + "${pkgs.kitty}/share/applications/kitty.desktop" + "${inputs.zen-browser.packages."${pkgs.system}".twilight-official}/share/applications/zen-twilight.desktop" + "${pkgs.code-cursor}/share/applications/cursor.desktop" + ]; + }; +} \ No newline at end of file