commit af832e9d83316f38c8a478d1feb550ac283a62f1 Author: Alex Maldonado Date: Thu May 7 17:49:39 2026 -0400 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ca66999 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.direnv/ +result +result-* + +secrets.d/ diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..c0fd7df --- /dev/null +++ b/flake.lock @@ -0,0 +1,49 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777851538, + "narHash": "sha256-Gp8qwTEYNoy2yvmErVGlvLOQvrtEECCAKbonW7VJef8=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "cc09c0f9b7eaa95c2d9827338a5eb03d32505ca5", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-25.11", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1778003029, + "narHash": "sha256-q/nkKLDtHIyLjZpKhWk3cSK5IYsFqtMd6UtXF3ddjgA=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "0c88e1f2bdb93d5999019e99cb0e61e1fe2af4c5", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-25.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..d25762f --- /dev/null +++ b/flake.nix @@ -0,0 +1,38 @@ +{ + description = "Alex's NotFiles"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11"; + + home-manager = { + url = "github:nix-community/home-manager/release-25.11"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { self, nixpkgs, home-manager, ... }@inputs: + let + system = "x86_64-linux"; + in { + nixosConfigurations = { + + # To add a new machine, duplicate this block and change the name + whitegrizzly = nixpkgs.lib.nixosSystem { + inherit system; + specialArgs = { inherit inputs; }; + modules = [ + ./hosts/whitegrizzly + home-manager.nixosModules.home-manager + { + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + users.alex = import ./home/alex; + extraSpecialArgs = { inherit inputs; }; + }; + } + ]; + }; + }; + }; +} diff --git a/home/alex/default.nix b/home/alex/default.nix new file mode 100644 index 0000000..ec998ea --- /dev/null +++ b/home/alex/default.nix @@ -0,0 +1,26 @@ +{ pkgs, ... }: { + home.username = "alex"; + home.homeDirectory = "/home/alex"; + home.stateVersion = "25.11"; + home.sessionPath = [ "$HOME/.local/bin" ]; + + imports = [ + ./zsh.nix + ./ghostty.nix + ./helix.nix + ./starship.nix + ./git.nix + ./gh.nix + ./dropbox.nix + ]; + + home.packages = with pkgs; [ + atool + httpie + pixi + just + spotify + brave + git-lfs + ]; +} diff --git a/home/alex/dropbox.nix b/home/alex/dropbox.nix new file mode 100644 index 0000000..fee7613 --- /dev/null +++ b/home/alex/dropbox.nix @@ -0,0 +1,18 @@ +{ pkgs, ... }: + +{ + home.packages = [ pkgs.dropbox ]; + + systemd.user.services.dropbox = { + Unit = { + Description = "Dropbox service"; + }; + Install = { + WantedBy = [ "default.target" ]; + }; + Service = { + ExecStart = "${pkgs.dropbox}/bin/dropbox"; + Restart = "on-failure"; + }; + }; +} diff --git a/home/alex/gh.nix b/home/alex/gh.nix new file mode 100644 index 0000000..003b889 --- /dev/null +++ b/home/alex/gh.nix @@ -0,0 +1,32 @@ +{ ... }: + +{ + programs.gh = { + enable = true; + settings = { + version = 1; + git_protocol = "ssh"; + editor = "hx"; + prompt = "enabled"; + prefer_editor_prompt = "disabled"; + browser = ""; + pager = ""; + aliases = { + co = "pr checkout"; + }; + http_unix_socket = ""; + color_labels = "disabled"; + accessible_colors = "disabled"; + accessible_prompter = "disabled"; + spinner = "enabled"; + }; + }; + + xdg.configFile."gh/hosts.yml".text = '' + github.com: + git_protocol: ssh + users: + aalexmmaldonado: + user: aalexmmaldonado + ''; +} diff --git a/home/alex/ghostty.nix b/home/alex/ghostty.nix new file mode 100644 index 0000000..bde6b55 --- /dev/null +++ b/home/alex/ghostty.nix @@ -0,0 +1,101 @@ +{ pkgs, lib, ... }: + +{ + programs.ghostty = { + enable = true; + + settings = { + # Font Settings + "font-family" = "Roboto Mono"; + "font-size" = 10; + "font-synthetic-style" = "bold,italic,bold-italic"; + + # Theme & Colors (OneDark) + "background" = "#282c34"; + "foreground" = "#ffffff"; + "cursor-style" = "block"; + "palette" = [ + "0=#1d1f21" "1=#cc6666" "2=#b5bd68" "3=#f0c674" "4=#81a2be" + "5=#b294bb" "6=#8abeb7" "7=#c5c8c6" "8=#666666" "9=#d54e53" + "10=#b9ca4a" "11=#e7c547" "12=#7aa6da" "13=#c397d8" "14=#70c0b1" + "15=#eaeaea" "16=#000000" "17=#00005f" "18=#000087" "19=#0000af" + "20=#0000d7" "21=#0000ff" "22=#005f00" "23=#005f5f" "24=#005f87" + "25=#005faf" "26=#005fd7" "27=#005fff" "28=#008700" "29=#00875f" + "30=#008787" "31=#0087af" "32=#0087d7" "33=#0087ff" "34=#00af00" + "35=#00af5f" "36=#00af87" "37=#00afaf" "38=#00afd7" "39=#00afff" + "40=#00d700" "41=#00d75f" "42=#00d787" "43=#00d7af" "44=#00d7d7" + "45=#00d7ff" "46=#00ff00" "47=#00ff5f" "48=#00ff87" "49=#00ffaf" + "50=#00ffd7" "51=#00ffff" "52=#5f0000" "53=#5f005f" "54=#5f0087" + "55=#5f00af" "56=#5f00d7" "57=#5f00ff" "58=#5f5f00" "59=#5f5f5f" + "60=#5f5f87" "61=#5f5faf" "62=#5f5fd7" "63=#5f5fff" "64=#5f8700" + "65=#5f875f" "66=#5f8787" "67=#5f87af" "68=#5f87d7" "69=#5f87ff" + "70=#5faf00" "71=#5faf5f" "72=#5faf87" "73=#5fafaf" "74=#5fafd7" + "75=#5fafff" "76=#5fd700" "77=#5fd75f" "78=#5fd787" "79=#5fd7af" + "80=#5fd7d7" "81=#5fd7ff" "82=#5fff00" "83=#5fff5f" "84=#5fff87" + "85=#5fffaf" "86=#5fffd7" "87=#5fffff" "88=#870000" "89=#87005f" + "90=#870087" "91=#8700af" "92=#8700d7" "93=#8700ff" "94=#875f00" + "95=#875f5f" "96=#875f87" "97=#875faf" "98=#875fd7" "99=#875fff" + "100=#878700" "101=#87875f" "102=#878787" "103=#8787af" "104=#8787d7" + "105=#8787ff" "106=#87af00" "107=#87af5f" "108=#87af87" "109=#87afaf" + "110=#87afd7" "111=#87afff" "112=#87d700" "113=#87d75f" "114=#87d787" + "115=#87d7af" "116=#87d7d7" "117=#87d7ff" "118=#87ff00" "119=#87ff5f" + "120=#87ff87" "121=#87ffaf" "122=#87ffd7" "123=#87ffff" "124=#af0000" + "125=#af005f" "126=#af0087" "127=#af00af" "128=#af00d7" "129=#af00ff" + "130=#af5f00" "131=#af5f5f" "132=#af5f87" "133=#af5faf" "134=#af5fd7" + "135=#af5fff" "136=#af8700" "137=#af875f" "138=#af8787" "139=#af87af" + "140=#af87d7" "141=#af87ff" "142=#afaf00" "143=#afaf5f" "144=#afaf87" + "145=#afafaf" "146=#afafd7" "147=#afafff" "148=#afd700" "149=#afd75f" + "150=#afd787" "151=#afd7af" "152=#afd7d7" "153=#afd7ff" "154=#afff00" + "155=#afff5f" "156=#afff87" "157=#afffaf" "158=#afffd7" "159=#afffff" + "160=#d70000" "161=#d7005f" "162=#d70087" "163=#d700af" "164=#d700d7" + "165=#d700ff" "166=#d75f00" "167=#d75f5f" "168=#d75f87" "169=#d75faf" + "170=#d75fd7" "171=#d75fff" "172=#d78700" "173=#d7875f" "174=#d78787" + "175=#d787af" "176=#d787d7" "177=#d787ff" "178=#d7af00" "179=#d7af5f" + "180=#d7af87" "181=#d7afaf" "182=#d7afd7" "183=#d7afff" "184=#d7d700" + "185=#d7d75f" "186=#d7d787" "187=#d7d7af" "188=#d7d7d7" "189=#d7d7ff" + "190=#d7ff00" "191=#d7ff5f" "192=#d7ff87" "193=#d7ffaf" "194=#d7ffd7" + "195=#d7ffff" "196=#ff0000" "197=#ff005f" "198=#ff0087" "199=#ff00af" + "200=#ff00d7" "201=#ff00ff" "202=#ff5f00" "203=#ff5f5f" "204=#ff5f87" + "205=#ff5faf" "206=#ff5fd7" "207=#ff5fff" "208=#ff8700" "209=#ff875f" + "210=#ff8787" "211=#ff87af" "212=#ff87d7" "213=#ff87ff" "214=#ffaf00" + "215=#ffaf5f" "216=#ffaf87" "217=#ffafaf" "218=#ffafd7" "219=#ffafff" + "220=#ffd700" "221=#ffd75f" "222=#ffd787" "223=#ffd7af" "224=#ffd7d7" + "225=#ffd7ff" "226=#ffff00" "227=#ffff5f" "228=#ffff87" "229=#ffffaf" + "230=#ffffd7" "231=#ffffff" "232=#080808" "233=#121212" "234=#1c1c1c" + "235=#262626" "236=#303030" "237=#3a3a3a" "238=#444444" "239=#4e4e4e" + "240=#585858" "241=#626262" "242=#6c6c6c" "243=#767676" "244=#808080" + "245=#8a8a8a" "246=#949494" "247=#9e9e9e" "248=#a8a8a8" "249=#b2b2b2" + "250=#bcbcbc" "251=#c6c6c6" "252=#d0d0d0" "253=#dadada" "254=#e4e4e4" + "255=#eeeeee" + ]; + + # Window Settings + "window-padding-x" = 2; + "window-padding-y" = 2; + "window-inherit-working-directory" = true; + "window-inherit-font-size" = true; + "copy-on-select" = true; + "confirm-close-surface" = true; + + # Keybindings (Tabs & Splits) + "keybind" = [ + "ctrl+t=new_tab" + "ctrl+shift+w=close_tab" + "ctrl+tab=next_tab" + "ctrl+shift+o=new_split:right" + "ctrl+shift+e=new_split:down" + "ctrl+comma=open_config" + "ctrl+shift+comma=reload_config" + "ctrl+equal=increase_font_size:1" + "ctrl+minus=decrease_font_size:1" + "ctrl+zero=reset_font_size" + ]; + } + // lib.optionalAttrs pkgs.stdenv.isDarwin { + # macOS Specifics + "macos-titlebar-style" = "transparent"; + "macos-icon" = "official"; + "keybind" = [ "super+d=unbind" ]; # Fix Linux conflict on Mac + }; + }; +} diff --git a/home/alex/git.nix b/home/alex/git.nix new file mode 100644 index 0000000..c706da5 --- /dev/null +++ b/home/alex/git.nix @@ -0,0 +1,17 @@ +{ ... }: + +{ + programs.git = { + enable = true; + settings = { + user.name = "Alex Maldonado"; + user.email = "aalexmmaldonado@gmail.com"; + init.defaultBranch = "main"; + core.editor = "hx"; + pull.rebase = true; + + }; + lfs.enable = true; + }; +} + diff --git a/home/alex/helix.nix b/home/alex/helix.nix new file mode 100644 index 0000000..f27f447 --- /dev/null +++ b/home/alex/helix.nix @@ -0,0 +1,131 @@ +{ pkgs, lib, ... }: + +let + macKeys = { + "Cmd-b" = "page_up"; + "Cmd-f" = "page_down"; + "Cmd-u" = "page_cursor_half_up"; + "Cmd-d" = "page_cursor_half_down"; + "Cmd-j" = "insert_newline"; + "Cmd-h" = "delete_char_backward"; + "Cmd-w" = "delete_word_backward"; + "Cmd-x" = "completion"; + "Cmd-c" = "toggle_comments"; + "Cmd-i" = "jump_forward"; + "Cmd-o" = "jump_backward"; + "Cmd-s" = "save_selection"; + "Cmd-r" = "insert_register"; + "Cmd-z" = "suspend"; + "Cmd-a" = "increment"; + }; +in +{ + programs.helix = { + enable = true; + defaultEditor = true; + + settings = { + theme = "onedark"; + + editor = { + scrolloff = 10; + mouse = true; + middle-click-paste = true; + scroll-lines = 3; + line-number = "absolute"; + cursorline = false; + cursorcolumn = false; + continue-comments = true; + auto-completion = true; + path-completion = true; + auto-format = true; + preview-completion-insert = true; + completion-trigger-len = 2; + auto-info = true; + true-color = true; + bufferline = "multiple"; + rulers = [ 88 ]; + color-modes = false; + text-width = 88; + default-line-ending = "lf"; + insert-final-newline = true; + auto-pairs = false; + + lsp = { + enable = true; + display-messages = true; + auto-signature-help = true; + display-inlay-hints = true; + display-signature-help-docs = true; + snippets = true; + goto-reference-include-declaration = true; + }; + + cursor-shape = { + normal = "block"; + insert = "bar"; + select = "block"; + }; + + file-picker = { + hidden = false; + follow-symlinks = true; + ignore = true; + git-ignore = false; + }; + + auto-save = { + focus-lost = false; + after-delay.enable = false; + }; + + search = { + smart-case = true; + wrap-around = true; + }; + + whitespace.render = { + space = "none"; + tab = "all"; + nbsp = "none"; + nnbsp = "none"; + newline = "none"; + }; + + whitespace.characters = { + tab = "→"; + }; + + indent-guides = { + render = true; + character = "⎪"; + skip-levels = 1; + }; + + soft-wrap = { + enable = true; + max-wrap = 25; + }; + + inline-diagnostics = { + cursor-line = "info"; + }; + }; + + keys.normal = { + "C-g" = [ ":new" ":insert-output lazygit" ":buffer-close!" ":redraw" ]; + "d" = "delete_selection_noyank"; + "A-d" = "delete_selection"; + } // lib.optionalAttrs pkgs.stdenv.isDarwin macKeys; + + keys.select = { + } // lib.optionalAttrs pkgs.stdenv.isDarwin macKeys; + }; + + extraPackages = with pkgs; [ + marksman + nil + ]; + }; +} + diff --git a/home/alex/starship.nix b/home/alex/starship.nix new file mode 100644 index 0000000..b8d6fab --- /dev/null +++ b/home/alex/starship.nix @@ -0,0 +1,8 @@ +{ lib, ... }: + +{ + programs.starship = { + enable = true; + enableZshIntegration = true; + }; +} diff --git a/home/alex/zsh.nix b/home/alex/zsh.nix new file mode 100644 index 0000000..fffb715 --- /dev/null +++ b/home/alex/zsh.nix @@ -0,0 +1,45 @@ +{ ... }: + +{ + programs.zsh = { + enable = true; + enableCompletion = true; + autosuggestion.enable = true; + syntaxHighlighting.enable = true; + + shellAliases = { + ll = "ls -alF"; + la = "ls -A"; + l = "ls -CF"; + tp = "tree -I '__init__*' -I '__pycache__'"; + }; + + sessionVariables = { + LANG = "en_US.UTF-8"; + RUST_BACKTRACE = "1"; + TYPST_FONT_PATHS = "$HOME/.fonts"; + }; + + oh-my-zsh = { + enable = true; + theme = ""; + plugins = [ + "git" + "gh" + "git-auto-fetch" + "rust" + "ssh" + ]; + }; + + initContent = '' + # Conditional Editor logic + if [[ -n $SSH_CONNECTION ]]; then + export EDITOR='nano' + else + export EDITOR='hx' + export GIT_EDITOR='hx' + fi + ''; + }; +} diff --git a/hosts/whitegrizzly/default.nix b/hosts/whitegrizzly/default.nix new file mode 100644 index 0000000..b7e9126 --- /dev/null +++ b/hosts/whitegrizzly/default.nix @@ -0,0 +1,32 @@ +{ pkgs, ... }: { + imports = [ + ./hardware.nix + ../../modules/core.nix + ../../modules/plasma.nix + ../../modules/security.nix + ]; + + networking.hostName = "whitegrizzly"; + + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + boot.kernelPackages = pkgs.linuxPackages_latest; + + networking.networkmanager.enable = true; + + programs.zsh.enable = true; + + users.users.alex = { + isNormalUser = true; + shell = pkgs.zsh; + extraGroups = [ "wheel" "networkmanager" ]; + }; + + programs._1password.enable = true; + programs._1password-gui = { + enable = true; + polkitPolicyOwners = [ "alex" ]; + }; + + system.stateVersion = "25.11"; +} diff --git a/hosts/whitegrizzly/hardware.nix b/hosts/whitegrizzly/hardware.nix new file mode 100644 index 0000000..fd01d4e --- /dev/null +++ b/hosts/whitegrizzly/hardware.nix @@ -0,0 +1,33 @@ +# 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 = [ "xhci_pci" "thunderbolt" "nvme" "rtsx_pci_sdmmc" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/29245dae-0f7b-4249-8d53-c305034156fa"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/3429-BC80"; + fsType = "vfat"; + options = [ "fmask=0077" "dmask=0077" ]; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/e1adeb6e-feae-4627-a879-4667fd5e689e"; } + ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/justfile b/justfile new file mode 100644 index 0000000..fa183a8 --- /dev/null +++ b/justfile @@ -0,0 +1,12 @@ +host := `hostname` + +rebuild: + sudo nixos-rebuild switch --flake .#{{host}} + +update: + sudo nix flake update + +gc: + sudo nix-env --delete-generations +3 + sudo nix-store --gc + diff --git a/modules/core.nix b/modules/core.nix new file mode 100644 index 0000000..7161c70 --- /dev/null +++ b/modules/core.nix @@ -0,0 +1,15 @@ +{ pkgs, ... }: { + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + nixpkgs.config.allowUnfree = true; + + time.timeZone = "America/New_York"; + i18n.defaultLocale = "en_US.UTF-8"; + + # Common packages for every machine + environment.systemPackages = with pkgs; [ + wget + curl + git + tree + ]; +} diff --git a/modules/plasma.nix b/modules/plasma.nix new file mode 100644 index 0000000..8051486 --- /dev/null +++ b/modules/plasma.nix @@ -0,0 +1,8 @@ +{ ... }: { + services.xserver.enable = true; + services.displayManager.sddm = { + enable = true; + wayland.enable = true; + }; + services.desktopManager.plasma6.enable = true; +} diff --git a/modules/security.nix b/modules/security.nix new file mode 100644 index 0000000..9fbd31a --- /dev/null +++ b/modules/security.nix @@ -0,0 +1,7 @@ +{ ... }: { + programs._1password.enable = true; + programs._1password-gui = { + enable = true; + polkitPolicyOwners = [ "alex" ]; + }; +}