From 3a71fb8ce2e2d27937cd706a21ffee7776eb0687 Mon Sep 17 00:00:00 2001 From: Noa Aarts Date: Wed, 28 Feb 2024 02:07:59 +0100 Subject: [PATCH] initial commit --- flake.lock | 250 +++++++++++++++ flake.nix | 39 +++ hosts/default/configuration.nix | 148 +++++++++ hosts/default/hardware-configuration.nix | 37 +++ hosts/default/home.nix | 367 +++++++++++++++++++++++ hosts/default/nvidia.nix | 27 ++ hosts/default/root.nix | 165 ++++++++++ styles/waybar.css | 301 +++++++++++++++++++ 8 files changed, 1334 insertions(+) create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 hosts/default/configuration.nix create mode 100644 hosts/default/hardware-configuration.nix create mode 100644 hosts/default/home.nix create mode 100644 hosts/default/nvidia.nix create mode 100644 hosts/default/root.nix create mode 100644 styles/waybar.css diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..b2ef5c9 --- /dev/null +++ b/flake.lock @@ -0,0 +1,250 @@ +{ + "nodes": { + "flake-compat": { + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "revCount": 57, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "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-parts": { + "inputs": { + "nixpkgs-lib": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1706830856, + "narHash": "sha256-a0NYyp+h9hlb7ddVz4LUn1vT/PLwqfrWYcHMvFB1xYg=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "b253292d9c0a5ead9bc98c4e9a26c6312e27d69f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "nixvim", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1703887061, + "narHash": "sha256-gGPa9qWNc6eCXT/+Z5/zMkyYOuRZqeFZBDbopNZQkuY=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "43e1aa1308018f37118e34d3a9cb4f5e75dc11d5", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1708988456, + "narHash": "sha256-RCz7Xe64tN2zgWk+MVHkzg224znwqknJ1RnB7rVqUWw=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "1d085ea4444d26aa52297758b333b449b2aa6fca", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1708988456, + "narHash": "sha256-RCz7Xe64tN2zgWk+MVHkzg224znwqknJ1RnB7rVqUWw=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "1d085ea4444d26aa52297758b333b449b2aa6fca", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "nix-darwin": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709001452, + "narHash": "sha256-FnZ54wkil54hKvr1irdKic1TE27lHQI9dKQmOJRrtlU=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "6c06334f0843c7300d1678726bb607ce526f6b36", + "type": "github" + }, + "original": { + "owner": "lnl7", + "repo": "nix-darwin", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1708976249, + "narHash": "sha256-bA0rrmxj5K1W/EWgzpk1NUvEIyAk1hqsmxcRCmmXFuw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d8e0944e6d2ce0f326040e654c07a410e2617d47", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d8e0944e6d2ce0f326040e654c07a410e2617d47", + "type": "github" + } + }, + "nixvim": { + "inputs": { + "flake-compat": "flake-compat", + "flake-parts": "flake-parts", + "home-manager": "home-manager_2", + "nix-darwin": "nix-darwin", + "nixpkgs": [ + "nixpkgs" + ], + "pre-commit-hooks": "pre-commit-hooks" + }, + "locked": { + "lastModified": 1709054170, + "narHash": "sha256-er3hOsSa6nOiOYHpCUukLZcbaORSdifxpzAmMBLT1HM=", + "owner": "nix-community", + "repo": "nixvim", + "rev": "81f20bd2f5f53883d4fb386752196ea0a3ddd053", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixvim", + "type": "github" + } + }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat_2", + "flake-utils": "flake-utils", + "gitignore": "gitignore", + "nixpkgs": [ + "nixvim", + "nixpkgs" + ], + "nixpkgs-stable": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1708018599, + "narHash": "sha256-M+Ng6+SePmA8g06CmUZWi1AjG2tFBX9WCXElBHEKnyM=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "5df5a70ad7575f6601d91f0efec95dd9bc619431", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "nixpkgs": "nixpkgs", + "nixvim": "nixvim" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..2385ce4 --- /dev/null +++ b/flake.nix @@ -0,0 +1,39 @@ +{ + description = "Nixos config flake"; + + inputs = { + # nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + + nixpkgs.url = "github:NixOS/nixpkgs/d8e0944e6d2ce0f326040e654c07a410e2617d47"; + + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + nixvim = { + url = "github:nix-community/nixvim"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + }; + + outputs = { self, nixpkgs, ... }@inputs: + let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + in + { + + nixosConfigurations = { + default = nixpkgs.lib.nixosSystem { + specialArgs = {inherit inputs;}; + modules = [ + ./hosts/default/configuration.nix + inputs.home-manager.nixosModules.default + ]; + }; + }; + + }; +} diff --git a/hosts/default/configuration.nix b/hosts/default/configuration.nix new file mode 100644 index 0000000..d9a37b8 --- /dev/null +++ b/hosts/default/configuration.nix @@ -0,0 +1,148 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). + +{ config, pkgs, inputs, ... }: + +{ + imports = + [ # Include the results of the hardware scan. + ./hardware-configuration.nix + ./nvidia.nix + inputs.home-manager.nixosModules.default + ]; + + # Bootloader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + networking.hostName = "lambdaOS"; # Define your hostname. + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + + # Enable networking + networking.networkmanager.enable = true; + + nix.settings.experimental-features = ["nix-command" "flakes"]; + # Set your time zone. + time.timeZone = "Europe/Amsterdam"; + + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; + + i18n.extraLocaleSettings = { + LC_ADDRESS = "nl_NL.UTF-8"; + LC_IDENTIFICATION = "nl_NL.UTF-8"; + LC_MEASUREMENT = "nl_NL.UTF-8"; + LC_MONETARY = "nl_NL.UTF-8"; + LC_NAME = "nl_NL.UTF-8"; + LC_NUMERIC = "nl_NL.UTF-8"; + LC_PAPER = "nl_NL.UTF-8"; + LC_TELEPHONE = "nl_NL.UTF-8"; + LC_TIME = "nl_NL.UTF-8"; + }; + + services.xserver = { + enable = true; + displayManager = { + sddm.enable = true; + defaultSession = "hyprland"; + }; + xkb = { + layout = "us"; + variant = "intl"; + }; + }; + + + # Configure console keymap + console.keyMap = "us-acentos"; + + users.groups.nixpow.members = [ "root" ]; + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.noa = { + isNormalUser = true; + description = "Noa Aarts"; + extraGroups = [ "networkmanager" "wheel" "nixpow" ]; + packages = with pkgs; [ + ]; + }; + + home-manager = { + extraSpecialArgs = { inherit inputs; }; + users = { + "noa" = import ./home.nix; + "root" = import ./root.nix; + }; + }; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + neovim + sddm + git + zsh + ]; + + # TODO find list of fonts to install + fonts.packages = with pkgs; [ + font-awesome + noto-fonts + fira-code + fira-code-symbols + liberation_ttf + ]; + + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + # programs.gnupg.agent = { + # enable = true; + # enableSSHSupport = true; + # }; + + programs.neovim.enable = true; + programs.neovim.defaultEditor = true; + + programs.zsh.enable = true; + + programs.hyprland.enable = true; + + users.defaultUserShell = pkgs.zsh; + + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + jack.enable = 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; + + # 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.11"; # Did you read the comment? +} diff --git a/hosts/default/hardware-configuration.nix b/hosts/default/hardware-configuration.nix new file mode 100644 index 0000000..17ffb75 --- /dev/null +++ b/hosts/default/hardware-configuration.nix @@ -0,0 +1,37 @@ +# 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/263716dd-52cb-4a91-ba0b-e39e492ed0e5"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/B08E-916D"; + fsType = "vfat"; + }; + + 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.enp39s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/default/home.nix b/hosts/default/home.nix new file mode 100644 index 0000000..43ff2f6 --- /dev/null +++ b/hosts/default/home.nix @@ -0,0 +1,367 @@ +{ config, pkgs, inputs, ... }: + +{ + imports = + [ + inputs.nixvim.homeManagerModules.nixvim + ]; + # Home Manager needs a bit of information about you and the paths it should + # manage. + home.username = "noa"; + home.homeDirectory = "/home/noa"; + + # This value determines the Home Manager release that your configuration is + # compatible with. This helps avoid breakage when a new Home Manager release + # introduces backwards incompatible changes. + # + # You should not change this value, even if you update Home Manager. If you do + # want to update the value, then make sure to first check the Home Manager + # release notes. + home.stateVersion = "23.11"; # Please read the comment before changing. + + nixpkgs.config.allowUnfree = true; + + # The home.packages option allows you to install Nix packages into your + # environment. + home.packages = [ + pkgs.file + pkgs.unzip + pkgs.zip + + pkgs.dig + pkgs.mtr + + pkgs.firefox + (pkgs.writeShellScriptBin "spotify" '' + exec ${pkgs.spotify}/bin/spotify --enable-features=UseOzonePlatform --ozone-platform=wayland + '') + + pkgs.hyprland + pkgs.dunst + pkgs.waybar + + (pkgs.writeShellScriptBin "discord" '' + exec ${pkgs.discord}/bin/discord --enable-features=UseOzonePlatform --ozone-platform=wayland + '') + pkgs.kitty + pkgs.wofi + pkgs.pipewire + pkgs.lsd + ]; + + + # Home Manager is pretty good at managing dotfiles. The primary way to manage + # plain files is through 'home.file'. + home.file = { + # # Building this configuration will create a copy of 'dotfiles/screenrc' in + # # the Nix store. Activating the configuration will then make '~/.screenrc' a + # # symlink to the Nix store copy. + # ".screenrc".source = dotfiles/screenrc; + + # # You can also set the file content immediately. + # ".gradle/gradle.properties".text = '' + # org.gradle.console=verbose + # org.gradle.daemon.idletimeout=3600000 + # ''; + }; + + # Home Manager can also manage your environment variables through + # 'home.sessionVariables'. If you don't want to manage your shell through Home + # Manager then you have to manually source 'hm-session-vars.sh' located at + # either + # + # ~/.nix-profile/etc/profile.d/hm-session-vars.sh + # + # or + # + # ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh + # + # or + # + # /etc/profiles/per-user/noa/etc/profile.d/hm-session-vars.sh + # + home.sessionVariables = { + EDITOR = "nvim"; + TERM = "kitty"; + }; + + xdg.userDirs.enable = true; + xdg.userDirs.createDirectories = true; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; + + # TODO move to seperate file + programs.zsh = { + enable=true; + shellAliases = { + ll = "lsd -l"; + update = "sudo nixos-rebuild switch --flake /etc/nixos#default"; + }; + history = { + path = "${config.xdg.dataHome}/zsh/history"; + size = 10000; + }; + oh-my-zsh = { + enable = true; + plugins = [ "git" ]; + theme = "frisk"; + }; + }; + + programs.kitty = { + enable = true; + settings = { + confirm_os_window_close = 0; + }; + shellIntegration.enableZshIntegration = true; + }; + + programs.waybar = { + enable = true; + settings = { + mainBar = { + layer = "top"; + position = "top"; + height = 28; + output = [ + "DP-3" + "DP-2" + ]; + modules-left = [ "hyprland/workspaces" "tray" "custom/pronouns" "custom/spotify" ]; + modules-center = [ "hyprland/window" "clock" ]; + modules-right = [ "custom/vpn" "wireplumber" "network" "cpu" "memory" "keyboard-state" "custom/poweroff" ]; + "clock" = { + tooltip-format = "{:%Y %B}\n\n{calendar}"; + interval = 1; + format = "{:%H:%M:%S}"; + format-alt = ":%Y-%m-%d %H:%M:%S}"; + on-click-middle = "gnome-clocks"; + calendar = { + weeks-pos = "left"; + format = { + today = "{}"; + weeks = "{}"; + }; + }; + }; + "tray".spacing = 10; + "cpu" = { + format = "cpu: {usage}%"; + tooltip = false; + }; + "memory" = { + format = "mem: {}%"; + }; + "wireplumber" = { + format = "{volume}%"; + }; + "custom/vpn" = { + format = "VPN"; + exec = "echo '{\"class\": \"connected\"}'"; + exec-if = "test -d /proc/sys/net/ipv4/conf/tun0"; + return-type = "json"; + interval = 5; + }; + "custom/poweroff" = { + # TODO fix format + format = "P"; + # TODO make this file exist + on-click = "bash ${config.xdg.configHome}/wofi/powermenu.sh"; + on-click-right = "bash ${config.xdg.configHome}/wofi/powermenu.sh"; + }; + "custom/pronouns" = { + format = "{}"; + exec = "${config.xdg.configHome}/waybar/pronouns"; + interval = 5; + }; + "hyprland/workspaces" = { + format = "{name}"; + on-click = "activate"; + sort-by = "id"; + }; + }; + }; + style = ../../styles/waybar.css; + }; + + # TODO extend and move to seperate file + programs.git = { + enable = true; + userName = "Noa Aarts"; + userEmail = "itepastra@gmail.com"; + extraConfig = { + init = { defaultBranch = "main"; }; + safe.directory = "/etc/nixos"; + }; + }; + + # TODO move to seperate file + # TODO create neovim config + programs.nixvim = { + enable = true; + vimAlias = true; + + # Configure neovim options... + options = { + relativenumber = true; + incsearch = true; + }; + + # ...mappings... + keymaps = [ + { + mode = "n"; + key = ""; + action = ":w"; + } + { + mode = "n"; + key = ""; + action = ":noh"; + options.silent = true; + } + { + mode = "v"; + key = ">"; + action = ">gv"; + } + { + mode = "v"; + key = "<"; + action = "k" = "goto_prev"; + "j" = "goto_next"; + }; + + lspBuf = { + gd = "definition"; + K = "hover"; + }; + }; + servers = { + bashls.enable = true; + clangd.enable = true; + nil_ls.enable = true; + }; + }; + }; + + # ... and even highlights and autocommands ! + highlight.ExtraWhitespace.bg = "red"; + match.ExtraWhitespace = "\\s\\+$"; + autoCmd = [ + { + event = "FileType"; + pattern = "nix"; + command = "setlocal tabstop=2 shiftwidth=2"; + } + ]; + }; + + # TODO move to seperate file + wayland.windowManager.hyprland = { + enable = true; + settings = { + monitor = [ + "DP-3,2560x1440@144,1920x0,1" + "DP-2,1920x1080@60,0x0,1" + ]; + windowrulev2 = [ + "opacity 0.8 0.8,class:^(kitty)$" + "stayfocused,class:^(wofi)$" + ]; + env = [ + "WLR_NO_HARDWARE_CURSORS,1" + ]; + exec-once = [ + "waybar" + "dunst" + ]; + general = { + sensitivity = "1.2"; + gaps_in = "2"; + gaps_out = "3"; + border_size = "3"; + "col.active_border"="0xff7c94bf"; + "col.inactive_border"="0x00ffffff"; + }; + decoration = { + rounding = "6"; + active_opacity = "1"; + inactive_opacity = "1"; + }; + workspace = [ + "DP-3,1" + "DP-2,2" + ]; + animations = { + enabled = "1"; + animation = [ + "windows,1,2,default" + "border,1,10,default" + "fade,0,5,default" + "workspaces,1,4,default" + ]; + }; + "$mod" = "SUPER"; + bind = [ + "$mod,Return,exec,kitty" + "$mod,tab,cyclenext" + "SUPERSHIFT,Q,killactive" + "$mod,SPACE,exec,bash ${config.xdg.configHome}/wofi/launcher.sh" + "$mod,P,exec,bash ${config.xdg.configHome}/wofi/powermenu.sh" + "SUPERSHIFT,m,exit" + "$mod,H,movefocus,l" + "$mod,J,movefocus,u" + "$mod,K,movefocus,d" + "$mod,L,movefocus,r" + "SUPERSHIFT,H,movefocus,l" + "SUPERSHIFT,J,movefocus,u" + "SUPERSHIFT,K,movefocus,d" + "SUPERSHIFT,L,movefocus,r" + "$mod,F,togglefloating" + "$mod,X,togglespecialworkspace" + "SUPERSHIFT,X,movetoworkspace,special" + "$mod,Print,exec,grim - | wl-copy && notify-send 'Screenshot Copied to Clipboard'" + "SUPERSHIFT,S,exec,slurp | grim -g - /tmp/photo && wl-copy < /tmp/photo && notify-send 'Screenshot Copied to Clipboard'" + "$mod,f11,fullscreen,0" + ",XF86AudioLowerVolume,exec,wpctl set-volume @DEFAULT_SINK@ 1%-" + ",XF86AudioRaiseVolume,exec,wpctl set-volume @DEFAULT_SINK@ 1%+" + ",XF86AudioMute,exec,wpctl set-mute @DEFAULT_SINK@ toggle" + ",XF86AudioPlay,exec,playerctl play-pause" + ",XF86AudioPrev,exec,playerctl previous" + ",XF86AudioNext,exec,playerctl next" + ] + ++ ( + builtins.concatLists (builtins.genList ( + x: let + ws = let + c = (x+1); + in + builtins.toString (x); + in [ + "$mod,${ws},workspace,${ws}" + "ALT,${ws},movetoworkspace,${ws}" + ] + ) + 10) + ); + bindm = [ + "$mod,mouse:272,movewindow" + "$mod,mouse:273,resizewindow" + ]; + }; + }; + +} diff --git a/hosts/default/nvidia.nix b/hosts/default/nvidia.nix new file mode 100644 index 0000000..d746e2d --- /dev/null +++ b/hosts/default/nvidia.nix @@ -0,0 +1,27 @@ +{ config, lib, pkgs, ... }: +{ + hardware.opengl = { + enable = true; + driSupport = true; + driSupport32Bit = true; + }; + + services.xserver.videoDriver = "nvidia"; + + hardware.nvidia = { + + modesetting.enable = true; + + # NOTE change this if borked + powerManagement = { + enable = true; + finegrained = false; + }; + + open = false; + + nvidiaSettings = true; + + package = config.boot.kernelPackages.nvidiaPackages.stable; + }; +} diff --git a/hosts/default/root.nix b/hosts/default/root.nix new file mode 100644 index 0000000..d14c10d --- /dev/null +++ b/hosts/default/root.nix @@ -0,0 +1,165 @@ +{ config, pkgs, inputs, ... }: + + +{ + imports = + [ + inputs.nixvim.homeManagerModules.nixvim + ]; + # Home Manager needs a bit of information about you and the paths it should + # manage. + home.username = "root"; + home.homeDirectory = "/root"; + + # This value determines the Home Manager release that your configuration is + # compatible with. This helps avoid breakage when a new Home Manager release + # introduces backwards incompatible changes. + # + # You should not change this value, even if you update Home Manager. If you do + # want to update the value, then make sure to first check the Home Manager + # release notes. + home.stateVersion = "23.11"; # Please read the comment before changing. + + nixpkgs.config.allowUnfree = true; + + # The home.packages option allows you to install Nix packages into your + # environment. + home.packages = [ + ]; + + # Home Manager is pretty good at managing dotfiles. The primary way to manage + # plain files is through 'home.file'. + home.file = { + # # Building this configuration will create a copy of 'dotfiles/screenrc' in + # # the Nix store. Activating the configuration will then make '~/.screenrc' a + # # symlink to the Nix store copy. + # ".screenrc".source = dotfiles/screenrc; + + # # You can also set the file content immediately. + # ".gradle/gradle.properties".text = '' + # org.gradle.console=verbose + # org.gradle.daemon.idletimeout=3600000 + # ''; + }; + + # Home Manager can also manage your environment variables through + # 'home.sessionVariables'. If you don't want to manage your shell through Home + # Manager then you have to manually source 'hm-session-vars.sh' located at + # either + # + # ~/.nix-profile/etc/profile.d/hm-session-vars.sh + # + # or + # + # ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh + # + # or + # + # /etc/profiles/per-user/noa/etc/profile.d/hm-session-vars.sh + # + home.sessionVariables = { + EDITOR = "nvim"; + TERM = "kitty"; + }; + + xdg.userDirs.enable = true; + xdg.userDirs.createDirectories = true; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; + + # TODO move to seperate file + programs.zsh = { + enable=true; + shellAliases = { + ll = "lsd -l"; + update = "sudo nixos-rebuild switch --flake /etc/nixos#default"; + }; + history = { + path = "${config.xdg.dataHome}/zsh/history"; + size = 10000; + }; + oh-my-zsh = { + enable = true; + plugins = [ "git" ]; + theme = "frisk"; + }; + }; + + # TODO extend and move to seperate file + programs.git = { + enable = true; + userName = "Noa Aarts"; + userEmail = "itepastra@gmail.com"; + extraConfig = { + init = { defaultBranch = "main"; }; + }; + }; + + # TODO move to seperate file + # TODO create neovim config + programs.nixvim = { + enable = true; + vimAlias = true; + + # Configure neovim options... + options = { + relativenumber = true; + incsearch = true; + }; + + # ...mappings... + keymaps = [ + { + mode = "n"; + key = ""; + action = ":w"; + } + { + mode = "n"; + key = ""; + action = ":noh"; + options.silent = true; + } + { + mode = "v"; + key = ">"; + action = ">gv"; + } + { + mode = "v"; + key = "<"; + action = "k" = "goto_prev"; + "j" = "goto_next"; + }; + + lspBuf = { + gd = "definition"; + K = "hover"; + }; + }; + }; + }; + + # ... and even highlights and autocommands ! + highlight.ExtraWhitespace.bg = "red"; + match.ExtraWhitespace = "\\s\\+$"; + autoCmd = [ + { + event = "FileType"; + pattern = "nix"; + command = "setlocal tabstop=2 shiftwidth=2"; + } + ]; + }; +} diff --git a/styles/waybar.css b/styles/waybar.css new file mode 100644 index 0000000..438e2cb --- /dev/null +++ b/styles/waybar.css @@ -0,0 +1,301 @@ +* { + /* `otf-font-awesome` is required to be installed for icons */ + font-family: "Maple Mono NF"; + font-size: 13px; +} + +window#waybar { + background-color: transparent; + border-bottom: none; + color: #ffffff; + transition-property: background-color; + transition-duration: .5s; +} +window#waybar.hidden { + opacity: 0.2; +} + +/* +window#waybar.empty { + background-color: transparent; +} +window#waybar.solo { + background-color: #FFFFFF; +} +*/ + +window#waybar.termite { + background-color: #3F3F3F; +} + +window#waybar.chromium { + background-color: #000000; + border: none; +} + +button { + /* Use box-shadow instead of border so the text isn't offset */ + box-shadow: inset 0 -1px transparent; + /* Avoid rounded borders under each button name */ + border: none; + border-radius: 0; +} + +/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ +button:hover { + background: inherit; + box-shadow: inset 0 -1px #ffffff; +} + +#workspaces button { + padding: 0 5px; + background-color: transparent; + color: #ffffff; +} + +#workspaces button:hover { + background: #1f2430; +} + +#workspaces button.active { + color: #80BFFF; + box-shadow: inset 0 -1px #80BFFF; +} + +#workspaces button.urgent { + background-color: #eb4d4b; +} + +#mode { + background-color: #64727D; + border-bottom: 3px solid #ffffff; +} + +#clock, +#battery, +#cpu, +#memory, +#disk, +#temperature, +#backlight, +#network, +#pulseaudio, +#wireplumber, +#custom-media, +#tray, +#mode, +#idle_inhibitor, +#scratchpad, +#mpd { + padding: 0 10px; +} + +#window, +#workspaces { + margin: 0 4px; +} + +/* If workspaces is the leftmost module, omit left margin */ +.modules-left > widget:first-child > #workspaces { + margin-left: 0; +} + +/* If workspaces is the rightmost module, omit right margin */ +.modules-right > widget:last-child > #workspaces { + margin-right: 0; +} + +#clock { + color: #ffffff; +} +#clock > tooltip { + background-color: #ffffff; + color: #ffffff; +} + +#battery { + background-color: #ffffff; + color: #000000; +} + +#battery.charging, #battery.plugged { + color: #ffffff; + background-color: #26A65B; +} + +@keyframes blink { + to { + background-color: #ffffff; + color: #000000; + } +} + +#battery.critical:not(.charging) { + background-color: #f53c3c; + color: #ffffff; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; +} + +label:focus { + background-color: #000000; +} + +#cpu { + background-color: transparent; + color: #87D96C; +} + +#memory { + background-color: transparent; + color: #DFBFFF; +} + +#disk { + background-color: transparent; + color: #FFAD66; +} + +#backlight { + background-color: #90b1b1; +} + +#network { + background-color: transparent; + color: #80BFFF; +} + +#network.disconnected { + background-color: #f53c3c; +} + +#pulseaudio { + background-color: transparent; + color: #F29E74; +} + +#pulseaudio.muted { + background-color: #90b1b1; + color: #2a5c45; +} + +#wireplumber { + background-color: #fff0f5; + color: #000000; +} + +#wireplumber.muted { + background-color: #f53c3c; +} + +#custom-pronouns { + background-color: #660000; + transition: all 0.2s ease-in-out; + padding: 0 5px; + margin: 0 5px; + border-radius:999px; +} + +#custom-poweroff { + background-color: #343946; + border-radius: 999px; + padding: 0px 5px; + margin: 5px 5px 5px 0px; + transition: all 0.2s ease-in-out; +} +#custom-poweroff:hover { + background-color: #f53c3c; +} + + +.custom-spotify { + color: #87D96C; +} + +#custom-media.custom-vlc { + background-color: #ffa000; +} + +#temperature { + background-color: transparent; + color: #ffcc66; +} + +#temperature.critical { + background-color: transparent; + color: #eb4d4b; +} + +#tray { + background-color: #1f2430; +} + +#tray > .passive { + -gtk-icon-effect: dim; +} + +#tray > .needs-attention { + -gtk-icon-effect: highlight; + +} + +#idle_inhibitor { + background-color: #2d3436; +} + +#idle_inhibitor.activated { + background-color: #ecf0f1; + color: #2d3436; +} + +#mpd { + background-color: #66cc99; + color: #2a5c45; +} + +#mpd.disconnected { + background-color: #f53c3c; +} + +#mpd.stopped { + background-color: #90b1b1; +} + +#mpd.paused { + background-color: #51a37a; +} + +#language { + background: #00b093; + color: #740864; + padding: 0 5px; + margin: 0 5px; + min-width: 16px; +} + +#keyboard-state { + background: #97e1ad; + color: #000000; + padding: 0 0px; + margin: 0 5px; + min-width: 16px; +} + +#keyboard-state > label { + padding: 0 5px; +} + +#keyboard-state > label.locked { + background: rgba(0, 0, 0, 0.2); +} + +#scratchpad { + background: rgba(0, 0, 0, 0.2); +} + +#scratchpad.empty { + background-color: transparent; +}