diff --git a/default.nix b/default.nix index 93cb5a9b..60e29413 100644 --- a/default.nix +++ b/default.nix @@ -32,6 +32,7 @@ }; # this shouldnt cause any issues right? + networking.hostName = "sakotop"; networking.networkmanager.enable = true; time.timeZone = "Africa/Cairo"; @@ -45,4 +46,76 @@ # already sold soul to corporations \_O_/ nixpkgs.config.allowUnfree = true; + services.xserver = { + layout = "us"; + }; + + # nix makes alot of garbage so remove it :) + nix.gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 7d"; + }; + + # 100% need this everyone probably knows gpg + programs.gnupg.agent = { + enable = true; + pinentryFlavor = "gtk2"; + # enableSSHSupport = true; + }; + + # i dont care what ANYONE says git is always + # a requirement for a nixos system so it is + # also bare minimum + programs.git = { + enable = true; + package = pkgs.gitFull; + }; + + # bare minimum + # :) + environment.systemPackages = with pkgs; [ + neovim + wget + killall + alsa-utils + pulseaudio + pamixer + feh + unzip + gh + htop + tree + ]; + + users.users.sako = { + shell = pkgs.zsh; + isNormalUser = true; + # sudo and networkmanager + extraGroups = [ "wheel" "networkmanager" ]; + }; + + home-manager.useUserPackages = true; + home-manager.users.sako = { pkgs, ...}:{ + # CHANGE THIS WHEN THE SYSTEM VERSION + # CHANGES TOO !!!!!! + home.stateVersion = "23.05"; + home.packages = []; + home.username = "sako"; + home.homeDirectory = "/home/sako"; + programs.bash.enable = true; + programs.home-manager.enable = true; + # git + xdg.configFile = { + git = { + source = ../../config/git; + }; + }; + }; + + + # change this when nixos update blah blah blah + # something read the docs haha + # ok + system.stateVersion = "23.05"; # read the comment } diff --git a/hosts/sakotop/configuration.nix b/hosts/sakotop/configuration.nix index 467777a1..41804b06 100644 --- a/hosts/sakotop/configuration.nix +++ b/hosts/sakotop/configuration.nix @@ -9,279 +9,42 @@ ../../default.nix ]; - # grub (mount efi partition to /boot/efi) - # why /boot/efi? instead of /efi? - # 1. when dualbooting, windows makes the efi partition 100mb instead of 512mb+ (we need this for generations - # and intel microcode) - # 2. nixos does not like /efi :( - #boot.loader = { - # efi = { - # canTouchEfiVariables = true; - # efiSysMountPoint = "/boot/efi"; - # }; - # grub = { - # devices = [ "nodev" ]; - # efiSupport = true; - # enable = true; - # useOSProber = true; - # }; - #}; - - # TODO(sako):: figure out plymouth and why my system is too fast - #boot.plymouth.enable = true; - - # for later when i setup flakes - #nix.settings.experimental-features = [ "nix-command" "flakes" ]; - - networking.hostName = "sakotop"; # Define your hostname. - # Pick only one of the below networking options. - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - #networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. - - # Set your time zone. - #time.timeZone = "Africa/Cairo"; - - # Configure network proxy if necessary - # networking.proxy.default = "http://user:password@proxy:port/"; - # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; - - # Select internationalisation properties. - #i18n.defaultLocale = "en_US.UTF-8"; - #console = { - # font = "Lat2-Terminus16"; - # keyMap = "us"; - # useXkbConfig = true; # use xkbOptions in tty. - #}; - - # Enable the X11 windowing system. - services.xserver = { - enable = true; - # bspwm - windowManager.bspwm.enable = true; - layout = "us"; - }; - - # Configure keymap in X11 - #services.xserver.layout = "us"; - #services.xserver.xkbOptions = "eurosign:e,caps:escape"; - - # Nvidia Drivers - hardware.opengl = { - enable = true; - driSupport = true; - driSupport32Bit = true; - }; - - # packages that are unfree because they want to or need to - #nixpkgs.config.allowUnfreePredicate = pkg: - # builtins.elem (lib.getName pkg) [ - # "steam" - # "steam-original" - # "discord" - # "widevine-cdm" - # ]; - - # we already sold our souls to corporations why - # bother at this point - # in default.nix - #nixpkgs.config.allowUnfree = true; - - # Bluetooth - hardware.bluetooth = { - enable = true; - settings = { - General = { - ControllerMode = "bredr"; + config = { + desktop = { + bspwm.enable = true; + kitty.enable = true; + keepassxc.enable = true; + game = { + steam.enable = true; + lutris.enable = true; + wine.enable = true; }; }; - # i barely use bluetooth so keep it on demand - powerOnBoot = false; - }; - services.blueman.enable = true; - - # Enable CUPS to print documents. - # services.printing.enable = true; - - # for some reason this needs to be disabled - sound.enable = false; - # dont like pulseaudio - #hardware.pulseaudio.enable = true; - security.rtkit.enable = true; - services.pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - }; - - # Enable touchpad support (enabled default in most desktopManager). - services.xserver.libinput.enable = true; - - # TODO(sako):: put this in different files - # Define a user account. Don't forget to set a password with ‘passwd’. - users.users.sako= { - shell = pkgs.zsh; - isNormalUser = true; - extraGroups = [ "wheel" "networkmanager" ]; # Enable ‘sudo’ for the user. - packages = with pkgs; [ - firefox - # qutebrowser - qutebrowser-qt6 - # qute-keepassxc - python310Packages.pynacl - # adblock - python310Packages.adblock - # end qutebrowser - keepassxc - tree - dmenu - rofi - kitty - polybar - xorg.xbacklight - steam - winetricks - wineWowPackages.staging - lutris - discord - networkmanagerapplet - gcc - python3 - python310Packages.pip - rustup - cargo - nodejs - yarn - newsboat - ncmpcpp - ]; - }; - - # TODO(sako):: make overlays in different folder - nixpkgs.overlays = [ - (final: prev: { qutebrowser = prev.qutebrowser.override { enableWideVine = true; }; }) - (final: prev: { polybar = prev.polybar.override { pulseSupport = true;}; }) - ]; - - # garbage collection - nix.gc = { - automatic = true; - dates = "weekly"; - options = "--delete-older-than 7d"; - }; - - home-manager.useUserPackages = true; - home-manager.users.sako = { pkgs, ...}: { - # CHANGE THIS WHEN THE SYSTEM VERSION CHANGES TOO!!! - home.stateVersion = "23.05"; - home.packages = []; - home.username = "sako"; - home.homeDirectory = "/home/sako"; - programs.bash.enable = true; - programs.home-manager.enable = true; - programs.git = { - enable = true; - package = pkgs.gitFull; - }; - xdg.configFile = { - git = { - source = ../../config/git; - }; - - nvim = { - source = ../../config/nvim; - recursive = true; - }; - bspwm = { - source = ../../config/bspwm; - }; - sxhkd = { - source = ../../config/sxhkd; - }; - kitty = { - source = ../../config/kitty; - }; - "qutebrowser/config.py" = { - source = ../../config/qutebrowser/config.py; - }; - "qutebrowser/greasemonkey" = { - source = ../../config/qutebrowser/greasemonkey; - recursive = true; - }; - ncmpcpp = { - source = ../../config/ncmpcpp; - recursive = true; + web = { + qutebrowser.enable = true; + }; + dev = { + editors = { + nvim.enable = true; }; + cpp.enable = true; + javascript.enable = true; + python.enable = true; + rust.enable = true; + }; + devices = { + nvidia.enable = true; + bluetooth.enable = true; + pipewire.enable = true; + }; + media = { + ncmpcpp.enable = true; + mpd.enable = true; + }; + shell = { + newsboat.enable = true; + zsh.enable = true; }; }; - - programs.zsh = { - enable = true; - # TODO(sako):: make my own zsh config - promptInit = "source ${pkgs.zsh-powerlevel10k}/share/zsh-powerlevel10k/powerlevel10k.zsh-theme"; - }; - - fonts.fonts = with pkgs;[ - jetbrains-mono - (nerdfonts.override { fonts = [ "JetBrainsMono" ]; }) - ]; - - # git crediental manager is in gitFull package - # config options happen to be here too - #programs.git = { - # enable = true; - # package = pkgs.gitFull; - # userName = "Sakooooo"; - # userEmail = "78461130+Sakooooo@users.noreply.github.com"; - #}; - - # List packages installed in system profile. To search, run: - # $ nix search wget - environment.systemPackages = with pkgs; [ - neovim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. - wget - killall - alsa-utils - pulseaudio - pamixer - feh - unzip - gh - htop - ]; - - # Some programs need SUID wrappers, can be configured further or are - # started in user sessions. - # programs.mtr.enable = true; - programs.gnupg.agent = { - enable = true; - pinentryFlavor = "gtk2"; - # enableSSHSupport = true; - }; - - # List services that you want to enable: - - # Enable the OpenSSH daemon. - # services.openssh.enable = true; - - # Open ports in the firewall. - # networking.firewall.allowedTCPPorts = [ ... ]; - # networking.firewall.allowedUDPPorts = [ ... ]; - # Or disable the firewall altogether. - # networking.firewall.enable = false; - - # Copy the NixOS configuration file and link it from the resulting system - # (/run/current-system/configuration.nix). This is useful in case you - # accidentally delete configuration.nix. - # system.copySystemConfiguration = true; - - # 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 = "23.05"; # Did you read the comment? - } diff --git a/modules/default.nix b/modules/default.nix index 39459fce..9235496b 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -1,4 +1,11 @@ { # List your module files here # my-module = import ./my-module.nix; + #desktop = ./desktop; + desktop = import ./desktop; + dev = import ./dev; + # name conflict :( + devices = import ./devices; + media = import ./media; + shell = import ./shell; } diff --git a/modules/desktop/bspwm.nix b/modules/desktop/bspwm.nix index c827b02a..4fb5bcd7 100644 --- a/modules/desktop/bspwm.nix +++ b/modules/desktop/bspwm.nix @@ -10,7 +10,7 @@ in { services.xserver = { enable = true; windowManager.bspwm.enable = true; - layout = "us"; + libinput.enable = true; }; xdg.configFile = { bspwm = { @@ -26,6 +26,7 @@ in { pulseSupport = true; }) xorg.xbacklight + networkmanagerapplet ]; }; } diff --git a/modules/desktop/chat/default.nix b/modules/desktop/chat/default.nix new file mode 100644 index 00000000..8485816d --- /dev/null +++ b/modules/desktop/chat/default.nix @@ -0,0 +1,3 @@ +{ + discord = ./discord.nix; +} diff --git a/modules/desktop/chat/discord.nix b/modules/desktop/chat/discord.nix new file mode 100644 index 00000000..4fa20ea7 --- /dev/null +++ b/modules/desktop/chat/discord.nix @@ -0,0 +1,14 @@ +{ options, config, lib, pkgs, ...}: +with lib; +let cfg = config.modules.desktop.chat.discord; +in { + options.modules.desktop.chat.discord = { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { + users.users.sako.packages = with pkgs; [ + discord + ]; + }; +} diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 246221f5..15d2cf20 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -1,5 +1,8 @@ { - bspwm = ./bspwm.nix; - kitty = ./kitty.nix; - web = ./web; + bspwm = import ./bspwm.nix; + kitty = import ./kitty.nix; + web = import ./web; + keepassxc = import ./keepassxc.nix; + chat = import ./chat; + game = import ./game; } diff --git a/modules/desktop/game/default.nix b/modules/desktop/game/default.nix new file mode 100644 index 00000000..dacca1d4 --- /dev/null +++ b/modules/desktop/game/default.nix @@ -0,0 +1,5 @@ +{ + lutris = ./lutris.nix; + steam = ./steam.nix; + wine = ./wine.nix; +} diff --git a/modules/desktop/game/lutris.nix b/modules/desktop/game/lutris.nix new file mode 100644 index 00000000..8aa1e21b --- /dev/null +++ b/modules/desktop/game/lutris.nix @@ -0,0 +1,14 @@ +{ options, config, lib, pkgs, ...}: +with lib; +let cfg = config.modules.desktop.game.lutris; +in { + options.modules.desktop.game.lutris = { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { + users.users.sako.packages = with pkgs; [ + lutris + ]; + }; +} diff --git a/modules/desktop/game/steam.nix b/modules/desktop/game/steam.nix new file mode 100644 index 00000000..8aa350fe --- /dev/null +++ b/modules/desktop/game/steam.nix @@ -0,0 +1,14 @@ +{ options, config, lib, pkgs, ...}: +with lib; +let cfg = config.modules.desktop.game.steam; +in { + options.modules.desktop.game.steam = { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { + users.users.sako.packages = with pkgs; [ + steam + ]; + }; +} diff --git a/modules/desktop/game/wine.nix b/modules/desktop/game/wine.nix new file mode 100644 index 00000000..94cd555a --- /dev/null +++ b/modules/desktop/game/wine.nix @@ -0,0 +1,15 @@ +{ options, config, lib, pkgs, ...}: +with lib; +let cfg = config.modules.desktop.game.wine; +in { + options.modules.desktop.game.wine= { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { + users.users.sako.packages = with pkgs; [ + winetricks + wineWowPackages.staging + ]; + }; +} diff --git a/modules/desktop/keepassxc.nix b/modules/desktop/keepassxc.nix new file mode 100644 index 00000000..3ec2ddec --- /dev/null +++ b/modules/desktop/keepassxc.nix @@ -0,0 +1,13 @@ +{ options, config, lib, pkgs, ...}: +with lib; +let cfg = config.modules.desktop.keepassxc; +in { + options.modules.desktop.keepassxc = { + enable = mkBoolOpt false; + }; + config = mkIf cfg.enable { + users.users.sako.packages = with pkgs; [ + keepassxc + ]; + }; +} diff --git a/modules/desktop/kitty.nix b/modules/desktop/kitty.nix index 5cc26915..e161a91f 100644 --- a/modules/desktop/kitty.nix +++ b/modules/desktop/kitty.nix @@ -16,5 +16,10 @@ in { "JetBrainsMono" ];}) ]; + xdg.configFile = { + kitty = { + source = ../../config/kitty; + }; + }; }; } diff --git a/modules/dev/cpp.nix b/modules/dev/cpp.nix index 3505c38e..336d2db7 100644 --- a/modules/dev/cpp.nix +++ b/modules/dev/cpp.nix @@ -10,6 +10,7 @@ in { users.users.sako.packages = with pkgs; [ cmake gcc + gnumake ]; }; } diff --git a/modules/dev/default.nix b/modules/dev/default.nix index 6b4561e9..a5853630 100644 --- a/modules/dev/default.nix +++ b/modules/dev/default.nix @@ -1,6 +1,7 @@ -{ config, pkgs, lib, ...}: { - imports = [ - ./cpp.nix - ]; + editors = ./editors/default.nix; + cpp = ./cpp.nix; + javascript = ./javascript.nix; + python = ./python.nix; + rust = ./rust.nix; } diff --git a/modules/dev/editors/default.nix b/modules/dev/editors/default.nix new file mode 100644 index 00000000..6a56dc96 --- /dev/null +++ b/modules/dev/editors/default.nix @@ -0,0 +1,3 @@ +{ + nvim = ./nvim.nix; +} diff --git a/modules/dev/editors/nvim.nix b/modules/dev/editors/nvim.nix new file mode 100644 index 00000000..c92f3d8d --- /dev/null +++ b/modules/dev/editors/nvim.nix @@ -0,0 +1,21 @@ +{ config, pkgs, lib, ...}: +with lib; +let cfg = config.modules.dev.editors.nvim; +in { + options.modules.dev.editors.nvim = { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + neovim + ]; + + xdg.configFile = { + nvim = { + source = ../../../config/nvim; + recursive = true; + }; + }; + }; +} diff --git a/modules/dev/javascript.nix b/modules/dev/javascript.nix new file mode 100644 index 00000000..376eaf39 --- /dev/null +++ b/modules/dev/javascript.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, ...}: +with lib; +let cfg = config.modules.dev.javascript; +in { + options.modules.dev.javascript = { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { + users.users.sako.packages = with pkgs; [ + nodejs + yarn + ]; + }; +} diff --git a/modules/dev/python.nix b/modules/dev/python.nix new file mode 100644 index 00000000..9c4a8152 --- /dev/null +++ b/modules/dev/python.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, ...}: +with lib; +let cfg = config.modules.dev.python; +in { + options.modules.dev.python= { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { + users.users.sako.packages = with pkgs; [ + python3 + python310Packages.pip + ]; + }; +} diff --git a/modules/dev/rust.nix b/modules/dev/rust.nix new file mode 100644 index 00000000..4392eafc --- /dev/null +++ b/modules/dev/rust.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, ...}: +with lib; +let cfg = config.modules.dev.rust; +in { + options.modules.dev.rust = { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { + users.users.sako.packages = with pkgs; [ + rustup + cargo + ]; + }; +} diff --git a/modules/devices/bluetooth.nix b/modules/devices/bluetooth.nix new file mode 100644 index 00000000..10b72022 --- /dev/null +++ b/modules/devices/bluetooth.nix @@ -0,0 +1,22 @@ +{ config, pkgs, lib, ...}: +with lib; +let cfg = config.modules.devices.bluetooth; +in { + options.modules.devices.bluetooth = { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { + hardware.bluetooth = { + enable = true; + settings = { + General = { + ControllerMode = "bredr"; + }; + }; + powerOnBoot = false; + }; + + services.blueman.enable = true; + }; +} diff --git a/modules/devices/default.nix b/modules/devices/default.nix new file mode 100644 index 00000000..f3c2d70e --- /dev/null +++ b/modules/devices/default.nix @@ -0,0 +1,5 @@ +{ + nvidia = ./nvidia; + bluetooth = ./bluetooth.nix; + pipewire = ./pipewire.nix; +} diff --git a/modules/hardware/nvidia/default.nix b/modules/devices/nvidia/default.nix similarity index 80% rename from modules/hardware/nvidia/default.nix rename to modules/devices/nvidia/default.nix index 238523c0..83b90d8c 100644 --- a/modules/hardware/nvidia/default.nix +++ b/modules/devices/nvidia/default.nix @@ -1,5 +1,12 @@ { config, pkgs, lib, ...}: -{ +with lib; +let cfg = config.modules.devices.nvidia; +in { + options.modules.devices.nvidia = { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { hardware.opengl = { enable = true; @@ -31,6 +38,6 @@ intelBusId = "PCI:0:2:0"; nvidiaBusId = "PCI:1:0:0"; }; + }; }; - } diff --git a/modules/devices/pipewire.nix b/modules/devices/pipewire.nix new file mode 100644 index 00000000..a9abbd06 --- /dev/null +++ b/modules/devices/pipewire.nix @@ -0,0 +1,22 @@ +{ options, config, lib, pkgs, ...}: +with lib; +let cfg = config.modules.devices.pipewire; +in { + options.modules.devices.pipewire= { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { + # pipewire hates this + sound.enable = false; + + hardware.pulseaudio.enable = true; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + }; +} diff --git a/modules/hardware/bluetooth.nix b/modules/hardware/bluetooth.nix deleted file mode 100644 index 22e1f04a..00000000 --- a/modules/hardware/bluetooth.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ config, pkgs, lib, ...}: -{ - -} - diff --git a/modules/hardware/default.nix b/modules/hardware/default.nix deleted file mode 100644 index da5304eb..00000000 --- a/modules/hardware/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ config, pkgs, lib, ...}: -{ - imports = [ - ./nvidia - ]; -} diff --git a/modules/media/default.nix b/modules/media/default.nix new file mode 100644 index 00000000..ef91e1a8 --- /dev/null +++ b/modules/media/default.nix @@ -0,0 +1,4 @@ +{ + mpd = ./mpd; + ncmpcpp = ./ncmpcpp; +} diff --git a/modules/media/mpd/default.nix b/modules/media/mpd/default.nix index ad41802a..5caa7259 100644 --- a/modules/media/mpd/default.nix +++ b/modules/media/mpd/default.nix @@ -1,5 +1,11 @@ { config, pkgs, lib, ...}: -{ +with lib; +let cfg = config.modules.media.mpd; +in { + options.modules.media.mpd = { + enable = mkBoolOpt false; + }; + config = mkIf cfg.enable { services.mpd = { enable = true; # pipewire fix @@ -13,5 +19,6 @@ systemd.services.mpd.environment = { XDG_RUNTIME_DIR = "/run/user/1000"; }; + }; } diff --git a/modules/media/ncmpcpp/default.nix b/modules/media/ncmpcpp/default.nix new file mode 100644 index 00000000..eacd5560 --- /dev/null +++ b/modules/media/ncmpcpp/default.nix @@ -0,0 +1,22 @@ +{ options, config, lib, pkgs, ...}: +with lib; +let cfg = config.modules.media.ncmpcpp; +in { + options.modules.media.ncmpcpp = { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { + users.users.sako = { + packages = with pkgs; [ + ncmpcpp + ]; + }; + xdg.configFile = { + ncmpcpp = { + source = ../../config/ncmpcpp; + recursive = true; + }; + }; + }; +} diff --git a/modules/shell/default.nix b/modules/shell/default.nix new file mode 100644 index 00000000..f3e629ed --- /dev/null +++ b/modules/shell/default.nix @@ -0,0 +1,4 @@ +{ + zsh = ./zsh.nix; + newsboat = ./newsboat.nix; +} diff --git a/modules/shell/newsboat.nix b/modules/shell/newsboat.nix new file mode 100644 index 00000000..327027e8 --- /dev/null +++ b/modules/shell/newsboat.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, ...}: +with lib; +let cfg = config.modules.shell.newsboat; +in { + options.modules.shell.newsboat= { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { + users.users.sako.packages = with pkgs; [ + newsboat + ]; + # TODO(sako):: make newsboat config + }; +}