diff options
74 files changed, 3213 insertions, 0 deletions
diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..f63082b --- /dev/null +++ b/configuration.nix @@ -0,0 +1,157 @@ +{ config, lib, pkgs, inputs, ... }: + +{ + imports = [ + ./hardware-configuration.nix + ./modules + ]; + + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + + fileSystems."/persist".neededForBoot = true; + environment.persistence."/persist/system" = { + hideMounts = true; + directories = [ + "/etc/nixos" + "/var/log" + "/var/lib/nixos" + #"/var/lib/bluetooth" + "/var/lib/systemd/coredump" + #"/etc/NetworkManager/system-connections" + ]; + files = [ + "/etc/machine-id" + # { file = "/var/keys/secret_file"; parentDirectory = { mode = "u=rwx,g=,o="; }; } + ]; + }; + + programs.fuse.userAllowOther = true; + home-manager = { + extraSpecialArgs = { inherit inputs; }; + users = { + "c" = import ./home.nix; + }; + }; + + environment = { + localBinInPath = true; + + interactiveShellInit = '' +# (cat ~/.cache/wal/sequences &) +# source ~/.cache/wal/colors-tty.sh + + alias toys="nix-shell -p cmatrix asciiquarium pipes cowsay figlet neofetch" + + alias c="codium ." + + alias p="nix-shell -p" + alias rb="sudo nixos-rebuild switch --flake /etc/nixos#default" + + alias lsa="ls -lAsh" + mkcd() { + mkdir -p "$1" + cd "$1" + } + ''; + }; + + time.timeZone = "America/Los_Angeles"; + + # Select internationalisation properties. + # i18n.defaultLocale = "en_US.UTF-8"; + # console = { + # font = "Lat2-Terminus16"; + # keyMap = "us"; + # useXkbConfig = true; # use xkb.options in tty. + # }; + + # Enable CUPS to print documents. + # services.printing.enable = true; + + # Enable touchpad support (enabled default in most desktopManager). + # services.xserver.libinput.enable = true; + + users.users = { + root.hashedPasswordFile = "/persist/passwords/root"; + + "c" = { + isNormalUser = true; + hashedPasswordFile = "/persist/passwords/c"; + extraGroups = [ "wheel" ]; + }; + }; + + # List packages installed in system profile. + + nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ + "steam" + "steam-original" + "steam-run" + ]; + + environment.systemPackages = with pkgs; [ + git + vim + wget + firefox + wineWowPackages.stable + #wine + winetricks + + pulseaudio + playerctl + + ffmpeg + jellyfin + + killall + + go + jdk21 + + lutris + libGL + ]; + + programs.steam.enable = true; + + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + services.pcscd.enable = true; + programs.gnupg.agent = { + enable = true; + enableSSHSupport = true; + pinentryFlavor = "gtk2"; + }; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + # services.openssh.enable = true; + + # 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 option defines the first version of NixOS you have installed on this particular machine, + # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions. + # + # Most users should NEVER change this value after the initial install, for any reason, + # even if you've upgraded your system to a new NixOS release. + # + # This value does NOT affect the Nixpkgs version your packages and OS are pulled from, + # so changing it will NOT upgrade your system. + # + # This value being lower than the current NixOS release does NOT mean your system is + # out of date, out of support, or vulnerable. + # + # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration, + # and migrated your data accordingly. + # + # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . + system.stateVersion = "23.11"; # Did you read the comment? 🤨 +} + diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..b6465bf --- /dev/null +++ b/flake.lock @@ -0,0 +1,64 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709485962, + "narHash": "sha256-rmFB4uE10+LJbcVE4ePgiuHOBlUIjQOeZt4VQVJTU8M=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "d579633ff9915a8f4058d5c439281097e92380a8", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "impermanence": { + "locked": { + "lastModified": 1708968331, + "narHash": "sha256-VUXLaPusCBvwM3zhGbRIJVeYluh2uWuqtj4WirQ1L9Y=", + "owner": "nix-community", + "repo": "impermanence", + "rev": "a33ef102a02ce77d3e39c25197664b7a636f9c30", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "impermanence", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1709237383, + "narHash": "sha256-cy6ArO4k5qTx+l5o+0mL9f5fa86tYUX3ozE1S+Txlds=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "1536926ef5621b09bba54035ae2bb6d806d72ac8", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "impermanence": "impermanence", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..7d736c9 --- /dev/null +++ b/flake.nix @@ -0,0 +1,37 @@ +{ + description = "Nixos config flake"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + + #disko = { + # url = "github:nix-community/disko"; + # inputs.nixpkgs.follows = "nixpkgs"; + #}; + + impermanence = { + url = "github:nix-community/impermanence"; + }; + + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = {nixpkgs, ...} @ inputs: + { + nixosConfigurations.default = nixpkgs.lib.nixosSystem { + specialArgs = {inherit inputs;}; + modules = [ + #inputs.disko.nixosModules.default + #(import ./disko.nix { device = "/dev/vda"; }) + + ./configuration.nix + + inputs.home-manager.nixosModules.default + inputs.impermanence.nixosModules.impermanence + ]; + }; + }; +} diff --git a/hardware-configuration.nix b/hardware-configuration.nix new file mode 100644 index 0000000..c268ff8 --- /dev/null +++ b/hardware-configuration.nix @@ -0,0 +1,51 @@ +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot = { + loader.grub = { + enable = true; + + zfsSupport = true; + efiSupport = true; + efiInstallAsRemovable = true; + mirroredBoots = [ + { devices = [ "nodev" ]; path = "/boot"; } + ]; + }; + + initrd = { + availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ]; + kernelModules = [ "amdgpu" ]; + + postDeviceCommands = lib.mkAfter '' + zfs rollback -r zpool/root@blank && zfs rollback -r zpool/home@blank + ''; + }; + + kernelModules = [ "kvm-amd" ]; + extraModulePackages = [ ]; + + supportedFilesystems = [ "ntfs" ]; + }; + + fileSystems = { + "/" = { fsType = "zfs"; device = "zpool/root"; }; + "/home" = { fsType = "zfs"; device = "zpool/home"; }; + "/persist" = { fsType = "zfs"; device = "zpool/persist"; }; + "/nix" = { fsType = "zfs"; device = "zpool/nix"; }; + + "/boot" = { fsType = "vfat"; device = "/dev/disk/by-uuid/12CE-A600"; }; + + "/mnt/4tb" = { fsType = "ext4"; device = "/dev/disk/by-label/4tb"; }; + "/mnt/ssd" = { fsType = "ext4"; device = "/dev/disk/by-label/ssd-256"; }; + }; + + swapDevices = [ ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/home.nix b/home.nix new file mode 100644 index 0000000..42223ea --- /dev/null +++ b/home.nix @@ -0,0 +1,104 @@ +{ lib, pkgs, inputs, config, ...}: + +{ + imports = [ + inputs.impermanence.nixosModules.home-manager.impermanence + + ./modules/home + ]; + + theme = import ./themes/skull.nix; + + home.stateVersion = "23.11"; + + home.persistence."/persist/home" = { + directories = [ + "Downloads" + "Documents" + "Pictures" + "Videos" + "Games" + "Persist" + + "code" + + ".gnupg" + ".ssh" + + ".local/bin" + ".local/share/applications" + + ".mozilla" + ".wine" + + ".irssi" + ".config/discord" + ".config/Vencord" + + { + directory = ".local/share/Steam"; + method = "symlink"; + } + + ".config/qBittorrent" + ".local/share/qBittorrent" + ".cache/qBittorrent" + + ".config/jellyfin" + ".local/share/jellyfin" + ".cache/jellyfin" + + ".local/share/Anki2" + ".local/share/lutris" + ".local/share/PrismLauncher" + ]; + files = [ + ".Xresources" + ]; + allowOther = true; + }; + + programs = { + feh.enable = true; + btop.enable = true; + tmux.enable = true; + + zoxide.enable = true; + }; + + nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ + "discord" + "obsidian" + ]; + + home.packages = with pkgs; [ + eww + pfetch + + kdePackages.breeze + + irssi + (discord.override { + withVencord = true; + }) + + qbittorrent + jellyfin-media-player + mkvtoolnix + + gimp + + anki-bin + + vesktop + + obsidian + prismlauncher + + jetbrains.idea-community + ]; + + home.file = { + ".0b".source = config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/.local/share/PrismLauncher/instances/0b/.minecraft"; + }; +} diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..8a8b05b --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,10 @@ +{ ... }: + +{ + imports = [ + ./fonts.nix + ./networking.nix + ./pipewire.nix + ./xserver.nix + ]; +} diff --git a/modules/fonts.nix b/modules/fonts.nix new file mode 100644 index 0000000..89ee17a --- /dev/null +++ b/modules/fonts.nix @@ -0,0 +1,22 @@ +{ pkgs, ... }: + +{ + fonts = { + packages = with pkgs; [ + nerdfonts + noto-fonts + noto-fonts-cjk + noto-fonts-cjk-sans + noto-fonts-cjk-serif + noto-fonts-emoji + ]; + + fontconfig = { + defaultFonts = { + monospace = [ "CaskaydiaMono Nerd Font" ]; + sansSerif = [ "DejaVu Sans" "Noto Sans CJK JP" "Noto Sans" ]; + serif = [ "DejaVu Serif" "Noto Serif CJK JP" "Noto Serif" ]; + }; + }; + }; +} diff --git a/modules/home/colors.nix b/modules/home/colors.nix new file mode 100644 index 0000000..ecafe62 --- /dev/null +++ b/modules/home/colors.nix @@ -0,0 +1,31 @@ +{ lib, ... }: + +with lib; + +{ + options.colors = + let + mkColorOption = name: { + inherit name; + value = mkOption { +# type = types.strMatching "[a-fA-F0-9]{6}"; + type = types.strMatching "[a-fA-F0-9]*"; + description = "Color ${name}."; + }; + }; + in listToAttrs (map mkColorOption [ + "primary" "secondary" + "foreground" "foregroundAlt" + "background" "backgroundAlt" + + "accent" + + "black" "red" "green" "yellow" "blue" "magenta" "cyan" "white" + "brightBlack" "brightRed" "brightGreen" "brightYellow" "brightBlue" "brightMagenta" "brightCyan" "brightWhite" + + "bg" "bg0" "bg1" "bg2" "bg3" "bg4" + "fg" "fg0" "fg1" "fg2" "fg3" "fg4" + + "orange" "brightOrange" + ]); +} diff --git a/modules/home/default.nix b/modules/home/default.nix new file mode 100644 index 0000000..e913cb4 --- /dev/null +++ b/modules/home/default.nix @@ -0,0 +1,19 @@ +{ ... }: + +{ + imports = [ + ./colors.nix + ./discord.nix + ./flameshot.nix + ./git.nix + ./i3.nix + ./kitty.nix + ./mpv.nix + ./picom.nix + ./polybar.nix + ./rofi.nix + ./theme.nix + ./vscode.nix +# ./zsh.nix + ]; +} diff --git a/modules/home/discord.nix b/modules/home/discord.nix new file mode 100644 index 0000000..f303f1f --- /dev/null +++ b/modules/home/discord.nix @@ -0,0 +1,31 @@ +{ config, lib, ... }: + +let + conversion = import ../../util/color-conversion.nix { inherit lib; }; +in { + xdg.configFile."Vencord/themes/nix.theme.css".text = let c = config.theme.colors; in '' + @import url(https://mwittrien.github.io/BetterDiscordAddons/Themes/BasicBackground/BasicBackground.css); + + :root { + --transparencycolor: 0, 0, 0; + --transparencyalpha: 0.0; + --messagetransparency: 0.0; + --guildchanneltransparency: 0.15; + --chatinputtransparency: 0.0; + --memberlisttransparency: 0.15; + --settingsicons: 0; + --background: rgba(0, 0, 0, 0.8); + --backdrop: rgba(0, 0, 0, 0); + --version1_0_5: none; + + --accentcolor: ${conversion.hexToRGBString ", " c.accent}; + + --textbrightest: ${conversion.hexToRGBString ", " c.fg0}; + --textbrighter: ${conversion.hexToRGBString ", " c.fg1}; + --textbright: ${conversion.hexToRGBString ", " c.fg2}; + --textdark: ${conversion.hexToRGBString ", " c.fg3}; + --textdarker: ${conversion.hexToRGBString ", " c.fg4}; + --textdarkest: ${conversion.hexToRGBString ", " c.brightBlack}; + } + ''; +} diff --git a/modules/home/flameshot.nix b/modules/home/flameshot.nix new file mode 100644 index 0000000..d58dfe7 --- /dev/null +++ b/modules/home/flameshot.nix @@ -0,0 +1,22 @@ +{ config, ... }: + +{ + services.flameshot = { + enable = true; + + settings = let c = config.theme.colors; in { + General = { + savePath = "Pictures/Screenshots"; + + uiColor = "#${c.bg}"; + contrastUiColor = "#${c.accent}"; + + + filenamePattern = "%F_%T"; + + startupLaunch = false; + saveAfterCopy = true; + }; + }; + }; +} diff --git a/modules/home/git.nix b/modules/home/git.nix new file mode 100644 index 0000000..f78396b --- /dev/null +++ b/modules/home/git.nix @@ -0,0 +1,15 @@ +{ ... }: + +{ + programs.git = { + enable = true; + + userName = "Caroline Larimore"; + userEmail = "caroline@larimo.re"; + + signing = { + key = "314C14641E707B68"; + signByDefault = true; + }; + }; +} diff --git a/modules/home/i3.nix b/modules/home/i3.nix new file mode 100644 index 0000000..151bbaa --- /dev/null +++ b/modules/home/i3.nix @@ -0,0 +1,224 @@ +{ config, pkgs, ... }: + +{ + xsession.windowManager.i3 = { + enable = true; + + config = let + mod = "Mod1"; + + ws0 = "0:Main"; + ws1 = "1:Terminal"; + ws2 = "2:Browser"; + ws3 = "3:Chat"; + ws4 = "4:Steam"; + ws5 = "5"; + ws6 = "6"; + ws7 = "7"; + ws8 = "8:qBittorrent"; + ws9 = "9:Youtube"; + ws10 = "10:Misc"; + ws11 = "11:Empty"; + + output = { + primary = "primary"; + left = "DVI-D-0"; + right = "DisplayPort-1 HDMI-A-0"; + }; + in { + modifier = "${mod}"; + + fonts = { + names = [ "monospace" ]; + size = 8.0; + }; + + colors = let c = config.theme.colors; in { + focused = { + border = "#${c.fg2}"; + background = "#${c.fg2}"; + text = "#${c.bg}"; + indicator = "#${c.fg2}"; + childBorder = "#${c.fg2}"; + }; + + focusedInactive = { + border = "#${c.bg1}"; + background = "#${c.bg1}"; + text = "#${c.fg}"; + indicator = "#${c.bg1}"; + childBorder = "#${c.bg1}"; + }; + + unfocused = { + border = "#${c.bg}"; + background = "#${c.bg}"; + text = "#${c.fg}"; + indicator = "#${c.bg}"; + childBorder = "#${c.bg}"; + }; + }; + + gaps.inner = 8; + + workspaceOutputAssign = [ + { workspace = "${ws0}"; output = output.primary; } + { workspace = "${ws1}"; output = output.primary; } + + { workspace = "${ws2}"; output = output.left; } + { workspace = "${ws3}"; output = output.left; } + + { workspace = "${ws4}"; output = output.primary; } + + { workspace = "${ws5}"; output = output.primary; } + { workspace = "${ws6}"; output = output.primary; } + { workspace = "${ws7}"; output = output.primary; } + + { workspace = "${ws8}"; output = output.primary; } + { workspace = "${ws9}"; output = output.right; } + { workspace = "${ws10}"; output = output.primary; } + + { workspace = "${ws11}"; output = output.primary; } + ]; + + assigns = { + "${ws2}" = [ { class = "Firefox"; } ]; + "${ws3}" = [ { class = "discord"; } ]; + "${ws4}" = [ { class = "steam"; } ]; + + "${ws8}" = [ { class = "qBittorrent"; } ]; + }; + + startup = [ + { command = "polybar-msg cmd quit"; always = true; notification = false; } + { command = "polybar"; always = true; notification = false; } + { command = "systemctl --user restart picom"; always = true; notification = false; } + { command = "${pkgs.feh}/bin/feh --bg-fill ~/Pictures/bg/${config.theme.background}"; always = true; notification = false; } +# { command = "${pkgs.pywal}/bin/wal -ne -b 000000 -i ~/Pictures/bg/${config.theme.background}"; always = true; notification = false; } + ]; + + keybindings = { + "${mod}+Shift+c" = "reload"; + "${mod}+Shift+r" = "restart"; + "${mod}+Shift+e" = "exec \"i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'\""; + + "${mod}+q" = "kill"; + "${mod}+d" = "exec \"rofi -modi drun,run -show drun\""; + "${mod}+Return" = "exec kitty"; + + "${mod}+Num_Lock" = "exec --no-startup-id polybar-msg cmd toggle"; + + # Screenshots + #TODO: screen and full should be swapped, but currently screen is fucky :'( + "Shift+Print" = "exec ${pkgs.flameshot}/bin/flameshot screen -c"; + "Print" = "exec ${pkgs.flameshot}/bin/flameshot full -c"; + "${mod}+Shift+s" = "exec ${pkgs.flameshot}/bin/flameshot gui -c"; + "Mod4+Shift+s" = "exec ${pkgs.flameshot}/bin/flameshot gui -c"; + "${mod}+Ctrl+Shift+s" = "exec ${pkgs.flameshot}/bin/flameshot launcher -c"; + + # Media keys + "XF86AudioRaiseVolume" = "exec --no-startup-id ${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ +2%"; + "XF86AudioLowerVolume" = "exec --no-startup-id ${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ -2%"; + "XF86AudioMute" = "exec --no-startup-id ${pkgs.pulseaudio}/bin/pactl set-sink-mute @DEFAULT_SINK@ toggle"; + "XF86AudioMicMute" = "exec --no-startup-id ${pkgs.pulseaudio}/bin/pactl set-source-mute @DEFAULT_SOURCE@ toggle"; + + "XF86AudioPlay" = "exec playerctl play-pause"; + "XF86AudioPause" = "exec playerctl play-pause"; + "XF86AudioStop" = "exec playerctl stop"; + "XF86AudioNext" = "exec playerctl next"; + "XF86AudioPrev" = "exec playerctl previous"; + + # Workspaces + "${mod}+grave" = "workspace number ${ws0}"; + "${mod}+1" = "workspace number ${ws1}"; + "${mod}+2" = "workspace number ${ws2}"; + "${mod}+3" = "workspace number ${ws3}"; + "${mod}+4" = "workspace number ${ws4}"; + "${mod}+5" = "workspace number ${ws5}"; + "${mod}+6" = "workspace number ${ws6}"; + "${mod}+7" = "workspace number ${ws7}"; + "${mod}+8" = "workspace number ${ws8}"; + "${mod}+9" = "workspace number ${ws9}"; + "${mod}+0" = "workspace number ${ws10}"; + "${mod}+equal" = "workspace number ${ws11}"; + + # Move active workspace + "${mod}+comma" = "move workspace to output ${output.left}"; + "${mod}+period" = "move workspace to output ${output.primary}"; + "${mod}+slash" = "move workspace to output ${output.right}"; + + # Layout + "${mod}+z" = "layout stacking"; + "${mod}+x" = "layout tabbed"; + "${mod}+c" = "layout toggle split"; + + # Focus + "${mod}+h" = "focus left"; + "${mod}+j" = "focus down"; + "${mod}+k" = "focus up"; + "${mod}+l" = "focus right"; + + "${mod}+Left" = "focus left"; + "${mod}+Down" = "focus down"; + "${mod}+Up" = "focus up"; + "${mod}+Right" = "focus right"; + + "${mod}+space" = "focus mode_toggle"; + "${mod}+a" = "focus parent"; + + # Move focused container + "${mod}+Shift+h" = "move left"; + "${mod}+Shift+j" = "move down"; + "${mod}+Shift+k" = "move up"; + "${mod}+Shift+l" = "move right"; + + "${mod}+Shift+Left" = "move left"; + "${mod}+Shift+Down" = "move down"; + "${mod}+Shift+Up" = "move up"; + "${mod}+Shift+Right" = "move right"; + + # Misc container binds + "${mod}+Shift+space" = "floating toggle"; + "${mod}+f" = "fullscreen toggle"; + + "${mod}+w" = "split h"; + "${mod}+e" = "split v"; + + "${mod}+r" = "mode resize"; + + # Move focused container to workspace + "${mod}+Shift+grave" = "move container to workspace number ${ws0}"; + "${mod}+Shift+1" = "move container to workspace number ${ws1}"; + "${mod}+Shift+2" = "move container to workspace number ${ws2}"; + "${mod}+Shift+3" = "move container to workspace number ${ws3}"; + "${mod}+Shift+4" = "move container to workspace number ${ws4}"; + "${mod}+Shift+5" = "move container to workspace number ${ws5}"; + "${mod}+Shift+6" = "move container to workspace number ${ws6}"; + "${mod}+Shift+7" = "move container to workspace number ${ws7}"; + "${mod}+Shift+8" = "move container to workspace number ${ws8}"; + "${mod}+Shift+9" = "move container to workspace number ${ws9}"; + "${mod}+Shift+0" = "move container to workspace number ${ws10}"; + }; + + modes = { + resize = { + "h" = "resize shrink width 10 px or 10 ppt"; + "j" = "resize grow height 10 px or 10 ppt"; + "k" = "resize shrink height 10 px or 10 ppt"; + "l" = "resize grow width 10 px or 10 ppt"; + + "Left" = "resize shrink width 10 px or 10 ppt"; + "Down" = "resize grow height 10 px or 10 ppt"; + "Up" = "resize shrink height 10 px or 10 ppt"; + "Right" = "resize grow width 10 px or 10 ppt"; + + "Return" = "mode default"; + "Escape" = "mode default"; + "${mod}+r" = "mode default"; + }; + }; + + bars = []; + }; + }; +} diff --git a/modules/home/kitty.nix b/modules/home/kitty.nix new file mode 100644 index 0000000..852f554 --- /dev/null +++ b/modules/home/kitty.nix @@ -0,0 +1,39 @@ +{ config, ... }: + +{ + programs.kitty = { + enable = true; + + font = { name = "monospace"; size = 8.0; }; + + settings = let c = config.theme.colors; in { + color0 = "#${c.black}"; + color1 = "#${c.red}"; + color2 = "#${c.green}"; + color3 = "#${c.yellow}"; + color4 = "#${c.blue}"; + color5 = "#${c.magenta}"; + color6 = "#${c.cyan}"; + color7 = "#${c.white}"; + + color8 = "#${c.brightBlack}"; + color9 = "#${c.brightRed}"; + color10 = "#${c.brightGreen}"; + color11 = "#${c.brightYellow}"; + color12 = "#${c.brightBlue}"; + color13 = "#${c.brightMagenta}"; + color14 = "#${c.brightCyan}"; + color15 = "#${c.brightWhite}"; + }; + + shellIntegration = { + mode = "no-cursor"; + enableBashIntegration = true; + }; + + extraConfig = '' + background_opacity 0.8 + confirm_os_window_close 0 + ''; + }; +} diff --git a/modules/home/mpv.nix b/modules/home/mpv.nix new file mode 100644 index 0000000..5e1f013 --- /dev/null +++ b/modules/home/mpv.nix @@ -0,0 +1,12 @@ +{ ... }: + +{ + programs.mpv = { + enable = true; + + config = { + screenshot-format = "png"; + screenshot-template = "~/Pictures/Screenshots/mpv/%F/%P"; + }; + }; +} diff --git a/modules/home/picom.nix b/modules/home/picom.nix new file mode 100644 index 0000000..d625200 --- /dev/null +++ b/modules/home/picom.nix @@ -0,0 +1,18 @@ +{ ... }: + +{ + services.picom = { + enable = true; + + backend = "glx"; + vSync = true; + + settings = { + blur = { + method = "gaussian"; + size = 10; + deviation = 2; + }; + }; + }; +} diff --git a/modules/home/polybar.nix b/modules/home/polybar.nix new file mode 100644 index 0000000..073919d --- /dev/null +++ b/modules/home/polybar.nix @@ -0,0 +1,232 @@ +{ pkgs, config, ... }: + +{ + services.polybar = { + enable = true; + script = "polybar"; + + package = pkgs.polybar.override { + i3Support = true; + pulseSupport = true; + }; + + settings = let c = config.theme.colors; in { + "bar/main" = { + width = "100%"; + height = "24pt"; + radius = 0; + + background = "#${c.bg}"; + foreground = "#${c.fg}"; + + font = [ + "Symbols Nerd Font:size=16;2" + "monospace:size=11;2" + "Sauce Code Pro Nerd Font:size=11;2" + "Noto Sans CJK JP:size=11;1" + "sans-serif:size=11;1" + ]; + + border = { + top = "8px"; + left = "8px"; + right = "8px"; + + color = "#00000000"; + }; + + padding = { + left = 2; + right = 2; + }; + + cursor = { + click = "pointer"; + scroll = "ns-resize"; + }; + + enable-ipc = true; + + line.size = "3pt"; + + separator = { + text = "|"; + foreground = "#${c.bg3}"; + }; + + module.margin = 1; + modules = { + left = "cpu memory xwindow"; + center = "i3"; + right = "wlan eth filesystem xkeyboard pulseaudio date"; + }; + }; + + + "module/i3" = { + type = "internal/i3"; + + strip-wsnumbers = true; + index-sort = true; + + ws.icon = [ + "0:Main;" "1:Terminal;" "2:Browser;" "3:Chat;" "4:Steam;" + "5;" "6;" "7;" + "8:qBittorrent;" "9:Youtube;" "10:Misc;" + ]; + + label = { + focused = { + text = "%icon%"; + padding = 2; + + foreground = "#${c.fg0}"; + background = "#${c.bg1}"; + underline = "#${c.accent}"; + }; + + visible = { + text = "%icon%"; + padding = 2; + + underline = "#${c.fg4}"; + }; + + unfocused = { + text = "%icon%"; + padding = 2; + }; + + urgent = { + text = "%icon%"; + padding = 2; + + foreground = "#${c.bg}"; + background = "#${c.accent}"; + }; + }; + }; + + "module/xwindow" = { + type = "internal/xwindow"; + label = "%title:0:64:...%"; + }; + + + "module/pulseaudio" = { + type = "internal/pulseaudio"; + + format.volume = "<ramp-volume> <label-volume>"; + + label = { + volume = "%percentage%%"; + muted = { + text = " %percentage%%"; + foreground = "#${c.bg3}"; + }; + }; + + ramp.volume = { + text = [ "" "" "" ]; + foreground = "#${c.accent}"; + }; + }; + + "module/xkeyboard" = { + type = "internal/xkeyboard"; + blacklist = [ "num lock" ]; + + indicator.icon = [ "caps lock;;" ]; + + format = { + text = "<label-indicator> <label-layout>"; + + prefix = { + text = " "; + foreground = "#${c.accent}"; + }; + }; + + label = { + layout = "%layout%"; + indicator.on = "%icon%"; + }; + }; + + "module/cpu" = { + type = "internal/cpu"; + interval = 2; + + format.prefix = { + text = "CPU "; + foreground = "#${c.accent}"; + }; + + label = "%percentage%%"; + }; + + "module/memory" = { + type = "internal/memory"; + interval = 2; + + format.prefix = { + text = "MEM "; + foreground = "#${c.accent}"; + }; + + label = "%gb_used%"; + }; + + "module/filesystem" = { + type = "internal/fs"; + interval = 25; + + mount = [ "/nix" "/persist" ]; + + label = { + mounted = "%{F#${c.accent}}%{F-} %used%"; + unmounted = { + text = "%mountpoint%"; + foreground = "#${c.bg3}"; + }; + }; + }; + + "module/eth" = { + type = "internal/network"; + interface.type = "wired"; + interval = 2; + + format.connected = "<label-connected>"; + label.connected = "%{F#${c.accent}}%{F-} %downspeed% %upspeed%"; + }; + + "module/wlan" = { + type = "internal/network"; + interface.type = "wireless"; + interval = 2; + + format.connected = "<ramp-signal> <label-connected>"; + label.connected = " %downspeed% %upspeed%"; + + ramp-signal = { + text = [ "" "" "" "" "" ]; + foreground = "#${c.accent}"; + }; + }; + + "module/date" = { + type = "internal/date"; + interval = 1; + + date = "%H:%M"; + date-alt = "%Y-%m-%d %H:%M:%S"; + + format.prefix = { + text = " "; + foreground = "#${c.accent}"; + }; + }; + }; + }; +} diff --git a/modules/home/rofi.nix b/modules/home/rofi.nix new file mode 100644 index 0000000..d0ff642 --- /dev/null +++ b/modules/home/rofi.nix @@ -0,0 +1,49 @@ +{ config, ... }: + +{ + programs.rofi = { + enable = true; + + font = "monospace 12"; + + theme = let + inherit (config.lib.formats.rasi) mkLiteral; + c = config.theme.colors; + in { + "@import" = "default"; + + "*" = { + background = mkLiteral "#${c.bg}"; + foreground = mkLiteral "#${c.fg}"; + foreground-alt = mkLiteral "#${c.bg3}"; + + alternate-normal-background = mkLiteral "var(background)"; + + selected-normal-foreground = mkLiteral "var(background)"; + selected-normal-background = mkLiteral "#${c.accent}"; + + border-color = mkLiteral "var(background)"; + separatorcolor = mkLiteral "#${c.bg3}"; + }; + + inputbar = { + children = map mkLiteral [ "entry" "num-filtered-rows" "textbox-num-sep" "num-rows" ]; + }; + + element = { + children = map mkLiteral [ "element-icon" "element-text" ]; + }; + + entry.placeholder = ""; + + scrollbar.handle-color = mkLiteral "var(foreground-alt)"; + num-rows.text-color = mkLiteral "var(foreground-alt)"; + num-filtered-rows.text-color = mkLiteral "var(foreground-alt)"; + textbox-num-sep.text-color = mkLiteral "var(foreground-alt)"; + + message.border = mkLiteral "1px solid 0px 0px"; + listview.border = mkLiteral "1px solid 0px 0px"; + sidebar.border = mkLiteral "1px solid 0px 0px"; + }; + }; +} diff --git a/modules/home/theme.nix b/modules/home/theme.nix new file mode 100644 index 0000000..056c8ac --- /dev/null +++ b/modules/home/theme.nix @@ -0,0 +1,39 @@ +{ lib, ... }: + +with lib; + +{ + options.theme = { + background = mkOption { + type = types.str; + example = "mem.png"; + description = '' + Background image. Path starts in ~/Pictures/bg/ + ''; + }; + + colors = let + mkColorOption = name: { + inherit name; + value = mkOption { + type = types.strMatching "[a-fA-F0-9]{6}"; + default = "ff00ff"; + example = "23ce94"; + description = '' + Hex value for color "${name}". + ''; + }; + }; + in listToAttrs (map mkColorOption [ + "accent" + + "black" "red" "green" "yellow" "blue" "magenta" "cyan" "white" + "brightBlack" "brightRed" "brightGreen" "brightYellow" "brightBlue" "brightMagenta" "brightCyan" "brightWhite" + + "bg" "bg0" "bg1" "bg2" "bg3" "bg4" + "fg" "fg0" "fg1" "fg2" "fg3" "fg4" + + "orange" "brightOrange" + ]); + }; +} diff --git a/modules/home/vscode.nix b/modules/home/vscode.nix new file mode 100644 index 0000000..3047d33 --- /dev/null +++ b/modules/home/vscode.nix @@ -0,0 +1,22 @@ +{ pkgs, ... }: + +{ + programs.vscode = { + enable = true; + package = pkgs.vscodium; + + extensions = with pkgs.vscode-extensions; [ + jdinhlife.gruvbox + vscode-icons-team.vscode-icons + + jnoortheen.nix-ide + golang.go + ]; + + userSettings = { + "workbench.colorTheme" = "Gruvbox Dark Medium"; + "workbench.iconTheme" = "vscode-icons"; + "window.titleBarStyle" = "custom"; + }; + }; +} diff --git a/modules/home/zsh.nix b/modules/home/zsh.nix new file mode 100644 index 0000000..7d72dba --- /dev/null +++ b/modules/home/zsh.nix @@ -0,0 +1,17 @@ +{ pkgs, ... }: + +{ + programs.zsh = { + enable = true; + + shellAliases = { + lsa = "ls -lAsh"; + }; + + oh-my-zsh = { + enable = true; + plugins = [ "git" "systemd" ]; + #theme = "powerlevel10k"; + }; + }; +} diff --git a/modules/networking.nix b/modules/networking.nix new file mode 100644 index 0000000..13237a8 --- /dev/null +++ b/modules/networking.nix @@ -0,0 +1,23 @@ +{ ... }: + +{ + networking = { + hostName = "c-pc"; + hostId = "23ce94ff"; + + useDHCP = true; + + wireless = { + enable = true; + networks = import ./wifi.nix; + }; + + firewall = { + enable = false; + + allowedTCPPorts = [ 8096 50000 ]; + allowedUDPPorts = [ ]; + }; + }; +} + diff --git a/modules/pipewire.nix b/modules/pipewire.nix new file mode 100644 index 0000000..0dfb230 --- /dev/null +++ b/modules/pipewire.nix @@ -0,0 +1,13 @@ +{ ... }: + +{ + security.rtkit.enable = true; + services.pipewire = { + enable = true; + + pulse.enable = true; + alsa.enable = true; + alsa.support32Bit = true; + #jack.enable = true; + }; +} diff --git a/modules/wifi.nix b/modules/wifi.nix new file mode 100644 index 0000000..9e23e44 --- /dev/null +++ b/modules/wifi.nix @@ -0,0 +1,3 @@ +{ + "The Dwyers".psk = "86EC3E567E"; +} diff --git a/modules/xserver.nix b/modules/xserver.nix new file mode 100644 index 0000000..1530c44 --- /dev/null +++ b/modules/xserver.nix @@ -0,0 +1,33 @@ +{ pkgs, ... }: + +{ + services.xserver = { + enable = true; + + videoDrivers = [ "amdgpu" ]; + + displayManager = { + lightdm.enable = true; + defaultSession = "none+i3"; + + setupCommands = '' + if ${pkgs.xorg.xrandr}/bin/xrandr --query | grep 2560x1080; then + ${pkgs.xorg.xrandr}/bin/xrandr --output DVI-D-0 --mode 1920x1080 --rate 60 --pos 0x0 + ${pkgs.xorg.xrandr}/bin/xrandr --output DisplayPort-2 --mode 2560x1080 --rate 60 --pos 1920x0 --primary + ${pkgs.xorg.xrandr}/bin/xrandr --output HDMI-A-0 --mode 1920x1080 --rate 75 --pos 4480x0 + elif ${pkgs.xorg.xrandr}/bin/xrandr --query | grep 2560x1440; then + ${pkgs.xorg.xrandr}/bin/xrandr --output DVI-D-0 --mode 1920x1080 --rate 60 --pos 0x360 + ${pkgs.xorg.xrandr}/bin/xrandr --output DisplayPort-2 --mode 2560x1440 --rate 165 --pos 1920x0 --primary + ${pkgs.xorg.xrandr}/bin/xrandr --output DisplayPort-1 --mode 1920x1200 --rate 60 --pos 4480x0 + fi + ''; + }; + + windowManager.i3 = { + enable = true; + }; + + xkb.layout = "us"; +# xkb.options = "eurosign:e,caps:escape"; + }; +} diff --git a/themes/matama.nix b/themes/matama.nix new file mode 100644 index 0000000..1a7ee5f --- /dev/null +++ b/themes/matama.nix @@ -0,0 +1,32 @@ +{ + background = "matama.png"; + + colors = { + accent = "b16286"; + + black = "282828"; brightBlack = "928374"; + red = "cc241d"; brightRed = "fb4934"; + green = "98971a"; brightGreen = "b8bb26"; + yellow = "d79921"; brightYellow = "fabd2f"; + blue = "458588"; brightBlue = "83a598"; + magenta = "b16286"; brightMagenta = "d3869b"; + cyan = "689d6a"; brightCyan = "8ec07c"; + white = "a89984"; brightWhite = "ebdbb2"; + + bg = "282828"; + bg0 = "282828"; + bg1 = "3c3836"; + bg2 = "504945"; + bg3 = "665c54"; + bg4 = "7c6f64"; + + fg = "ebdbb2"; + fg0 = "fbf1c7"; + fg1 = "ebdbb2"; + fg2 = "d5c4a1"; + fg3 = "bdae93"; + fg4 = "a89984"; + + orange = "d65d0e"; brightOrange = "fe8019"; + }; +} diff --git a/themes/mem.nix b/themes/mem.nix new file mode 100644 index 0000000..df80f0e --- /dev/null +++ b/themes/mem.nix @@ -0,0 +1,32 @@ +{ + background = "mem.png"; + + colors = { + accent = "f6e43a"; + + black = "282828"; brightBlack = "928374"; + red = "cc241d"; brightRed = "fb4934"; + green = "98971a"; brightGreen = "b8bb26"; + yellow = "d79921"; brightYellow = "f6e43a"; #NOTE: brightYellow has been changed + blue = "458588"; brightBlue = "83a598"; + magenta = "b16286"; brightMagenta = "d3869b"; + cyan = "689d6a"; brightCyan = "8ec07c"; + white = "a89984"; brightWhite = "ebdbb2"; + + bg = "282828"; + bg0 = "282828"; + bg1 = "3c3836"; + bg2 = "504945"; + bg3 = "665c54"; + bg4 = "7c6f64"; + + fg = "ebdbb2"; + fg0 = "fbf1c7"; + fg1 = "ebdbb2"; + fg2 = "d5c4a1"; + fg3 = "bdae93"; + fg4 = "a89984"; + + orange = "d65d0e"; brightOrange = "fe8019"; + }; +} diff --git a/themes/old/3.nix b/themes/old/3.nix new file mode 100644 index 0000000..0df7f28 --- /dev/null +++ b/themes/old/3.nix @@ -0,0 +1,14 @@ +{ + background = "astolfo.jpg"; + + colors = { + primary = { hex = "f5a9b8"; r = "245"; g = "169"; b = "184"; }; + secondary = { hex = "5bcefa"; }; + + foreground = { hex = "111111"; }; + foregroundAlt = { hex = "5bcefa"; }; + + background = { hex = "ffffff"; }; + backgroundAlt = { hex = "5bcefa"; }; + }; +} diff --git a/themes/old/hideri.nix b/themes/old/hideri.nix new file mode 100644 index 0000000..217077e --- /dev/null +++ b/themes/old/hideri.nix @@ -0,0 +1,15 @@ +{ + background = "hideri.png"; + + + colors = { + primary = { hex = "23ce94"; r = "35"; g = "206"; b = "149"; }; + secondary = { hex = "555555"; }; + + foreground = { hex = "c5c8c6"; }; + foregroundAlt = { hex = "707880"; }; + + background = { hex = "282a2e"; }; + backgroundAlt = { hex = "373b41"; }; + }; +} diff --git a/themes/old/kiwi.nix b/themes/old/kiwi.nix new file mode 100644 index 0000000..37675e1 --- /dev/null +++ b/themes/old/kiwi.nix @@ -0,0 +1,14 @@ +{ + background = "kiwi.png"; + + colors = { + primary = { hex = "34773c"; r = "52"; g = "119"; b = "60"; }; + secondary = { hex = "555555"; }; + + foreground = { hex = "c5c8c6"; }; + foregroundAlt = { hex = "707880"; }; + + background = { hex = "282a2e"; }; + backgroundAlt = { hex = "373b41"; }; + }; +} diff --git a/themes/old/megumin.nix b/themes/old/megumin.nix new file mode 100644 index 0000000..4bdf909 --- /dev/null +++ b/themes/old/megumin.nix @@ -0,0 +1,14 @@ +{ + background = "megumin.jpg"; + + colors = { + primary = { hex = "c44347"; r = "196"; g = "67"; b = "71"; }; + secondary = { hex = "555555"; }; + + foreground = { hex = "c5c8c6"; }; + foregroundAlt = { hex = "707880"; }; + + background = { hex = "282a2e"; }; + backgroundAlt = { hex = "373b41"; }; + }; +} diff --git a/themes/old/mem.nix b/themes/old/mem.nix new file mode 100644 index 0000000..d2eb8c0 --- /dev/null +++ b/themes/old/mem.nix @@ -0,0 +1,14 @@ +{ + background = "mem.png"; + + colors = { + primary = "f6e43a"; + secondary = "555555"; + + foreground = "c5c8c6"; + foregroundAlt = "707880"; + + background = "282a2e"; + backgroundAlt = "373b41"; + }; +} diff --git a/themes/old/nonon.nix b/themes/old/nonon.nix new file mode 100644 index 0000000..7dbe884 --- /dev/null +++ b/themes/old/nonon.nix @@ -0,0 +1,14 @@ +{ + background = "nonon.png"; + + colors = { + primary = { hex = "af1f3b"; r = "175"; g = "31"; b = "59"; }; + secondary = { hex = "555555"; }; + + foreground = { hex = "c5c8c6"; }; + foregroundAlt = { hex = "707880"; }; + + background = { hex = "282a2e"; }; + backgroundAlt = { hex = "373b41"; }; + }; +} diff --git a/themes/old/rin.nix b/themes/old/rin.nix new file mode 100644 index 0000000..b70e1f4 --- /dev/null +++ b/themes/old/rin.nix @@ -0,0 +1,14 @@ +{ + background = "rin2.png"; + + colors = { + primary = { hex = "ba112b"; r = "186"; g = "17"; b = "43"; }; + secondary = { hex = "555555"; }; + + foreground = { hex = "c5c8c6"; }; + foregroundAlt = { hex = "707880"; }; + + background = { hex = "282a2e"; }; + backgroundAlt = { hex = "373b41"; }; + }; +} diff --git a/themes/old/shinobu.nix b/themes/old/shinobu.nix new file mode 100644 index 0000000..5a3acdc --- /dev/null +++ b/themes/old/shinobu.nix @@ -0,0 +1,14 @@ +{ + background = "shinobu.png"; + + colors = { + primary = "cb0403"; + secondary = "555555"; + + foreground = "c5c8c6"; + foregroundAlt = "707880"; + + background = "282a2e"; + backgroundAlt = "373b41"; + }; +} diff --git a/themes/shinobu.nix b/themes/shinobu.nix new file mode 100644 index 0000000..229dd5f --- /dev/null +++ b/themes/shinobu.nix @@ -0,0 +1,32 @@ +{ + background = "shinobu.png"; + + colors = { + accent = "cc241d"; + + black = "282828"; brightBlack = "928374"; + red = "cc241d"; brightRed = "fb4934"; + green = "98971a"; brightGreen = "b8bb26"; + yellow = "d79921"; brightYellow = "fabd2f"; + blue = "458588"; brightBlue = "83a598"; + magenta = "b16286"; brightMagenta = "d3869b"; + cyan = "689d6a"; brightCyan = "8ec07c"; + white = "a89984"; brightWhite = "ebdbb2"; + + bg = "282828"; + bg0 = "282828"; + bg1 = "3c3836"; + bg2 = "504945"; + bg3 = "665c54"; + bg4 = "7c6f64"; + + fg = "ebdbb2"; + fg0 = "fbf1c7"; + fg1 = "ebdbb2"; + fg2 = "d5c4a1"; + fg3 = "bdae93"; + fg4 = "a89984"; + + orange = "d65d0e"; brightOrange = "fe8019"; + }; +} diff --git a/themes/skull.nix b/themes/skull.nix new file mode 100644 index 0000000..8ebdd1e --- /dev/null +++ b/themes/skull.nix @@ -0,0 +1,32 @@ +{ + background = "skull.png"; + + colors = { + accent = "458588"; + + black = "282828"; brightBlack = "928374"; + red = "cc241d"; brightRed = "fb4934"; + green = "98971a"; brightGreen = "b8bb26"; + yellow = "d79921"; brightYellow = "fabd2f"; + blue = "458588"; brightBlue = "83a598"; + magenta = "b16286"; brightMagenta = "d3869b"; + cyan = "689d6a"; brightCyan = "8ec07c"; + white = "a89984"; brightWhite = "ebdbb2"; + + bg = "282828"; + bg0 = "282828"; + bg1 = "3c3836"; + bg2 = "504945"; + bg3 = "665c54"; + bg4 = "7c6f64"; + + fg = "ebdbb2"; + fg0 = "fbf1c7"; + fg1 = "ebdbb2"; + fg2 = "d5c4a1"; + fg3 = "bdae93"; + fg4 = "a89984"; + + orange = "d65d0e"; brightOrange = "fe8019"; + }; +} diff --git a/util/color-conversion.nix b/util/color-conversion.nix new file mode 100644 index 0000000..969eec1 --- /dev/null +++ b/util/color-conversion.nix @@ -0,0 +1,175 @@ +{ lib }: +let + hexToDecMap = { + "0" = 0; + "1" = 1; + "2" = 2; + "3" = 3; + "4" = 4; + "5" = 5; + "6" = 6; + "7" = 7; + "8" = 8; + "9" = 9; + "a" = 10; + "b" = 11; + "c" = 12; + "d" = 13; + "e" = 14; + "f" = 15; + }; + + /* Base raised to the power of the exponent. + + Type: pow :: int or float -> int -> int + + Args: + base: The base. + exponent: The exponent. + + Example: + pow 0 1000 + => 0 + pow 1000 0 + => 1 + pow 2 30 + => 1073741824 + pow 3 3 + => 27 + pow (-5) 3 + => -125 + */ + pow = base: exponent: + if exponent > 1 then + let + x = pow base (exponent / 2); + odd_exp = lib.mod exponent 2 == 1; + in + x * x * (if odd_exp then base else 1) + else if exponent == 1 then + base + else if exponent == 0 && base == 0 then + throw "undefined" + else if exponent == 0 then + 1 + else + throw "undefined"; + + /* Conversion from base 16 to base 10 with a exponent. Is of the form + scalar * 16 ** exponent. + + Type: base16To10 :: int -> int -> int + + Args: + exponent: The exponent for the base, 16. + scalar: The value to multiple to the exponentiated base. + + Example: + base16To10 0 11 + => 11 + base16To10 1 3 + => 48 + base16To10 2 7 + 1792 + base16To10 3 14 + 57344 + */ + base16To10 = exponent: scalar: scalar * pow 16 exponent; + + /* Converts a hexadecimal character to decimal. + Only takes a string of length 1. + + Type: hexCharToDec :: string -> int + + Args: + hex: A hexadecimal character. + + Example: + hexCharToDec "5" + => 5 + hexCharToDec "e" + => 14 + hexCharToDec "A" + => 10 + */ + hexCharToDec = hex: + let + lowerHex = lib.toLower hex; + in + if builtins.stringLength hex != 1 then + throw "Function only accepts a single character." + else if hexToDecMap ? ${lowerHex} then + hexToDecMap."${lowerHex}" + else + throw "Character ${hex} is not a hexadecimal value."; +in +rec { + /* Converts from hexadecimal to decimal. + + Type: hexToDec :: string -> int + + Args: + hex: A hexadecimal string. + + Example: + hexadecimal "12" + => 18 + hexadecimal "FF" + => 255 + hexadecimal "abcdef" + => 11259375 + */ + hexToDec = hex: + let + decimals = builtins.map hexCharToDec (lib.stringToCharacters hex); + decimalsAscending = lib.reverseList decimals; + decimalsPowered = lib.imap0 base16To10 decimalsAscending; + in + lib.foldl builtins.add 0 decimalsPowered; + + /* Converts a 6 character hexadecimal string to RGB values. + + Type: hexToRGB :: string => [int] + + Args: + hex: A hexadecimal string of length 6. + + Example: + hexToRGB "012345" + => [ 1 35 69 ] + hexToRGB "abcdef" + => [171 205 239 ] + hexToRGB "000FFF" + => [ 0 15 255 ] + */ + hexToRGB = hex: + let + rgbStartIndex = [ 0 2 4 ]; + hexList = builtins.map (x: builtins.substring x 2 hex) rgbStartIndex; + hexLength = builtins.stringLength hex; + in + if hexLength != 6 then + throw '' + Unsupported hex string length of ${builtins.toString hexLength}. + Length must be exactly 6. + '' + else + builtins.map hexToDec hexList; + + /* Converts a 6 character hexadecimal string to an RGB string seperated by a + delimiter. + + Type: hexToRGBString :: string -> string + + Args: + sep: The delimiter or seperator. + hex: A hexadecimal string of length 6. + */ + hexToRGBString = sep: hex: + let + inherit (builtins) map toString; + hexInRGB = hexToRGB hex; + hexInRGBString = map toString hexInRGB; + in + lib.concatStringsSep sep hexInRGBString; +} diff --git a/util/configuration.nix b/util/configuration.nix new file mode 100644 index 0000000..12def3b --- /dev/null +++ b/util/configuration.nix @@ -0,0 +1,155 @@ +{ config, lib, pkgs, inputs, ... }: + +{ + imports = [ + ./hardware-configuration.nix + ./modules + ]; + + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + + fileSystems."/persist".neededForBoot = true; + environment.persistence."/persist/system" = { + hideMounts = true; + directories = [ + "/etc/nixos" + "/var/log" + "/var/lib/nixos" + #"/var/lib/bluetooth" + "/var/lib/systemd/coredump" + #"/etc/NetworkManager/system-connections" + ]; + files = [ + "/etc/machine-id" + # { file = "/var/keys/secret_file"; parentDirectory = { mode = "u=rwx,g=,o="; }; } + ]; + }; + + programs.fuse.userAllowOther = true; + home-manager = { + extraSpecialArgs = { inherit inputs; }; + users = { + "c" = import ./home.nix; + }; + }; + + environment = { + localBinInPath = true; + + interactiveShellInit = '' +# (cat ~/.cache/wal/sequences &) +# source ~/.cache/wal/colors-tty.sh + + alias toys="nix-shell -p cmatrix asciiquarium pipes cowsay figlet neofetch" + + alias c="codium ." + + alias p="nix-shell -p" + alias rb="sudo nixos-rebuild switch --flake /etc/nixos#default" + + alias lsa="ls -lAsh" + mkcd() { + mkdir -p "$1" + cd "$1" + } + ''; + }; + + time.timeZone = "America/Los_Angeles"; + + # Select internationalisation properties. + # i18n.defaultLocale = "en_US.UTF-8"; + # console = { + # font = "Lat2-Terminus16"; + # keyMap = "us"; + # useXkbConfig = true; # use xkb.options in tty. + # }; + + # Enable CUPS to print documents. + # services.printing.enable = true; + + # Enable touchpad support (enabled default in most desktopManager). + # services.xserver.libinput.enable = true; + + users.users = { + root.hashedPasswordFile = "/persist/passwords/root"; + + "c" = { + isNormalUser = true; + hashedPasswordFile = "/persist/passwords/c"; + extraGroups = [ "wheel" ]; + }; + }; + + # List packages installed in system profile. + + nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ + "steam" + "steam-original" + "steam-run" + ]; + + environment.systemPackages = with pkgs; [ + git + vim + wget + firefox + wineWowPackages.stable + #wine + winetricks + + pulseaudio + playerctl + + ffmpeg + jellyfin + + killall + + go + jdk21 + + lutris + libGL + ]; + + programs.steam.enable = true; + + # 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; + # }; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + # services.openssh.enable = true; + + # 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 option defines the first version of NixOS you have installed on this particular machine, + # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions. + # + # Most users should NEVER change this value after the initial install, for any reason, + # even if you've upgraded your system to a new NixOS release. + # + # This value does NOT affect the Nixpkgs version your packages and OS are pulled from, + # so changing it will NOT upgrade your system. + # + # This value being lower than the current NixOS release does NOT mean your system is + # out of date, out of support, or vulnerable. + # + # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration, + # and migrated your data accordingly. + # + # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . + system.stateVersion = "23.11"; # Did you read the comment? 🤨 +} + diff --git a/util/flake.lock b/util/flake.lock new file mode 100644 index 0000000..b6465bf --- /dev/null +++ b/util/flake.lock @@ -0,0 +1,64 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709485962, + "narHash": "sha256-rmFB4uE10+LJbcVE4ePgiuHOBlUIjQOeZt4VQVJTU8M=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "d579633ff9915a8f4058d5c439281097e92380a8", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "impermanence": { + "locked": { + "lastModified": 1708968331, + "narHash": "sha256-VUXLaPusCBvwM3zhGbRIJVeYluh2uWuqtj4WirQ1L9Y=", + "owner": "nix-community", + "repo": "impermanence", + "rev": "a33ef102a02ce77d3e39c25197664b7a636f9c30", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "impermanence", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1709237383, + "narHash": "sha256-cy6ArO4k5qTx+l5o+0mL9f5fa86tYUX3ozE1S+Txlds=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "1536926ef5621b09bba54035ae2bb6d806d72ac8", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "impermanence": "impermanence", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/util/flake.nix b/util/flake.nix new file mode 100644 index 0000000..7d736c9 --- /dev/null +++ b/util/flake.nix @@ -0,0 +1,37 @@ +{ + description = "Nixos config flake"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + + #disko = { + # url = "github:nix-community/disko"; + # inputs.nixpkgs.follows = "nixpkgs"; + #}; + + impermanence = { + url = "github:nix-community/impermanence"; + }; + + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = {nixpkgs, ...} @ inputs: + { + nixosConfigurations.default = nixpkgs.lib.nixosSystem { + specialArgs = {inherit inputs;}; + modules = [ + #inputs.disko.nixosModules.default + #(import ./disko.nix { device = "/dev/vda"; }) + + ./configuration.nix + + inputs.home-manager.nixosModules.default + inputs.impermanence.nixosModules.impermanence + ]; + }; + }; +} diff --git a/util/hardware-configuration.nix b/util/hardware-configuration.nix new file mode 100644 index 0000000..c268ff8 --- /dev/null +++ b/util/hardware-configuration.nix @@ -0,0 +1,51 @@ +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot = { + loader.grub = { + enable = true; + + zfsSupport = true; + efiSupport = true; + efiInstallAsRemovable = true; + mirroredBoots = [ + { devices = [ "nodev" ]; path = "/boot"; } + ]; + }; + + initrd = { + availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ]; + kernelModules = [ "amdgpu" ]; + + postDeviceCommands = lib.mkAfter '' + zfs rollback -r zpool/root@blank && zfs rollback -r zpool/home@blank + ''; + }; + + kernelModules = [ "kvm-amd" ]; + extraModulePackages = [ ]; + + supportedFilesystems = [ "ntfs" ]; + }; + + fileSystems = { + "/" = { fsType = "zfs"; device = "zpool/root"; }; + "/home" = { fsType = "zfs"; device = "zpool/home"; }; + "/persist" = { fsType = "zfs"; device = "zpool/persist"; }; + "/nix" = { fsType = "zfs"; device = "zpool/nix"; }; + + "/boot" = { fsType = "vfat"; device = "/dev/disk/by-uuid/12CE-A600"; }; + + "/mnt/4tb" = { fsType = "ext4"; device = "/dev/disk/by-label/4tb"; }; + "/mnt/ssd" = { fsType = "ext4"; device = "/dev/disk/by-label/ssd-256"; }; + }; + + swapDevices = [ ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/util/home.nix b/util/home.nix new file mode 100644 index 0000000..42223ea --- /dev/null +++ b/util/home.nix @@ -0,0 +1,104 @@ +{ lib, pkgs, inputs, config, ...}: + +{ + imports = [ + inputs.impermanence.nixosModules.home-manager.impermanence + + ./modules/home + ]; + + theme = import ./themes/skull.nix; + + home.stateVersion = "23.11"; + + home.persistence."/persist/home" = { + directories = [ + "Downloads" + "Documents" + "Pictures" + "Videos" + "Games" + "Persist" + + "code" + + ".gnupg" + ".ssh" + + ".local/bin" + ".local/share/applications" + + ".mozilla" + ".wine" + + ".irssi" + ".config/discord" + ".config/Vencord" + + { + directory = ".local/share/Steam"; + method = "symlink"; + } + + ".config/qBittorrent" + ".local/share/qBittorrent" + ".cache/qBittorrent" + + ".config/jellyfin" + ".local/share/jellyfin" + ".cache/jellyfin" + + ".local/share/Anki2" + ".local/share/lutris" + ".local/share/PrismLauncher" + ]; + files = [ + ".Xresources" + ]; + allowOther = true; + }; + + programs = { + feh.enable = true; + btop.enable = true; + tmux.enable = true; + + zoxide.enable = true; + }; + + nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ + "discord" + "obsidian" + ]; + + home.packages = with pkgs; [ + eww + pfetch + + kdePackages.breeze + + irssi + (discord.override { + withVencord = true; + }) + + qbittorrent + jellyfin-media-player + mkvtoolnix + + gimp + + anki-bin + + vesktop + + obsidian + prismlauncher + + jetbrains.idea-community + ]; + + home.file = { + ".0b".source = config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/.local/share/PrismLauncher/instances/0b/.minecraft"; + }; +} diff --git a/util/modules/default.nix b/util/modules/default.nix new file mode 100644 index 0000000..8a8b05b --- /dev/null +++ b/util/modules/default.nix @@ -0,0 +1,10 @@ +{ ... }: + +{ + imports = [ + ./fonts.nix + ./networking.nix + ./pipewire.nix + ./xserver.nix + ]; +} diff --git a/util/modules/fonts.nix b/util/modules/fonts.nix new file mode 100644 index 0000000..89ee17a --- /dev/null +++ b/util/modules/fonts.nix @@ -0,0 +1,22 @@ +{ pkgs, ... }: + +{ + fonts = { + packages = with pkgs; [ + nerdfonts + noto-fonts + noto-fonts-cjk + noto-fonts-cjk-sans + noto-fonts-cjk-serif + noto-fonts-emoji + ]; + + fontconfig = { + defaultFonts = { + monospace = [ "CaskaydiaMono Nerd Font" ]; + sansSerif = [ "DejaVu Sans" "Noto Sans CJK JP" "Noto Sans" ]; + serif = [ "DejaVu Serif" "Noto Serif CJK JP" "Noto Serif" ]; + }; + }; + }; +} diff --git a/util/modules/home/colors.nix b/util/modules/home/colors.nix new file mode 100644 index 0000000..ecafe62 --- /dev/null +++ b/util/modules/home/colors.nix @@ -0,0 +1,31 @@ +{ lib, ... }: + +with lib; + +{ + options.colors = + let + mkColorOption = name: { + inherit name; + value = mkOption { +# type = types.strMatching "[a-fA-F0-9]{6}"; + type = types.strMatching "[a-fA-F0-9]*"; + description = "Color ${name}."; + }; + }; + in listToAttrs (map mkColorOption [ + "primary" "secondary" + "foreground" "foregroundAlt" + "background" "backgroundAlt" + + "accent" + + "black" "red" "green" "yellow" "blue" "magenta" "cyan" "white" + "brightBlack" "brightRed" "brightGreen" "brightYellow" "brightBlue" "brightMagenta" "brightCyan" "brightWhite" + + "bg" "bg0" "bg1" "bg2" "bg3" "bg4" + "fg" "fg0" "fg1" "fg2" "fg3" "fg4" + + "orange" "brightOrange" + ]); +} diff --git a/util/modules/home/default.nix b/util/modules/home/default.nix new file mode 100644 index 0000000..d48f5bc --- /dev/null +++ b/util/modules/home/default.nix @@ -0,0 +1,18 @@ +{ ... }: + +{ + imports = [ + ./colors.nix + ./discord.nix + ./flameshot.nix + ./i3.nix + ./kitty.nix + ./mpv.nix + ./picom.nix + ./polybar.nix + ./rofi.nix + ./theme.nix + ./vscode.nix +# ./zsh.nix + ]; +} diff --git a/util/modules/home/discord.nix b/util/modules/home/discord.nix new file mode 100644 index 0000000..f303f1f --- /dev/null +++ b/util/modules/home/discord.nix @@ -0,0 +1,31 @@ +{ config, lib, ... }: + +let + conversion = import ../../util/color-conversion.nix { inherit lib; }; +in { + xdg.configFile."Vencord/themes/nix.theme.css".text = let c = config.theme.colors; in '' + @import url(https://mwittrien.github.io/BetterDiscordAddons/Themes/BasicBackground/BasicBackground.css); + + :root { + --transparencycolor: 0, 0, 0; + --transparencyalpha: 0.0; + --messagetransparency: 0.0; + --guildchanneltransparency: 0.15; + --chatinputtransparency: 0.0; + --memberlisttransparency: 0.15; + --settingsicons: 0; + --background: rgba(0, 0, 0, 0.8); + --backdrop: rgba(0, 0, 0, 0); + --version1_0_5: none; + + --accentcolor: ${conversion.hexToRGBString ", " c.accent}; + + --textbrightest: ${conversion.hexToRGBString ", " c.fg0}; + --textbrighter: ${conversion.hexToRGBString ", " c.fg1}; + --textbright: ${conversion.hexToRGBString ", " c.fg2}; + --textdark: ${conversion.hexToRGBString ", " c.fg3}; + --textdarker: ${conversion.hexToRGBString ", " c.fg4}; + --textdarkest: ${conversion.hexToRGBString ", " c.brightBlack}; + } + ''; +} diff --git a/util/modules/home/flameshot.nix b/util/modules/home/flameshot.nix new file mode 100644 index 0000000..d58dfe7 --- /dev/null +++ b/util/modules/home/flameshot.nix @@ -0,0 +1,22 @@ +{ config, ... }: + +{ + services.flameshot = { + enable = true; + + settings = let c = config.theme.colors; in { + General = { + savePath = "Pictures/Screenshots"; + + uiColor = "#${c.bg}"; + contrastUiColor = "#${c.accent}"; + + + filenamePattern = "%F_%T"; + + startupLaunch = false; + saveAfterCopy = true; + }; + }; + }; +} diff --git a/util/modules/home/i3.nix b/util/modules/home/i3.nix new file mode 100644 index 0000000..151bbaa --- /dev/null +++ b/util/modules/home/i3.nix @@ -0,0 +1,224 @@ +{ config, pkgs, ... }: + +{ + xsession.windowManager.i3 = { + enable = true; + + config = let + mod = "Mod1"; + + ws0 = "0:Main"; + ws1 = "1:Terminal"; + ws2 = "2:Browser"; + ws3 = "3:Chat"; + ws4 = "4:Steam"; + ws5 = "5"; + ws6 = "6"; + ws7 = "7"; + ws8 = "8:qBittorrent"; + ws9 = "9:Youtube"; + ws10 = "10:Misc"; + ws11 = "11:Empty"; + + output = { + primary = "primary"; + left = "DVI-D-0"; + right = "DisplayPort-1 HDMI-A-0"; + }; + in { + modifier = "${mod}"; + + fonts = { + names = [ "monospace" ]; + size = 8.0; + }; + + colors = let c = config.theme.colors; in { + focused = { + border = "#${c.fg2}"; + background = "#${c.fg2}"; + text = "#${c.bg}"; + indicator = "#${c.fg2}"; + childBorder = "#${c.fg2}"; + }; + + focusedInactive = { + border = "#${c.bg1}"; + background = "#${c.bg1}"; + text = "#${c.fg}"; + indicator = "#${c.bg1}"; + childBorder = "#${c.bg1}"; + }; + + unfocused = { + border = "#${c.bg}"; + background = "#${c.bg}"; + text = "#${c.fg}"; + indicator = "#${c.bg}"; + childBorder = "#${c.bg}"; + }; + }; + + gaps.inner = 8; + + workspaceOutputAssign = [ + { workspace = "${ws0}"; output = output.primary; } + { workspace = "${ws1}"; output = output.primary; } + + { workspace = "${ws2}"; output = output.left; } + { workspace = "${ws3}"; output = output.left; } + + { workspace = "${ws4}"; output = output.primary; } + + { workspace = "${ws5}"; output = output.primary; } + { workspace = "${ws6}"; output = output.primary; } + { workspace = "${ws7}"; output = output.primary; } + + { workspace = "${ws8}"; output = output.primary; } + { workspace = "${ws9}"; output = output.right; } + { workspace = "${ws10}"; output = output.primary; } + + { workspace = "${ws11}"; output = output.primary; } + ]; + + assigns = { + "${ws2}" = [ { class = "Firefox"; } ]; + "${ws3}" = [ { class = "discord"; } ]; + "${ws4}" = [ { class = "steam"; } ]; + + "${ws8}" = [ { class = "qBittorrent"; } ]; + }; + + startup = [ + { command = "polybar-msg cmd quit"; always = true; notification = false; } + { command = "polybar"; always = true; notification = false; } + { command = "systemctl --user restart picom"; always = true; notification = false; } + { command = "${pkgs.feh}/bin/feh --bg-fill ~/Pictures/bg/${config.theme.background}"; always = true; notification = false; } +# { command = "${pkgs.pywal}/bin/wal -ne -b 000000 -i ~/Pictures/bg/${config.theme.background}"; always = true; notification = false; } + ]; + + keybindings = { + "${mod}+Shift+c" = "reload"; + "${mod}+Shift+r" = "restart"; + "${mod}+Shift+e" = "exec \"i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'\""; + + "${mod}+q" = "kill"; + "${mod}+d" = "exec \"rofi -modi drun,run -show drun\""; + "${mod}+Return" = "exec kitty"; + + "${mod}+Num_Lock" = "exec --no-startup-id polybar-msg cmd toggle"; + + # Screenshots + #TODO: screen and full should be swapped, but currently screen is fucky :'( + "Shift+Print" = "exec ${pkgs.flameshot}/bin/flameshot screen -c"; + "Print" = "exec ${pkgs.flameshot}/bin/flameshot full -c"; + "${mod}+Shift+s" = "exec ${pkgs.flameshot}/bin/flameshot gui -c"; + "Mod4+Shift+s" = "exec ${pkgs.flameshot}/bin/flameshot gui -c"; + "${mod}+Ctrl+Shift+s" = "exec ${pkgs.flameshot}/bin/flameshot launcher -c"; + + # Media keys + "XF86AudioRaiseVolume" = "exec --no-startup-id ${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ +2%"; + "XF86AudioLowerVolume" = "exec --no-startup-id ${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ -2%"; + "XF86AudioMute" = "exec --no-startup-id ${pkgs.pulseaudio}/bin/pactl set-sink-mute @DEFAULT_SINK@ toggle"; + "XF86AudioMicMute" = "exec --no-startup-id ${pkgs.pulseaudio}/bin/pactl set-source-mute @DEFAULT_SOURCE@ toggle"; + + "XF86AudioPlay" = "exec playerctl play-pause"; + "XF86AudioPause" = "exec playerctl play-pause"; + "XF86AudioStop" = "exec playerctl stop"; + "XF86AudioNext" = "exec playerctl next"; + "XF86AudioPrev" = "exec playerctl previous"; + + # Workspaces + "${mod}+grave" = "workspace number ${ws0}"; + "${mod}+1" = "workspace number ${ws1}"; + "${mod}+2" = "workspace number ${ws2}"; + "${mod}+3" = "workspace number ${ws3}"; + "${mod}+4" = "workspace number ${ws4}"; + "${mod}+5" = "workspace number ${ws5}"; + "${mod}+6" = "workspace number ${ws6}"; + "${mod}+7" = "workspace number ${ws7}"; + "${mod}+8" = "workspace number ${ws8}"; + "${mod}+9" = "workspace number ${ws9}"; + "${mod}+0" = "workspace number ${ws10}"; + "${mod}+equal" = "workspace number ${ws11}"; + + # Move active workspace + "${mod}+comma" = "move workspace to output ${output.left}"; + "${mod}+period" = "move workspace to output ${output.primary}"; + "${mod}+slash" = "move workspace to output ${output.right}"; + + # Layout + "${mod}+z" = "layout stacking"; + "${mod}+x" = "layout tabbed"; + "${mod}+c" = "layout toggle split"; + + # Focus + "${mod}+h" = "focus left"; + "${mod}+j" = "focus down"; + "${mod}+k" = "focus up"; + "${mod}+l" = "focus right"; + + "${mod}+Left" = "focus left"; + "${mod}+Down" = "focus down"; + "${mod}+Up" = "focus up"; + "${mod}+Right" = "focus right"; + + "${mod}+space" = "focus mode_toggle"; + "${mod}+a" = "focus parent"; + + # Move focused container + "${mod}+Shift+h" = "move left"; + "${mod}+Shift+j" = "move down"; + "${mod}+Shift+k" = "move up"; + "${mod}+Shift+l" = "move right"; + + "${mod}+Shift+Left" = "move left"; + "${mod}+Shift+Down" = "move down"; + "${mod}+Shift+Up" = "move up"; + "${mod}+Shift+Right" = "move right"; + + # Misc container binds + "${mod}+Shift+space" = "floating toggle"; + "${mod}+f" = "fullscreen toggle"; + + "${mod}+w" = "split h"; + "${mod}+e" = "split v"; + + "${mod}+r" = "mode resize"; + + # Move focused container to workspace + "${mod}+Shift+grave" = "move container to workspace number ${ws0}"; + "${mod}+Shift+1" = "move container to workspace number ${ws1}"; + "${mod}+Shift+2" = "move container to workspace number ${ws2}"; + "${mod}+Shift+3" = "move container to workspace number ${ws3}"; + "${mod}+Shift+4" = "move container to workspace number ${ws4}"; + "${mod}+Shift+5" = "move container to workspace number ${ws5}"; + "${mod}+Shift+6" = "move container to workspace number ${ws6}"; + "${mod}+Shift+7" = "move container to workspace number ${ws7}"; + "${mod}+Shift+8" = "move container to workspace number ${ws8}"; + "${mod}+Shift+9" = "move container to workspace number ${ws9}"; + "${mod}+Shift+0" = "move container to workspace number ${ws10}"; + }; + + modes = { + resize = { + "h" = "resize shrink width 10 px or 10 ppt"; + "j" = "resize grow height 10 px or 10 ppt"; + "k" = "resize shrink height 10 px or 10 ppt"; + "l" = "resize grow width 10 px or 10 ppt"; + + "Left" = "resize shrink width 10 px or 10 ppt"; + "Down" = "resize grow height 10 px or 10 ppt"; + "Up" = "resize shrink height 10 px or 10 ppt"; + "Right" = "resize grow width 10 px or 10 ppt"; + + "Return" = "mode default"; + "Escape" = "mode default"; + "${mod}+r" = "mode default"; + }; + }; + + bars = []; + }; + }; +} diff --git a/util/modules/home/kitty.nix b/util/modules/home/kitty.nix new file mode 100644 index 0000000..852f554 --- /dev/null +++ b/util/modules/home/kitty.nix @@ -0,0 +1,39 @@ +{ config, ... }: + +{ + programs.kitty = { + enable = true; + + font = { name = "monospace"; size = 8.0; }; + + settings = let c = config.theme.colors; in { + color0 = "#${c.black}"; + color1 = "#${c.red}"; + color2 = "#${c.green}"; + color3 = "#${c.yellow}"; + color4 = "#${c.blue}"; + color5 = "#${c.magenta}"; + color6 = "#${c.cyan}"; + color7 = "#${c.white}"; + + color8 = "#${c.brightBlack}"; + color9 = "#${c.brightRed}"; + color10 = "#${c.brightGreen}"; + color11 = "#${c.brightYellow}"; + color12 = "#${c.brightBlue}"; + color13 = "#${c.brightMagenta}"; + color14 = "#${c.brightCyan}"; + color15 = "#${c.brightWhite}"; + }; + + shellIntegration = { + mode = "no-cursor"; + enableBashIntegration = true; + }; + + extraConfig = '' + background_opacity 0.8 + confirm_os_window_close 0 + ''; + }; +} diff --git a/util/modules/home/mpv.nix b/util/modules/home/mpv.nix new file mode 100644 index 0000000..5e1f013 --- /dev/null +++ b/util/modules/home/mpv.nix @@ -0,0 +1,12 @@ +{ ... }: + +{ + programs.mpv = { + enable = true; + + config = { + screenshot-format = "png"; + screenshot-template = "~/Pictures/Screenshots/mpv/%F/%P"; + }; + }; +} diff --git a/util/modules/home/picom.nix b/util/modules/home/picom.nix new file mode 100644 index 0000000..d625200 --- /dev/null +++ b/util/modules/home/picom.nix @@ -0,0 +1,18 @@ +{ ... }: + +{ + services.picom = { + enable = true; + + backend = "glx"; + vSync = true; + + settings = { + blur = { + method = "gaussian"; + size = 10; + deviation = 2; + }; + }; + }; +} diff --git a/util/modules/home/polybar.nix b/util/modules/home/polybar.nix new file mode 100644 index 0000000..073919d --- /dev/null +++ b/util/modules/home/polybar.nix @@ -0,0 +1,232 @@ +{ pkgs, config, ... }: + +{ + services.polybar = { + enable = true; + script = "polybar"; + + package = pkgs.polybar.override { + i3Support = true; + pulseSupport = true; + }; + + settings = let c = config.theme.colors; in { + "bar/main" = { + width = "100%"; + height = "24pt"; + radius = 0; + + background = "#${c.bg}"; + foreground = "#${c.fg}"; + + font = [ + "Symbols Nerd Font:size=16;2" + "monospace:size=11;2" + "Sauce Code Pro Nerd Font:size=11;2" + "Noto Sans CJK JP:size=11;1" + "sans-serif:size=11;1" + ]; + + border = { + top = "8px"; + left = "8px"; + right = "8px"; + + color = "#00000000"; + }; + + padding = { + left = 2; + right = 2; + }; + + cursor = { + click = "pointer"; + scroll = "ns-resize"; + }; + + enable-ipc = true; + + line.size = "3pt"; + + separator = { + text = "|"; + foreground = "#${c.bg3}"; + }; + + module.margin = 1; + modules = { + left = "cpu memory xwindow"; + center = "i3"; + right = "wlan eth filesystem xkeyboard pulseaudio date"; + }; + }; + + + "module/i3" = { + type = "internal/i3"; + + strip-wsnumbers = true; + index-sort = true; + + ws.icon = [ + "0:Main;" "1:Terminal;" "2:Browser;" "3:Chat;" "4:Steam;" + "5;" "6;" "7;" + "8:qBittorrent;" "9:Youtube;" "10:Misc;" + ]; + + label = { + focused = { + text = "%icon%"; + padding = 2; + + foreground = "#${c.fg0}"; + background = "#${c.bg1}"; + underline = "#${c.accent}"; + }; + + visible = { + text = "%icon%"; + padding = 2; + + underline = "#${c.fg4}"; + }; + + unfocused = { + text = "%icon%"; + padding = 2; + }; + + urgent = { + text = "%icon%"; + padding = 2; + + foreground = "#${c.bg}"; + background = "#${c.accent}"; + }; + }; + }; + + "module/xwindow" = { + type = "internal/xwindow"; + label = "%title:0:64:...%"; + }; + + + "module/pulseaudio" = { + type = "internal/pulseaudio"; + + format.volume = "<ramp-volume> <label-volume>"; + + label = { + volume = "%percentage%%"; + muted = { + text = " %percentage%%"; + foreground = "#${c.bg3}"; + }; + }; + + ramp.volume = { + text = [ "" "" "" ]; + foreground = "#${c.accent}"; + }; + }; + + "module/xkeyboard" = { + type = "internal/xkeyboard"; + blacklist = [ "num lock" ]; + + indicator.icon = [ "caps lock;;" ]; + + format = { + text = "<label-indicator> <label-layout>"; + + prefix = { + text = " "; + foreground = "#${c.accent}"; + }; + }; + + label = { + layout = "%layout%"; + indicator.on = "%icon%"; + }; + }; + + "module/cpu" = { + type = "internal/cpu"; + interval = 2; + + format.prefix = { + text = "CPU "; + foreground = "#${c.accent}"; + }; + + label = "%percentage%%"; + }; + + "module/memory" = { + type = "internal/memory"; + interval = 2; + + format.prefix = { + text = "MEM "; + foreground = "#${c.accent}"; + }; + + label = "%gb_used%"; + }; + + "module/filesystem" = { + type = "internal/fs"; + interval = 25; + + mount = [ "/nix" "/persist" ]; + + label = { + mounted = "%{F#${c.accent}}%{F-} %used%"; + unmounted = { + text = "%mountpoint%"; + foreground = "#${c.bg3}"; + }; + }; + }; + + "module/eth" = { + type = "internal/network"; + interface.type = "wired"; + interval = 2; + + format.connected = "<label-connected>"; + label.connected = "%{F#${c.accent}}%{F-} %downspeed% %upspeed%"; + }; + + "module/wlan" = { + type = "internal/network"; + interface.type = "wireless"; + interval = 2; + + format.connected = "<ramp-signal> <label-connected>"; + label.connected = " %downspeed% %upspeed%"; + + ramp-signal = { + text = [ "" "" "" "" "" ]; + foreground = "#${c.accent}"; + }; + }; + + "module/date" = { + type = "internal/date"; + interval = 1; + + date = "%H:%M"; + date-alt = "%Y-%m-%d %H:%M:%S"; + + format.prefix = { + text = " "; + foreground = "#${c.accent}"; + }; + }; + }; + }; +} diff --git a/util/modules/home/rofi.nix b/util/modules/home/rofi.nix new file mode 100644 index 0000000..d0ff642 --- /dev/null +++ b/util/modules/home/rofi.nix @@ -0,0 +1,49 @@ +{ config, ... }: + +{ + programs.rofi = { + enable = true; + + font = "monospace 12"; + + theme = let + inherit (config.lib.formats.rasi) mkLiteral; + c = config.theme.colors; + in { + "@import" = "default"; + + "*" = { + background = mkLiteral "#${c.bg}"; + foreground = mkLiteral "#${c.fg}"; + foreground-alt = mkLiteral "#${c.bg3}"; + + alternate-normal-background = mkLiteral "var(background)"; + + selected-normal-foreground = mkLiteral "var(background)"; + selected-normal-background = mkLiteral "#${c.accent}"; + + border-color = mkLiteral "var(background)"; + separatorcolor = mkLiteral "#${c.bg3}"; + }; + + inputbar = { + children = map mkLiteral [ "entry" "num-filtered-rows" "textbox-num-sep" "num-rows" ]; + }; + + element = { + children = map mkLiteral [ "element-icon" "element-text" ]; + }; + + entry.placeholder = ""; + + scrollbar.handle-color = mkLiteral "var(foreground-alt)"; + num-rows.text-color = mkLiteral "var(foreground-alt)"; + num-filtered-rows.text-color = mkLiteral "var(foreground-alt)"; + textbox-num-sep.text-color = mkLiteral "var(foreground-alt)"; + + message.border = mkLiteral "1px solid 0px 0px"; + listview.border = mkLiteral "1px solid 0px 0px"; + sidebar.border = mkLiteral "1px solid 0px 0px"; + }; + }; +} diff --git a/util/modules/home/theme.nix b/util/modules/home/theme.nix new file mode 100644 index 0000000..056c8ac --- /dev/null +++ b/util/modules/home/theme.nix @@ -0,0 +1,39 @@ +{ lib, ... }: + +with lib; + +{ + options.theme = { + background = mkOption { + type = types.str; + example = "mem.png"; + description = '' + Background image. Path starts in ~/Pictures/bg/ + ''; + }; + + colors = let + mkColorOption = name: { + inherit name; + value = mkOption { + type = types.strMatching "[a-fA-F0-9]{6}"; + default = "ff00ff"; + example = "23ce94"; + description = '' + Hex value for color "${name}". + ''; + }; + }; + in listToAttrs (map mkColorOption [ + "accent" + + "black" "red" "green" "yellow" "blue" "magenta" "cyan" "white" + "brightBlack" "brightRed" "brightGreen" "brightYellow" "brightBlue" "brightMagenta" "brightCyan" "brightWhite" + + "bg" "bg0" "bg1" "bg2" "bg3" "bg4" + "fg" "fg0" "fg1" "fg2" "fg3" "fg4" + + "orange" "brightOrange" + ]); + }; +} diff --git a/util/modules/home/vscode.nix b/util/modules/home/vscode.nix new file mode 100644 index 0000000..3047d33 --- /dev/null +++ b/util/modules/home/vscode.nix @@ -0,0 +1,22 @@ +{ pkgs, ... }: + +{ + programs.vscode = { + enable = true; + package = pkgs.vscodium; + + extensions = with pkgs.vscode-extensions; [ + jdinhlife.gruvbox + vscode-icons-team.vscode-icons + + jnoortheen.nix-ide + golang.go + ]; + + userSettings = { + "workbench.colorTheme" = "Gruvbox Dark Medium"; + "workbench.iconTheme" = "vscode-icons"; + "window.titleBarStyle" = "custom"; + }; + }; +} diff --git a/util/modules/home/zsh.nix b/util/modules/home/zsh.nix new file mode 100644 index 0000000..7d72dba --- /dev/null +++ b/util/modules/home/zsh.nix @@ -0,0 +1,17 @@ +{ pkgs, ... }: + +{ + programs.zsh = { + enable = true; + + shellAliases = { + lsa = "ls -lAsh"; + }; + + oh-my-zsh = { + enable = true; + plugins = [ "git" "systemd" ]; + #theme = "powerlevel10k"; + }; + }; +} diff --git a/util/modules/networking.nix b/util/modules/networking.nix new file mode 100644 index 0000000..13237a8 --- /dev/null +++ b/util/modules/networking.nix @@ -0,0 +1,23 @@ +{ ... }: + +{ + networking = { + hostName = "c-pc"; + hostId = "23ce94ff"; + + useDHCP = true; + + wireless = { + enable = true; + networks = import ./wifi.nix; + }; + + firewall = { + enable = false; + + allowedTCPPorts = [ 8096 50000 ]; + allowedUDPPorts = [ ]; + }; + }; +} + diff --git a/util/modules/pipewire.nix b/util/modules/pipewire.nix new file mode 100644 index 0000000..0dfb230 --- /dev/null +++ b/util/modules/pipewire.nix @@ -0,0 +1,13 @@ +{ ... }: + +{ + security.rtkit.enable = true; + services.pipewire = { + enable = true; + + pulse.enable = true; + alsa.enable = true; + alsa.support32Bit = true; + #jack.enable = true; + }; +} diff --git a/util/modules/wifi.nix b/util/modules/wifi.nix new file mode 100644 index 0000000..9e23e44 --- /dev/null +++ b/util/modules/wifi.nix @@ -0,0 +1,3 @@ +{ + "The Dwyers".psk = "86EC3E567E"; +} diff --git a/util/modules/xserver.nix b/util/modules/xserver.nix new file mode 100644 index 0000000..1530c44 --- /dev/null +++ b/util/modules/xserver.nix @@ -0,0 +1,33 @@ +{ pkgs, ... }: + +{ + services.xserver = { + enable = true; + + videoDrivers = [ "amdgpu" ]; + + displayManager = { + lightdm.enable = true; + defaultSession = "none+i3"; + + setupCommands = '' + if ${pkgs.xorg.xrandr}/bin/xrandr --query | grep 2560x1080; then + ${pkgs.xorg.xrandr}/bin/xrandr --output DVI-D-0 --mode 1920x1080 --rate 60 --pos 0x0 + ${pkgs.xorg.xrandr}/bin/xrandr --output DisplayPort-2 --mode 2560x1080 --rate 60 --pos 1920x0 --primary + ${pkgs.xorg.xrandr}/bin/xrandr --output HDMI-A-0 --mode 1920x1080 --rate 75 --pos 4480x0 + elif ${pkgs.xorg.xrandr}/bin/xrandr --query | grep 2560x1440; then + ${pkgs.xorg.xrandr}/bin/xrandr --output DVI-D-0 --mode 1920x1080 --rate 60 --pos 0x360 + ${pkgs.xorg.xrandr}/bin/xrandr --output DisplayPort-2 --mode 2560x1440 --rate 165 --pos 1920x0 --primary + ${pkgs.xorg.xrandr}/bin/xrandr --output DisplayPort-1 --mode 1920x1200 --rate 60 --pos 4480x0 + fi + ''; + }; + + windowManager.i3 = { + enable = true; + }; + + xkb.layout = "us"; +# xkb.options = "eurosign:e,caps:escape"; + }; +} diff --git a/util/themes/matama.nix b/util/themes/matama.nix new file mode 100644 index 0000000..1a7ee5f --- /dev/null +++ b/util/themes/matama.nix @@ -0,0 +1,32 @@ +{ + background = "matama.png"; + + colors = { + accent = "b16286"; + + black = "282828"; brightBlack = "928374"; + red = "cc241d"; brightRed = "fb4934"; + green = "98971a"; brightGreen = "b8bb26"; + yellow = "d79921"; brightYellow = "fabd2f"; + blue = "458588"; brightBlue = "83a598"; + magenta = "b16286"; brightMagenta = "d3869b"; + cyan = "689d6a"; brightCyan = "8ec07c"; + white = "a89984"; brightWhite = "ebdbb2"; + + bg = "282828"; + bg0 = "282828"; + bg1 = "3c3836"; + bg2 = "504945"; + bg3 = "665c54"; + bg4 = "7c6f64"; + + fg = "ebdbb2"; + fg0 = "fbf1c7"; + fg1 = "ebdbb2"; + fg2 = "d5c4a1"; + fg3 = "bdae93"; + fg4 = "a89984"; + + orange = "d65d0e"; brightOrange = "fe8019"; + }; +} diff --git a/util/themes/mem.nix b/util/themes/mem.nix new file mode 100644 index 0000000..df80f0e --- /dev/null +++ b/util/themes/mem.nix @@ -0,0 +1,32 @@ +{ + background = "mem.png"; + + colors = { + accent = "f6e43a"; + + black = "282828"; brightBlack = "928374"; + red = "cc241d"; brightRed = "fb4934"; + green = "98971a"; brightGreen = "b8bb26"; + yellow = "d79921"; brightYellow = "f6e43a"; #NOTE: brightYellow has been changed + blue = "458588"; brightBlue = "83a598"; + magenta = "b16286"; brightMagenta = "d3869b"; + cyan = "689d6a"; brightCyan = "8ec07c"; + white = "a89984"; brightWhite = "ebdbb2"; + + bg = "282828"; + bg0 = "282828"; + bg1 = "3c3836"; + bg2 = "504945"; + bg3 = "665c54"; + bg4 = "7c6f64"; + + fg = "ebdbb2"; + fg0 = "fbf1c7"; + fg1 = "ebdbb2"; + fg2 = "d5c4a1"; + fg3 = "bdae93"; + fg4 = "a89984"; + + orange = "d65d0e"; brightOrange = "fe8019"; + }; +} diff --git a/util/themes/old/3.nix b/util/themes/old/3.nix new file mode 100644 index 0000000..0df7f28 --- /dev/null +++ b/util/themes/old/3.nix @@ -0,0 +1,14 @@ +{ + background = "astolfo.jpg"; + + colors = { + primary = { hex = "f5a9b8"; r = "245"; g = "169"; b = "184"; }; + secondary = { hex = "5bcefa"; }; + + foreground = { hex = "111111"; }; + foregroundAlt = { hex = "5bcefa"; }; + + background = { hex = "ffffff"; }; + backgroundAlt = { hex = "5bcefa"; }; + }; +} diff --git a/util/themes/old/hideri.nix b/util/themes/old/hideri.nix new file mode 100644 index 0000000..217077e --- /dev/null +++ b/util/themes/old/hideri.nix @@ -0,0 +1,15 @@ +{ + background = "hideri.png"; + + + colors = { + primary = { hex = "23ce94"; r = "35"; g = "206"; b = "149"; }; + secondary = { hex = "555555"; }; + + foreground = { hex = "c5c8c6"; }; + foregroundAlt = { hex = "707880"; }; + + background = { hex = "282a2e"; }; + backgroundAlt = { hex = "373b41"; }; + }; +} diff --git a/util/themes/old/kiwi.nix b/util/themes/old/kiwi.nix new file mode 100644 index 0000000..37675e1 --- /dev/null +++ b/util/themes/old/kiwi.nix @@ -0,0 +1,14 @@ +{ + background = "kiwi.png"; + + colors = { + primary = { hex = "34773c"; r = "52"; g = "119"; b = "60"; }; + secondary = { hex = "555555"; }; + + foreground = { hex = "c5c8c6"; }; + foregroundAlt = { hex = "707880"; }; + + background = { hex = "282a2e"; }; + backgroundAlt = { hex = "373b41"; }; + }; +} diff --git a/util/themes/old/megumin.nix b/util/themes/old/megumin.nix new file mode 100644 index 0000000..4bdf909 --- /dev/null +++ b/util/themes/old/megumin.nix @@ -0,0 +1,14 @@ +{ + background = "megumin.jpg"; + + colors = { + primary = { hex = "c44347"; r = "196"; g = "67"; b = "71"; }; + secondary = { hex = "555555"; }; + + foreground = { hex = "c5c8c6"; }; + foregroundAlt = { hex = "707880"; }; + + background = { hex = "282a2e"; }; + backgroundAlt = { hex = "373b41"; }; + }; +} diff --git a/util/themes/old/mem.nix b/util/themes/old/mem.nix new file mode 100644 index 0000000..d2eb8c0 --- /dev/null +++ b/util/themes/old/mem.nix @@ -0,0 +1,14 @@ +{ + background = "mem.png"; + + colors = { + primary = "f6e43a"; + secondary = "555555"; + + foreground = "c5c8c6"; + foregroundAlt = "707880"; + + background = "282a2e"; + backgroundAlt = "373b41"; + }; +} diff --git a/util/themes/old/nonon.nix b/util/themes/old/nonon.nix new file mode 100644 index 0000000..7dbe884 --- /dev/null +++ b/util/themes/old/nonon.nix @@ -0,0 +1,14 @@ +{ + background = "nonon.png"; + + colors = { + primary = { hex = "af1f3b"; r = "175"; g = "31"; b = "59"; }; + secondary = { hex = "555555"; }; + + foreground = { hex = "c5c8c6"; }; + foregroundAlt = { hex = "707880"; }; + + background = { hex = "282a2e"; }; + backgroundAlt = { hex = "373b41"; }; + }; +} diff --git a/util/themes/old/rin.nix b/util/themes/old/rin.nix new file mode 100644 index 0000000..b70e1f4 --- /dev/null +++ b/util/themes/old/rin.nix @@ -0,0 +1,14 @@ +{ + background = "rin2.png"; + + colors = { + primary = { hex = "ba112b"; r = "186"; g = "17"; b = "43"; }; + secondary = { hex = "555555"; }; + + foreground = { hex = "c5c8c6"; }; + foregroundAlt = { hex = "707880"; }; + + background = { hex = "282a2e"; }; + backgroundAlt = { hex = "373b41"; }; + }; +} diff --git a/util/themes/old/shinobu.nix b/util/themes/old/shinobu.nix new file mode 100644 index 0000000..5a3acdc --- /dev/null +++ b/util/themes/old/shinobu.nix @@ -0,0 +1,14 @@ +{ + background = "shinobu.png"; + + colors = { + primary = "cb0403"; + secondary = "555555"; + + foreground = "c5c8c6"; + foregroundAlt = "707880"; + + background = "282a2e"; + backgroundAlt = "373b41"; + }; +} diff --git a/util/themes/shinobu.nix b/util/themes/shinobu.nix new file mode 100644 index 0000000..229dd5f --- /dev/null +++ b/util/themes/shinobu.nix @@ -0,0 +1,32 @@ +{ + background = "shinobu.png"; + + colors = { + accent = "cc241d"; + + black = "282828"; brightBlack = "928374"; + red = "cc241d"; brightRed = "fb4934"; + green = "98971a"; brightGreen = "b8bb26"; + yellow = "d79921"; brightYellow = "fabd2f"; + blue = "458588"; brightBlue = "83a598"; + magenta = "b16286"; brightMagenta = "d3869b"; + cyan = "689d6a"; brightCyan = "8ec07c"; + white = "a89984"; brightWhite = "ebdbb2"; + + bg = "282828"; + bg0 = "282828"; + bg1 = "3c3836"; + bg2 = "504945"; + bg3 = "665c54"; + bg4 = "7c6f64"; + + fg = "ebdbb2"; + fg0 = "fbf1c7"; + fg1 = "ebdbb2"; + fg2 = "d5c4a1"; + fg3 = "bdae93"; + fg4 = "a89984"; + + orange = "d65d0e"; brightOrange = "fe8019"; + }; +} diff --git a/util/themes/skull.nix b/util/themes/skull.nix new file mode 100644 index 0000000..8ebdd1e --- /dev/null +++ b/util/themes/skull.nix @@ -0,0 +1,32 @@ +{ + background = "skull.png"; + + colors = { + accent = "458588"; + + black = "282828"; brightBlack = "928374"; + red = "cc241d"; brightRed = "fb4934"; + green = "98971a"; brightGreen = "b8bb26"; + yellow = "d79921"; brightYellow = "fabd2f"; + blue = "458588"; brightBlue = "83a598"; + magenta = "b16286"; brightMagenta = "d3869b"; + cyan = "689d6a"; brightCyan = "8ec07c"; + white = "a89984"; brightWhite = "ebdbb2"; + + bg = "282828"; + bg0 = "282828"; + bg1 = "3c3836"; + bg2 = "504945"; + bg3 = "665c54"; + bg4 = "7c6f64"; + + fg = "ebdbb2"; + fg0 = "fbf1c7"; + fg1 = "ebdbb2"; + fg2 = "d5c4a1"; + fg3 = "bdae93"; + fg4 = "a89984"; + + orange = "d65d0e"; brightOrange = "fe8019"; + }; +} |