diff --git a/README.md b/README.md index 7499039..e288f05 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # NixConfigs -My configs for NixOS \ No newline at end of file +My configs for NixOS diff --git a/debug-sway.sh b/debug-sway.sh new file mode 100755 index 0000000..cd54bdc --- /dev/null +++ b/debug-sway.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# Debug script for SDDM and Sway session issues +echo "=== SDDM and Sway Debug Information ===" + +echo -e "\n1. Checking if Sway is installed:" +which sway 2>/dev/null || echo "Sway not found in PATH" + +echo -e "\n2. Checking Sway desktop files:" +find /nix/store -name "sway.desktop" 2>/dev/null | head -3 + +echo -e "\n3. Checking current SDDM configuration:" +if [ -f /etc/sddm.conf ]; then + cat /etc/sddm.conf +else + echo "SDDM config file not found" +fi + +echo -e "\n4. Checking available sessions:" +ls -la /usr/share/wayland-sessions/ 2>/dev/null || echo "No wayland-sessions directory found" +ls -la /usr/share/xsessions/ 2>/dev/null || echo "No xsessions directory found" + +echo -e "\n5. Checking if SDDM service is running:" +systemctl status sddm 2>/dev/null || echo "Cannot check SDDM status" + +echo -e "\n6. Checking environment variables:" +echo "XDG_SESSION_TYPE: $XDG_SESSION_TYPE" +echo "XDG_CURRENT_DESKTOP: $XDG_CURRENT_DESKTOP" + +echo -e "\n7. Testing Sway startup:" +echo "Run this command to test Sway:" +echo "sway --debug 2>&1 | head -10" diff --git a/flake.lock b/flake.lock index c806954..01746bd 100644 --- a/flake.lock +++ b/flake.lock @@ -1,265 +1,5 @@ { "nodes": { - "base16": { - "inputs": { - "fromYaml": "fromYaml" - }, - "locked": { - "lastModified": 1732200724, - "narHash": "sha256-+R1BH5wHhfnycySb7Sy5KbYEaTJZWm1h+LW1OtyhiTs=", - "owner": "SenchoPens", - "repo": "base16.nix", - "rev": "153d52373b0fb2d343592871009a286ec8837aec", - "type": "github" - }, - "original": { - "owner": "SenchoPens", - "repo": "base16.nix", - "type": "github" - } - }, - "base16-fish": { - "flake": false, - "locked": { - "lastModified": 1622559957, - "narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=", - "owner": "tomyun", - "repo": "base16-fish", - "rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe", - "type": "github" - }, - "original": { - "owner": "tomyun", - "repo": "base16-fish", - "type": "github" - } - }, - "base16-helix": { - "flake": false, - "locked": { - "lastModified": 1725860795, - "narHash": "sha256-Z2o8VBPW3I+KKTSfe25kskz0EUj7MpUh8u355Z1nVsU=", - "owner": "tinted-theming", - "repo": "base16-helix", - "rev": "7f795bf75d38e0eea9fed287264067ca187b88a9", - "type": "github" - }, - "original": { - "owner": "tinted-theming", - "repo": "base16-helix", - "type": "github" - } - }, - "base16-vim": { - "flake": false, - "locked": { - "lastModified": 1731949548, - "narHash": "sha256-XIDexXM66sSh5j/x70e054BnUsviibUShW7XhbDGhYo=", - "owner": "tinted-theming", - "repo": "base16-vim", - "rev": "61165b1632409bd55e530f3dbdd4477f011cadc6", - "type": "github" - }, - "original": { - "owner": "tinted-theming", - "repo": "base16-vim", - "type": "github" - } - }, - "firefox-gnome-theme": { - "flake": false, - "locked": { - "lastModified": 1734969791, - "narHash": "sha256-A9PxLienMYJ/WUvqFie9qXrNC2MeRRYw7TG/q7DRjZg=", - "owner": "rafaelmardojai", - "repo": "firefox-gnome-theme", - "rev": "92f4890bd150fc9d97b61b3583680c0524a8cafe", - "type": "github" - }, - "original": { - "owner": "rafaelmardojai", - "repo": "firefox-gnome-theme", - "type": "github" - } - }, - "flake-compat": { - "flake": false, - "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_2": { - "flake": false, - "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1705309234, - "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_2": { - "inputs": { - "systems": [ - "stylix", - "systems" - ] - }, - "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "fromYaml": { - "flake": false, - "locked": { - "lastModified": 1731966426, - "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", - "owner": "SenchoPens", - "repo": "fromYaml", - "rev": "106af9e2f715e2d828df706c386a685698f3223b", - "type": "github" - }, - "original": { - "owner": "SenchoPens", - "repo": "fromYaml", - "type": "github" - } - }, - "ghostty": { - "inputs": { - "flake-compat": "flake-compat", - "nixpkgs-stable": "nixpkgs-stable", - "nixpkgs-unstable": "nixpkgs-unstable", - "zig": "zig" - }, - "locked": { - "lastModified": 1736210320, - "narHash": "sha256-QnDkQ/s1OWmPj1f+7MFNxQiAPJdHbI1Aft7yM5I+8gQ=", - "owner": "ghostty-org", - "repo": "ghostty", - "rev": "a3837a1e4ee06a183f32d4a622c2cdcd51f73fb8", - "type": "github" - }, - "original": { - "owner": "ghostty-org", - "repo": "ghostty", - "type": "github" - } - }, - "git-hooks": { - "inputs": { - "flake-compat": [ - "stylix", - "flake-compat" - ], - "gitignore": "gitignore", - "nixpkgs": [ - "stylix", - "nixpkgs" - ], - "nixpkgs-stable": [ - "stylix", - "git-hooks", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1731363552, - "narHash": "sha256-vFta1uHnD29VUY4HJOO/D6p6rxyObnf+InnSMT4jlMU=", - "owner": "cachix", - "repo": "git-hooks.nix", - "rev": "cd1af27aa85026ac759d5d3fccf650abe7e1bbf0", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "git-hooks.nix", - "type": "github" - } - }, - "gitignore": { - "inputs": { - "nixpkgs": [ - "stylix", - "git-hooks", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1709087332, - "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", - "owner": "hercules-ci", - "repo": "gitignore.nix", - "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "gitignore.nix", - "type": "github" - } - }, - "gnome-shell": { - "flake": false, - "locked": { - "lastModified": 1732369855, - "narHash": "sha256-JhUWbcYPjHO3Xs3x9/Z9RuqXbcp5yhPluGjwsdE2GMg=", - "owner": "GNOME", - "repo": "gnome-shell", - "rev": "dadd58f630eeea41d645ee225a63f719390829dc", - "type": "github" - }, - "original": { - "owner": "GNOME", - "ref": "47.2", - "repo": "gnome-shell", - "type": "github" - } - }, "home-manager": { "inputs": { "nixpkgs": [ @@ -267,285 +7,39 @@ ] }, "locked": { - "lastModified": 1735344290, - "narHash": "sha256-oJDtWPH1oJT34RJK1FSWjwX4qcGOBRkcNQPD0EbSfNM=", + "lastModified": 1756261190, + "narHash": "sha256-eiy0klFK5EVJLNilutR7grsZN/7Itj9DyD75eyOf83k=", "owner": "nix-community", "repo": "home-manager", - "rev": "613691f285dad87694c2ba1c9e6298d04736292d", + "rev": "77f348da3176dc68b20a73dab94852a417daf361", "type": "github" }, "original": { "owner": "nix-community", - "ref": "release-24.11", - "repo": "home-manager", - "type": "github" - } - }, - "home-manager_2": { - "inputs": { - "nixpkgs": [ - "stylix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1733572789, - "narHash": "sha256-zjO6m5BqxXIyjrnUziAzk4+T4VleqjstNudSqWcpsHI=", - "owner": "nix-community", - "repo": "home-manager", - "rev": "c7ffc9727d115e433fd884a62dc164b587ff651d", - "type": "github" - }, - "original": { - "owner": "nix-community", - "ref": "release-24.11", "repo": "home-manager", "type": "github" } }, "nixpkgs": { "locked": { - "lastModified": 1736061677, - "narHash": "sha256-DjkQPnkAfd7eB522PwnkGhOMuT9QVCZspDpJJYyOj60=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "cbd8ec4de4469333c82ff40d057350c30e9f7d36", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-24.11", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-stable": { - "locked": { - "lastModified": 1733423277, - "narHash": "sha256-TxabjxEgkNbCGFRHgM/b9yZWlBj60gUOUnRT/wbVQR8=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "e36963a147267afc055f7cf65225958633e536bf", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "release-24.11", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-unstable": { - "locked": { - "lastModified": 1733229606, - "narHash": "sha256-FLYY5M0rpa5C2QAE3CKLYAM6TwbKicdRK6qNrSHlNrE=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "566e53c2ad750c84f6d31f9ccb9d00f823165550", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1731763621, - "narHash": "sha256-ddcX4lQL0X05AYkrkV2LMFgGdRvgap7Ho8kgon3iWZk=", + "lastModified": 1756787288, + "narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c69a9bffbecde46b4b939465422ddc59493d3e4d", + "rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1733550349, - "narHash": "sha256-NcGumB4Lr6KSDq+nIqXtNA8QwAQKDSZT7N9OTGWbTrs=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "e2605d0744c2417b09f8bf850dfca42fcf537d34", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-24.11", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } }, "root": { "inputs": { - "ghostty": "ghostty", "home-manager": "home-manager", - "nixpkgs": "nixpkgs", - "sops-nix": "sops-nix", - "stylix": "stylix" - } - }, - "sops-nix": { - "inputs": { - "nixpkgs": "nixpkgs_2" - }, - "locked": { - "lastModified": 1736203741, - "narHash": "sha256-eSjkBwBdQk+TZWFlLbclF2rAh4JxbGg8az4w/Lfe7f4=", - "owner": "Mic92", - "repo": "sops-nix", - "rev": "c9c88f08e3ee495e888b8d7c8624a0b2519cb773", - "type": "github" - }, - "original": { - "owner": "Mic92", - "repo": "sops-nix", - "type": "github" - } - }, - "stylix": { - "inputs": { - "base16": "base16", - "base16-fish": "base16-fish", - "base16-helix": "base16-helix", - "base16-vim": "base16-vim", - "firefox-gnome-theme": "firefox-gnome-theme", - "flake-compat": "flake-compat_2", - "flake-utils": "flake-utils_2", - "git-hooks": "git-hooks", - "gnome-shell": "gnome-shell", - "home-manager": "home-manager_2", - "nixpkgs": "nixpkgs_3", - "systems": "systems_2", - "tinted-foot": "tinted-foot", - "tinted-kitty": "tinted-kitty", - "tinted-tmux": "tinted-tmux" - }, - "locked": { - "lastModified": 1736203541, - "narHash": "sha256-ucHJzVv3lGxq7v+snqs/rDNwojVyvBHxwQ5yE2qNfNc=", - "owner": "danth", - "repo": "stylix", - "rev": "45af2a43aaaf05dfb8839dc827c2e2b0d98375da", - "type": "github" - }, - "original": { - "owner": "danth", - "ref": "release-24.11", - "repo": "stylix", - "type": "github" - } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, - "systems_2": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, - "tinted-foot": { - "flake": false, - "locked": { - "lastModified": 1726913040, - "narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=", - "owner": "tinted-theming", - "repo": "tinted-foot", - "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", - "type": "github" - }, - "original": { - "owner": "tinted-theming", - "repo": "tinted-foot", - "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", - "type": "github" - } - }, - "tinted-kitty": { - "flake": false, - "locked": { - "lastModified": 1716423189, - "narHash": "sha256-2xF3sH7UIwegn+2gKzMpFi3pk5DlIlM18+vj17Uf82U=", - "owner": "tinted-theming", - "repo": "tinted-kitty", - "rev": "eb39e141db14baef052893285df9f266df041ff8", - "type": "github" - }, - "original": { - "owner": "tinted-theming", - "repo": "tinted-kitty", - "rev": "eb39e141db14baef052893285df9f266df041ff8", - "type": "github" - } - }, - "tinted-tmux": { - "flake": false, - "locked": { - "lastModified": 1729501581, - "narHash": "sha256-1ohEFMC23elnl39kxWnjzH1l2DFWWx4DhFNNYDTYt54=", - "owner": "tinted-theming", - "repo": "tinted-tmux", - "rev": "f0e7f7974a6441033eb0a172a0342e96722b4f14", - "type": "github" - }, - "original": { - "owner": "tinted-theming", - "repo": "tinted-tmux", - "type": "github" - } - }, - "zig": { - "inputs": { - "flake-compat": [ - "ghostty" - ], - "flake-utils": "flake-utils", - "nixpkgs": [ - "ghostty", - "nixpkgs-stable" - ] - }, - "locked": { - "lastModified": 1717848532, - "narHash": "sha256-d+xIUvSTreHl8pAmU1fnmkfDTGQYCn2Rb/zOwByxS2M=", - "owner": "mitchellh", - "repo": "zig-overlay", - "rev": "02fc5cc555fc14fda40c42d7c3250efa43812b43", - "type": "github" - }, - "original": { - "owner": "mitchellh", - "repo": "zig-overlay", - "type": "github" + "nixpkgs": "nixpkgs" } } }, diff --git a/flake.nix b/flake.nix index da1490c..0988e4f 100644 --- a/flake.nix +++ b/flake.nix @@ -1,52 +1,26 @@ { - description = "A very basic flake"; + description = "Jared's NixOS Configuration"; inputs = { - nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-24.11"; - home-manager.url = "github:nix-community/home-manager?ref=release-24.11"; - home-manager.inputs.nixpkgs.follows = "nixpkgs"; - #hyprland.url = "github:hyprwm/Hyprland"; - #nix-colors.url = "github:misterio77/nix-colors"; - stylix.url = "github:danth/stylix/release-24.11"; - sops-nix.url = "github:Mic92/sops-nix"; - ghostty.url = "github:ghostty-org/ghostty"; - }; - - outputs = { self, nixpkgs, home-manager, stylix, sops-nix, ghostty, ... } @ inputs: let - inherit (self) outputs; - username = "jared"; - in { - nixosConfigurations = { - # ============ NixOS Configuration ============ # - tito = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - specialArgs = {inherit inputs username stylix ghostty ;}; - modules = [ - stylix.nixosModules.stylix - sops-nix.nixosModules.sops - ./hosts/tito/configuration.nix - home-manager.nixosModules.home-manager { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.users.jared = import ./home/jared/home.nix; - } - ]; - }; - xps = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - specialArgs = {inherit inputs username stylix ghostty ;}; - modules = [ - stylix.nixosModules.stylix - sops-nix.nixosModules.sops - ./hosts/xps/configuration.nix - home-manager.nixosModules.home-manager { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.users.jared = import ./home/jared/home.nix; - } - ]; - - }; + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; }; }; -} + + outputs = { self, nixpkgs, home-manager }: { + nixosConfigurations.abra = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + ./hosts/abra/configuration.nix + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.jared = import ./home-manager; + } + ]; + }; + }; +} diff --git a/home-manager/default.nix b/home-manager/default.nix new file mode 100644 index 0000000..07dbffc --- /dev/null +++ b/home-manager/default.nix @@ -0,0 +1,27 @@ +{ config, pkgs, ... }: + +{ + imports = [ + ./programs + ./services + ./themes + ]; + + # Home Manager settings + home.stateVersion = "25.05"; + + # User-specific packages + home.packages = with pkgs; [ + # Sway-related packages + swaybg + swayidle + swaylock + wlogout + wofi + grim + slurp + mako + wl-clipboard + # Add user-specific packages here + ]; +} diff --git a/home-manager/programs/default.nix b/home-manager/programs/default.nix new file mode 100644 index 0000000..ae09a85 --- /dev/null +++ b/home-manager/programs/default.nix @@ -0,0 +1,14 @@ +{ config, pkgs, ... }: + +{ + imports = [ + # Add program-specific configurations here + ./git.nix + ./direnv.nix + ./neovim.nix + ./sway.nix + ./waybar.nix + # ./shell.nix + ./yazi.nix + ]; +} diff --git a/home-manager/programs/direnv.nix b/home-manager/programs/direnv.nix new file mode 100644 index 0000000..6aa8998 --- /dev/null +++ b/home-manager/programs/direnv.nix @@ -0,0 +1,10 @@ +{ config, pkgs, ... }: + +{ + programs.direnv = { + enable = true; + enableBashIntegration = true; # or enableZshIntegration = true; + nix-direnv.enable = true; + }; +} + diff --git a/home-manager/programs/git.nix b/home-manager/programs/git.nix new file mode 100644 index 0000000..1515bde --- /dev/null +++ b/home-manager/programs/git.nix @@ -0,0 +1,15 @@ +{ config, pkgs, ... }: + +{ + programs.git = { + enable = true; + userName = "Jared Kling"; + userEmail = "jared@kling.dev"; + + extraConfig = { + init.defaultBranch = "main"; + pull.rebase = true; + push.autoSetupRemote = true; + }; + }; +} diff --git a/home-manager/programs/neovim.nix b/home-manager/programs/neovim.nix new file mode 100644 index 0000000..07231b1 --- /dev/null +++ b/home-manager/programs/neovim.nix @@ -0,0 +1,11 @@ +{ config, pkgs, ... }: + +{ + programs.neovim = { + enable = true; + viAlias = true; + vimAlias = true; + withNodeJs = true; + defaultEditor = true; + }; +} \ No newline at end of file diff --git a/home-manager/programs/sway.nix b/home-manager/programs/sway.nix new file mode 100644 index 0000000..521a8ac --- /dev/null +++ b/home-manager/programs/sway.nix @@ -0,0 +1,167 @@ +{ config, pkgs, ... }: + +{ + wayland.windowManager.sway = { + enable = true; + config = { + # Input configuration + input = { + "type:touchpad" = { + natural_scroll = "enabled"; + tap = "enabled"; + tap_button_map = "lrm"; + scroll_method = "two_finger"; + }; + "type:pointer" = { + natural_scroll = "enabled"; + }; + }; + + # Key bindings + keybindings = { + "Mod4+Return" = "exec alacritty"; + "Mod4+Shift+q" = "kill"; + "Mod4+b" = "exec vivaldi"; + "Mod4+d" = "exec wofi --show drun --width 500 --height 350 --border 2 --prompt \"Apps\" --allow-images --gtk-dark"; + "Mod4+Shift+d" = "exec wofi --show run --width 400 --height 200 --prompt \"Run\""; + "Mod4+Tab" = "exec ~/.config/sway/scripts/window-switcher.sh"; + "Mod4+Shift+c" = "reload"; + "Mod4+Shift+e" = "exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit'"; + + # Focus movement + "Mod4+h" = "focus left"; + "Mod4+j" = "focus down"; + "Mod4+k" = "focus up"; + "Mod4+l" = "focus right"; + "Mod4+Left" = "focus left"; + "Mod4+Down" = "focus down"; + "Mod4+Up" = "focus up"; + "Mod4+Right" = "focus right"; + + # Move windows + "Mod4+Shift+h" = "move left"; + "Mod4+Shift+j" = "move down"; + "Mod4+Shift+k" = "move up"; + "Mod4+Shift+l" = "move right"; + "Mod4+Shift+Left" = "move left"; + "Mod4+Shift+Down" = "move down"; + "Mod4+Shift+Up" = "move up"; + "Mod4+Shift+Right" = "move right"; + + # Workspace switching + "Mod4+1" = "workspace number 1"; + "Mod4+2" = "workspace number 2"; + "Mod4+3" = "workspace number 3"; + "Mod4+4" = "workspace number 4"; + "Mod4+5" = "workspace number 5"; + "Mod4+6" = "workspace number 6"; + "Mod4+7" = "workspace number 7"; + "Mod4+8" = "workspace number 8"; + "Mod4+9" = "workspace number 9"; + "Mod4+0" = "workspace number 10"; + + # Move containers to workspaces + "Mod4+Shift+1" = "move container to workspace number 1"; + "Mod4+Shift+2" = "move container to workspace number 2"; + "Mod4+Shift+3" = "move container to workspace number 3"; + "Mod4+Shift+4" = "move container to workspace number 4"; + "Mod4+Shift+5" = "move container to workspace number 5"; + "Mod4+Shift+6" = "move container to workspace number 6"; + "Mod4+Shift+7" = "move container to workspace number 7"; + "Mod4+Shift+8" = "move container to workspace number 8"; + "Mod4+Shift+9" = "move container to workspace number 9"; + "Mod4+Shift+0" = "move container to workspace number 10"; + + "Mod4+f" = "fullscreen"; + "Mod4+Shift+b" = "exec pkill waybar; waybar &"; + }; + + # Window rules + window = { + commands = [ + { + criteria = { class = ".*"; }; + command = "border pixel 2"; + } + { + criteria = { app_id = ".*"; }; + command = "border pixel 2"; + } + { + criteria = { window_role = "dialog"; }; + command = "border normal"; + } + { + criteria = { window_type = "dialog"; }; + command = "border normal"; + } + ]; + titlebar = false; + }; + + # Assignments + assigns = { + "9" = [{ class = "Vivaldi-stable"; }]; + }; + + # Gaps + gaps = { + inner = 8; + outer = 12; + }; + + # Colors (Tokyo Night theme) + colors = { + focused = { + border = "#7aa2f7"; + background = "#7aa2f7"; + text = "#1a1b26"; + indicator = "#7aa2f7"; + childBorder = "#7aa2f7"; + }; + focusedInactive = { + border = "#24283b"; + background = "#24283b"; + text = "#c0caf5"; + indicator = "#24283b"; + childBorder = "#24283b"; + }; + unfocused = { + border = "#24283b"; + background = "#1a1b26"; + text = "#9aa5ce"; + indicator = "#24283b"; + childBorder = "#24283b"; + }; + urgent = { + border = "#f7768e"; + background = "#f7768e"; + text = "#1a1b26"; + indicator = "#f7768e"; + childBorder = "#f7768e"; + }; + }; + + # Output configuration + output = { + "*" = { + #bg = "/home/jared/.config/sway/wallpapers/starters_and_pika.jpg fill"; + }; + }; + + # Seat configuration + seat = { + "seat0" = { + xcursor_theme = "Bibata-Modern-Ice 24"; + }; + }; + + # Startup commands + startup = [ + { command = "waybar"; } + { command = "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway"; } + { command = "systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"; } + ]; + }; + }; +} diff --git a/home-manager/programs/waybar.nix b/home-manager/programs/waybar.nix new file mode 100644 index 0000000..f403982 --- /dev/null +++ b/home-manager/programs/waybar.nix @@ -0,0 +1,229 @@ +{ config, pkgs, ... }: + +{ + programs.waybar = { + enable = true; + settings = { + mainBar = { + position = "top"; + height = 30; + spacing = 4; + + modules-left = [ "sway/workspaces" "sway/mode" ]; + modules-center = [ "sway/window" ]; + modules-right = [ "idle_inhibitor" "pulseaudio" "network" "cpu" "memory" "temperature" "battery" "tray" "clock" ]; + + "sway/workspaces" = { + disable-scroll = true; + all-outputs = true; + format = "{name}: {icon}"; + format-icons = { + "1" = "󰈹"; + "2" = "󰈹"; + "3" = "󰈹"; + "4" = "󰈹"; + "5" = "󰈹"; + "6" = "󰈹"; + "7" = "󰈹"; + "8" = "󰈹"; + "9" = "󰈹"; + "10" = "󰈹"; + urgent = "󰈹"; + focused = "󰈹"; + default = "󰈹"; + }; + }; + + "sway/mode" = { + format = "{}"; + }; + + "sway/window" = { + format = "{}"; + max-length = 50; + }; + + "idle_inhibitor" = { + format = "{icon}"; + format-icons = { + activated = "󰈸"; + deactivated = "󰈸"; + }; + }; + + "tray" = { + spacing = 10; + }; + + "clock" = { + tooltip-format = "{:%Y %B}\n{calendar}"; + format-alt = "{:%Y-%m-%d}"; + }; + + "cpu" = { + format = "{usage}% 󰍛"; + tooltip = false; + }; + + "memory" = { + format = "{}% 󰍛"; + }; + + "temperature" = { + thermal-zone = 2; + hwmon-path = "/sys/class/hwmon/hwmon2/temp1_input"; + critical-threshold = 80; + format = "{temperatureC}°C {icon}"; + format-icons = [ "󰈸" "󰈸" "󰈸" ]; + }; + + "battery" = { + states = { + warning = 30; + critical = 15; + }; + format = "{capacity}% {icon}"; + format-charging = "󰂄 {capacity}%"; + format-plugged = "󰂄 {capacity}%"; + format-alt = "{time} {icon}"; + format-icons = [ "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰂃" "󰂄" ]; + }; + + "network" = { + format-wifi = "{essid} ({signalStrength}%) 󰤨"; + format-ethernet = "{ipaddr}/{cidr} 󰤨"; + tooltip-format = "{ifname} via {gwaddr} 󰤨"; + format-linked = "{ifname} (No IP) 󰤨"; + format-disconnected = "Disconnected ⚠"; + format-alt = "{ifname}: {ipaddr}/{cidr}"; + }; + + "pulseaudio" = { + format = "{volume}% {icon} {format_source}"; + format-bluetooth = "{volume}% {icon}󰂯 {format_source}"; + format-bluetooth-muted = "󰂲 {icon}󰂯 {format_source}"; + format-muted = "󰂲 {format_source}"; + format-source = "{volume}% 󰍬"; + format-source-muted = "󰍭"; + format-icons = { + headphone = "󰋋"; + hands-free = "󰋋"; + headset = "󰋋"; + phone = "󰄜"; + portable = "󰦧"; + car = "󰄋"; + default = [ "󰕿" "󰕿" "󰕿" ]; + }; + on-click = "pavucontrol"; + }; + }; + }; + + style = '' + * { + border: none; + border-radius: 0; + font-family: "JetBrainsMono Nerd Font", "Font Awesome 6 Free"; + font-size: 13px; + min-height: 0; + } + + window#waybar { + background: #1a1b26; + color: #c0caf5; + } + + #workspaces button { + padding: 0 5px; + background: transparent; + color: #c0caf5; + border-top: 2px solid transparent; + } + + #workspaces button.focused { + color: #7aa2f7; + border-top: 2px solid #7aa2f7; + } + + #workspaces button.urgent { + color: #f7768e; + } + + #mode { + background: #f7768e; + color: #1a1b26; + padding: 0 5px; + } + + #clock, #battery, #cpu, #memory, #temperature, #network, #pulseaudio, #tray, #mode, #idle_inhibitor { + padding: 0 10px; + margin: 0 4px; + color: #c0caf5; + } + + #clock { + font-weight: bold; + } + + #battery { + color: #c0caf5; + } + + #battery.charging { + color: #9ece6a; + } + + #battery.critical:not(.charging) { + color: #f7768e; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; + } + + #cpu { + color: #bb9af7; + } + + #memory { + color: #bb9af7; + } + + #temperature { + color: #ff9e64; + } + + #temperature.critical { + color: #f7768e; + } + + #network { + color: #7aa2f7; + } + + #network.disconnected { + color: #f7768e; + } + + #pulseaudio { + color: #7aa2f7; + } + + #pulseaudio.muted { + color: #f7768e; + } + + #tray { + background-color: #1a1b26; + } + + @keyframes blink { + to { + background-color: #f7768e; + color: #1a1b26; + } + } + ''; + }; +} diff --git a/home-manager/programs/yazi.nix b/home-manager/programs/yazi.nix new file mode 100644 index 0000000..2eb4757 --- /dev/null +++ b/home-manager/programs/yazi.nix @@ -0,0 +1,9 @@ +{ config, pkgs, ... }: + +{ + programs.yazi = { + enable = true; + enableBashIntegration = true; + }; +} + diff --git a/home-manager/services/default.nix b/home-manager/services/default.nix new file mode 100644 index 0000000..951578d --- /dev/null +++ b/home-manager/services/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, ... }: + +{ + imports = [ + # Add service-specific configurations here + # ./dunst.nix + ]; +} diff --git a/home-manager/themes/default.nix b/home-manager/themes/default.nix new file mode 100644 index 0000000..011e499 --- /dev/null +++ b/home-manager/themes/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, ... }: + +{ + imports = [ + # Add theme-specific configurations here + # ./colors.nix + ]; +} diff --git a/home/jared/home.nix b/home/jared/home.nix deleted file mode 100644 index 1ab8361..0000000 --- a/home/jared/home.nix +++ /dev/null @@ -1,68 +0,0 @@ -# This is your home-manager configuration file -# Use this to configure your home environment (it replaces ~/.config/nixpkgs/home.nix) -{ - inputs, - outputs, - lib, - config, - pkgs, - stylix, - home-manager, - ... -}: { - home = { - username = "jared"; - homeDirectory = "/home/jared"; - packages = with pkgs; [ - spotify - strawberry - nodePackages.prettier - ]; - }; - - - # Add stuff for your user as you see fit: - # programs.neovim.enable = true; - # home.packages = with pkgs; [ steam ]; - - # Enable home-manager and git - programs.home-manager.enable = true; -# programs.git.enable = true; - programs.kitty.enable = true; - programs.firefox.enable = true; - programs.zellij.enable = true; - programs.zellij.settings = { - keybinds."unbind" = "Ctrl o"; - keybinds.session."bind \"Ctrl p\"".SwitchToMode = "Normal"; - keybinds."shared_except \"session\" \"locked\""."bind \"Ctrl 9\"".SwitchToMode = "Session"; - }; - programs.zsh.enable = true; -# programs.spotify-player.enable = true; - - dconf.settings = { - "org/gnome/desktop/wm/keybindings" = { - switch-applications = []; - switch-applications-backward = []; - switch-windows = [ "Tab" ]; - switch-windows-backward = [ "Tab" ]; - }; - }; - programs.direnv = { - enable = true; - enableBashIntegration = true; - nix-direnv.enable = true; - }; - programs.bash.enable = true; - programs.bash.bashrcExtra = '' - export GIT_ASKPASS="" - if [ -f .bashrc.orig ]; then - . ~/.bashrc.orig - fi - ''; - - # Nicely reload system units when changing configs -# systemd.user.startServices = "sd-switch"; - - # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion - home.stateVersion = "24.05"; -} diff --git a/hosts/abra/configuration.nix b/hosts/abra/configuration.nix new file mode 100644 index 0000000..0e4709d --- /dev/null +++ b/hosts/abra/configuration.nix @@ -0,0 +1,10 @@ +{ config, pkgs, ... }: + +{ + imports = [ + # Include the results of the hardware scan. + ./hardware-configuration.nix + # Include system-level configurations + ../../system + ]; +} diff --git a/hosts/xps/hardware-configuration.nix b/hosts/abra/hardware-configuration.nix similarity index 83% rename from hosts/xps/hardware-configuration.nix rename to hosts/abra/hardware-configuration.nix index 1a7edb7..b844f0b 100644 --- a/hosts/xps/hardware-configuration.nix +++ b/hosts/abra/hardware-configuration.nix @@ -14,18 +14,18 @@ boot.extraModulePackages = [ ]; fileSystems."/" = - { device = "/dev/disk/by-uuid/77969bfa-44f3-44f2-9c57-69fd161f6a75"; + { device = "/dev/disk/by-uuid/39d9cdd2-79cd-45f9-9d06-b902d9f717fe"; fsType = "ext4"; }; fileSystems."/boot" = - { device = "/dev/disk/by-uuid/FFD6-BA11"; + { device = "/dev/disk/by-uuid/4104-FEB1"; fsType = "vfat"; - options = [ "fmask=0022" "dmask=0022" ]; + options = [ "fmask=0077" "dmask=0077" ]; }; swapDevices = - [ { device = "/dev/disk/by-uuid/d495d805-4feb-4b25-ab7d-8eeb66efe3a7"; } + [ { device = "/dev/disk/by-uuid/4d15e7fc-f101-4712-af2f-098cf75f3e8f"; } ]; # Enables DHCP on each ethernet and wireless interface. In case of scripted networking diff --git a/hosts/tito/configuration.nix b/hosts/tito/configuration.nix deleted file mode 100644 index 7f10407..0000000 --- a/hosts/tito/configuration.nix +++ /dev/null @@ -1,60 +0,0 @@ -{ - config, - pkgs, - lib, - inputs, - username, - stylix, - ghostty, - ... -}: { - imports = [ - ./hardware-configuration.nix - ../../modules/nvidia.nix - ../../modules/common.nix - ../../modules/gnome.nix - inputs.sops-nix.nixosModules.sops - ../../modules/protonvpn.nix - ]; - - sops.defaultSopsFile = ../../secrets/secrets.yaml; - sops.defaultSopsFormat = "yaml"; - sops.age.keyFile = "/home/${username}/.config/sops/age/keys.txt"; - - networking = { - hostName = "tito"; - networkmanager.enable = true; - }; - - programs = { - steam = { - enable = true; - remotePlay.openFirewall = true; - dedicatedServer.openFirewall = true; - }; - chromium.enable = true; - }; - - virtualisation.docker.enable = true; - - users.users.${username} = { - isNormalUser = true; - extraGroups = [ - "networkmanager" - "wheel" - "audito" - "video" - "input" - "docker" - ]; - }; - - stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/solarflare.yaml"; - stylix.image = /home/jared/Pictures/tropea.jpg; - - stylix.targets.gnome.enable = true; - stylix.cursor.package = pkgs.vimix-cursor-theme; - stylix.cursor.name = "Vimix-Cursors"; - - system.stateVersion = "23.11"; -} diff --git a/hosts/tito/hardware-configuration.nix b/hosts/tito/hardware-configuration.nix deleted file mode 100644 index 0ffe379..0000000 --- a/hosts/tito/hardware-configuration.nix +++ /dev/null @@ -1,39 +0,0 @@ -# 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" "ahci" "xhci_pci" "usbhid" "usb_storage" "sd_mod" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-amd" ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-uuid/b030079d-d72f-43a8-a437-4368f4275b66"; - fsType = "ext4"; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/A646-15B0"; - fsType = "vfat"; - options = [ "fmask=0022" "dmask=0022" ]; - }; - - 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.enp12s0.useDHCP = lib.mkDefault true; - # networking.interfaces.wlp13s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/hosts/xps/configuration.nix b/hosts/xps/configuration.nix deleted file mode 100644 index 1efe118..0000000 --- a/hosts/xps/configuration.nix +++ /dev/null @@ -1,55 +0,0 @@ -{ - config, - pkgs, - lib, - inputs, - username, - stylix, - ghostty, - ... -}: { - imports = - [ # Include the results of the hardware scan. - ./hardware-configuration.nix - ../../modules/common.nix - ../../modules/gnome.nix - inputs.sops-nix.nixosModules.sops - ../../modules/protonvpn.nix - ]; - - sops.defaultSopsFile = ../../secrets/secrets.yaml; - sops.defaultSopsFormat = "yaml"; - sops.age.keyFile = "/home/${username}/.config/sops/age/keys.txt"; - - networking = { - hostName = "xps"; - networkmanager.enable = true; - }; - - virtualisation.docker.enable = true; - - users.users.${username} = { - isNormalUser = true; - extraGroups = [ - "networkmanager" - "wheel" - "audio" - "video" - "input" - "docker" - ]; - }; - # Enable automatic login for the user. - services.displayManager.autoLogin.enable = true; - services.displayManager.autoLogin.user = "${username}"; - - stylix.enable = true; - stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/solarflare.yaml"; - stylix.image = ../../backgrounds/SupermassiveBinaryBlackHoles.png; - stylix.cursor.package = pkgs.vimix-cursor-theme; - stylix.cursor.name = "Vimix-Cursors"; - stylix.targets.gnome.enable = true; - - system.stateVersion = "23.11"; # Did you read the comment? - -} diff --git a/modules/common.nix b/modules/common.nix deleted file mode 100644 index 3f33f34..0000000 --- a/modules/common.nix +++ /dev/null @@ -1,120 +0,0 @@ -{ - config, - pkgs, - stylix, - username, - ghostty, - lib, - ... -}: -{ - boot = { - loader.systemd-boot.enable = true; - loader.efi.canTouchEfiVariables = true; - - kernelPackages = pkgs.linuxPackages_latest; - kernel.sysctl = { - "vm.swappiness" = 10; - }; - }; - - services = { - printing.enable = true; - openssh.enable = true; - tailscale.enable = true; - flatpak.enable = true; - pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - }; - # Configure keymap in X11 - xserver.xkb = { - layout = "us"; - variant = ""; - }; - }; - - programs.ssh.startAgent = true; # Use OpenSSH agent instead - services.gnome.gnome-keyring.enable = lib.mkForce false; # Disable GNOME keyring - - - hardware.bluetooth.enable = true; - hardware.pulseaudio.enable = false; - hardware.graphics.enable = true; - - environment.variables = { - EDITOR = "nvim"; - }; - environment.systemPackages = with pkgs; [ - git - neovim - gcc - tailscale - firefox - htop - nerdfonts - kitty - yazi - nodejs - openvpn - audio-recorder - qemu - qemu_kvm - unzip - libation - nodePackages.prettier - dconf2nix - libation - sops - ghostty.packages.x86_64-linux.default - ]; - - programs = { - nh = { - enable = true; - flake = "/home/${username}/nix-config"; - }; - git = { - enable = true; - config = { - credential.helper = "store"; - }; - }; - }; - - networking.nameservers = [ - "192.168.1.3" - "1.1.1.1" - "9.9.9.9" - ]; - - # Set your time zone. - time.timeZone = "America/Chicago"; - - # 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"; - }; - - security.rtkit.enable = true; - - nixpkgs.config.allowUnfree = true; - nix.settings.experimental-features = [ "nix-command" "flakes" ]; - nix.gc = { - automatic = true; - dates = "weekly"; - options = "--delete-older-than 7d"; - }; -} diff --git a/modules/gnome.nix b/modules/gnome.nix deleted file mode 100644 index a62d59c..0000000 --- a/modules/gnome.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ config, pkgs, stylix, ... }: -{ - # Enable the X11 windowing system. - services.xserver.enable = true; - - # Enable the GNOME Desktop Environment. - services.xserver.displayManager.gdm.enable = true; - services.xserver.desktopManager.gnome.enable = true; - -} - diff --git a/modules/hyprland/hyprland.nix b/modules/hyprland/hyprland.nix deleted file mode 100644 index 9c08bac..0000000 --- a/modules/hyprland/hyprland.nix +++ /dev/null @@ -1,54 +0,0 @@ -{ config, pkgs, stylix, ... }: -{ - programs.hyprland = { - enable = true; -# nvidiaPatches = true; - xwayland.enable = true; - }; - - services.xserver = { - enable = true; - }; - - services.displayManager.sddm.enable = true; - services.displayManager.sddm.wayland.enable = true; - - environment.sessionVariables = { - # Cursor could be invisible without this - WLR_NO_HARDWARE_CURSORS = "1"; - # Electron, use wayland - NIXOS_OZONE_WL = "1"; - }; - - environment.systemPackages = with pkgs; [ - # bar - (waybar.overrideAttrs (oldAttrs: { - mesonFlags = oldAttrs.mesonFlags ++ [ "-Dexperimental=true" ]; - }) - ) - #Elkowar wacky widges (alternate bar) - #eww - - # notifications - dunst - #mako - - libnotify - - # wallpaper - swww - - # app-launcher - rofi-wayland - ]; - - services.dbus.enable = true; - xdg.portal.enable = true; - xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; - - hardware = { - opengl.enable = true; - nvidia.modesetting.enable = true; - }; -} - diff --git a/modules/nvidia.nix b/modules/nvidia.nix deleted file mode 100644 index 5d8c4db..0000000 --- a/modules/nvidia.nix +++ /dev/null @@ -1,18 +0,0 @@ - -{ config, lib, pkgs, ... }: - -{ - - hardware.nvidia = { - modesetting.enable = true; - powerManagement.enable = true; - powerManagement.finegrained = false; - open = false; - nvidiaSettings = true; - - package = config.boot.kernelPackages.nvidiaPackages.stable; - }; - hardware.nvidia-container-toolkit.enable = true; - #virtualisation.docker.enableNvidia = true; - services.xserver.videoDrivers = ["nvidia"]; -} diff --git a/modules/protonvpn.nix b/modules/protonvpn.nix deleted file mode 100644 index 95ebf03..0000000 --- a/modules/protonvpn.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ config, pkgs, ... }: -{ - sops.secrets."protonvpn/norway_config" = {}; - sops.secrets."protonvpn/us_config" = {}; - sops.secrets."protonvpn/auth-user-pass" = {}; - environment.systemPackages = with pkgs; [ - update-resolv-conf - ]; - environment.etc."openvpn/update-resolv-conf".source = "${pkgs.update-resolv-conf}/libexec/openvpn/update-resolv-conf"; - services.openvpn.servers = { - proton-norway = { - autoStart = false; - config = '' - config ${config.sops.secrets."protonvpn/norway_config".path} - auth-user-pass ${config.sops.secrets."protonvpn/auth-user-pass".path} - ''; - }; - proton-united-states = { - autoStart = false; - config = '' - config ${config.sops.secrets."protonvpn/us_config".path} - auth-user-pass ${config.sops.secrets."protonvpn/auth-user-pass".path} - ''; - }; - }; -} diff --git a/rebuild.sh b/rebuild.sh new file mode 100755 index 0000000..f8f2f00 --- /dev/null +++ b/rebuild.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash + +# NixOS rebuild script for flake-based configuration +# Usage: ./rebuild.sh [switch|build|test] + +set -e + +# Check if experimental features are enabled +if ! nix --version | grep -q "experimental-features"; then + echo "Warning: Nix experimental features may not be enabled." + echo "Consider adding 'experimental-features = nix-command flakes' to /etc/nix/nix.conf" +fi + +ACTION=${1:-switch} + +case $ACTION in + switch) + echo "Building and switching to new configuration..." + sudo nixos-rebuild switch --flake .#xps-nixos + ;; + build) + echo "Building configuration without switching..." + sudo nixos-rebuild build --flake .#xps-nixos + ;; + test) + echo "Building configuration for testing..." + sudo nixos-rebuild build --flake .#xps-nixos + echo "Configuration built successfully. Run 'sudo nixos-rebuild switch' to apply it." + ;; + update) + echo "Updating flake inputs..." + nix flake update --extra-experimental-features nix-command --extra-experimental-features flakes + ;; + *) + echo "Usage: $0 [switch|build|test|update]" + echo " switch: Build and switch to new configuration (default)" + echo " build: Build configuration without switching" + echo " test: Build configuration for testing" + echo " update: Update flake inputs" + exit 1 + ;; +esac diff --git a/secrets/secrets.yaml b/secrets/secrets.yaml deleted file mode 100644 index f78bdba..0000000 --- a/secrets/secrets.yaml +++ /dev/null @@ -1,24 +0,0 @@ -protonvpn: - norway_config: ENC[AES256_GCM,data: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,iv:v3/uGtvd1m7p/CDpqT7Ygusb9wF8A3kPqC/oljDBKSM=,tag:Fr6w63m+n0CM+rvV7VpYXg==,type:str] - us_config: ENC[AES256_GCM,data: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,iv:fmcUNirnR62KW70z/HCLedGo2774O+72lwy4hgYCZN8=,tag:ksIOzGj1m4WhubzddeKgiA==,type:str] - auth-user-pass: ENC[AES256_GCM,data:w1fjGadsiXlwBUcEIz2OVnMnfdOR9I5CcJu1kBoBYsGWBAib1zY9+nLhs9Pf4Iwou2SgRvo=,iv:92hpesCj74WyTKGJ6sNAdbuJrmwmq508HVJHevw1hxY=,tag:wn5NhAIktjJIQ94z6cuyIg==,type:str] -sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age18axr5n678k0n0vy763wau57fmtck3q03qgcz3r5kq9nkpkwgye4q5swrgq - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzdkJuOUNxamZLQU8zRXNh - S3N4OFF2ZlZ4dU1NeHg1YjEyV3NZWU9SOUU4CjhwSHZLSWwyUE96cTJ6SVkvVHFJ - REdrdkQ1d0VpYTFvREJLQXNUMzNKK1EKLS0tIDNGcDJUTUJOYzQ0cUY5Rm5adHVZ - U1IxTXlqN0F1Z1psUkdQNkpERmtEdFUKnm4kcuC16TAmqSZNAtDrqEGCLJfR+3qL - 4YitkQl2F5JBTMvn+9GZuAyp9SnOJaufGPVnJc9Lbhir9jS7aRjKgQ== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-01-03T05:18:58Z" - mac: ENC[AES256_GCM,data:ORSusXznCxIPNLo30my5D50d1Mh6oQdFGi2sQquO/E0jQ84CPwQIkfeDmzlIGAUsVrAHCXvBHViIqtMG/O2PICiSfDU4GIxwIO99Gaebwn8fbASQPhkfs4JMv7i5UqCCw53iqyE/MZSSQfpWO128yj82vSFKPdPLdf6o4t+0eo0=,iv:AiXNlfp6fjrhsWeqOdZOXmfInLXBlD5WHbMzRvBgKGk=,tag:iAdHLuRzjU/5G6k7pFf9YA==,type:str] - pgp: [] - unencrypted_suffix: _unencrypted - version: 3.8.1 diff --git a/system/boot.nix b/system/boot.nix new file mode 100644 index 0000000..438eb08 --- /dev/null +++ b/system/boot.nix @@ -0,0 +1,7 @@ +{ config, pkgs, ... }: + +{ + # Bootloader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; +} diff --git a/system/default.nix b/system/default.nix new file mode 100644 index 0000000..3a6a207 --- /dev/null +++ b/system/default.nix @@ -0,0 +1,14 @@ +{ config, pkgs, ... }: + +{ + imports = [ + ./boot.nix + ./networking.nix + ./locale.nix + ./services.nix + ./packages.nix + ./users.nix + ./nix.nix + ./programs.nix + ]; +} diff --git a/system/locale.nix b/system/locale.nix new file mode 100644 index 0000000..019f85a --- /dev/null +++ b/system/locale.nix @@ -0,0 +1,21 @@ +{ config, pkgs, ... }: + +{ + # Set your time zone. + time.timeZone = "America/Chicago"; + + # 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"; + }; +} diff --git a/system/networking.nix b/system/networking.nix new file mode 100644 index 0000000..65876e0 --- /dev/null +++ b/system/networking.nix @@ -0,0 +1,6 @@ +{ config, pkgs, ... }: + +{ + networking.hostName = "abra"; # Define your hostname. + networking.networkmanager.enable = true; +} diff --git a/system/nix.nix b/system/nix.nix new file mode 100644 index 0000000..121c0cb --- /dev/null +++ b/system/nix.nix @@ -0,0 +1,12 @@ +{ config, pkgs, ... }: + +{ + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + # 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/system/packages.nix b/system/packages.nix new file mode 100644 index 0000000..88e0ed2 --- /dev/null +++ b/system/packages.nix @@ -0,0 +1,71 @@ +{ config, pkgs, ... }: + +{ + # 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; [ + vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + alacritty + + # Wayland and Sway essentials + sway + xdg-desktop-portal-wlr + xdg-desktop-portal-gtk + wofi + swaylock + swayidle + # Additional packages for SDDM compatibility + qt5.qtwayland + qt6.qtwayland + + polkit # policy kit + ffmpeg # media player / encoding + xdg-utils # desktop integration tools + vivaldi + + nodejs_22 + code-cursor-fhs + jq + zellij + bibata-cursors + podman + podman-compose + yazi + wget + ]; + + fonts = { + enableDefaultPackages = true; + packages = with pkgs; [ + # Nerd Fonts - individual packages + nerd-fonts.jetbrains-mono + nerd-fonts.fira-code + nerd-fonts.sauce-code-pro # Source Code Pro equivalent + nerd-fonts.dejavu-sans-mono + + # Additional fonts for fallbacks + noto-fonts + noto-fonts-cjk-sans + noto-fonts-emoji + liberation_ttf + fira-code + fira-code-symbols + ]; + + fontconfig = { + enable = true; + defaultFonts = { + monospace = [ "JetBrainsMono Nerd Font" "Fira Code" ]; + sansSerif = [ "Noto Sans" "Liberation Sans" ]; + serif = [ "Noto Serif" "Liberation Serif" ]; + emoji = [ "Noto Color Emoji" ]; + }; + }; + }; +} diff --git a/system/programs.nix b/system/programs.nix new file mode 100644 index 0000000..f769e3b --- /dev/null +++ b/system/programs.nix @@ -0,0 +1,33 @@ +{ config, pkgs, ... }: + +{ + # Enable Sway at system level (required for SDDM to detect it) + programs.sway = { + enable = true; + wrapperFeatures.gtk = true; + }; + + # Enable Xwayland for compatibility + programs.xwayland.enable = true; + + # Environment variables for Wayland + environment.variables = { + XDG_SESSION_TYPE = "wayland"; + XDG_CURRENT_DESKTOP = "sway"; + QT_QPA_PLATFORM = "wayland"; + MOZ_ENABLE_WAYLAND = "1"; + _JAVA_AWT_WM_NONREPARENTING = "1"; + # Additional Wayland environment variables + GDK_BACKEND = "wayland,x11"; + CLUTTER_BACKEND = "wayland"; + }; + + # Ensure Wayland sessions are properly registered + environment.sessionVariables = { + XDG_SESSION_TYPE = "wayland"; + XDG_CURRENT_DESKTOP = "sway"; + }; + + # Enable other useful programs + programs.light.enable = true; +} diff --git a/system/services-gdm.nix b/system/services-gdm.nix new file mode 100644 index 0000000..e2f043f --- /dev/null +++ b/system/services-gdm.nix @@ -0,0 +1,26 @@ +{ config, pkgs, ... }: + +{ + # Alternative configuration using GDM instead of SDDM + # Uncomment this and comment out SDDM in services.nix if SDDM doesn't work + + # Enable GDM display manager (alternative to SDDM) + services.displayManager.gdm = { + enable = true; + wayland.enable = true; + settings = { + daemon = { + WaylandEnable = true; + }; + security = { + DisallowTCP = false; + }; + }; + }; + + # Autologin configuration for GDM + services.displayManager.autoLogin = { + enable = true; + user = "jared"; + }; +} diff --git a/system/services.nix b/system/services.nix new file mode 100644 index 0000000..d98a1a7 --- /dev/null +++ b/system/services.nix @@ -0,0 +1,78 @@ +{ config, pkgs, ... }: + +{ + # 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 X11 server (required for some applications and SDDM compatibility) + services.xserver.enable = true; + + services.openssh = { + enable = true; + settings = { + X11Forwarding = true; + PermitRootLogin = "no"; # no root + PasswordAuthentication = false; # no passwords + }; + }; + + # Enable SDDM display manager with proper Wayland support + services.displayManager.sddm = { + enable = true; + wayland.enable = true; + settings = { + General = { + DisplayServer = "wayland"; + GreeterEnvironment = "QT_WAYLAND_SHELL_INTEGRATION=layer-shell"; + Numlock = "on"; + HaltCommand = "/run/current-system/systemd/bin/systemctl poweroff"; + RebootCommand = "/run/current-system/systemd/bin/systemctl reboot"; + InputMethod = ""; + }; + Autologin = { + User = "jared"; + Session = "sway"; + }; + }; + }; + + # Libinput configuration for both X11 and Wayland + services.libinput = { + enable = true; + touchpad = { + naturalScrolling = true; + disableWhileTyping = true; # Optional: Palm rejection + }; + mouse = { + naturalScrolling = true; + }; + }; + + virtualisation.docker = { + enable = true; + }; + + # Security and session management + security.polkit.enable = true; + + # Ensure proper seat management for Wayland + services.seatd = { + enable = true; + }; +} diff --git a/system/users.nix b/system/users.nix new file mode 100644 index 0000000..1196d68 --- /dev/null +++ b/system/users.nix @@ -0,0 +1,14 @@ +{ config, pkgs, ... }: + +{ + # Define a user account. Don't forget to set a password with 'passwd'. + users.users.jared = { + isNormalUser = true; + description = "Jared"; + extraGroups = [ "networkmanager" "wheel" "video" "input" "audio" "docker" "seat" "render" ]; + # Set initial password (user should change this after first login) + initialPassword = "changeme"; + packages = with pkgs; [ + ]; + }; +}