diff --git a/base/default.nix b/base/default.nix new file mode 100644 index 0000000..2fd0713 --- /dev/null +++ b/base/default.nix @@ -0,0 +1,106 @@ +# Edet 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, + lib, + ... +}: { + imports = [ + # Include the results of the hardware scan. + ./hardware-configuration-custom.nix + ]; + + # Use the systemd-boot EFI boot loader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + boot.tmp.useTmpfs = true; + boot.kernelPackages = pkgs.linuxPackages_latest; + + networking.hostName = "posixlycorrect"; # Define your hostname. !!mover esto a platform + networking.networkmanager.enable = true; + + # Set your time zone. + time.timeZone = "America/Costa_Rica"; + + # The global useDHCP flag is deprecated, therefore explicitly set to false here. + # Per-interface useDHCP will be mandatory in the future, so this generated config + # replicates the default behaviour. + networking.useDHCP = false; + networking.interfaces.enp7s0.useDHCP = true; + networking.interfaces.wlp6s0.useDHCP = true; + + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; + console = { + font = "Lat2-Terminus16"; + keyMap = "us"; + }; + + # Enable the X11 windowing system. + services.xserver = { + enable = true; + xkb.layout = "us"; + displayManager.startx.enable = true; + }; + services.libinput.enable = true; + + hardware.opengl.enable = true; + + # Enable sound. + sound.enable = true; + hardware.pulseaudio.enable = true; + + programs.zsh.enable = true; + environment.pathsToLink = ["/share/zsh"]; + + users = { + users.fabian = { + isNormalUser = true; + uid = 1002; # nunca cambiar mi ID de usuario + group = "fabian"; + shell = pkgs.zsh; + extraGroups = ["users" "wheel" "networkmanager" "dialout" "libvirtd"]; + }; + groups.fabian.gid = 1002; + }; + + services.udev.packages = [ + pkgs.android-udev-rules + ]; + + users.users.temp = { + isNormalUser = true; + extraGroups = ["wheel"]; + }; + + nixpkgs.config.allowUnfree = true; + + virtualisation.libvirtd.qemu.package = pkgs.qemu_kvm; + virtualisation.libvirtd.qemu.ovmf.enable = true; + virtualisation.libvirtd.qemu.ovmf.packages = [pkgs.OVMFFull.fd]; + virtualisation.libvirtd.enable = true; + programs.dconf.enable = true; + # boot.kernelModules = [ "vfio" "vfio_iommu_type1" "vfio_pci" "vfio_virqfd" ]; + # boot.kernelParams = [ "amd_iommu=on" "iommu=pt" "vfio-pci.ids=1002:699f,1002:aae0" "video=efifb:off" ]; + virtualisation.libvirtd.onBoot = "start"; + + nix = { + package = pkgs.nixFlakes; + extraOptions = '' + experimental-features = nix-command flakes repl-flake + ''; + }; + + hardware.opengl.driSupport32Bit = true; + + services.openssh.enable = true; + + services.earlyoom = { + enable = true; + enableNotifications = true; + }; + + system.stateVersion = "21.11"; # No tocar esto +} diff --git a/base/hardware-configuration-custom.nix b/base/hardware-configuration-custom.nix new file mode 100644 index 0000000..a9feac6 --- /dev/null +++ b/base/hardware-configuration-custom.nix @@ -0,0 +1,43 @@ +{ + config, + lib, + pkgs, + modulesPath, + ... +}: let + subvol = subvol: { + device = "/dev/disk/by-uuid/645fdba0-5c03-4285-926b-facded1ee259"; + fsType = "btrfs"; + options = ["subvol=${subvol}" "compress=zstd" "noatime" "ssd"]; + }; +in { + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd = { + availableKernelModules = ["xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod"]; + luks.devices."toplevel" = { + device = "/dev/disk/by-uuid/58277baa-90d4-4a5e-a658-1b918b89130a"; + preLVM = false; + }; + }; + + fileSystems = { + "/" = subvol "root"; + "/toplevel" = subvol "/"; + "/boot" = { + device = "/dev/disk/by-uuid/B007-B007"; + fsType = "vfat"; + options = ["umask=027"]; + }; + + "/extern" = { + device = "/dev/disk/by-uuid/7d8d3ec9-b456-4e2a-9396-551dcaf7705b"; + fsType = "btrfs"; + options = ["noatime" "compress=zstd"]; + }; + }; + + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/base/platforms/posixlycorrect.nix b/base/platforms/posixlycorrect.nix new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/base/platforms/posixlycorrect.nix @@ -0,0 +1 @@ +{} diff --git a/flake.lock b/flake.lock index 0d1197c..44a5cb7 100644 --- a/flake.lock +++ b/flake.lock @@ -1,539 +1,6 @@ { "nodes": { - "attic": { - "inputs": { - "crane": "crane", - "flake-compat": "flake-compat_2", - "flake-utils": "flake-utils_2", - "nixpkgs": "nixpkgs", - "nixpkgs-stable": "nixpkgs-stable" - }, - "locked": { - "lastModified": 1720542474, - "narHash": "sha256-aKjJ/4l2I9+wNGTaOGRsuS3M1+IoTibqgEMPDikXm04=", - "owner": "zhaofengli", - "repo": "attic", - "rev": "6139576a3ce6bb992e0f6c3022528ec233e45f00", - "type": "github" - }, - "original": { - "owner": "zhaofengli", - "ref": "main", - "repo": "attic", - "type": "github" - } - }, - "authentik-nix": { - "inputs": { - "authentik-src": "authentik-src", - "flake-compat": "flake-compat", - "flake-parts": "flake-parts", - "flake-utils": "flake-utils", - "napalm": "napalm", - "nixpkgs": [ - "nixpkgs" - ], - "poetry2nix": "poetry2nix", - "systems": "systems" - }, - "locked": { - "lastModified": 1725809370, - "narHash": "sha256-uUc+TbF17Q9H00aj1cbZGB25Tob6PpZ9M0RoY/jOo6s=", - "owner": "nix-community", - "repo": "authentik-nix", - "rev": "0fd076529b40e7fc7304a398618cab76ff7e96c3", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "authentik-nix", - "type": "github" - } - }, - "authentik-src": { - "flake": false, - "locked": { - "lastModified": 1725718494, - "narHash": "sha256-X4Bwm7s6/8HcvKE+kyqwU+M1GEK/+RVHtDK1GpkuM4s=", - "owner": "goauthentik", - "repo": "authentik", - "rev": "f5580d311d01f2202b666f76931ed04f30b9ec30", - "type": "github" - }, - "original": { - "owner": "goauthentik", - "ref": "version/2024.8.1", - "repo": "authentik", - "type": "github" - } - }, - "cachix": { - "inputs": { - "devenv": "devenv", - "flake-compat": "flake-compat_4", - "nixpkgs": "nixpkgs_3", - "pre-commit-hooks": "pre-commit-hooks" - }, - "locked": { - "lastModified": 1719923519, - "narHash": "sha256-7Rhljj2fsklFRsu+eq7N683Z9qukmreMEj5C1GqCrSA=", - "owner": "cachix", - "repo": "cachix", - "rev": "4e9e71f78b9500fa6210cf1eaa4d75bdbab777c3", - "type": "github" - }, - "original": { - "owner": "cachix", - "ref": "master", - "repo": "cachix", - "type": "github" - } - }, - "cachix_2": { - "inputs": { - "devenv": "devenv_2", - "flake-compat": [ - "conduwuit", - "cachix", - "devenv", - "flake-compat" - ], - "nixpkgs": [ - "conduwuit", - "cachix", - "devenv", - "nixpkgs" - ], - "pre-commit-hooks": [ - "conduwuit", - "cachix", - "devenv", - "pre-commit-hooks" - ] - }, - "locked": { - "lastModified": 1712055811, - "narHash": "sha256-7FcfMm5A/f02yyzuavJe06zLa9hcMHsagE28ADcmQvk=", - "owner": "cachix", - "repo": "cachix", - "rev": "02e38da89851ec7fec3356a5c04bc8349cae0e30", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "cachix", - "type": "github" - } - }, - "complement": { - "flake": false, - "locked": { - "lastModified": 1720637557, - "narHash": "sha256-oZz6nCmFmdJZpC+K1iOG2KkzTI6rlAmndxANPDVU7X0=", - "owner": "matrix-org", - "repo": "complement", - "rev": "0d14432e010482ea9e13a6f7c47c1533c0c9d62f", - "type": "github" - }, - "original": { - "owner": "matrix-org", - "ref": "main", - "repo": "complement", - "type": "github" - } - }, - "conduwuit": { - "inputs": { - "attic": "attic", - "cachix": "cachix", - "complement": "complement", - "crane": "crane_2", - "fenix": "fenix", - "flake-compat": "flake-compat_6", - "flake-utils": "flake-utils_4", - "liburing": "liburing", - "nix-filter": "nix-filter", - "nixpkgs": [ - "unstable" - ], - "rocksdb": "rocksdb" - }, - "locked": { - "lastModified": 1721105087, - "narHash": "sha256-t74TUSswsCkOdZCKjgP74qEHKg78ShKTkP6x9/zqYX4=", - "owner": "girlbossceo", - "repo": "conduwuit", - "rev": "c29197b3f457cf72197ef5251f9815107b2526d7", - "type": "github" - }, - "original": { - "owner": "girlbossceo", - "ref": "v0.4.5", - "repo": "conduwuit", - "type": "github" - } - }, - "crane": { - "inputs": { - "nixpkgs": [ - "conduwuit", - "attic", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1717025063, - "narHash": "sha256-dIubLa56W9sNNz0e8jGxrX3CAkPXsq7snuFA/Ie6dn8=", - "owner": "ipetkov", - "repo": "crane", - "rev": "480dff0be03dac0e51a8dfc26e882b0d123a450e", - "type": "github" - }, - "original": { - "owner": "ipetkov", - "repo": "crane", - "type": "github" - } - }, - "crane_2": { - "inputs": { - "nixpkgs": [ - "conduwuit", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1720546058, - "narHash": "sha256-iU2yVaPIZm5vMGdlT0+57vdB/aPq/V5oZFBRwYw+HBM=", - "owner": "ipetkov", - "repo": "crane", - "rev": "2d83156f23c43598cf44e152c33a59d3892f8b29", - "type": "github" - }, - "original": { - "owner": "ipetkov", - "ref": "master", - "repo": "crane", - "type": "github" - } - }, - "devenv": { - "inputs": { - "cachix": "cachix_2", - "flake-compat": [ - "conduwuit", - "cachix", - "flake-compat" - ], - "nix": "nix_2", - "nixpkgs": [ - "conduwuit", - "cachix", - "nixpkgs" - ], - "pre-commit-hooks": [ - "conduwuit", - "cachix", - "pre-commit-hooks" - ] - }, - "locked": { - "lastModified": 1719759336, - "narHash": "sha256-3a34VL/QnHprl5gMy9xlx6d8J+iNp+W88Ex8smkgH9M=", - "owner": "cachix", - "repo": "devenv", - "rev": "bb32aa986f2f695385e54428d0eaf7d05b31466e", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "devenv", - "type": "github" - } - }, - "devenv_2": { - "inputs": { - "flake-compat": [ - "conduwuit", - "cachix", - "devenv", - "cachix", - "flake-compat" - ], - "nix": "nix", - "nixpkgs": "nixpkgs_2", - "poetry2nix": "poetry2nix_2", - "pre-commit-hooks": [ - "conduwuit", - "cachix", - "devenv", - "cachix", - "pre-commit-hooks" - ] - }, - "locked": { - "lastModified": 1708704632, - "narHash": "sha256-w+dOIW60FKMaHI1q5714CSibk99JfYxm0CzTinYWr+Q=", - "owner": "cachix", - "repo": "devenv", - "rev": "2ee4450b0f4b95a1b90f2eb5ffea98b90e48c196", - "type": "github" - }, - "original": { - "owner": "cachix", - "ref": "python-rewrite", - "repo": "devenv", - "type": "github" - } - }, - "fenix": { - "inputs": { - "nixpkgs": [ - "conduwuit", - "nixpkgs" - ], - "rust-analyzer-src": "rust-analyzer-src" - }, - "locked": { - "lastModified": 1720852044, - "narHash": "sha256-3NBYz8VuXuKU+8ONd9NFafCNjPEGHIZQ2Mdoam1a4mY=", - "owner": "nix-community", - "repo": "fenix", - "rev": "5087b12a595ee73131a944d922f24d81dae05725", - "type": "github" - }, - "original": { - "owner": "nix-community", - "ref": "main", - "repo": "fenix", - "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": 1673956053, - "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_3": { - "flake": false, - "locked": { - "lastModified": 1673956053, - "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_4": { - "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_5": { - "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_6": { - "flake": false, - "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", - "type": "github" - }, - "original": { - "owner": "edolstra", - "ref": "master", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-parts": { - "inputs": { - "nixpkgs-lib": "nixpkgs-lib" - }, - "locked": { - "lastModified": 1725234343, - "narHash": "sha256-+ebgonl3NbiKD2UD0x4BszCZQ6sTfL4xioaM49o5B3Y=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "567b938d64d4b4112ee253b9274472dc3a346eb6", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, "flake-utils": { - "inputs": { - "systems": [ - "authentik-nix", - "systems" - ] - }, - "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_2": { - "locked": { - "lastModified": 1667395993, - "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_3": { - "inputs": { - "systems": "systems_2" - }, - "locked": { - "lastModified": 1689068808, - "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_4": { - "inputs": { - "systems": "systems_3" - }, - "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", - "type": "github" - }, - "original": { - "owner": "numtide", - "ref": "main", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_5": { - "inputs": { - "systems": "systems_4" - }, - "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_6": { - "inputs": { - "systems": "systems_5" - }, - "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_7": { "locked": { "lastModified": 1659877975, "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", @@ -548,29 +15,6 @@ "type": "github" } }, - "gitignore": { - "inputs": { - "nixpkgs": [ - "conduwuit", - "cachix", - "pre-commit-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" - } - }, "hm-isolation": { "locked": { "lastModified": 1675806557, @@ -593,11 +37,11 @@ ] }, "locked": { - "lastModified": 1725703823, - "narHash": "sha256-tDgM4d8mLK0Hd6YMB2w1BqMto1XBXADOzPEaLl10VI4=", + "lastModified": 1720042825, + "narHash": "sha256-A0vrUB6x82/jvf17qPCpxaM+ulJnD8YZwH9Ci0BsAzE=", "owner": "nix-community", "repo": "home-manager", - "rev": "208df2e558b73b6a1f0faec98493cb59a25f62ba", + "rev": "e1391fb22e18a36f57e6999c7a9f966dc80ac073", "type": "github" }, "original": { @@ -607,197 +51,10 @@ "type": "github" } }, - "homepage": { - "inputs": { - "flake-utils": "flake-utils_6", - "nixpkgs": "nixpkgs_4" - }, - "locked": { - "lastModified": 1725437989, - "narHash": "sha256-wxBIg9A4X3nvWpgpiG/MjkEIOH3Oxy4Qdhq50BF42jk=", - "ref": "master", - "rev": "a49523cc42d61e0dac0d3dcb01cc1ca3fad7070c", - "revCount": 19, - "type": "git", - "url": "https://git.posixlycorrect.com/fabian/homepage.git" - }, - "original": { - "ref": "master", - "type": "git", - "url": "https://git.posixlycorrect.com/fabian/homepage.git" - } - }, - "impermanence": { - "locked": { - "lastModified": 1725690722, - "narHash": "sha256-4qWg9sNh5g1qPGO6d/GV2ktY+eDikkBTbWSg5/iD2nY=", - "owner": "nix-community", - "repo": "impermanence", - "rev": "63f4d0443e32b0dd7189001ee1894066765d18a5", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "impermanence", - "type": "github" - } - }, - "liburing": { - "flake": false, - "locked": { - "lastModified": 1720798442, - "narHash": "sha256-gtPppAoksMLW4GuruQ36nf4EAqIA1Bs6V9Xcx8dBxrQ=", - "owner": "axboe", - "repo": "liburing", - "rev": "1d674f83b7d0f07553ac44d99a401b05853d9dbe", - "type": "github" - }, - "original": { - "owner": "axboe", - "ref": "master", - "repo": "liburing", - "type": "github" - } - }, - "mediawikiSkinCitizen": { - "flake": false, - "locked": { - "lastModified": 1724097552, - "narHash": "sha256-+o5FDWMrEqnva5qcdc45wAYyE2ZtUhEjygUGVt0HsaA=", - "owner": "StarCitizenTools", - "repo": "mediawiki-skins-Citizen", - "rev": "28cd4e18b52aed3270fe7b55bff4545c8314a687", - "type": "github" - }, - "original": { - "owner": "StarCitizenTools", - "ref": "v2.27.0", - "repo": "mediawiki-skins-Citizen", - "type": "github" - } - }, - "napalm": { - "inputs": { - "flake-utils": [ - "authentik-nix", - "flake-utils" - ], - "nixpkgs": [ - "authentik-nix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1725806412, - "narHash": "sha256-lGZjkjds0p924QEhm/r0BhAxbHBJE1xMOldB/HmQH04=", - "owner": "willibutz", - "repo": "napalm", - "rev": "b492440d9e64ae20736d3bec5c7715ffcbde83f5", - "type": "github" - }, - "original": { - "owner": "willibutz", - "ref": "avoid-foldl-stack-overflow", - "repo": "napalm", - "type": "github" - } - }, - "nix": { - "inputs": { - "flake-compat": "flake-compat_3", - "nixpkgs": [ - "conduwuit", - "cachix", - "devenv", - "cachix", - "devenv", - "nixpkgs" - ], - "nixpkgs-regression": "nixpkgs-regression" - }, - "locked": { - "lastModified": 1712911606, - "narHash": "sha256-BGvBhepCufsjcUkXnEEXhEVjwdJAwPglCC2+bInc794=", - "owner": "domenkozar", - "repo": "nix", - "rev": "b24a9318ea3f3600c1e24b4a00691ee912d4de12", - "type": "github" - }, - "original": { - "owner": "domenkozar", - "ref": "devenv-2.21", - "repo": "nix", - "type": "github" - } - }, - "nix-filter": { - "locked": { - "lastModified": 1710156097, - "narHash": "sha256-1Wvk8UP7PXdf8bCCaEoMnOT1qe5/Duqgj+rL8sRQsSM=", - "owner": "numtide", - "repo": "nix-filter", - "rev": "3342559a24e85fc164b295c3444e8a139924675b", - "type": "github" - }, - "original": { - "owner": "numtide", - "ref": "main", - "repo": "nix-filter", - "type": "github" - } - }, - "nix-github-actions": { - "inputs": { - "nixpkgs": [ - "authentik-nix", - "poetry2nix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1703863825, - "narHash": "sha256-rXwqjtwiGKJheXB43ybM8NwWB8rO2dSRrEqes0S7F5Y=", - "owner": "nix-community", - "repo": "nix-github-actions", - "rev": "5163432afc817cf8bd1f031418d1869e4c9d5547", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "nix-github-actions", - "type": "github" - } - }, - "nix-github-actions_2": { - "inputs": { - "nixpkgs": [ - "conduwuit", - "cachix", - "devenv", - "cachix", - "devenv", - "poetry2nix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1688870561, - "narHash": "sha256-4UYkifnPEw1nAzqqPOTL2MvWtm3sNGw1UTYTalkTcGY=", - "owner": "nix-community", - "repo": "nix-github-actions", - "rev": "165b1650b753316aa7f1787f3005a8d2da0f5301", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "nix-github-actions", - "type": "github" - } - }, "nixGL": { "inputs": { - "flake-utils": "flake-utils_7", - "nixpkgs": "nixpkgs_5" + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" }, "locked": { "lastModified": 1713543440, @@ -813,175 +70,7 @@ "type": "github" } }, - "nix_2": { - "inputs": { - "flake-compat": [ - "conduwuit", - "cachix", - "devenv", - "flake-compat" - ], - "nixpkgs": [ - "conduwuit", - "cachix", - "devenv", - "nixpkgs" - ], - "nixpkgs-regression": "nixpkgs-regression_2" - }, - "locked": { - "lastModified": 1712911606, - "narHash": "sha256-BGvBhepCufsjcUkXnEEXhEVjwdJAwPglCC2+bInc794=", - "owner": "domenkozar", - "repo": "nix", - "rev": "b24a9318ea3f3600c1e24b4a00691ee912d4de12", - "type": "github" - }, - "original": { - "owner": "domenkozar", - "ref": "devenv-2.21", - "repo": "nix", - "type": "github" - } - }, "nixpkgs": { - "locked": { - "lastModified": 1711401922, - "narHash": "sha256-QoQqXoj8ClGo0sqD/qWKFWezgEwUL0SUh37/vY2jNhc=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "07262b18b97000d16a4bdb003418bd2fb067a932", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-lib": { - "locked": { - "lastModified": 1725233747, - "narHash": "sha256-Ss8QWLXdr2JCBPcYChJhz4xJm+h/xjl4G0c0XlP6a74=", - "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/356624c12086a18f2ea2825fed34523d60ccc4e3.tar.gz" - }, - "original": { - "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/356624c12086a18f2ea2825fed34523d60ccc4e3.tar.gz" - } - }, - "nixpkgs-regression": { - "locked": { - "lastModified": 1643052045, - "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", - "type": "github" - } - }, - "nixpkgs-regression_2": { - "locked": { - "lastModified": 1643052045, - "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", - "type": "github" - } - }, - "nixpkgs-stable": { - "locked": { - "lastModified": 1711460390, - "narHash": "sha256-akSgjDZL6pVHEfSE6sz1DNSXuYX6hq+P/1Z5IoYWs7E=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "44733514b72e732bd49f5511bd0203dea9b9a434", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-23.11", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-stable_2": { - "locked": { - "lastModified": 1718811006, - "narHash": "sha256-0Y8IrGhRmBmT7HHXlxxepg2t8j1X90++qRN3lukGaIk=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "03d771e513ce90147b65fe922d87d3a0356fc125", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-23.11", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1692808169, - "narHash": "sha256-x9Opq06rIiwdwGeK2Ykj69dNc2IvUH1fY55Wm7atwrE=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "9201b5ff357e781bf014d0330d18555695df7ba8", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1719848872, - "narHash": "sha256-H3+EC5cYuq+gQW8y0lSrrDZfH71LB4DAf+TDFyvwCNA=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "00d80d13810dbfea8ab4ed1009b09100cca86ba8", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_4": { - "locked": { - "lastModified": 1719426051, - "narHash": "sha256-yJL9VYQhaRM7xs0M867ZFxwaONB9T2Q4LnGo1WovuR4=", - "path": "/nix/store/f0ddmw6s86y567yg06h5019z72szbzch-source", - "rev": "89c49874fb15f4124bf71ca5f42a04f2ee5825fd", - "type": "path" - }, - "original": { - "id": "nixpkgs", - "type": "indirect" - } - }, - "nixpkgs_5": { "locked": { "lastModified": 1660551188, "narHash": "sha256-a1LARMMYQ8DPx1BgoI/UN4bXe12hhZkCNqdxNi6uS0g=", @@ -996,13 +85,13 @@ "type": "github" } }, - "nixpkgs_6": { + "nixpkgs_2": { "locked": { - "lastModified": 1725693463, - "narHash": "sha256-ZPzhebbWBOr0zRWW10FfqfbJlan3G96/h3uqhiFqmwg=", + "lastModified": 1725001927, + "narHash": "sha256-eV+63gK0Mp7ygCR0Oy4yIYSNcum2VQwnZamHxYTNi+M=", "owner": "nixos", "repo": "nixpkgs", - "rev": "68e7dce0a6532e876980764167ad158174402c6f", + "rev": "6e99f2a27d600612004fbd2c3282d614bfee6421", "type": "github" }, "original": { @@ -1014,11 +103,11 @@ }, "nur": { "locked": { - "lastModified": 1725824564, - "narHash": "sha256-tl7QZx6moG1rT8drttY4C/bztng1TafIr036Bf8yzeo=", + "lastModified": 1725475632, + "narHash": "sha256-is3Pft+K3MLR+nFQcjzmfvi4SVrguP7yDadfcFM0tQo=", "owner": "nix-community", "repo": "NUR", - "rev": "4ade93389a0440e7e65f96cbaa2d515d56f9f99e", + "rev": "d7ea0f74c7194ded318f12320724f481899d196a", "type": "github" }, "original": { @@ -1027,244 +116,23 @@ "type": "github" } }, - "poetry2nix": { - "inputs": { - "flake-utils": [ - "authentik-nix", - "flake-utils" - ], - "nix-github-actions": "nix-github-actions", - "nixpkgs": [ - "authentik-nix", - "nixpkgs" - ], - "systems": [ - "authentik-nix", - "systems" - ], - "treefmt-nix": "treefmt-nix" - }, - "locked": { - "lastModified": 1725532428, - "narHash": "sha256-dCfawQDwpukcwQw++Cn/3LIh/RZMmH+k3fm91Oc5Pf0=", - "owner": "nix-community", - "repo": "poetry2nix", - "rev": "a313fd7169ae43ecd1a2ea2f1e4899fe3edba4d2", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "poetry2nix", - "type": "github" - } - }, - "poetry2nix_2": { - "inputs": { - "flake-utils": "flake-utils_3", - "nix-github-actions": "nix-github-actions_2", - "nixpkgs": [ - "conduwuit", - "cachix", - "devenv", - "cachix", - "devenv", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1692876271, - "narHash": "sha256-IXfZEkI0Mal5y1jr6IRWMqK8GW2/f28xJenZIPQqkY0=", - "owner": "nix-community", - "repo": "poetry2nix", - "rev": "d5006be9c2c2417dafb2e2e5034d83fabd207ee3", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "poetry2nix", - "type": "github" - } - }, - "pre-commit-hooks": { - "inputs": { - "flake-compat": "flake-compat_5", - "gitignore": "gitignore", - "nixpkgs": [ - "conduwuit", - "cachix", - "nixpkgs" - ], - "nixpkgs-stable": "nixpkgs-stable_2" - }, - "locked": { - "lastModified": 1719259945, - "narHash": "sha256-F1h+XIsGKT9TkGO3omxDLEb/9jOOsI6NnzsXFsZhry4=", - "owner": "cachix", - "repo": "pre-commit-hooks.nix", - "rev": "0ff4381bbb8f7a52ca4a851660fc7a437a4c6e07", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "pre-commit-hooks.nix", - "type": "github" - } - }, - "rocksdb": { - "flake": false, - "locked": { - "lastModified": 1720900786, - "narHash": "sha256-Vta9Um/RRuWwZ46BjXftV06iWLm/j/9MX39emXUvSAY=", - "owner": "girlbossceo", - "repo": "rocksdb", - "rev": "911f4243e69c2e320a7a209bf1f5f3ff5f825495", - "type": "github" - }, - "original": { - "owner": "girlbossceo", - "ref": "v9.4.0", - "repo": "rocksdb", - "type": "github" - } - }, "root": { "inputs": { - "authentik-nix": "authentik-nix", - "conduwuit": "conduwuit", - "flake-utils": "flake-utils_5", "hm-isolation": "hm-isolation", "home-manager": "home-manager", - "homepage": "homepage", - "impermanence": "impermanence", - "mediawikiSkinCitizen": "mediawikiSkinCitizen", "nixGL": "nixGL", - "nixpkgs": "nixpkgs_6", + "nixpkgs": "nixpkgs_2", "nur": "nur", - "unstable": "unstable", - "vpsadminos": "vpsadminos" - } - }, - "rust-analyzer-src": { - "flake": false, - "locked": { - "lastModified": 1720717809, - "narHash": "sha256-6I+fm+nTLF/iaj7ffiFGlSY7POmubwUaPA/Wq0Bm53M=", - "owner": "rust-lang", - "repo": "rust-analyzer", - "rev": "ffbc5ad993d5cd2f3b8bcf9a511165470944ab91", - "type": "github" - }, - "original": { - "owner": "rust-lang", - "ref": "nightly", - "repo": "rust-analyzer", - "type": "github" - } - }, - "systems": { - "locked": { - "lastModified": 1689347949, - "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", - "owner": "nix-systems", - "repo": "default-linux", - "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default-linux", - "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" - } - }, - "systems_3": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, - "systems_4": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, - "systems_5": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, - "treefmt-nix": { - "inputs": { - "nixpkgs": [ - "authentik-nix", - "poetry2nix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1719749022, - "narHash": "sha256-ddPKHcqaKCIFSFc/cvxS14goUhCOAwsM1PbMr0ZtHMg=", - "owner": "numtide", - "repo": "treefmt-nix", - "rev": "8df5ff62195d4e67e2264df0b7f5e8c9995fd0bd", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "treefmt-nix", - "type": "github" + "unstable": "unstable" } }, "unstable": { "locked": { - "lastModified": 1725634671, - "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=", + "lastModified": 1725103162, + "narHash": "sha256-Ym04C5+qovuQDYL/rKWSR+WESseQBbNAe5DsXNx5trY=", "owner": "nixos", "repo": "nixpkgs", - "rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c", + "rev": "12228ff1752d7b7624a54e9c1af4b222b3c1073b", "type": "github" }, "original": { @@ -1273,21 +141,6 @@ "repo": "nixpkgs", "type": "github" } - }, - "vpsadminos": { - "locked": { - "lastModified": 1725810385, - "narHash": "sha256-+6UULi05KMHmLfhlrNGhMdLZUoQeC5Dc1nLFdINyeyI=", - "owner": "vpsfreecz", - "repo": "vpsadminos", - "rev": "37c5eb47ca3f11deac83e4ada20a6c21d5487f29", - "type": "github" - }, - "original": { - "owner": "vpsfreecz", - "repo": "vpsadminos", - "type": "github" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 1afd240..90e0a58 100644 --- a/flake.nix +++ b/flake.nix @@ -12,121 +12,77 @@ impermanence.url = "github:nix-community/impermanence"; hm-isolation.url = "github:3442/hm-isolation"; nixGL.url = "github:guibou/nixGL"; + flake-utils.url = "github:numtide/flake-utils"; - vpsadminos.url = "github:vpsfreecz/vpsadminos"; - - homepage.url = "git+https://git.posixlycorrect.com/fabian/homepage.git?ref=master"; - - conduwuit = { - url = "github:girlbossceo/conduwuit?ref=v0.4.5"; - #FIXME: Podrá volver a "nixpkgs" una vez que rocksdb.enableLiburing llegue a stable - inputs.nixpkgs.follows = "unstable"; - }; - - authentik-nix = { - url = "github:nix-community/authentik-nix"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - - mediawikiSkinCitizen = { - url = "github:StarCitizenTools/mediawiki-skins-Citizen/v2.27.0"; - flake = false; - }; }; - outputs = flakes @ { + outputs = { self, nixpkgs, unstable, home-manager, nur, - impermanence, hm-isolation, nixGL, - flake-utils, - vpsadminos, - homepage, - conduwuit, - mediawikiSkinCitizen, - authentik-nix, + ... }: let system = "x86_64-linux"; - importPkgs = flake: - import flake { + pkgs = import nixpkgs { + inherit system; + }; + + inherit (pkgs) lib; + + base = platform: { + name = platform; + value = nixpkgs.lib.nixosSystem { inherit system; - config = import ./pkgs/config nixpkgs.lib; - overlays = [nur.overlay self.overlays.default]; + modules = [(import ./base)]; }; - - pkgs = importPkgs nixpkgs; - - inherit (pkgs.local.lib) importAll; - - local = import ./pkgs; - in - with pkgs.lib; { - formatter.${system} = pkgs.alejandra; - packages.${system} = pkgs.local; - - overlays.default = final: prev: let - locals = local final prev; - in - locals.override - // { - local = locals; - unstable = importPkgs unstable; - }; - - nixosConfigurations = let - nixosSystem = {modules}: - makeOverridable nixpkgs.lib.nixosSystem { - inherit modules pkgs system; - - specialArgs = { - inherit flakes; - }; - }; - - hostConfig = host: - nixosSystem { - modules = [ - ./sys - host - ]; - }; - in - mapAttrs (_: hostConfig) (importAll {root = ./sys/platforms;}); - - homeConfigurations = let - registry = {...}: { - config.nix.registry = mapAttrs (_: - value { - flake = value; - }) - flakes; - }; - - home = platform: - home-manager.lib.homeManagerConfiguration { - inherit pkgs; - - modules = [ - ./home - platforms - registry - hm-isolation.homeManagerModule - ]; - }; - - platformHome = platform: let - value = home platform; - in { - inherit value; - name = "${value.config.home.username}@${value.config.local.hostname}"; - }; - in - mapAttrs' (_: platformHome) (importAll {root = ./home/platforms;}); }; + + home = platform: { + name = "fabian@${platform}"; + value = home-manager.lib.homeManagerConfiguration { + inherit pkgs; + + modules = [ + (import ./home { + inherit self nixpkgs unstable hm-isolation nixGL; + }) + + ./home/platforms/${platform}.nix + + { + config.local = {inherit platform;}; + } + ]; + }; + }; + + localPkgs = import ./pkgs; + + platforms = domain: + map + (lib.removeSuffix ".nix") + (lib.attrNames (builtins.readDir ./${domain}/platforms)); + + configs = domain: builder: + lib.listToAttrs + (map builder (platforms domain)); + in { + nixosConfigurations = configs "base" base; + homeConfigurations = configs "home" home; + packages.${system} = localPkgs pkgs; + formatter.${system} = pkgs.alejandra; + + overlay = self: super: { + unstable = import unstable { + inherit (super) config system; + }; + local = localPkgs self; + }; + }; } diff --git a/home/accounts.nix b/home/accounts.nix new file mode 100644 index 0000000..97e7647 --- /dev/null +++ b/home/accounts.nix @@ -0,0 +1,82 @@ +{ + lib, + config, + ... +}: +with lib; { + config = mkIf (!config.home.isolation.active) { + accounts.email.maildirBasePath = "${config.home.homeDirectory}/mail"; + accounts.email.accounts = { + "default" = { + address = "fabian@posixlycorrect.com"; + userName = "fabianmontero@fastmail.com"; + realName = "fabian"; + primary = true; + flavor = "fastmail.com"; + + smtp = { + host = "smtp.fastmail.com"; + port = 465; + }; + imap = { + host = "imap.fastmail.com"; + port = 993; + tls.enable = true; + }; + + passwordCommand = "gpg -d ${config.home.homeDirectory}/secrets/fastmail.password.gpg 2> /dev/null"; + + gpg = { + encryptByDefault = true; + signByDefault = true; + key = "7AA277E604A4173916BBB4E91FFAC35E1798174F"; + }; + + thunderbird = { + enable = true; + settings = id: { + "mail.openpgp.allow_external_gnupg" = true; + }; + }; + neomutt = { + enable = true; + }; + + mbsync = { + enable = true; + create = "both"; + expunge = "both"; + remove = "both"; + }; + }; + }; + + programs = { + mbsync.enable = true; + thunderbird = { + enable = true; + profiles = { + "default" = { + isDefault = true; + }; + }; + }; + neomutt = { + enable = true; + sort = "date-received"; + vimKeys = true; + sidebar = { + enable = true; + }; + #settings = { + # maildir_check_cur = "yes"; + #}; + extraConfig = '' + mailboxes `find ~/mail/ -type d -name cur -printf '%h '` + timeout-hook 'echo `mbsync -a`' + startup-hook 'echo `mbsync -a`' + ''; + }; + }; + }; +} diff --git a/home/allowUnfreeWhitelist.nix b/home/allowUnfreeWhitelist.nix new file mode 100644 index 0000000..a71519f --- /dev/null +++ b/home/allowUnfreeWhitelist.nix @@ -0,0 +1,23 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; { + nixpkgs.config.allowUnfreePredicate = pkg: + builtins.elem (lib.getName pkg) [ + "discord" + "pycharm-professional" + "rar" + "spotify" + "spotify-unwrapped" + "steam" + "steam-original" + "steam-run" + "teams" + "vscode-extension-ms-vscode-cpptools" + "vmware-horizon-client" + "zoom" + ]; +} diff --git a/home/apps/default.nix b/home/apps/default.nix new file mode 100644 index 0000000..9155e3a --- /dev/null +++ b/home/apps/default.nix @@ -0,0 +1,17 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; let + cfg = config.local.apps; +in { + options.local.apps.enable = mkEnableOption "Applications and tools"; + imports = [ + ./library.nix + ./steam + ./terminal + ./virtmanager.nix + ]; +} diff --git a/home/apps/library.nix b/home/apps/library.nix new file mode 100644 index 0000000..ffc3f5b --- /dev/null +++ b/home/apps/library.nix @@ -0,0 +1,55 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; let + cfg = config.local.apps.defaultApps; +in { + options.local.apps.defaultApps.enable = mkEnableOption "Default app library"; + config = mkIf cfg.enable { + home.packages = with pkgs; [ + chromium + darktable + deluge + discord + element-desktop + firefox + gperftools + gwenview + helix + libreoffice-fresh + lutris + mpv + neovim + obs-studio + openrct2 + pavucontrol + pdfarranger + prismlauncher + qpdfview + runelite + spotify + tdesktop + vlc + vpsfree-client + vscodium-fhs + zola + zoom-us + ]; + + xdg.mimeApps.defaultApplications = { + "application/x-extension-htm" = ["firefox.desktop"]; + "application/x-extension-html" = ["firefox.desktop"]; + "application/x-extension-shtml" = ["firefox.desktop"]; + "application/x-extension-xht" = ["firefox.desktop"]; + "application/x-extension-xhtml" = ["firefox.desktop"]; + "application/xhtml+xml" = ["firefox.desktop"]; + "text/html" = ["firefox.desktop"]; + "x-scheme-handler/http" = ["firefox.desktop"]; + "x-scheme-handler/https" = ["firefox.desktop"]; + "application/pdf" = ["qpdfview.desktop"]; + }; + }; +} diff --git a/home/apps/steam/default.nix b/home/apps/steam/default.nix new file mode 100644 index 0000000..534d4ae --- /dev/null +++ b/home/apps/steam/default.nix @@ -0,0 +1,19 @@ +{ + pkgs, + lib, + config, + ... +}: +with lib; let + cfg = config.local.apps.steam; +in { + options.local.apps.steam.enable = mkEnableOption "Steam"; + config = mkIf cfg.enable { + home.packages = [ + (pkgs.callPackage ./package.nix {}) + pkgs.protonup + pkgs.winetricks + pkgs.protontricks + ]; + }; +} diff --git a/home/apps/steam/package.nix b/home/apps/steam/package.nix new file mode 100644 index 0000000..19f241f --- /dev/null +++ b/home/apps/steam/package.nix @@ -0,0 +1,9 @@ +{ + writeShellScriptBin, + steam-run, + steam, + ... +}: +writeShellScriptBin "steam" '' + exec ${steam-run}/bin/steam-run ${steam}/bin/steam -console +'' diff --git a/home/apps/terminal/default.nix b/home/apps/terminal/default.nix new file mode 100644 index 0000000..a32486d --- /dev/null +++ b/home/apps/terminal/default.nix @@ -0,0 +1,35 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; let + cfg = config.local.apps.terminal; +in { + options.local.apps.terminal.enable = mkEnableOption "Terminal emulator settings"; + config.programs = mkIf cfg.enable { + kitty = { + enable = true; + extraConfig = import ./kitty.conf.nix; + }; + + tmux = { + enable = true; + aggressiveResize = true; + clock24 = true; + escapeTime = 10; + terminal = "xterm-256color"; + keyMode = "emacs"; + + extraConfig = '' + set -g mouse on + set -ga update-environment " LIFT_PID" + set -g set-titles on + set -g renumber-windows on + set -sa terminal-overrides ',xterm-termite:RGB' + set -g status-right "#{?window_bigger,[#{window_offset_x}#,#{window_offset_y}] ,} %H:%M %d-%b-%y" + ''; + }; + }; +} diff --git a/home/apps/terminal/kitty.conf.nix b/home/apps/terminal/kitty.conf.nix new file mode 100644 index 0000000..82904a9 --- /dev/null +++ b/home/apps/terminal/kitty.conf.nix @@ -0,0 +1,87 @@ +'' + # Fonts + font_family JetBrains Mono Medium + bold_font JetBrains Mono Bold + italic_font JetBrains Mono Italic + bold_italic_font JetBrains Mono Bold Italic + + font_size 15 + disable_ligatures cursor + + initial_window_width 1200 + initial_window_height 600 + + # Cursor + cursor_shape beam + cursor_beam_thickness 1.9 + cursor_stop_blinking_after 0 + + # Audio + enable_audio_bell no + + # Tabs + tab_bar_style separator + tab_separator " | " + tab_title_template "{index}: {title}" + + # Color + # special + foreground #ffffff + foreground_bold #ffffff + cursor #ffffff + background #000000 + background_opacity 1 + + # Shortcuts + map ctrl+shift+c copy_to_clipboard + map ctrl+shift+v paste_from_clipboard + map ctrl+shift+s paste_from_selection + map shift+insert paste_from_selection + + map ctrl+shift+up scroll_line_up + map ctrl+shift+down scroll_line_down + map ctrl+shift+page_up scroll_page_up + map ctrl+shift+page_down scroll_page_down + map ctrl+shift+home scroll_home + map ctrl+shift+end scroll_end + + map ctrl+shift+enter new_window + map ctrl+alt+enter launch --cwd=current + map ctrl+shift+w close_window + map ctrl+shift+] next_window + map ctrl+shift+[ previous_window + map ctrl+shift+1 first_window + map ctrl+shift+2 second_window + map ctrl+shift+3 third_window + map ctrl+shift+4 fourth_window + map ctrl+shift+5 fifth_window + map ctrl+shift+6 sixth_window + map ctrl+shift+7 seventh_window + map ctrl+shift+8 eighth_window + map ctrl+shift+9 ninth_window + map ctrl+shift+0 tenth_window + + map ctrl+shift+right next_tab + map ctrl+shift+left previous_tab + map ctrl+shift+t new_tab + map ctrl+shift+q close_tab + map ctrl+shift+. move_tab_forward + map ctrl+shift+, move_tab_backward + map ctrl+shift+alt+t set_tab_title + map ctrl+alt+1 goto_tab 1 + map ctrl+alt+2 goto_tab 2 + map ctrl+alt+3 goto_tab 3 + map ctrl+alt+4 goto_tab 4 + map ctrl+alt+5 goto_tab 5 + map ctrl+alt+6 goto_tab 6 + map ctrl+alt+7 goto_tab 7 + map ctrl+alt+8 goto_tab 8 + map ctrl+alt+9 goto_tab 9 + map ctrl+alt+0 goto_tab 10 + + map ctrl+shift+equal change_font_size all +1.0 + map ctrl+shift+minus change_font_size all -1.0 + map ctrl+shift+backspace change_font_size all 0 + + map ctrl+shift+delete clear_terminal reset active +'' diff --git a/home/apps/virtmanager.nix b/home/apps/virtmanager.nix new file mode 100644 index 0000000..cca4dd7 --- /dev/null +++ b/home/apps/virtmanager.nix @@ -0,0 +1,16 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; let + cfg = config.local.apps.virtmanager; +in { + options.local.apps.virtmanager.enable = mkEnableOption "Virtmanager"; + config = mkIf cfg.enable { + home.packages = with pkgs; [ + virt-manager + ]; + }; +} diff --git a/home/cli.nix b/home/cli.nix new file mode 100644 index 0000000..c2ac1f4 --- /dev/null +++ b/home/cli.nix @@ -0,0 +1,54 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; { + programs = { + ## talvez esto debería moverse a base + zsh = { + enable = true; + syntaxHighlighting.enable = true; + initExtra = import ./zshrc.nix pkgs; + }; + git = { + enable = true; + userEmail = "fabian@posixlycorrect.com"; + userName = "Fabian Montero"; + signing = { + key = "7AA277E604A4173916BBB4E91FFAC35E1798174F"; + signByDefault = true; + }; + }; + gpg = { + enable = true; + settings = { + default-key = "7AA277E604A4173916BBB4E91FFAC35E1798174F"; + }; + }; + }; + + services.gpg-agent = { + enable = true; + enableZshIntegration = true; + pinentryPackage = pkgs.pinentry-emacs; + }; + + home.packages = with pkgs; [ + calc + file + gcc + htop + killall + man-pages + man-pages-posix + neovim + rar + tree + units + unzip + usbutils + zip + ]; +} diff --git a/home/default.nix b/home/default.nix new file mode 100644 index 0000000..03fef94 --- /dev/null +++ b/home/default.nix @@ -0,0 +1,66 @@ +{ + self, + nixpkgs, + unstable, + hm-isolation, + nixGL, +}: { + config, + pkgs, + lib, + ... +}: +with lib; { + imports = [ + (hm-isolation.homeManagerModule) + ./accounts.nix + ./apps + ./allowUnfreeWhitelist.nix + ./gui + ./isolation.nix + ./options.nix + ./cli.nix + ./systemd + ]; + + nixpkgs.overlays = [self.overlay nixGL.overlay]; + + services.ssh-agent.enable = true; + + home = { + stateVersion = "21.11"; # No tocar esto + username = "fabian"; + homeDirectory = "/home/fabian"; + sessionVariables = { + "EDITOR" = "nvim"; + "TERMINAL" = "kitty"; + }; + keyboard = { + layout = "us"; + variant = "altgr-intl"; + }; + }; + + xdg.enable = true; + + nix.registry = { + "system".to = { + type = "path"; + path = "/home/fabian/nix"; + }; + + "nixpkgs".flake = nixpkgs; + "unstable".flake = unstable; + }; + + programs.home-manager.enable = true; + + local = { + apps.enable = mkDefault (!config.home.isolation.active); + + gui = { + enable = mkDefault true; + desktop = mkDefault (!config.home.isolation.active); + }; + }; +} diff --git a/home/gui/autorandr.nix b/home/gui/autorandr.nix new file mode 100644 index 0000000..c01ffe1 --- /dev/null +++ b/home/gui/autorandr.nix @@ -0,0 +1,17 @@ +{ + config, + pkgs, + lib, + ... +}: +with lib; let + cfg = config.local.gui.autorandr; +in { + options.local.gui.autorandr.enable = mkEnableOption "Autorandr"; + config = mkIf cfg.enable { + programs.autorandr = { + enable = true; + profiles."${config.local.platform}" = config.local.display.autorandrProfile; + }; + }; +} diff --git a/home/gui/default.nix b/home/gui/default.nix new file mode 100644 index 0000000..1b297a3 --- /dev/null +++ b/home/gui/default.nix @@ -0,0 +1,51 @@ +{ + config, + pkgs, + lib, + ... +}: +with lib; let + cfg = config.local.gui; +in { + options.local.gui = { + enable = mkEnableOption "GUI settings and programs"; + desktop = mkEnableOption "i3 desktop envirorment"; + }; + + imports = [ + ./autorandr.nix + ./fonts.nix + ./gtk.nix + ./i3.nix + ./polybar.nix + ./startx.nix + ]; + + config = mkIf cfg.enable { + local.gui = { + fonts.enable = mkDefault true; + gtk.enable = mkDefault true; + + autorandr.enable = mkDefault cfg.desktop; + i3.enable = mkDefault cfg.desktop; + polybar.enable = mkDefault cfg.desktop; + startx.enable = mkDefault cfg.desktop; + }; + + services = mkIf cfg.desktop { + picom = { + enable = true; + }; + + dunst = { + enable = true; + }; + + betterlockscreen = { + enable = true; + }; + }; + + xdg.mimeApps.enable = true; + }; +} diff --git a/home/gui/fonts.nix b/home/gui/fonts.nix new file mode 100644 index 0000000..7c38dbe --- /dev/null +++ b/home/gui/fonts.nix @@ -0,0 +1,18 @@ +{ + config, + pkgs, + lib, + ... +}: +with lib; let + cfg = config.local.gui.fonts; +in { + options.local.gui.fonts.enable = mkEnableOption "Font management"; + config = mkIf cfg.enable { + fonts.fontconfig.enable = true; + + home.packages = with pkgs; [ + jetbrains-mono + ]; + }; +} diff --git a/home/gui/gtk.nix b/home/gui/gtk.nix new file mode 100644 index 0000000..0f14af6 --- /dev/null +++ b/home/gui/gtk.nix @@ -0,0 +1,17 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; let + cfg = config.local.gui.gtk; +in { + options.local.gui.gtk.enable = mkEnableOption "GTK related programs"; + config = mkIf cfg.enable { + home.packages = with pkgs; [ + gruvbox-dark-icons-gtk + libsForQt5.breeze-gtk + ]; + }; +} diff --git a/home/gui/i3.nix b/home/gui/i3.nix new file mode 100644 index 0000000..687d6c6 --- /dev/null +++ b/home/gui/i3.nix @@ -0,0 +1,110 @@ +{ + config, + pkgs, + lib, + ... +}: +with lib; let + cfg = config.local.gui.i3; +in { + options.local.gui.i3.enable = mkEnableOption "i3 window manager"; + config = mkIf cfg.enable { + xsession.windowManager.i3 = { + enable = true; + package = pkgs.i3-gaps; + + config = let + mod = "Mod4"; + in { + modifier = mod; + # revisar luego si config.bars tiene un default danino + + fonts = { + names = ["JetBrains Mono"]; + style = "Regular"; + size = 8.0; + }; + + gaps = { + inner = 10; + outer = -10; + }; + + window = { + hideEdgeBorders = "both"; + }; + + colors = { + focused = { + background = "#222222"; + border = "#4c7899"; + childBorder = "#222222"; + indicator = "#292d2e"; + text = "#888888"; + }; + }; + + # mkOptionDefault hace que se ponga la config por default + # y se sobreescriba las cosas que pongo acA + # NO QUITARLO. ver man home-configuration.nix + keybindings = mkOptionDefault { + "${mod}+Return" = "exec ${pkgs.kitty}/bin/kitty ${pkgs.tmux}/bin/tmux"; + "${mod}+Tab" = "focus right"; + "${mod}+Shift+Tab" = "focus left"; + "${mod}+Shift+s" = "exec ${pkgs.maim}/bin/maim -s -u | ${pkgs.xclip}/bin/xclip -selection clipboard -t image/png -i"; + "${mod}+Shift+w" = "move workspace to output right"; + "${mod}+l" = "exec ${pkgs.betterlockscreen}/bin/betterlockscreen -l"; + }; + + startup = [ + { + command = "${pkgs.xss-lock}/bin/xss-lock --transfer-sleep-lock -- ${pkgs.i3lock}/bin/i3lock --nofork"; + notification = false; + } + { + command = "${pkgs.networkmanagerapplet}/bin/nm-applet"; + notification = false; + } + { + command = "${pkgs.feh}/bin/feh --bg-fill ${config.home.homeDirectory}/Pictures/wallpapers/jupiter.png"; + notification = false; + always = true; + } + { + command = "${pkgs.i3-gaps}/bin/i3-msg 'workspace 1; exec ${pkgs.firefox}/bin/firefox'"; + } + { + command = "${pkgs.i3-gaps}/bin/i3-msg 'workspace 2; exec ${pkgs.tdesktop}/bin/telegram-desktop'"; + } + #{ + # command = "${pkgs.i3-gaps}/bin/i3-msg 'workspace 2; exec ${pkgs.element-desktop}/bin/element-desktop'"; + #} + { + command = "${pkgs.systemd}/bin/systemctl --user restart polybar.service"; + notification = false; + always = true; + } + { + command = "${pkgs.autorandr}/bin/autorandr -c"; + notification = false; + always = true; + } + ]; + + workspaceOutputAssign = + [ + { + output = config.local.display."0"; + workspace = "1"; + } + ] + ++ optional (config.local.display."1" != null) { + output = config.local.display."1"; + workspace = "10"; + }; + + bars = []; + }; + }; + }; +} diff --git a/home/gui/polybar.nix b/home/gui/polybar.nix new file mode 100644 index 0000000..042c668 --- /dev/null +++ b/home/gui/polybar.nix @@ -0,0 +1,464 @@ +{ + config, + pkgs, + lib, + ... +}: +with lib; let + cfg = config.local.gui.polybar; +in { + options.local.gui.polybar.enable = mkEnableOption "Polybar"; + config = mkIf cfg.enable { + services.polybar = mkIf (!config.home.isolation.active) { + enable = true; + package = pkgs.polybarFull; + script = '' + # Terminate already running bar instances + killall -q polybar + + # Wait until the processes have been shut down + while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done + + # Launch Polybar, using default config location ~/.config/polybar/config + polybar -r main & polybar -r secondary & + ''; + + settings = { + "colors" = { + # background = "\${xrdb:color0:#222}"; + background = "#AA000000"; + background-alt = "#00000000"; + # foreground = "\${xrdb:color7:#222}"; + foreground = "#ffffff"; + foreground-alt = "#ffffff"; + primary = "#ffffff"; + secondary = "#e60053"; + alert = "#bd2c40"; + }; + + "bar/main" = { + monitor = "${config.local.display."0"}"; + width = "100%"; + height = 30; + offset-x = "0%"; + offset-y = "0%"; + radius = 0.0; + fixed-center = false; + + background = "\${colors.background}"; + foreground = "\${colors.foreground}"; + + line-size = 1; + line-color = "#f0000000"; + + border-size = 0; + border-color = "#00000000"; + + padding-left = 0; + padding-right = 0; + + module-margin-left = 1; + module-margin-right = 1; + + # font-0 = "fixed:pixelsize=10;1"; + font-0 = "JetBrains Mono Light:size=10;0"; + font-1 = "unifont:fontformat=truetype:size=8:antialias=false;0"; + font-2 = "siji:pixelsize=10;1"; + # font-2 = "FontAwesome5Free:style=Regular:size=10;4"; + + modules-left = "i3"; + modules-center = "xwindow"; + modules-right = "xkeyboard pulseaudio filesystem memory cpu temperature gputemperature nvmetemperature wlan eth date semanatec"; + separator = "|"; + + tray-position = "right"; + tray-padding = 2; + + # To allow other windows to be placed above the bar, or to avoid having the bar visible when in fullscreen mode, + # you need to use the following two parameters. Note that it will tell the window manager to back off so no + # area will be reserved, etc. + # + # wm-restack = "i3"; + # override-redirect = true; + + cursor-click = "pointer"; + cursor-scroll = "ns-resize"; + }; + + "bar/secondary" = optionalAttrs (config.local.display."1" != null) { + monitor = "${config.local.display."1"}"; + "inherit" = "bar/main"; + + modules-left = "i3"; + modules-center = "xwindow"; + modules-right = "xkeyboard pulseaudio date"; + tray-position = "none"; + }; + + "module/xwindow" = { + type = "internal/xwindow"; + label = "%title:0:30:...%"; + }; + + "module/xkeyboard" = { + type = "internal/xkeyboard"; + blacklist-0 = "num lock"; + + format-prefix = ""; + format-prefix-foreground = "\${colors.foreground-alt}"; + + label-layout = "%layout%"; + + label-indicator-padding = 2; + label-indicator-margin = 1; + label-indicator-background = "\${colors.secondary}"; + }; + + "module/filesystem" = { + type = "internal/fs"; + interval = 10; + + mount-0 = "/"; + + label-mounted = "%{F#0a81f5}%mountpoint%%{F-}: %used%/%total%"; + label-unmounted = ""; + }; + + "module/i3" = { + type = "internal/i3"; + format = " "; + index-sort = true; + wrapping-scroll = false; + + # Only show workspaces on the same output as the bar + # pin-workspaces = true + + label-mode-padding = 1; + label-mode-foreground = "#000"; + label-mode-background = "\${colors.primary}"; + + # focused = Active workspace on focused monitor + label-focused = "%index%"; + label-focused-background = "\${colors.background}"; + label-focused-underline = "\${colors.primary}"; + label-focused-padding = 1; + + # unfocused = Inactive workspace on any monitor + label-unfocused = "%index%"; + label-unfocused-padding = 1; + + # visible = Active workspace on unfocused monitor + label-visible = "%index%"; + label-visible-background = "\${self.label-focused-background}"; + label-visible-underline = "\${self.label-focused-underline}"; + label-visible-padding = "\${self.label-focused-padding}"; + + # urgent = Workspace with urgency hint set + label-urgent = "%index%"; + label-urgent-background = "\${colors.alert}"; + label-urgent-padding = 1; + }; + + "module/xbacklight" = { + type = "internal/xbacklight"; + + format = "