commit 7836090a08614487a61bd0ca3d17a643cf2c3c17 Author: javif89 Date: Fri Aug 8 18:12:44 2025 -0400 Doing it myself diff --git a/configuration.nix b/configuration.nix new file mode 100755 index 0000000..494bd2d --- /dev/null +++ b/configuration.nix @@ -0,0 +1,105 @@ +# 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, + inputs, + ... +}: { + imports = [ + # Include the results of the hardware scan. + ./hardware-configuration.nix + ./system/gnome.nix + inputs.home-manager.nixosModules.default + ]; + + # Bootloader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + networking.hostName = "nixos"; # 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"; + + # Enable networking + networking.networkmanager.enable = true; + + # Set your time zone. + time.timeZone = "America/New_York"; + + # 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 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.javi = { + isNormalUser = true; + description = "javi"; + extraGroups = ["networkmanager" "wheel"]; + packages = with pkgs; [ + # thunderbird + ]; + }; + + # Install firefox. + programs.firefox.enable = true; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + brave + neovim + git + ]; + + system.stateVersion = "25.05"; # Did you read the comment? + + nix.settings.experimental-features = ["nix-command" "flakes"]; + + home-manager = { + extraSpecialArgs = {inherit inputs;}; + users = { + "javi" = import ./home.nix; + }; + }; +} diff --git a/flake.lock b/flake.lock new file mode 100755 index 0000000..ed8bb87 --- /dev/null +++ b/flake.lock @@ -0,0 +1,48 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1754613544, + "narHash": "sha256-ueR1mGX4I4DWfDRRxxMphbKDNisDeMPMusN72VV1+cc=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "cc2fa2331aebf9661d22bb507d362b39852ac73f", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1754498491, + "narHash": "sha256-erbiH2agUTD0Z30xcVSFcDHzkRvkRXOQ3lb887bcVrs=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "c2ae88e026f9525daf89587f3cbee584b92b6134", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "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 100755 index 0000000..06d3862 --- /dev/null +++ b/flake.nix @@ -0,0 +1,28 @@ +{ + description = "Javi's computer configuration"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { + self, + nixpkgs, + ... + } @ inputs: let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + in { + nixosConfigurations.default = nixpkgs.lib.nixosSystem { + specialArgs = {inherit inputs;}; + modules = [ + inputs.home-manager.nixosModules.default + ./configuration.nix + ]; + }; + }; +} diff --git a/hardware-configuration.nix b/hardware-configuration.nix new file mode 100755 index 0000000..9f08042 --- /dev/null +++ b/hardware-configuration.nix @@ -0,0 +1,43 @@ +# 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" "nvme" "usb_storage" "sd_mod"]; + boot.initrd.kernelModules = []; + boot.kernelModules = ["kvm-intel"]; + boot.extraModulePackages = []; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/0c063318-1531-475e-b3bc-00bdd225dd45"; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/029C-659E"; + 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.enp0s31f6.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp0s20f3.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/home.nix b/home.nix new file mode 100755 index 0000000..277fac0 --- /dev/null +++ b/home.nix @@ -0,0 +1,100 @@ +{ + config, + pkgs, + ... +}: { + imports = [ + ./home/kitty.nix + ./home/shell.nix + ./home/starship.nix + ./home/gnome.nix + ./home/git.nix + ]; + nixpkgs.config.allowUnfree = true; + # Home Manager needs a bit of information about you and the paths it should + # manage. + home.username = "javi"; + home.homeDirectory = "/home/javi"; + + # 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 = "25.05"; # Please read the comment before changing. + + # The home.packages option allows you to install Nix packages into your + # environment. + home.packages = with pkgs; [ + # Basics + kitty + starship + + # Terminal tools + yazi + ripgrep + fzf + bat + eza + + # Dev tools + jetbrains.datagrip + vscode + neovim + alejandra # Nix formatting + + # System tools + btop + fastfetch + + # Util + xclip + flameshot + + # Media + mpc + + # Apps + discord + ]; + + # 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 + # ''; + }; + + # 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/javi/etc/profile.d/hm-session-vars.sh + # + home.sessionVariables = { + # EDITOR = "emacs"; + }; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; +} diff --git a/home/development.nix b/home/development.nix new file mode 100755 index 0000000..ce81eea --- /dev/null +++ b/home/development.nix @@ -0,0 +1,109 @@ +{ + config, + pkgs, + ... +}: { + # Development-specific configurations and tools + + # Node.js development + home.packages = with pkgs; [ + # Node.js tools (system-wide installation handled in NixOS config) + nodePackages.npm + nodePackages.bun + + # PHP development tools + phpPackages.composer + + # JSON/YAML tools + jq + yq + ]; + + # Development environment variables + home.sessionVariables = { + # Node.js + NODE_ENV = "development"; + NPM_CONFIG_PREFIX = "${config.home.homeDirectory}/.npm-global"; + + # PHP + COMPOSER_HOME = "${config.home.homeDirectory}/.composer"; + + # Go + GOPATH = "${config.home.homeDirectory}/go"; + GOBIN = "${config.home.homeDirectory}/go/bin"; + + # Laravel Valet (when using it with Nix) + PATH = "$PATH:${config.home.homeDirectory}/.composer/vendor/bin"; + }; + + # Create development directories + home.file.".keep-dirs" = { + text = ""; + onChange = '' + mkdir -p ${config.home.homeDirectory}/projects + mkdir -p ${config.home.homeDirectory}/go/{bin,pkg,src} + mkdir -p ${config.home.homeDirectory}/.composer + mkdir -p ${config.home.homeDirectory}/.npm-global + ''; + }; + + # Yazi file manager configuration (replaces your yazi.sh script) + programs.yazi = { + enable = true; + enableBashIntegration = true; + + settings = { + manager = { + show_hidden = true; + sort_by = "modified"; + sort_reverse = true; + linemode = "permissions"; + }; + + preview = { + max_width = 600; + max_height = 900; + }; + + opener = { + edit = [ + { + run = "code \"$@\""; + block = true; + } + ]; + open = [ + { + run = "xdg-open \"$@\""; + desc = "Open"; + } + ]; + }; + }; + + keymap = { + manager.prepend_keymap = [ + { + on = [""]; + run = "escape"; + desc = "Exit visual mode, clear selected, or cancel search"; + } + { + on = ["q"]; + run = "quit"; + desc = "Exit the process"; + } + { + on = ["Q"]; + run = "quit --no-cwd-file"; + desc = "Exit the process without writing cwd-file"; + } + { + on = [""]; + run = "close"; + desc = "Close the current tab, or quit if it is last tab"; + } + ]; + }; + }; +} diff --git a/home/git.nix b/home/git.nix new file mode 100755 index 0000000..9f7354f --- /dev/null +++ b/home/git.nix @@ -0,0 +1,53 @@ +{ + config, + pkgs, + ... +}: { + home.packages = [ + pkgs.git + ]; + + # Git configuration + programs.git = { + enable = true; + + # User information (from your init.sh) + userName = "javif89"; + userEmail = "javier0eduardo@hotmail.com"; + + # Git settings + extraConfig = { + init = { + defaultBranch = "main"; + }; + + core = { + editor = "code --wait"; + autocrlf = "input"; + ignorecase = false; + }; + + pull = { + rebase = true; + }; + + push = { + default = "simple"; + autoSetupRemote = true; + }; + + merge = { + tool = "code"; + }; + + diff = { + tool = "code"; + }; + + # Better diff output + color = { + ui = true; + }; + }; + }; +} diff --git a/home/gnome.nix b/home/gnome.nix new file mode 100755 index 0000000..db7e7ad --- /dev/null +++ b/home/gnome.nix @@ -0,0 +1,83 @@ +{ + config, + pkgs, + lib, + ... +}: { + imports = [ + ./gnome/keybinds.nix + ]; + + home.packages = with pkgs; [ + gnomeExtensions.blur-my-shell + gnomeExtensions.dash-to-dock + gnomeExtensions.space-bar + gnomeExtensions.just-perfection + ]; + + dconf.enable = true; + + # All the gnome configuration is under this + dconf.settings = { + # Interface settings + "org/gnome/desktop/interface" = { + color-scheme = "prefer-dark"; + gtk-theme = "Adwaita-dark"; + icon-theme = "Adwaita"; + cursor-theme = "Adwaita"; + font-name = "Cantarell 11"; + document-font-name = "Cantarell 11"; + monospace-font-name = "FiraCode Nerd Font 10"; + show-battery-percentage = true; + clock-show-weekday = true; + clock-show-date = true; + clock-show-seconds = false; + clock-format = "12h"; + }; + + # Nautilus (file manager) preferences + "org/gnome/nautilus/preferences" = { + default-folder-viewer = "list-view"; + search-filter-time-type = "last_modified"; + show-hidden-files = true; + }; + + # GNOME Shell extensions + "org/gnome/shell" = { + enabled-extensions = [ + "blur-my-shell@aunetx" + "space-bar@luchrioh" + "just-perfection-desktop@just-perfection" + ]; + disabled-extensions = [ + "tiling-assistant@ubuntu.com" + "ubuntu-appindicators@ubuntu.com" + "ubuntu-dock@ubuntu.com" + "ding@rastersoft.com" + ]; + }; + + # Dash to Dock settings + "org/gnome/shell/extensions/dash-to-dock" = { + dock-position = "BOTTOM"; + dock-fixed = false; + intellihide-mode = "FOCUS_APPLICATION_WINDOWS"; + show-favorites = true; + show-running = true; + show-apps-at-top = true; + click-action = "cycle-windows"; + }; + + # Power settings + "org/gnome/settings-daemon/plugins/power" = { + sleep-inactive-ac-type = "nothing"; + sleep-inactive-battery-timeout = 1800; + }; + + # Privacy settings + "org/gnome/desktop/privacy" = { + report-technical-problems = false; + send-software-usage-stats = false; + }; + }; +} diff --git a/home/gnome/keybinds.nix b/home/gnome/keybinds.nix new file mode 100644 index 0000000..1027b72 --- /dev/null +++ b/home/gnome/keybinds.nix @@ -0,0 +1,119 @@ +{ + config, + pkgs, + lib, + ... +}: let + # Helper function to create custom keybindings + mkCustomKeybinding = index: { + name, + command, + binding, + }: { + "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${toString index}" = { + inherit name command binding; + }; + }; + + # Helper function to generate custom keybinding paths + mkCustomKeybindingPaths = count: + lib.genList (i: "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${toString i}/") count; + + # Helper function to generate workspace keybindings + mkWorkspaceKeybindings = count: + lib.genAttrs + (lib.genList (i: "switch-to-workspace-${toString (i + 1)}") count) + (name: let + num = lib.strings.removePrefix "switch-to-workspace-" name; + in ["${num}"]); + + # Helper function to disable application shortcuts + mkDisableAppShortcuts = count: + lib.genAttrs + (lib.genList (i: "switch-to-application-${toString (i + 1)}") count) + (name: []); + + # Define custom keybindings + customKeybindings = [ + { + name = "Flameshot"; + command = "flameshot gui"; + binding = "s"; + } + { + name = "New Brave window"; + command = "brave"; + binding = "o"; + } + { + name = "New Brave incognito window"; + command = "brave --incognito"; + binding = "p"; + } + { + name = "Kitty"; + command = "kitty"; + binding = "q"; + } + { + name = "File Explorer"; + command = "nautilus --new-window"; + binding = "e"; + } + { + name = "Project selector"; + command = "kitty --start-as=normal -- bash -ic 'proj'"; + binding = "p"; + } + { + name = "ChatGPT"; + command = "brave --new-window --app=https://chatgpt.com"; + binding = "Return"; + } + { + name = "BTop"; + command = "kitty --start-as=normal -- bash -ic 'btop'"; + binding = "Escape"; + } + { + name = "FastFetch"; + command = "kitty --start-as=normal -- bash -ic 'fastfetch'"; + binding = "1"; + } + ]; + + # Generate all custom keybinding settings + customKeybindingSettings = + lib.foldl lib.mergeAttrs {} + (lib.imap0 (index: keybind: mkCustomKeybinding index keybind) customKeybindings); +in { + # GNOME desktop configuration (equivalent to your scripts/gnome/ files) + dconf.settings = + lib.mergeAttrs { + # Window manager keybindings (from keybinds.sh) + "org/gnome/desktop/wm/keybindings" = lib.mergeAttrs { + close = ["c"]; + maximize = ["Up"]; + toggle-fullscreen = ["F11"]; + } (mkWorkspaceKeybindings 6); + + # Workspace settings + "org/gnome/mutter" = { + dynamic-workspaces = false; + }; + + "org/gnome/desktop/wm/preferences" = { + num-workspaces = 6; + resize-with-right-button = true; + }; + + # Disable Super+number for applications (to use for workspaces) + "org/gnome/shell/keybindings" = mkDisableAppShortcuts 9; + + # Custom keybindings (from your keybinds.sh) + "org/gnome/settings-daemon/plugins/media-keys" = { + custom-keybindings = mkCustomKeybindingPaths (lib.length customKeybindings); + }; + } + customKeybindingSettings; +} diff --git a/home/home.nix b/home/home.nix new file mode 100755 index 0000000..a486b57 --- /dev/null +++ b/home/home.nix @@ -0,0 +1,104 @@ +{ + config, + pkgs, + inputs, + stable, + ... +}: { + imports = [ + ./modules/shell.nix + ./modules/git.nix + ./modules/gnome.nix + ./programs/vscode.nix + ./programs/starship.nix + ./programs/development.nix + ]; + + # Home Manager version + home.stateVersion = "24.05"; + + # User info + home = { + username = "javi"; + homeDirectory = "/home/javi"; + }; + + # Let Home Manager manage itself + programs.home-manager.enable = true; + + # User packages + home.packages = with pkgs; [ + # Terminal tools + yazi # File manager (replacing your yazi.sh script) + ripgrep # Better grep + fd # Better find + bat # Better cat + delta # Better git diff + + # Development tools + jetbrains.datagrip # Database IDE (from your Ansible config) + + # System monitoring + btop + neofetch + fastfetch + + # Utilities + xclip + wl-clipboard + flameshot + + # Archive tools + unzip + zip + p7zip + + # Network tools + curl + wget + + # Media + mpc + ]; + + # XDG directories + xdg = { + enable = true; + userDirs = { + enable = true; + createDirectories = true; + desktop = "${config.home.homeDirectory}/Desktop"; + documents = "${config.home.homeDirectory}/Documents"; + download = "${config.home.homeDirectory}/Downloads"; + music = "${config.home.homeDirectory}/Music"; + pictures = "${config.home.homeDirectory}/Pictures"; + videos = "${config.home.homeDirectory}/Videos"; + templates = "${config.home.homeDirectory}/Templates"; + publicShare = "${config.home.homeDirectory}/Public"; + }; + }; + + # Environment variables + home.sessionVariables = { + EDITOR = "code"; + BROWSER = "brave"; + TERMINAL = "kitty"; + }; + + # File associations + xdg.mimeApps = { + enable = true; + defaultApplications = { + "text/html" = "brave-browser.desktop"; + "x-scheme-handler/http" = "brave-browser.desktop"; + "x-scheme-handler/https" = "brave-browser.desktop"; + "x-scheme-handler/about" = "brave-browser.desktop"; + "x-scheme-handler/unknown" = "brave-browser.desktop"; + "application/pdf" = "org.gnome.Evince.desktop"; + "text/plain" = "code.desktop"; + "application/json" = "code.desktop"; + "application/javascript" = "code.desktop"; + "text/x-php" = "code.desktop"; + }; + }; +} diff --git a/home/kitty.nix b/home/kitty.nix new file mode 100644 index 0000000..9f5ad94 --- /dev/null +++ b/home/kitty.nix @@ -0,0 +1,31 @@ +{ + config, + lib, + pkgs, + ... +}: let + kittyConfig = '' + include current-theme.conf + + font_size 16.0 + + background_opacity 0.9 + background_blur 1 + + hide_window_decorations yes + + map ctrl+shift+t new_tab_with_cwd + ''; +in { + programs.kitty = { + enable = true; + + extraConfig = kittyConfig; + + # Optional: link extra files like `current-theme.conf` + # Add this if you have a custom theme file + # settings = { + # include = "~/.config/kitty/current-theme.conf"; + # }; + }; +} diff --git a/home/shell.nix b/home/shell.nix new file mode 100755 index 0000000..54a6953 --- /dev/null +++ b/home/shell.nix @@ -0,0 +1,87 @@ +{ + config, + pkgs, + ... +}: { + # Bash configuration + programs.bash = { + enable = true; + enableCompletion = true; + + # Shell aliases (equivalent to your script functions) + shellAliases = { + sudo = "sudo "; + # Better ls with eza + ls = "eza"; + ll = "eza -la"; + la = "eza -la"; + tree = "eza --tree"; + + # Convenience + rp = "source ~/.bashrc"; + + # Nix + rb = "sudo nixos-rebuild switch --flake $HOME/nixos-config#default"; + + # Git shortcuts + gs = "git status"; + ga = "git add"; + gc = "git commit"; + gp = "git push"; + gl = "git pull"; + gco = "git checkout"; + gb = "git branch"; + gd = "git diff"; + glog = "git log --oneline --graph"; + + # Directory navigation + ".." = "cd .."; + "..." = "cd ../.."; + "...." = "cd ../../.."; + + # Development + a = "php artisan"; + + # System + grep = "rg"; + + # System monitoring + top = "btop"; + }; + + # Additional bash configuration + bashrcExtra = '' + # Custom functions + + # Project selector function (equivalent to your custom keybinding) + proj() { + if [ -d "$HOME/projects" ]; then + cd "$HOME/projects" + if command -v eza > /dev/null 2>&1; then + eza -la + else + ls -la + fi + else + echo "Projects directory not found" + fi + } + + # Make directory and cd into it + mkcd() { + mkdir -p "$1" && cd "$1" + } + + + # Better completion + bind "set completion-ignore-case on" + bind "set show-all-if-ambiguous on" + bind "set show-all-if-unmodified on" + + # Enable color support + if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" + fi + ''; + }; +} diff --git a/home/starship.nix b/home/starship.nix new file mode 100755 index 0000000..177fb2d --- /dev/null +++ b/home/starship.nix @@ -0,0 +1,178 @@ +{ + config, + pkgs, + ... +}: { + # Starship prompt configuration (equivalent to your starship-prompt.sh) + programs.starship = { + enable = true; + enableBashIntegration = true; + + # settings = { + # # Main prompt format + # format = '' + # $username$hostname$directory$git_branch$git_status$nodejs$php$go$python$docker_context$nix_shell + # $character + # ''; + # + # # Right side format + # right_format = "$cmd_duration$time"; + # + # # Character (prompt indicator) + # character = { + # success_symbol = "[❯](bold green)"; + # error_symbol = "[❯](bold red)"; + # vicmd_symbol = "[❮](bold yellow)"; + # }; + # + # # Directory + # directory = { + # style = "bold cyan"; + # truncation_length = 3; + # truncate_to_repo = false; + # format = "[$path]($style)[$lock_symbol]($lock_style) "; + # }; + # + # # Git branch + # git_branch = { + # style = "bold purple"; + # format = "on [$symbol$branch]($style) "; + # symbol = " "; + # }; + # + # # Git status + # git_status = { + # style = "red"; + # ahead = "⇡\${count}"; + # diverged = "⇕⇡\${ahead_count}⇣\${behind_count}"; + # behind = "⇣\${count}"; + # conflicted = "="; + # deleted = "✘"; + # modified = "!"; + # renamed = "»"; + # staged = "+"; + # stashed = "$"; + # untracked = "?"; + # format = "([$all_status$ahead_behind]($style))"; + # }; + # + # # Username + # username = { + # style_user = "bold yellow"; + # style_root = "bold red"; + # format = "[$user]($style) "; + # disabled = false; + # show_always = false; + # }; + # + # # Hostname + # hostname = { + # ssh_only = false; + # format = "[@$hostname]($style) "; + # style = "bold green"; + # disabled = true; + # }; + # + # # Language versions + # nodejs = { + # style = "bold green"; + # format = "via [$symbol($version)]($style) "; + # symbol = " "; + # detect_extensions = ["js" "mjs" "cjs" "ts" "tsx" "vue"]; + # detect_files = ["package.json" "package-lock.json" "yarn.lock"]; + # }; + # + # php = { + # style = "bold blue"; + # format = "via [$symbol($version)]($style) "; + # symbol = " "; + # detect_extensions = ["php"]; + # detect_files = ["composer.json" "composer.lock"]; + # }; + # + # go = { + # style = "bold cyan"; + # format = "via [$symbol($version)]($style) "; + # symbol = " "; + # detect_extensions = ["go"]; + # detect_files = ["go.mod" "go.sum"]; + # }; + # + # python = { + # style = "bold yellow"; + # format = "via [$symbol$pyenv_prefix($version)]($style) "; + # symbol = " "; + # detect_extensions = ["py"]; + # detect_files = ["requirements.txt" "pyproject.toml" "Pipfile"]; + # }; + # + # # Docker + # docker_context = { + # style = "blue bold"; + # format = "via [$symbol$context]($style) "; + # symbol = " "; + # only_with_files = true; + # detect_files = ["docker-compose.yml" "docker-compose.yaml" "Dockerfile"]; + # }; + # + # # Nix shell + # nix_shell = { + # style = "bold blue"; + # format = "via [$symbol$state( \\($name\\))]($style) "; + # symbol = "❄️ "; + # impure_msg = "[impure shell](bold red)"; + # pure_msg = "[pure shell](bold green)"; + # unknown_msg = "[unknown shell](bold yellow)"; + # }; + # + # # Command duration + # cmd_duration = { + # min_time = 2000; + # style = "bold yellow"; + # format = "took [$duration]($style) "; + # }; + # + # # Time + # time = { + # disabled = false; + # style = "bold white"; + # format = "[$time]($style)"; + # time_format = "%T"; + # utc_time_offset = "local"; + # }; + # + # # Status + # status = { + # style = "bg:blue"; + # symbol = "🔴"; + # format = "[\\[$symbol $common_meaning$signal_name$maybe_int\\]]($style) "; + # map_symbol = true; + # disabled = false; + # }; + # + # # Memory usage + # memory_usage = { + # disabled = false; + # threshold = 70; + # style = "bold dimmed white"; + # format = "via $symbol[${ram}( | ${swap})]($style) "; + # symbol = " "; + # }; + # + # # Package version + # package = { + # disabled = false; + # style = "208 bold"; + # format = "is [$symbol$version]($style) "; + # symbol = "📦 "; + # }; + # + # # AWS + # aws = { + # style = "bold orange"; + # format = "on [$symbol($profile)(\\($region\\))(\\[$duration\\])]($style) "; + # symbol = "☁️ "; + # }; + # }; + }; +} diff --git a/home/vscode.nix b/home/vscode.nix new file mode 100755 index 0000000..ab49299 --- /dev/null +++ b/home/vscode.nix @@ -0,0 +1,182 @@ +{ + config, + pkgs, + ... +}: { + programs.vscode = { + enable = true; + package = pkgs.vscode; + + # Extensions (commonly used for development) + extensions = with pkgs.vscode-extensions; [ + # Language support + ms-vscode.vscode-typescript-next + bradlc.vscode-tailwindcss + ms-python.python + ms-vscode.vscode-json + redhat.vscode-yaml + ms-vscode.vscode-css + + # PHP + bmewburn.vscode-intelephense-client + xdebug.php-debug + + # Git + eamodio.gitlens + mhutchie.git-graph + + # Productivity + ms-vscode.vscode-eslint + esbenp.prettier-vscode + bradlc.vscode-tailwindcss + formulahendry.auto-rename-tag + ms-vscode.vscode-color-info + + # Themes and appearance + pkief.material-icon-theme + zhuangtongfa.material-theme + + # Docker + ms-azuretools.vscode-docker + + # Remote development + ms-vscode-remote.remote-ssh + ms-vscode-remote.remote-containers + + # Nix support + bbenoist.nix + jnoortheen.nix-ide + ]; + + # User settings + userSettings = { + # Editor settings + "editor.fontSize" = 14; + "editor.fontFamily" = "'FiraCode Nerd Font', 'Droid Sans Mono', monospace"; + "editor.fontLigatures" = true; + "editor.tabSize" = 2; + "editor.insertSpaces" = true; + "editor.wordWrap" = "on"; + "editor.minimap.enabled" = false; + "editor.renderWhitespace" = "boundary"; + "editor.rulers" = [80 120]; + "editor.formatOnSave" = true; + "editor.codeActionsOnSave" = { + "source.fixAll.eslint" = "explicit"; + "source.organizeImports" = "explicit"; + }; + + # Workbench + "workbench.colorTheme" = "Material Theme Darker High Contrast"; + "workbench.iconTheme" = "material-icon-theme"; + "workbench.startupEditor" = "newUntitledFile"; + "workbench.sideBar.location" = "left"; + + # Files + "files.autoSave" = "onFocusChange"; + "files.trimTrailingWhitespace" = true; + "files.insertFinalNewline" = true; + "files.exclude" = { + "**/node_modules" = true; + "**/vendor" = true; + "**/.git" = true; + "**/.svn" = true; + "**/.hg" = true; + "**/CVS" = true; + "**/.DS_Store" = true; + "**/Thumbs.db" = true; + }; + + # Terminal + "terminal.integrated.fontFamily" = "'FiraCode Nerd Font'"; + "terminal.integrated.fontSize" = 13; + "terminal.integrated.shell.linux" = "${pkgs.bash}/bin/bash"; + + # Git + "git.enableSmartCommit" = true; + "git.autofetch" = true; + "git.confirmSync" = false; + + # Language-specific settings + "[javascript]" = { + "editor.defaultFormatter" = "esbenp.prettier-vscode"; + }; + "[typescript]" = { + "editor.defaultFormatter" = "esbenp.prettier-vscode"; + }; + "[json]" = { + "editor.defaultFormatter" = "esbenp.prettier-vscode"; + }; + "[html]" = { + "editor.defaultFormatter" = "esbenp.prettier-vscode"; + }; + "[css]" = { + "editor.defaultFormatter" = "esbenp.prettier-vscode"; + }; + "[php]" = { + "editor.defaultFormatter" = "bmewburn.vscode-intelephense-client"; + }; + "[nix]" = { + "editor.defaultFormatter" = "jnoortheen.nix-ide"; + "editor.tabSize" = 2; + }; + + # PHP Intelephense + "intelephense.files.maxSize" = 5000000; + "intelephense.telemetry.enabled" = false; + + # ESLint + "eslint.validate" = [ + "javascript" + "javascriptreact" + "typescript" + "typescriptreact" + "vue" + ]; + + # Prettier + "prettier.singleQuote" = true; + "prettier.trailingComma" = "es5"; + "prettier.tabWidth" = 2; + "prettier.semi" = true; + + # Docker + "docker.showStartPage" = false; + + # Telemetry + "telemetry.telemetryLevel" = "off"; + "extensions.ignoreRecommendations" = true; + + # Security + "security.workspace.trust.enabled" = false; + + # Window + "window.titleBarStyle" = "custom"; + "window.menuBarVisibility" = "toggle"; + }; + + # Keybindings + keybindings = [ + { + key = "ctrl+shift+p"; + command = "workbench.action.showCommands"; + } + { + key = "ctrl+p"; + command = "workbench.action.quickOpen"; + } + { + key = "ctrl+shift+n"; + command = "workbench.action.files.newUntitledFile"; + } + { + key = "ctrl+shift+f"; + command = "workbench.action.findInFiles"; + } + { + key = "ctrl+`"; + command = "workbench.action.terminal.toggleTerminal"; + } + ]; + }; +} diff --git a/system/gnome.nix b/system/gnome.nix new file mode 100644 index 0000000..0cdf89f --- /dev/null +++ b/system/gnome.nix @@ -0,0 +1,20 @@ +{ + config, + pkgs, + inputs, + ... +}: { + services.xserver.enable = true; + services.displayManager.gdm.enable = true; + services.desktopManager.gnome.enable = true; + + # Configure keymap in X11 + services.xserver.xkb = { + layout = "us"; + variant = ""; + }; + + environment.systemPackages = with pkgs; [ + gnome-tweaks + ]; +}