Something went wrong. Try again.
so embarrassing nix.desertthunder.dev
nix dotfiles umbriel noctalia
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778{ nixos = { config, pkgs, inputs, ... }: { imports = [ inputs.sops-nix.nixosModules.sops ];
boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true;
networking.networkmanager.enable = true; networking.firewall.checkReversePath = false; hardware.bluetooth.enable = true; services.blueman.enable = true;
time.timeZone = "America/Chicago"; 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"; };
services.xserver.xkb = { layout = "us"; variant = ""; }; services.xserver.enable = true; services.displayManager.gdm.enable = true; services.desktopManager.gnome.enable = true;
services.pulseaudio.enable = false; security.rtkit.enable = true; services.pipewire = { enable = true; alsa.enable = true; alsa.support32Bit = true; pulse.enable = true; };
services.printing.enable = true; services.openssh.enable = true; programs.ssh.systemd-ssh-proxy.enable = false; services.tailscale = { enable = true; openFirewall = true; };
virtualisation.docker.enable = true;
services.postgresql = { enable = true; ensureDatabases = [ "owais" ]; ensureUsers = [ { name = "owais"; ensureDBOwnership = true; ensureClauses = { createdb = true; createrole = true; }; } ]; authentication = '' local all all trust host all all 127.0.0.1/32 trust host all all ::1/128 trust ''; };
services.redis.servers."".enable = true;
programs.zsh.enable = true;
users.users.owais = { isNormalUser = true; description = "Owais"; extraGroups = [ "networkmanager" "wheel" "kvm" "docker" ]; shell = pkgs.zsh; packages = with pkgs; [ ]; };
fonts = { fontconfig.enable = true; packages = with pkgs; [ nerd-fonts.jetbrains-mono nerd-fonts.commit-mono nerd-fonts.hack nerd-fonts.monaspace nerd-fonts._0xproto nerd-fonts.im-writing nerd-fonts.comic-shanns-mono nerd-fonts.martian-mono maple-mono.NF comic-mono open-sans inter noto-fonts ubuntu-classic fira-mono jetbrains-mono ]; };
programs.firefox.enable = true; programs.nix-ld = { enable = true; libraries = with pkgs; [ glibc stdenv.cc.cc.lib ]; };
nixpkgs.config.allowUnfree = true; nixpkgs.config.android_sdk.accept_license = true;
environment.systemPackages = with pkgs; [ vim git tailscale wget curl wireguard-tools proton-vpn qbittorrent mediawriter vscode neovim zsh nixfmt delta ];
system.stateVersion = "25.11"; nix.settings.experimental-features = [ "nix-command" "flakes" ];
# TODO: Combine with programs.ssh into a secrets object/module sops = { defaultSopsFile = ./secrets/owais.yaml; age.keyFile = "/var/lib/sops-nix/key.txt";
secrets = { keys_gh = { owner = "owais"; group = "users"; mode = "0600"; }; keys_codeberg = { owner = "owais"; group = "users"; mode = "0600"; }; keys_tangled = { owner = "owais"; group = "users"; mode = "0600"; }; }; }; };
home = { config, pkgs, lib, inputs, neovim-config, pkgsUnstable, ... }: let agentConfigDir = "${config.home.homeDirectory}/Projects/nixos-conf/conf/agent";
elixir-ls-bin = pkgs.runCommand "elixir-ls-bin" { } '' mkdir -p $out/bin ln -s ${pkgs.elixir-ls}/bin/* $out/bin/ '';
sshConfigText = pkgs.writeText "ssh-config" '' Host * AddKeysToAgent no
Host github.com HostName github.com User git IdentityFile /run/secrets/keys_gh IdentitiesOnly yes
Host codeberg.org HostName codeberg.org User git IdentityFile /run/secrets/keys_codeberg IdentitiesOnly yes
Host tangled.sh HostName tangled.org User git IdentityFile /run/secrets/keys_tangled IdentitiesOnly yes
Host knot.desertthunder.dev HostName knot.desertthunder.dev User git IdentityFile /run/secrets/keys_tangled IdentitiesOnly yes
Host nix-baxcalibur-knot HostName nix-baxcalibur User git IdentityFile /run/secrets/keys_tangled IdentitiesOnly yes '';
editor-tool-pkgs = with pkgs; [ bash-language-server clang-tools deno dprint elixir elixir-ls-bin eslint_d flutter gleam go gopls gotools lua lua-language-server nil nixd nixfmt nodejs_24 ocamlPackages.ocaml-lsp ocamlformat rust-analyzer rustfmt shellcheck shfmt stylua typescript typescript-language-server zig zls ];
# TODO: consider removing some of these # some of these could be dev-tool-pkgs (hurl, jq, just, etc.) cli-tool-pkgs = with pkgs; [ bat pkgsUnstable.claude-code codex dust fastfetch fd file fzf gnupg hurl jq just nix-output-monitor oh-my-zsh pkgsUnstable.opencode pkgsUnstable.pi-coding-agent ripgrep starship tree which wl-clipboard xclip yq-go ];
archive-pkgs = with pkgs; [ gnused gnutar gawk p7zip unzip xz zip zstd ];
tui-pkgs = with pkgs; [ asciinema btop charm-freeze glow gum vhs zellij ];
dev-tool-pkgs = with pkgs; [ android-tools android-studio bun cargo ctop dive clippy dotnet-sdk_9 dune_3 gmp go-task harlequin libev jdk17 lazydocker lldb markdownlint-cli markdownlint-cli2 mdbook ocaml ocamlPackages.utop opam openssl pkg-config pnpm rustc stdenv.cc gnumake tree-sitter typst uv wasm-pack (python313.withPackages ( ps: with ps; [ pip ipython requests ] )) ];
sys-tool-pkgs = with pkgs; [ ethtool iftop iotop lm_sensors lsof ltrace pciutils strace sysstat usbutils ];
media-pkgs = with pkgs; [ cava ffmpeg whisper-cpp yt-dlp ];
gui-pkgs = with pkgs; [ blueman gnome-extension-manager gnome-tweaks google-chrome inputs.zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.default kora-icon-theme nautilus networkmanagerapplet obsidian pavucontrol spotify trayscale zathura zathuraPkgs.zathura_pdf_poppler mpv ];
text-editors = { programs.neovim = { enable = true; viAlias = true; vimAlias = true; defaultEditor = true; withPython3 = true; withRuby = true; }; home.file.".config/nvim" = { source = neovim-config; recursive = true; };
/* Home Manager's Zed module reference: https://github.com/nix-community/home-manager/blob/master/modules/programs/zed-editor.nix */ programs.zed-editor = { enable = true; package = pkgsUnstable.zed-editor; extensions = [ "basher" "dart" "deno" "elixir" "flutter-snippets" "gleam" "lua" "nix" "ocaml" "oxocarbon" "zig" ]; extraPackages = editor-tool-pkgs; userSettings = { theme = "Carbonfox - opaque"; vim_mode = true; ui_font_family = ".ZedSans"; ui_font_size = 18.0; buffer_font_family = "CommitMono Nerd Font"; buffer_font_fallbacks = [ "0xProto Nerd Font Propo" ]; buffer_font_size = 18; terminal = { font_family = "0xProto Nerd Font Propo"; font_size = 17; }; project_panel = { git_status_indicator = true; bold_folder_labels = false; button = true; }; tab_size = 2; hard_tabs = false; format_on_save = "on"; telemetry = { diagnostics = false; metrics = false; }; # TODO: do I need this? lsp.deno.settings.deno = { enable = true; lint = true; }; toolbar = { breadcrumbs = false; quick_actions = false; }; tab_bar = { show = true; show_nav_history_buttons = false; }; }; }; }; in { imports = [ text-editors inputs.catppuccin.homeModules.catppuccin ];
home.username = "owais"; home.homeDirectory = "/home/owais"; home.pointerCursor = { name = "Adwaita"; package = pkgs.adwaita-icon-theme; size = 24; gtk.enable = true; x11.enable = true; }; xresources.properties = { "Xcursor.theme" = "Adwaita"; "Xcursor.size" = 24; "Xft.dpi" = 172; };
/** GNOME Settings */ dconf.settings = { "org/gnome/desktop/lockdown" = { disable-log-out = false; };
"org/gnome/desktop/interface" = { icon-theme = "kora"; };
"org/gnome/shell" = { always-show-log-out = true; };
"org/gnome/settings-daemon/plugins/media-keys" = { custom-keybindings = [ "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/ghostty/" "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/ghostty-zellij/" ]; };
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/ghostty" = { name = "Ghostty"; command = "ghostty"; binding = "<Control><Alt>t"; };
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/ghostty-zellij" = { name = "Ghostty (zellij)"; command = "ghostty -e zellij"; binding = "<Super>z"; }; };
home.packages = editor-tool-pkgs ++ cli-tool-pkgs ++ archive-pkgs ++ tui-pkgs ++ dev-tool-pkgs ++ sys-tool-pkgs ++ media-pkgs ++ gui-pkgs;
home.activation = { enableObsidianCli = lib.hm.dag.entryAfter [ "writeBoundary" ] '' config_dir="$HOME/.config/obsidian" config_file="$config_dir/obsidian.json" install -d -m 0700 "$config_dir"
if [[ -f "$config_file" ]]; then ${pkgs.jq}/bin/jq '.cli = true' "$config_file" > "$config_file.tmp" else ${pkgs.jq}/bin/jq -n '{ cli: true }' > "$config_file.tmp" fi
mv "$config_file.tmp" "$config_file" chmod 0600 "$config_file" '';
installSshConfig = lib.hm.dag.entryAfter [ "writeBoundary" ] '' install -d -m 0700 "$HOME/.ssh" rm -f "$HOME/.ssh/config" install -m 0600 ${sshConfigText} "$HOME/.ssh/config" ''; };
programs.bat = { enable = true; config = { style = "numbers,changes"; paging = "auto"; wrap = "never"; pager = "less -FR"; }; };
# TODO: dev tooling mod programs.direnv = { enable = true; enableZshIntegration = true; nix-direnv.enable = true; };
programs.tmux = { enable = true; baseIndex = 1; clock24 = true; customPaneNavigationAndResize = true; escapeTime = 0; focusEvents = true; historyLimit = 100000; keyMode = "vi"; mouse = true; resizeAmount = 5; secureSocket = false; terminal = "tmux-256color";
extraConfig = '' set -as terminal-features ',xterm*:RGB' set -g renumber-windows on set -g set-clipboard off set -s copy-command '${pkgs.wl-clipboard}/bin/wl-copy'
bind c new-window -c '#{pane_current_path}' bind | split-window -h -c '#{pane_current_path}' bind - split-window -v -c '#{pane_current_path}'
bind -T copy-mode-vi v send -X begin-selection bind -T copy-mode-vi V send -X select-line bind -T copy-mode-vi C-v send -X rectangle-toggle bind -T copy-mode-vi y send -X copy-pipe-and-cancel bind -T copy-mode-vi Enter send -X copy-pipe-and-cancel
set -g status-position bottom set -g status-style 'bg=#151516,fg=#cfcfcf' set -g status-left-length 30 set -g status-left '#[bg=#51a4e7,fg=#151516,bold] #S #[bg=#151516] ' set -g status-right '#[fg=#7a7a7a] %Y-%m-%d #[fg=#cfcfcf] %H:%M ' set -g window-status-separator "" set -g window-status-format '#[bg=#151516,fg=#7a7a7a] #I:#W ' set -g window-status-current-format '#[bg=#51a4e7,fg=#151516,bold] #I:#W '
set -g pane-border-style 'fg=#2a2a2a' set -g pane-active-border-style 'fg=#51a4e7' set -g message-style 'bg=#181818,fg=#cfcfcf' set -g message-command-style 'bg=#181818,fg=#51a4e7' set -g mode-style 'bg=#51a4e7,fg=#151516,bold' ''; };
catppuccin = { enable = true; autoEnable = false; flavor = "mocha"; bat.enable = true; starship.enable = false; };
programs.zsh = { enable = true; enableCompletion = true; autosuggestion.enable = true; syntaxHighlighting.enable = true; oh-my-zsh = { enable = true; plugins = [ "git" "z" ]; theme = ""; }; shellAliases = { ll = "ls -l"; rebuild = ''sudo nixos-rebuild switch --flake "$NIXOS_CONFIG#$(hostname)"''; switch = ''sudo nixos-rebuild switch --flake "$NIXOS_CONFIG#$(hostname)"''; update = ''nix flake update --flake "$NIXOS_CONFIG" && sudo nixos-rebuild switch --flake "$NIXOS_CONFIG#$(hostname)"''; nboot = ''sudo nixos-rebuild boot --flake "$NIXOS_CONFIG#$(hostname)"''; tbuild = ''sudo nixos-rebuild test --flake "$NIXOS_CONFIG#$(hostname)"'';
cat = "bat --paging=never --style=plain"; less = "bat"; preview = "bat --style=numbers,changes --color=always"; # TODO: change the mon based on machine pfetch = "pokeget haxorus -s --hide-name | fastfetch --file-raw -";
zed = "zeditor"; zedn = "zeditor --new"; }; initContent = '' export NIXOS_CONFIG=''${NIXOS_CONFIG:-$HOME/Projects/nixos-conf} PATH=$HOME/.local/bin:$PATH PATH="$HOME/.cargo/bin:$PATH" export PATH="$HOME/go/bin:$PATH" eval "$(starship init zsh)" ''; };
programs.git = { enable = true; settings.user.name = "Owais Jamil"; settings.user.email = "desertthunder.dev@gmail.com"; ignores = [ ".DS_Store" "Thumbs.db" "*~" "*.swp" "*.swo" ".env" ".env.*" "!.env.example" ".direnv/" ".devenv/" "result" "result-*" ".sandbox/" "AGENTS.md" "CLAUDE.md" "**/.claude/settings.local.json" ]; };
home.file.".config/zellij" = { source = ./modules/zellij; recursive = true; };
xdg.configFile."starship.toml".source = ./modules/starship.toml; xdg.configFile."zathura/zathurarc".source = ./modules/zathura/zathurarc; xdg.configFile."fastfetch" = { source = ./modules/fastfetch; recursive = true; };
home.file.".codex/AGENTS.md" = { source = config.lib.file.mkOutOfStoreSymlink "${agentConfigDir}/AGENTS.md"; force = true; };
home.file.".agents/skills" = { source = config.lib.file.mkOutOfStoreSymlink "${agentConfigDir}/skills"; force = true; };
home.file.".pi/agent/AGENTS.md" = { source = config.lib.file.mkOutOfStoreSymlink "${agentConfigDir}/AGENTS.md"; force = true; };
home.file.".config/ripgrep/config".text = '' --line-number --smart-case --max-columns=120 --max-columns-preview --type-add=nix:*.nix --glob=!.git/* --glob=!**/node_modules/** --glob=!**/target/** --glob=!**/.build/** '';
programs.ghostty = { enable = true; enableZshIntegration = true; installBatSyntax = true; installVimSyntax = true; settings = { font-family = "0xProto Nerd Font"; font-style = "Medium"; font-size = 16; window-padding-x = 8; window-padding-y = 8; background = "1b1b1b"; foreground = "ffffff"; cursor-color = "78a9ff"; cursor-text = "161616"; palette = [ "0=#161616" "1=#ee5396" "2=#42be65" "3=#ff7eb6" "4=#33b1ff" "5=#be95ff" "6=#3ddbd9" "7=#ffffff" "8=#525252" "9=#ee5396" "10=#42be65" "11=#ff7eb6" "12=#33b1ff" "13=#be95ff" "14=#3ddbd9" "15=#ffffff" ]; command = "/run/current-system/sw/bin/zsh --login"; shell-integration = "zsh"; mouse-hide-while-typing = true; copy-on-select = false; confirm-close-surface = false; }; };
home.stateVersion = "25.11"; };}