diff --git a/.sops.yaml b/.sops.yaml new file mode 100644 index 0000000..29f3679 --- /dev/null +++ b/.sops.yaml @@ -0,0 +1,5 @@ +creation_rules: + - path_regex: '^secrets/.*\.(creds|ya?ml)$' + key_groups: + - age: + - age1sgy2zjxwfxggvuw9l55p4zklzxjadp4mcdmt7vdc5pemqgqv3geqh0tgs7 diff --git a/configuration.nix b/configuration.nix index ab5bc54..00836e9 100644 --- a/configuration.nix +++ b/configuration.nix @@ -5,141 +5,291 @@ { config, pkgs, ... }: { - imports = - [ # Include the results of the hardware scan. - ./hardware-configuration.nix - ]; - nix.settings.experimental-features = [ "nix-command" "flakes" ]; - # Bootloader. - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - boot.kernelModules = [ "fuse" "coretemp" "cifs" ]; + imports = + [ # Include the results of the hardware scan. + ./hardware-configuration.nix + ]; + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + # Bootloader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + boot.supportedFilesystems = [ "vfat" "ext4" "cifs" ]; + boot.kernelModules = [ "fuse" "coretemp" "cifs" ]; + sops.age.keyFile = "/var/lib/sops-nix/key.txt"; + systemd.tmpfiles.rules = [ + "d /mnt/books 0755 root root -" + "d /mnt/books_extra 0755 root root -" + "d /mnt/music 0755 root root -" + "d /mnt/music_ext 0755 root root -" + "d /mnt/games 0755 root root -" + "d /mnt/games_ext 0755 root root -" + "d /mnt/roms_ext 0755 root root -" + "d /mnt/podcasts 0755 root root -" + "d /mnt/audiobooks 0755 root root -" + ]; - networking.hostName = "xps13"; # Define your hostname. - networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - # networking.networkmanager.enable = true; - networking.wireless.networks = { - MyLocalTech = { - pskRaw = "ac1030d721d26deb2c7db10073dfac73244e9621f4462e3e568017da03201e0e"; - }; - }; - # Set your time zone. - time.timeZone = "America/New_York"; + fileSystems."/mnt/books" = { + device = "//10.0.0.76/Books"; + fsType = "cifs"; + options = [ + "credentials=/run/secrets/smb" + "vers=3.0" + "uid=1000" "gid=1000" + "file_mode=0664" "dir_mode=0775" + "rw" "iocharset=utf8" "cache=strict" "mfsymlinks" + "_netdev" "nofail" + "x-systemd.automount" "noauto" + "x-systemd.idle-timeout=10min" + ]; + }; + fileSystems."/mnt/books_ext" = { + device = "//10.0.0.76/books_ext"; + fsType = "cifs"; + options = [ + "credentials=/run/secrets/smb" + "vers=3.0" + "uid=1000" "gid=1000" + "file_mode=0664" "dir_mode=0775" + "rw" "iocharset=utf8" "cache=strict" "mfsymlinks" + "_netdev" "nofail" + "x-systemd.automount" "noauto" + "x-systemd.idle-timeout=10min" + ]; + }; + fileSystems."/mnt/music" = { + device = "//10.0.0.76/music"; + fsType = "cifs"; + options = [ + "credentials=/run/secrets/smb" + "vers=3.0" + "uid=1000" "gid=1000" + "file_mode=0664" "dir_mode=0775" + "rw" "iocharset=utf8" "cache=strict" "mfsymlinks" + "_netdev" "nofail" + "x-systemd.automount" "noauto" + "x-systemd.idle-timeout=10min" + ]; + }; + fileSystems."/mnt/music_ext" = { + device = "//10.0.0.76/music_ext"; + fsType = "cifs"; + options = [ + "credentials=/run/secrets/smb" + "vers=3.0" + "uid=1000" "gid=1000" + "file_mode=0664" "dir_mode=0775" + "rw" "iocharset=utf8" "cache=strict" "mfsymlinks" + "_netdev" "nofail" + "x-systemd.automount" "noauto" + "x-systemd.idle-timeout=10min" + ]; + }; + fileSystems."/mnt/games" = { + device = "//10.0.0.76/games"; + fsType = "cifs"; + options = [ + "credentials=/run/secrets/smb" + "vers=3.0" + "uid=1000" "gid=1000" + "file_mode=0664" "dir_mode=0775" + "rw" "iocharset=utf8" "cache=strict" "mfsymlinks" + "_netdev" "nofail" + "x-systemd.automount" "noauto" + "x-systemd.idle-timeout=10min" + ]; + }; + fileSystems."/mnt/games_ext" = { + device = "//10.0.0.76/games_ext"; + fsType = "cifs"; + options = [ + "credentials=/run/secrets/smb" + "vers=3.0" + "uid=1000" "gid=1000" + "file_mode=0664" "dir_mode=0775" + "rw" "iocharset=utf8" "cache=strict" "mfsymlinks" + "_netdev" "nofail" + "x-systemd.automount" "noauto" + "x-systemd.idle-timeout=10min" + ]; + }; + fileSystems."/mnt/roms_ext" = { + device = "//10.0.0.76/roms_ext"; + fsType = "cifs"; + options = [ + "credentials=/run/secrets/smb" + "vers=3.0" + "uid=1000" "gid=1000" + "file_mode=0664" "dir_mode=0775" + "rw" "iocharset=utf8" "cache=strict" "mfsymlinks" + "_netdev" "nofail" + "x-systemd.automount" "noauto" + "x-systemd.idle-timeout=10min" + ]; + }; + fileSystems."/mnt/podcasts" = { + device = "//10.0.0.76/podcasts"; + fsType = "cifs"; + options = [ + "credentials=/run/secrets/smb" + "vers=3.0" + "uid=1000" "gid=1000" + "file_mode=0664" "dir_mode=0775" + "rw" "iocharset=utf8" "cache=strict" "mfsymlinks" + "_netdev" "nofail" + "x-systemd.automount" "noauto" + "x-systemd.idle-timeout=10min" + ]; + }; + fileSystems."/mnt/audiobooks" = { + device = "//10.0.0.76/audiobooks"; + fsType = "cifs"; + options = [ + "credentials=/run/secrets/smb" + "vers=3.0" + "uid=1000" "gid=1000" + "file_mode=0664" "dir_mode=0775" + "rw" "iocharset=utf8" "cache=strict" "mfsymlinks" + "_netdev" "nofail" + "x-systemd.automount" "noauto" + "x-systemd.idle-timeout=10min" + ]; + }; + sops.secrets.smb = { + sopsFile = ./secrets/smb.creds; + format = "binary"; + mode = "0400"; + owner = "root"; + group = "root"; + }; + networking.hostName = "xps13"; # Define your hostname. + networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + # networking.networkmanager.enable = true; + networking.wireless.networks = { + MyLocalTech = { + pskRaw = "ac1030d721d26deb2c7db10073dfac73244e9621f4462e3e568017da03201e0e"; + }; + }; + # Set your time zone. + time.timeZone = "America/New_York"; - # Select internationalisation properties. - i18n.defaultLocale = "en_US.UTF-8"; + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; - i18n.extraLocaleSettings = { - LC_ADDRESS = "en_US.UTF-8"; - LC_IDENTIFICATION = "en_US.UTF-8"; - LC_MEASUREMENT = "en_US.UTF-8"; - LC_MONETARY = "en_US.UTF-8"; - LC_NAME = "en_US.UTF-8"; - LC_NUMERIC = "en_US.UTF-8"; - LC_PAPER = "en_US.UTF-8"; - LC_TELEPHONE = "en_US.UTF-8"; - LC_TIME = "en_US.UTF-8"; - }; + i18n.extraLocaleSettings = { + LC_ADDRESS = "en_US.UTF-8"; + LC_IDENTIFICATION = "en_US.UTF-8"; + LC_MEASUREMENT = "en_US.UTF-8"; + LC_MONETARY = "en_US.UTF-8"; + LC_NAME = "en_US.UTF-8"; + LC_NUMERIC = "en_US.UTF-8"; + LC_PAPER = "en_US.UTF-8"; + LC_TELEPHONE = "en_US.UTF-8"; + LC_TIME = "en_US.UTF-8"; + }; - # Enable the X11 windowing system. - # You can disable this if you're only using the Wayland session. - services.xserver.enable = true; + # Enable the X11 windowing system. + # You can disable this if you're only using the Wayland session. + # services.xserver.enable = true; - # Enable the KDE Plasma Desktop Environment. - services.displayManager.sddm.enable = true; - services.desktopManager.plasma6.enable = true; + # Enable the KDE Plasma Desktop Environment. + services.displayManager.sddm.enable = true; + services.desktopManager.plasma6.enable = true; - # Configure keymap in X11 - services.xserver.xkb = { - layout = "us"; - variant = ""; - }; + # Configure keymap in X11 + # services.xserver.xkb = { + # layout = "us"; + # variant = ""; + # }; - # Enable CUPS to print documents. - services.printing.enable = true; + # Enable CUPS to print documents. + services.printing.enable = true; + programs.uwsm.enable = true; + programs.hyprland.withUWSM = true; - # Enable sound with pipewire. - services.pulseaudio.enable = false; - security.rtkit.enable = true; - services.pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - # If you want to use JACK applications, uncomment this - jack.enable = true; + # Enable sound with pipewire. + services.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + jack.enable = true; - # use the example session manager (no others are packaged yet so this is enabled by default, - # no need to redefine it in your config for now) - #media-session.enable = true; - }; + # use the example session manager (no others are packaged yet so this is enabled by default, + # no need to redefine it in your config for now) + #media-session.enable = true; + }; - # Enable touchpad support (enabled default in most desktopManager). - services.libinput.enable = true; + # Enable touchpad support (enabled default in most desktopManager). + services.libinput.enable = true; fonts.packages = with pkgs; [ nerd-fonts.fira-code nerd-fonts.space-mono nerd-fonts.sauce-code-pro nerd-fonts.monofur + nerd-fonts.noto + nerd-fonts.fira-mono ]; - # Define a user account. Don't forget to set a password with ‘passwd’. - users.users.th3r00t = { - isNormalUser = true; - description = "Mike 'th3r00t' Young"; - extraGroups = [ "networkmanager" "wheel" ]; - packages = with pkgs; [ - kdePackages.kate - # thunderbird - ]; - }; + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.th3r00t = { + isNormalUser = true; + description = "Mike 'th3r00t' Young"; + extraGroups = [ "networkmanager" "wheel" "input" ]; + packages = with pkgs; [ + # kdePackages.kate + # thunderbird + ]; + }; - # Enable automatic login for the user. - services.displayManager.autoLogin.enable = true; - services.displayManager.autoLogin.user = "th3r00t"; + # Enable automatic login for the user. + services.displayManager.autoLogin.enable = true; + services.displayManager.autoLogin.user = "th3r00t"; - # Install firefox. - programs.firefox.enable = true; + programs.firefox.enable = true; + programs.hyprland.enable = true; - # Allow unfree packages - nixpkgs.config.allowUnfree = true; + nixpkgs.config.allowUnfree = true; - # List packages installed in system profile. To search, run: - # $ nix search wget - environment.variables.EDITOR = "vim"; - environment.systemPackages = with pkgs; [ - # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. - # wget - git - vim - curl - ]; + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.variables.EDITOR = "nvim"; + environment.systemPackages = with pkgs; [ + # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + # wget + git + vim + curl + age + sops + ]; - # 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; - }; + # 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: + # List services that you want to enable: - # Enable the OpenSSH daemon. - services.openssh.enable = true; + # Enable the OpenSSH daemon. + services.openssh.enable = true; - # Open ports in the firewall. - networking.firewall.allowedTCPPorts = [ 21 22 80 443 8080 ]; - networking.firewall.allowedUDPPorts = [ 21 22 80 443 8080 ]; - # Or disable the firewall altogether. - # networking.firewall.enable = false; + # Open ports in the firewall. + networking.firewall.allowedTCPPorts = [ 21 22 80 443 5900 8080 ]; + networking.firewall.allowedUDPPorts = [ 21 22 80 443 5900 8080 ]; + # 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 = "25.05"; # Did you read the comment? + # This value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It‘s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). + system.stateVersion = "25.05"; # Did you read the comment? } diff --git a/flake.lock b/flake.lock index c7bd851..91909fd 100644 --- a/flake.lock +++ b/flake.lock @@ -202,6 +202,26 @@ "type": "github" } }, + "nix-index-database": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1754800038, + "narHash": "sha256-UbLO8/0pVBXLJuyRizYOJigtzQAj8Z2bTnbKSec/wN0=", + "owner": "nix-community", + "repo": "nix-index-database", + "rev": "b65f8d80656f9fcbd1fecc4b7f0730f468333142", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-index-database", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1755113249, @@ -238,7 +258,29 @@ "inputs": { "home-manager": "home-manager", "neovim-nightly-overlay": "neovim-nightly-overlay", - "nixpkgs": "nixpkgs_2" + "nix-index-database": "nix-index-database", + "nixpkgs": "nixpkgs_2", + "sops-nix": "sops-nix" + } + }, + "sops-nix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1754988908, + "narHash": "sha256-t+voe2961vCgrzPFtZxha0/kmFSHFobzF00sT8p9h0U=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "3223c7a92724b5d804e9988c6b447a0d09017d48", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "sops-nix", + "type": "github" } }, "treefmt-nix": { diff --git a/flake.nix b/flake.nix index 0aa9e7d..c25167d 100644 --- a/flake.nix +++ b/flake.nix @@ -11,12 +11,25 @@ # to avoid problems caused by different versions of nixpkgs. inputs.nixpkgs.follows = "nixpkgs"; }; + nix-index-database.url = "github:nix-community/nix-index-database"; + nix-index-database.inputs.nixpkgs.follows = "nixpkgs"; neovim-nightly-overlay.url = "github:nix-community/neovim-nightly-overlay"; + sops-nix.url = "github:Mic92/sops-nix"; + sops-nix.inputs.nixpkgs.follows = "nixpkgs"; }; - outputs = { self, nixpkgs, home-manager, ... }@inputs: + outputs = { self, nixpkgs, home-manager, nix-index-database, sops-nix, ... }@inputs: let overlays = [ inputs.neovim-nightly-overlay.overlays.default + (final: prev: { + dosbox-x = prev.dosbox-x.overrideAttrs (old: { + buildInputs = (old.buildInputs or []) ++ [ prev.libGL prev.glew ]; + configureFlags = (old.configureFlags or []) ++ [ + "--enable-sdl2" + "--enable-opengl" + ]; + }); + }) ]; in { nixosConfigurations.xps13 = nixpkgs.lib.nixosSystem { @@ -24,12 +37,19 @@ specialArgs = { inherit overlays; }; modules = [ { nixpkgs.overlays = overlays; } + sops-nix.nixosModules.sops ./configuration.nix home-manager.nixosModules.home-manager { # home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.sharedModules = [ {nixpkgs.overlays = overlays;} ]; - home-manager.users.th3r00t = import ./home.nix; + home-manager.users.th3r00t = { + imports = [ + ./home.nix + nix-index-database.homeModules.nix-index + ]; + }; + # home-manager.users.th3r00t = import ./home.nix; # Optionally, use home-manager.extraSpecialArgs to pass arguments to home.nix } ]; diff --git a/hardware-configuration.nix b/hardware-configuration.nix index 33d9f7a..e914c6e 100644 --- a/hardware-configuration.nix +++ b/hardware-configuration.nix @@ -26,7 +26,12 @@ options = [ "fmask=0077" "dmask=0077" ]; }; - swapDevices = [ ]; + swapDevices = [ + { + device = "/var/lib/swapfile"; + size = 16 * 1024; # 16 GiB + } + ]; # 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 @@ -38,4 +43,36 @@ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + # hardware.opengl.enable = true; + # hardware.graphics.enable = true; + hardware.graphics = { + enable = true; + enable32Bit = true; + extraPackages = with pkgs; [ + # libva-intel-driver + libva-utils + intel-media-driver # Uncomment if you want to use the Intel Media Driver + vaapiIntel + vpl-gpu-rt + libglvnd + mesa + ]; + extraPackages32 = with pkgs.pkgsi686Linux; [ + # libva-intel-driver + libglvnd + ]; + }; + hardware.bluetooth = { + enable = true; + powerOnBoot = true; + settings = { + General = { + Experimental = true; + FastConnectable = true; + }; + Policy = { + AutoEnable = true; + }; + }; + }; } diff --git a/home.nix b/home.nix index 77e74a0..13c0ab8 100644 --- a/home.nix +++ b/home.nix @@ -1,336 +1,1183 @@ { config, pkgs, ... }: { - home.username = "th3r00t"; - home.homeDirectory = "/home/th3r00t"; - home.file.".local/usr/bin" = { - source = ./home/.local/usr/bin; - recursive = true; - executable = true; - }; - home.file.".local/usr/lib/blightmud" = { - source = ./home/.local/usr/lib/blightmud; - recursive = true; - executable = true; - }; - home.file.".config/nvim" = { - source = ./home/config/nvim; - recursive = true; - executable = true; - }; - home.file.".irssi" = { - source = ./home/.irssi; - recursive = true; - executable = true; - }; - home.file.".config/dosbox-x" = { - source = ./home/config/dosbox-x; - recursive = true; - executable = true; - }; + home.username = "th3r00t"; + home.homeDirectory = "/home/th3r00t"; + home.file.".local/usr/bin" = { + source = ./home/.local/usr/bin; + recursive = true; + executable = true; + }; + home.file.".local/usr/lib/blightmud" = { + source = ./home/.local/usr/lib/blightmud; + recursive = true; + executable = true; + }; + home.file.".config/nvim" = { + source = ./home/config/nvim; + recursive = true; + executable = true; + }; + home.file.".irssi" = { + source = ./home/.irssi; + recursive = true; + executable = true; + }; + home.file.".config/dosbox-x" = { + source = ./home/config/dosbox-x; + recursive = true; + executable = true; + }; + home.file.".config/waybar/power_menu.xml" = { + source = ./home/config/waybar/power_menu.xml; + recursive = true; + executable = true; + }; + home.file.".ssh/allowed_signers".text = '' + * ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH8P/3yzsruekSaZ9b+yk429VTcfCtI1j8jnkNbPAgnr th3r00t@nixos + ''; + xdg.enable = true; + programs.nix-index.enable = true; - home.packages = with pkgs; [ - fastfetch - ranger - zip - unzip - xz - p7zip - ripgrep - jq + home.packages = with pkgs; [ + mesa-demos + bluez + bluez-tools + bluez-alsa + fastfetch + ranger + zip + unzip + xz + p7zip ripgrep - eza - fzf - tmux - cowsay - lolcat - gnused - gnutar - gnupg - hugo - bat - which - nix-output-monitor - devenv + jq + ripgrep + eza + fzf + tmux + cowsay + lolcat + fortune + gnused + gnutar + gnupg + hugo + bat + which + nix-output-monitor + devenv irssi - luarocks - lua5_1 - gimp - lua-language-server - go - nodejs - uv - readline - cachix - sqlite - rofi - qutebrowser - foot - vifm-full - ranger - zoxide - (python313.withPackages (python-pkgs: [ - python-pkgs.prompt_toolkit - python-pkgs.pygments - python-pkgs.pynvim - ]) - ) - # vimPlugins.nvim-treesitter.withAllGrammars - neovim + luarocks + lua5_1 + gimp + lua-language-server + go + nodejs + uv + readline + cachix + sqlite + rofi + qutebrowser + foot + vifm-full + ranger + zoxide + ( + python313.withPackages ( + python-pkgs: + [ + python-pkgs.prompt_toolkit + python-pkgs.pygments + python-pkgs.pynvim + python-pkgs.pudb + python-pkgs.ptpython + python-pkgs.ipython + ] + ) + ) + neovim zig nodejs go syncthing dosbox-x lazygit - ]; + wofi + qutebrowser + waybar + uwsm + gopls + pyright + ncurses + rustup + wayvnc + ]; + programs.wofi = { + enable = true; + settings = { + location = "top-center"; + allow_markup = true; + width = 400; + }; + style = '' + /* Base */ + window { + background-color: rgba(17, 24, 39, 0.6); + box-shadow: 0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1); + border-radius: 1rem; + font-size: 1rem; + } + + window #outer-box { } + + window #outer-box #input { + background-color: rgba(17,24,39,0.6); + color: #c0caf5; + border: none; + border-bottom: 1px solid rgba(17,24,39,0.2); + padding: 0.8rem 1rem; + font-size: 1rem; + border-radius: 1rem 1rem 0 0; + } + + /* focus states (no #window!) */ + window #outer-box #input:focus, + window #outer-box #input:focus-visible, + window #outer-box #input:active { + border: none; + outline: 2px solid transparent; + outline-offset: 2px; + } + + window #outer-box #scroll { } + window #outer-box #scroll #inner-box { } + + window #outer-box #scroll #inner-box #entry { + color: #c0caf5; + background-color: rgba(17,24,39,0.1); + padding: 0.6rem 1rem; + } + + window #outer-box #scroll #inner-box #entry #img { + width: 1rem; + margin-right: 0.5rem; + } + + window #outer-box #scroll #inner-box #entry:selected { + color: #c0caf5; + background-color: rgba(38,50,56,0.1); + outline: none; + } + ''; + }; programs.neovim.plugins = [ pkgs.vimPlugins.nvim-treesitter.withAllGrammars ]; programs.taskwarrior = { - enable = true; + enable = true; }; services.syncthing = { - enable = true; + enable = true; }; - programs.ranger = { - enable = true; - extraConfig = '' + programs.ranger = { + enable = true; + extraConfig = '' - ''; - extraPackages = [ ]; - mappings = { - Q = "quitall"; - q = "quit"; - }; - plugins = [ - { - name = "zoxide"; - src = builtins.fetchGit { - url = "https://github.com/jchook/ranger-zoxide.git"; - rev = "363df97af34c96ea873c5b13b035413f56b12ead"; - }; - } - { - name = "tmux"; - src = builtins.fetchGit { - url = "https://github.com/joouha/ranger_tmux.git"; - rev = "05ba5ddf2ce5659a90aa0ada70eb1078470d972a"; - }; - } - ]; - settings = { - column_ratios = "1,3,3"; - confirm_on_delete = "never"; - scroll_offset = 8; - unicode_ellipsis = true; - }; - }; + ''; + extraPackages = [ ]; + mappings = { + Q = "quitall"; + q = "quit"; + }; + plugins = [ + { + name = "zoxide"; + src = builtins.fetchGit { + url = "https://github.com/jchook/ranger-zoxide.git"; + rev = "363df97af34c96ea873c5b13b035413f56b12ead"; + }; + } + { + name = "tmux"; + src = builtins.fetchGit { + url = "https://github.com/joouha/ranger_tmux.git"; + rev = "05ba5ddf2ce5659a90aa0ada70eb1078470d972a"; + }; + } + ]; + settings = { + column_ratios = "1,3,3"; + confirm_on_delete = "never"; + scroll_offset = 8; + unicode_ellipsis = true; + }; + }; + programs.fzf = { + enable = true; + tmux.enableShellIntegration = true; + enableZshIntegration = true; + colors = { + fg = "#d0d0d0"; + bg = "#24283b"; + hl = "#5f87af"; + "fg+" = "#d0d0d0"; + "bg+" = "#414868"; + "hl+" = "#5fd7ff"; + info = "#afaf87"; + prompt = "#d7005f"; + pointer = "#af5fff"; + marker = "#87ff00"; + spinner = "#af5fff"; + header = "#87afaf"; + }; + }; + programs.tmux = { + enable = true; + baseIndex = 1; + clock24 = true; + disableConfirmationPrompt = true; + keyMode = "vi"; + mouse = true; + newSession = true; + plugins = with pkgs; [ + tmuxPlugins.cpu + { + plugin = tmuxPlugins.resurrect; + extraConfig = "set -g @resurrect-strategy-nvim 'session'"; + } + { + plugin = tmuxPlugins.continuum; + extraConfig = '' + set -g @continuum-restore 'on' + set -g @continuum-save-interval '60' + ''; + } + tmuxPlugins.yank + tmuxPlugins.vim-tmux-navigator + tmuxPlugins.vim-tmux-focus-events + tmuxPlugins.urlview + { + plugin = tmuxPlugins.tokyo-night-tmux; + extraConfig = '' + set -g @tokyo-night-tmux_window_id_style digital + set -g @tokyo-night-tmux_pane_id_style hsquare + set -g @tokyo-night-tmux_zoom_id_style dsquare + set -g @tokyo-night-tmux_show_netspeed 1 + set -g @tokyo-night-tmux_netspeed_iface "wlp2s0" # Detected via default route + set -g @tokyo-night-tmux_netspeed_showip 1 # Display IPv4 address (default 0) + set -g @tokyo-night-tmux_netspeed_refresh 1 # Update interval in seconds (default 1) + set -g @tokyo-night-tmux_show_path 1 + set -g @tokyo-night-tmux_path_format relative # 'relative' or 'full' + set -g @tokyo-night-tmux_show_battery_widget 1 + set -g @tokyo-night-tmux_battery_name "BAT0" # some linux distro have 'BAT0' + set -g @tokyo-night-tmux_battery_low_threshold 21 # default + ''; + } + tmuxPlugins.tmux-fzf + # { + # plugin = tmuxPlugins.tilish; + # extraConfig = '' + # set -g @tilish-navigator 'on' + # set -g @tilish-default 'main-vertical' + # set -g @tilish-enforce 'none' + # set -g escape-time 0 + # set -g @tilish-dmenu 'on' + # ''; + # } - programs.fzf = { - enable = true; - tmux.enableShellIntegration = true; - enableZshIntegration = true; - colors = { - fg = "#d0d0d0"; - bg = "#24283b"; - hl = "#5f87af"; - "fg+" = "#d0d0d0"; - "bg+" = "#414868"; - "hl+" = "#5fd7ff"; - info = "#afaf87"; - prompt = "#d7005f"; - pointer = "#af5fff"; - marker = "#87ff00"; - spinner = "#af5fff"; - header = "#87afaf"; - }; - }; - programs.tmux = { - enable = true; - baseIndex = 1; - clock24 = true; - disableConfirmationPrompt = true; - keyMode = "vi"; - mouse = true; - newSession = true; - plugins = with pkgs; [ - tmuxPlugins.cpu - { - plugin = tmuxPlugins.resurrect; - extraConfig = "set -g @resurrect-strategy-nvim 'session'"; - } - { - plugin = tmuxPlugins.continuum; - extraConfig = '' - set -g @continuum-restore 'on' - set -g @continuum-save-interval '60' - ''; - } - tmuxPlugins.yank - tmuxPlugins.vim-tmux-navigator - tmuxPlugins.vim-tmux-focus-events - tmuxPlugins.urlview - { - plugin = tmuxPlugins.tokyo-night-tmux; - extraConfig = '' - set -g @tokyo-night-tmux_window_id_style digital - set -g @tokyo-night-tmux_pane_id_style hsquare - set -g @tokyo-night-tmux_zoom_id_style dsquare - set -g @tokyo-night-tmux_show_netspeed 1 - set -g @tokyo-night-tmux_netspeed_iface "wlp2s0" # Detected via default route - set -g @tokyo-night-tmux_netspeed_showip 1 # Display IPv4 address (default 0) - set -g @tokyo-night-tmux_netspeed_refresh 1 # Update interval in seconds (default 1) - set -g @tokyo-night-tmux_show_path 1 - set -g @tokyo-night-tmux_path_format relative # 'relative' or 'full' - set -g @tokyo-night-tmux_show_battery_widget 1 - set -g @tokyo-night-tmux_battery_name "BAT0" # some linux distro have 'BAT0' - set -g @tokyo-night-tmux_battery_low_threshold 21 # default - ''; - } - tmuxPlugins.tmux-fzf - # { - # plugin = tmuxPlugins.tilish; - # extraConfig = '' - # set -g @tilish-navigator 'on' - # set -g @tilish-default 'main-vertical' - # set -g @tilish-enforce 'none' - # set -g escape-time 0 - # set -g @tilish-dmenu 'on' - # ''; - # } + ]; + prefix = "C-a"; + shell = "${pkgs.zsh}/bin/zsh"; + # terminal = "xterm-kitty:RGB"; + tmuxinator.enable = true; + extraConfig = '' + set-option -g update-environment "DISPLAY XAUTHORITY WAYLAND_DISPLAY XDG_RUNTIME_DIR HYPRLAND_INSTANCE_SIGNATURE" + set -g focus-events on + set -g escape-time 3 + set-option -g status-position top + set-option -as terminal-features 'foot:RGB' + set -g default-terminal 'tmux-256color' + bind-key b choose-tree -Z "run-shell 'tmux swap-pane -s %%'" + # bind C-p display-popup -E -w 60% -h 70% 'tmuxsessions.sh' + bind C-p run-shell 'tmuxsessions.sh' + bind C-d run-shell 'dotfile-picker.sh' + bind [ run-shell 'project-picker.sh' + # bind C-c display-popup -E -w 50% -h 50% 'nvim +":cd ~/org" ~/org/refile.norg' + # bind C-c display-popup -E -w 50% -h 50% 'nvim +"VimwikiIndex" + bind C-c display-popup -E -w 40% -h 60% "pytui -n" + # bind C-w display-popup -E -w 40% -h 60% "pytui -D" - ]; - prefix = "C-a"; - shell = "${pkgs.zsh}/bin/zsh"; - # terminal = "xterm-kitty:RGB"; - tmuxinator.enable = true; - extraConfig = '' - set-option -g status-position top - set -g default-terminal 'tmux-256color' - set -g terminal-overrides ',xterm-256color:RGB' - bind-key b choose-tree -Z "run-shell 'tmux swap-pane -s %%'" - # bind C-p display-popup -E -w 60% -h 70% 'tmuxsessions.sh' - bind C-p run-shell 'tmuxsessions.sh' - bind C-d run-shell 'dotfile-picker.sh' - bind [ run-shell 'project-picker.sh' - # bind C-c display-popup -E -w 50% -h 50% 'nvim +":cd ~/org" ~/org/refile.norg' - # bind C-c display-popup -E -w 50% -h 50% 'nvim +"VimwikiIndex" - bind C-c display-popup -E -w 40% -h 60% "pytui -n" - bind C-w display-popup -E -w 40% -h 60% "pytui -D" - - bind C-o display-popup -E -w 50% -h 50% 'igrep ~/wiki/notes' - - bind j run-shell 'popuptmux' - bind r source-file ~/.tmux.conf \; display "Reloaded!" - bind i split-window -v -c '\ - #{pane_current_path}' 'emojicherrypick.py --menu fzf\ - ' - bind-key -n F4 run-shell 'ranger' - # bind-key -n C-e split-window -v -c '\ - # #{pane_current_path}' 'vifm\ - # ' - bind-key -n C-f split-window 'ranger .' - bind F3 send-keys 'igrep .' C-m - ''; - }; - home.file.".ssh/allowed_signers".text = '' - * ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH8P/3yzsruekSaZ9b+yk429VTcfCtI1j8jnkNbPAgnr th3r00t@nixos - ''; - programs.git = { - enable = true; - userName = "th3r00t"; - userEmail = "tty303@proton.me"; + bind C-o display-popup -E -w 50% -h 50% 'igrep ~/wiki/notes' + + bind j run-shell 'popuptmux' + bind r source-file ~/.config/tmux/tmux.conf \; display "Reloaded!" + bind i split-window -v -c '\ +#{pane_current_path}' 'emojicherrypick.py --menu fzf\ + ' + bind-key -n F4 run-shell 'ranger' +# bind-key -n C-e split-window -v -c '\ +#{pane_current_path}' 'vifm\' + bind-key -n C-f split-window 'ranger .' +bind F3 send-keys 'igrep .' C-m + ''; + }; + programs.git = { + enable = true; + userName = "th3r00t"; + userEmail = "tty303@proton.me"; extraConfig = { commit.gpgSign = true; gpg.format = "ssh"; gpg.ssh.allowedSignersFile = "~/.ssh/allowed_signers"; user.signingkey = "~/.ssh/id_ed25519.pub"; }; - }; - programs.direnv = { - enable = true; - enableZshIntegration = true; - nix-direnv.enable = true; - }; + }; + programs.direnv = { + enable = true; + enableZshIntegration = true; + nix-direnv.enable = true; + }; programs.foot = { enable = true; + server.enable = true; settings = { main = { - term = "tmux-256color"; - font = "FiraCode Nerd Font Mono:size=6"; + term = "foot"; + font = "SauceCodePro Nerd Font Mono:size=6"; dpi-aware = "yes"; shell = "${pkgs.zsh}/bin/zsh"; }; mouse = { hide-when-typing = "yes"; }; cursor = { style = "block"; blink = "yes"; }; + colors = { + alpha = "0.7"; + background="1a1b26"; + foreground="a9b1d6"; + flash="ff9e64"; + flash-alpha="0.5"; + regular0="1a1b26"; + regular1="f7768e"; + regular2="9ece6a"; + regular3="e0af68"; + regular4="7aa2f7"; + regular5="bb9af7"; + regular6="7dcfff"; + regular7="c0caf5"; + bright0="545c7e"; + bright1="ff7a93"; + bright2="b9f27c"; + bright3="ff9e64"; + bright4="7aa2f7"; + bright5="bb9af7"; + bright6="7dcfff"; + bright7="a9b1d6"; + sixel0="1a1b26"; + sixel1="7aa2f7"; + sixel2="f7768e"; + sixel3="9ece6a"; + sixel4="bb9af7"; + sixel5="7dcfff"; + sixel6="e0af68"; + sixel7="565f89"; + sixel8="414868"; + sixel9="4e5173"; + sixel10="8f5151"; + sixel11="4e7652"; + sixel12="8a4d8f"; + sixel13="4e757a"; + sixel14="8a8851"; + sixel15="a9b1d6"; + selection-foreground="1a1b26"; + selection-background="a9b1d6"; + jump-labels="1a1b26 e0af68"; + scrollback-indicator="1a1b26 7aa2f7"; + search-box-no-match="1a1b26 f7768e"; + search-box-match="1a1b26 e0af68"; + urls="e0af68"; + }; }; }; - programs.eza = { - enable = true; - enableBashIntegration = true; - enableZshIntegration = true; - }; - # starship - an customizable prompt for any shell - programs.starship = { - enable = true; - # custom settings - settings = { - add_newline = false; - aws.disabled = true; - gcloud.disabled = true; - line_break.disabled = true; - }; - }; + programs.eza = { + enable = true; + enableBashIntegration = true; + enableZshIntegration = true; + }; + programs.starship = { + enable = true; + # custom settings + settings = { + add_newline = false; + aws.disabled = true; + gcloud.disabled = true; + line_break.disabled = true; + }; + }; + programs.zsh = { + enable = true; + sessionVariables = { + PATH="$PATH:$HOME/.local/usr/bin"; + PYTHONBREAKPOINT="pudb.set_trace"; + }; + oh-my-zsh = { + enable = true; + plugins = [ + "git" + "colored-man-pages" + "colorize" + "command-not-found" + "compleat" + "dirhistory" + "fzf" + "git-auto-fetch" + "git-extras" + "git-prompt" + "gitignore" + "gpg-agent" + "history" + "jsontools" + "man" + "nmap" + "pip" + "python" + "ssh-agent" + "sudo" + "tmux" + "vi-mode" + "zsh-navigation-tools" + ]; + # theme = "starship"; + }; + }; + programs.bash = { + enable = true; + enableCompletion = true; + bashrcExtra = '' + export PATH="$PATH:$HOME/.local/usr/bin"; + ''; + shellAliases = { + urlencode = "python3 -c 'import sys, urllib.parse as ul; print(ul.quote_plus(sys.stdin.read()))'"; + urldecode = "python3 -c 'import sys, urllib.parse as ul; print(il.unquote_plus(sys.stdin.read()))'"; + ls = "eza"; + cat = "bat"; + }; + }; + wayland.windowManager.hyprland = { + enable = true; + systemd.enable = true; + xwayland.enable = true; + plugins = [ + # pkgs.hyprlandPlugins.hyprbars + ]; + settings = { + input = { + kb_layout = "us"; + kb_options = "caps:escape"; + touchpad = { + natural_scroll = true; + }; + }; + decoration = { + rounding = "10"; + rounding_power = "2"; + active_opacity = "1"; + inactive_opacity = ".7"; + shadow = { + enabled = true; + range = "4"; + render_power = "3"; + color = "rgba(1a1a1aee)"; + }; + blur = { + enabled = true; + size = "3"; + passes = "1"; + vibrancy = "0.1696"; + }; + }; + "$mainMod" = "SUPER"; + bindm = [ + "$mainMod, mouse:272, movewindow" + "$mainMod, mouse:273, resizewindow" + "$mainMod ALT, mouse:272, resizewindow" + ]; + }; + extraConfig = '' + general { + gaps_in = 5 + gaps_out = 5 + border_size = 1 + col.active_border = rgb(b000b5) + col.inactive_border = rgb(1f2335) + resize_on_border = true + allow_tearing = false + layout = dwindle + } + + dwindle { + pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = true # You probably want this + default_split_ratio = 1.1 + force_split = 0 + } + + exec-once = waybar + monitor = eDP-1, preferred,0x0,2 + # monitor = Virtual-1, 2800x1752@120, 1920x0, 1 - programs.zsh = { - enable = true; - sessionVariables = { - PATH="$PATH:$HOME/.local/usr/bin"; - }; - oh-my-zsh = { - enable = true; - plugins = [ - "git" - "colored-man-pages" - "colorize" - "command-not-found" - "compleat" - "dirhistory" - "fzf" - "git-auto-fetch" - "git-extras" - "git-prompt" - "gitignore" - "gpg-agent" - "history" - "jsontools" - "man" - "nmap" - "pip" - "python" - "ssh-agent" - "sudo" - "tmux" - "vi-mode" - "zsh-navigation-tools" - ]; - # theme = "starship"; - }; - }; - programs.bash = { - enable = true; - enableCompletion = true; - bashrcExtra = '' - export PATH="$PATH:$HOME/.local/usr/bin"; - ''; - shellAliases = { - urlencode = "python3 -c 'import sys, urllib.parse as ul; print(ul.quote_plus(sys.stdin.read()))'"; - urldecode = "python3 -c 'import sys, urllib.parse as ul; print(il.unquote_plus(sys.stdin.read()))'"; - ls = "eza"; - cat = "bat"; - }; - }; + $terminal = footclient -e tmux new-session zsh -c '~/.local/usr/bin/tmuxstartup.sh' + $fileManager = footclient -T vifm -e vifm + $systeminfo = hyprsysteminfo + $menu = wofi --show drun + $browser = qutebrowser + $notes = footclient -T capture -e pytui -n + $sysmon = footclient -T system-monitor -e bashtop - home.stateVersion = "25.05"; + bind = $mainMod SHIFT, M, exec, hyprvirtmon.py + bind = $mainMod SHIFT, Return, exec, $terminal + bind = $mainMod, E, exec, $fileManager + bind = $mainMod SHIFT, C, killactive + bind = $mainMod SHIFT, Q, exit + bind = $mainMod, V, togglefloating + bind = $mainMod, R, exec, $menu + bind = $mainMod, B, exec, $browser + bind = $mainMod, M, exec, $sysmon + bind = $mainMod CTRL, N, exec, $notes + # bind = $mainMod, P, exec, $menu + bind = $mainMod, V, togglefloating + bind = $mainMod, P, pseudo, # dwindle + bind = $mainMod, TAB, togglesplit, # dwindle + bind = $mainMod, Y, fullscreen, 1 + + # Move focus with mainMod + arrow keys + bind = $mainMod, left, movefocus, l + bind = $mainMod, right, movefocus, r + bind = $mainMod, up, movefocus, u + bind = $mainMod, down, movefocus, d + # Move focus with mainMod + Vim keys + bind = $mainMod, H, movefocus, l + bind = $mainMod, SEMICOLON, movefocus, r + bind = $mainMod, K, movefocus, u + bind = $mainMod, J, movefocus, d + + # Switch workspaces with mainMod + [0-9] + bind = $mainMod, 1, workspace, 1 + bind = $mainMod, 2, workspace, 2 + bind = $mainMod, 3, workspace, 3 + bind = $mainMod, 4, workspace, 4 + bind = $mainMod, 5, workspace, 5 + bind = $mainMod, 6, workspace, 6 + bind = $mainMod, 7, workspace, 7 + bind = $mainMod, 8, workspace, 8 + bind = $mainMod, 9, workspace, 9 + bind = $mainMod, 0, workspace, 10 + + # Move active window to a workspace with mainMod + SHIFT + [0-9] + bind = $mainMod SHIFT, 1, movetoworkspace, 1 + bind = $mainMod SHIFT, 2, movetoworkspace, 2 + bind = $mainMod SHIFT, 3, movetoworkspace, 3 + bind = $mainMod SHIFT, 4, movetoworkspace, 4 + bind = $mainMod SHIFT, 5, movetoworkspace, 5 + bind = $mainMod SHIFT, 6, movetoworkspace, 6 + bind = $mainMod SHIFT, 7, movetoworkspace, 7 + bind = $mainMod SHIFT, 8, movetoworkspace, 8 + bind = $mainMod SHIFT, 9, movetoworkspace, 9 + bind = $mainMod SHIFT, 0, movetoworkspace, 10 + + bind = $mainMod, S, togglespecialworkspace, magic + bind = $mainMod SHIFT, S, movetoworkspace, special:magic + + bind = $mainMod, mouse_down, workspace, e+1 + bind = $mainMod, mouse_up, workspace, e-1 + + bindm = $mainMod, mouse:272, movewindow + bindm = $mainMod, mouse:273, resizewindow + + bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ + bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- + bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle + bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle + bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+ + bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%- + +# Requires playerctl + bindl = , XF86AudioNext, exec, playerctl next + bindl = , XF86AudioPause, exec, playerctl play-pause + bindl = , XF86AudioPlay, exec, playerctl play-pause + bindl = , XF86AudioPrev, exec, playerctl previous + + + bindl = , switch:on:Lid Switch, exec, hyprctl keyword monitor "eDP-1, disable" + bindl = , switch:off:Lid Switch, exec, hyprctl keyword monitor "eDP-1, preferred,auto,auto" + + windowrule = float,title:^(capture)$ + windowrule = size 800 600,title:^(capture)$ + windowrule = float,title:^(system-monitor)$ + windowrule = size 1024 768,title:^(system-monitor)$ + windowrulev2 = opacity 1.0 override,class:^(firefox)$ + + # Ignore maximize requests from apps. You'll probably like this. + windowrule = suppressevent maximize, class:.* + + # Fix some dragging issues with XWayland + windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 + + ''; + }; + programs.waybar = { + enable = true; + settings = { + mainBar = { + layer = "top"; + position = "top"; + height = 30; + modules-left = [ "hyprland/workspaces" "hyprland/mode" "hyprland/window" ]; + modules-center = [ "clock" ]; + modules-right = [ + "mpd" + "idle_inhibitor" + "pulseaudio" + "network" + "power-profiles-daemon" + "cpu" + "memory" + "temperature" + "backlight" + "keyboard-state" + "battery" + "tray" + "clock" + "custom/power" + ]; + + "hyprland/workspaces" = { + format = "{name}"; + }; + "hyprland/window" = { + max-length = 50; + }; + clock = { + format = "{:%Y-%m-%d %H:%M}"; + tooltip = false; + }; + cpu = { format = "{usage}%"; }; + memory = { format = "{}%"; }; + network = { + format-wifi = "{essid} ({signalStrength}%)"; + format-ethernet = "{ifname}: {ipaddr}/{cidr}"; + }; + battery = { + format = "{capacity}%"; + format-charging = "⚡ {capacity}%"; + }; + }; + }; + style = '' + * { + /* `otf-font-awesome` is required to be installed for icons */ +color: #565f89; + font-family: FontAwesome, Roboto, Helvetica, Arial, sans-serif; + font-size: 15px; + border-radius: 10px; +margin: 0px 5px 0px 5px; + background-color: #1f2335 + } + + window#waybar { + background-color: rgba(43, 48, 59, 0.5); + border-bottom: 3px solid rgba(100, 114, 125, 0.5); +color: #ffffff; + transition-property: background-color; + transition-duration: .5s; + } + + window#waybar.hidden { +opacity: 0.2; + } + + /* + window#waybar.empty { + } + window#waybar.solo { + } + */ + + window#waybar.termite { + } + + window#waybar.chromium { +border: none; + } + + button { + /* Use box-shadow instead of border so the text isn't offset */ + box-shadow: inset 0 -3px 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 -3px #ffffff; + } + + /* you can set a style on hover for any module like this */ + +#workspaces button { +padding: 0 5px; + background-color: transparent; +color: #ffffff; +} + +#workspaces button:hover { +background: rgba(0, 0, 0, 0.2); +} + +#workspaces button.focused { + background-color: #64727D; + box-shadow: inset 0 -3px #ffffff; +} + +#workspaces button.urgent { + background-color: #eb4d4b; +} + +#mode { + /* background-color: #64727D; */ + box-shadow: inset 0 -3px #ffffff; +} + +#clock, +#battery, +#cpu, +#memory, +#disk, +#temperature, +#backlight, +#network, +#pulseaudio, +#wireplumber, +#custom-media, +#tray, +#mode, +#idle_inhibitor, +#scratchpad, +#power-profiles-daemon, +#mpd { +padding: 0 10px; + /* color: #ffffff; */ +} + +#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 { + /* background-color: #64727D; */ +} + +#battery { + /* background-color: #ffffff; */ + /* color: #000000; */ +} + +#battery.charging, #battery.plugged { +color: #4fd6be; + /* background-color: #26A65B; */ +} + +@keyframes blink { + to { + /* background-color: #ffffff; */ +color: #000000; + } +} + +/* Using steps() instead of linear as a timing function to limit cpu usage */ +#battery.critical:not(.charging) { + /* background-color: #f53c3c; */ +color: #ff007c; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: steps(12); + animation-iteration-count: infinite; + animation-direction: alternate; +} + +#power-profiles-daemon { + padding-right: 15px; +} + +#power-profiles-daemon.performance { + /* background-color: #f53c3c; */ +color: #c53b53; +} + +#power-profiles-daemon.balanced { + /* background-color: #2980b9; */ +color: #565f89; +} + +#power-profiles-daemon.power-saver { + /* background-color: #2ecc71; */ +color: #9d7cd8; +} + +label:focus { + /* background-color: #000000; */ + } + +#cpu { + /* background-color: #2ecc71; */ + /* color: #000000; */ +} + +#memory { + /* background-color: #9b59b6; */ +} + +#disk { + /* background-color: #964B00; */ +} + +#backlight { + /* background-color: #90b1b1; */ +} + +#network { + /* background-color: #2980b9; */ +} + +#network.disconnected { + /* background-color: #f53c3c; */ +} + + +#wireplumber { + /* background-color: #fff0f5; */ + /* color: #000000; */ +} + +#wireplumber.muted { + /* background-color: #f53c3c; */ +} + +#custom-media { + /* background-color: #66cc99; */ +color: #2a5c45; + min-width: 100px; +} + +#custom-media.custom-spotify { + background-color: #66cc99; +} + +#custom-media.custom-vlc { + background-color: #ffa000; +} + +#temperature { + /* background-color: #f0932b; */ +} + +#temperature.critical { + background-color: #eb4d4b; +} + +#tray { + /* background-color: #2980b9; */ +} + +#tray > .passive { + -gtk-icon-effect: dim; +} + +#tray > .needs-attention { + -gtk-icon-effect: highlight; +color: #eb4d4b; +} + +#idle_inhibitor { +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; + min-width: 16px; +} + +#keyboard-state { + /* background: #97e1ad; */ +color: #000000; +padding: 0 0px; + 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; +} + +#privacy { +padding: 0; +} + +#privacy-item { +padding: 0 5px; +color: white; +} + +#privacy-item.screenshare { + background-color: #cf5700; +} + +#privacy-item.audio-in { + background-color: #1ca000; +} + +#privacy-item.audio-out { + background-color: #0069d4; +} + + +#waybar { + font-family: "SF Pro Display", Cantarell, Noto Sans, sans-serif; + font-size: 16px; +} + +#window { +padding: 0 10px; +} + +window#waybar { +border: none; + border-radius: 0; + box-shadow: none; + text-shadow: none; + transition-duration: 0s; +color: rgba(217, 216, 216, 1); +background: #1a1b26; +} + +#workspaces { +margin: 0 5px; +} + +#workspaces button { +padding: 0 8px; +color: #565f89; +border: 3px solid rgba(9, 85, 225, 0); + border-radius: 10px; + min-width: 33px; +} + +#workspaces button.visible { +color: #a9b1d6; +} + +#workspaces button.active { + border-top: 3px solid #7aa2f7; + border-bottom: 3px solid #7aa2f7; +} + +#workspaces button.urgent { + background-color: #a96d1f; +color: white; +} + +#workspaces button:hover { + box-shadow: inherit; + border-color: #bb9af7; +color: #bb9af7; +} + +/* Repeat style here to ensure properties are overwritten as there's no !important and button:hover above resets the colour */ + +#workspaces button.focused { +color: #7aa2f7; +} +#workspaces button.focused:hover { +color: #bb9af7; +} + +#pulseaudio:hover { +color: #565f89; +} + +#pulseaudio { + /* font-size: 26px; */ + /* background-color: #545c73; */ + /* color: #000000; */ +} + +#pulseaudio.muted { + /* background-color: #c53b53; */ +color: #c53b53; +} + +#custom-recorder { + font-size: 18px; +color:#ee2e24; +} + +#tray, +#mode, +#battery, +#temperature, +#cpu, +#memory, +#network, +#pulseaudio, +#idle_inhibitor, +#sway-language, +#backlight, +#custom-storage, +#custom-cpu_speed, +#custom-powermenu, +#custom-spotify, +#custom-weather, +#custom-mail, +#custom-media { +padding: 0 5px; + /* border-top: 3px solid rgba(217, 216, 216, 0.5); */ +} + +#clock { +margin: 0px 5px 0px 5px; + min-width: 30px; +} + +#battery.warning { +color: rgba(255, 210, 4, 1); +} + +#battery.critical { +color: rgba(238, 46, 36, 1); +} + +#battery.charging { +color: rgba(217, 216, 216, 1); +} + +#custom-storage.warning { +color: rgba(255, 210, 4, 1); +} + +#custom-storage.critical { +color: rgba(238, 46, 36, 1); +} + +@keyframes blink { + to { + background-color: #ffffff; +color: black; + } +} + + ''; + }; + programs.hyprlock = { + enable = true; + settings = { + general = { + disable_loading_bar = true; + grace = 300; + hide_cursor = true; + no_fade_in = false; + }; + background = [ + { + path = "screenshot"; + blur_passes = 3; + blur_size = 8; + } + ]; + input-field = [ + { + size = "400, 100"; + position = "0, -80"; + monitor = ""; + dots_center = true; + fade_on_empty = false; + font_color = "rgb(202, 211, 245)"; + inner_color = "rgb(91, 96, 120)"; + outer_color = "rgb(24, 25, 38)"; + outline_thickness = 5; + placeholder_text = "Password"; + shadow_passes = 2; + } + ]; + }; + }; + services.hypridle = { + enable = true; + settings = { + general = { + after_sleep_cmd = "hyprctl dispatch dpms on"; + ignore_dbus_inhibit = false; + lock_cmd = "hyprlock"; + }; + listener = [ + { + timeout = 300; + on-timeout = "hyprlock"; + } + { + timeout = 600; + on-timeout = "hyprctl dispatch dpms off"; + on-resume = "hyprctl dispatch dpms on"; + } + ]; + }; + }; + home.stateVersion = "25.05"; } diff --git a/home/.irssi/config b/home/.irssi/config index 5523e91..6fe8b5b 100644 --- a/home/.irssi/config +++ b/home/.irssi/config @@ -159,7 +159,9 @@ channels = ( { name = "#zig"; chatnet = "liberachat"; autojoin = "yes"; }, { name = "#python"; chatnet = "liberachat"; autojoin = "yes"; }, { name = "#vimwiki"; chatnet = "liberachat"; autojoin = "yes"; }, - { name = "#foot"; chatnet = "liberachat"; autojoin = "yes"; } + { name = "#foot"; chatnet = "liberachat"; autojoin = "no"; } + { name = "#nixos"; chatnet = "liberachat"; autojoin = "yes"; } + { name = "#nixos-chat"; chatnet = "liberachat"; autojoin = "yes"; } ); aliases = { diff --git a/home/.local/usr/bin/dotfile-picker.sh b/home/.local/usr/bin/dotfile-picker.sh index b918ac4..4229ea1 100755 --- a/home/.local/usr/bin/dotfile-picker.sh +++ b/home/.local/usr/bin/dotfile-picker.sh @@ -3,7 +3,6 @@ # Set the directory where your dotfiles are located DOTFILES_DIR="${HOME}/.dotfiles" -# Use fzf to select a file file=$(find "$DOTFILES_DIR" -type f -name "*.*" | \ fzf --delimiter / --with-nth=-1 --keep-right \ --prompt="Dotfiles 󰓾 " \ diff --git a/home/.local/usr/bin/hyprvirtmon.py b/home/.local/usr/bin/hyprvirtmon.py new file mode 100755 index 0000000..b5960ca --- /dev/null +++ b/home/.local/usr/bin/hyprvirtmon.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python + +import sys +import subprocess +import json + +if __name__ == "__main__": + try: + result = subprocess.run( + ['hyprctl', '-j', 'monitors'], + capture_output=True, text=True, check=True + ) + monitors = json.loads(result.stdout) + monitor_names = [] + for monitor in monitors: + if 'name' in monitor: + monitor_names.append(monitor['name']) + if "Virtual-1" in monitor_names: + result = subprocess.run( + ["hyprctl", "keyword", "monitor", "Virtual-1,disable"], + capture_output=True, text=True, check=True + ) + if result.returncode != 0: + print("Failed to disable monitor Virtual-1", file=sys.stderr) + sys.exit(1) + else: + result = subprocess.run(["pkill", "-x", "wayvnc"], + capture_output=True, text=True) + if result.returncode != 0: + print("Failed to stop wayvnc", file=sys.stderr) + sys.exit(1) + else: + sys.exit(0) + else: + result = subprocess.run( + ["hyprctl", "keyword", "monitor", + "Virtual-1, 2800x1752@120,1920x0,2"], + capture_output=True, text=True, check=True + ) + if result.returncode != 0: + print("Failed to set monitor Virtual-1", file=sys.stderr) + sys.exit(1) + else: + result = subprocess.run( + ["hyprctl", "output", "create", "headless", "Virtual-1"], + capture_output=True, text=True, check=True + ) + if result.returncode != 0: + print("Failed to create headless monitor Virtual-1", + file=sys.stderr) + sys.exit(1) + else: + result = subprocess.Popen( + ["wayvnc", "--output=Virtual-1", "0.0.0.0", "5900", "&"], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL) + + except subprocess.CalledProcessError as e: + print(f"Error executing hyprctl: {e}", file=sys.stderr) + sys.exit(1) + except Exception as e: + print(f"An unexpected error occurred: {e}", file=sys.stderr) + sys.exit(1) diff --git a/home/.local/usr/bin/tmuxstartup.sh b/home/.local/usr/bin/tmuxstartup.sh index 639cc54..e786d87 100755 --- a/home/.local/usr/bin/tmuxstartup.sh +++ b/home/.local/usr/bin/tmuxstartup.sh @@ -1,6 +1,6 @@ -#!/usr/bin/bash +#!/usr/bin/env bash fastfetch --logo small --structure "title:os:kernel:cpu:memory:disk:uptime" -misfortune|cowsay|lolcat +fortune|cowsay|lolcat exec zsh diff --git a/home/config/dosbox-x/dosbox-x-2025.05.03.conf b/home/config/dosbox-x/dosbox-x-2025.05.03.conf index 93323eb..7a1687e 100644 --- a/home/config/dosbox-x/dosbox-x-2025.05.03.conf +++ b/home/config/dosbox-x/dosbox-x-2025.05.03.conf @@ -312,12 +312,14 @@ convertdrivefat = true # frameskip = 0 aspect = false -aspect_ratio = 0:0 +aspect_ratio = 16:9 char9 = true euro = -1 -doublescan = true -scaler = super2xsai -glshader = none +doublescan = false +scaler = none +# scaler = advinterp2x forced +# scaler = super2xsai forced +# glshader = sharp pixelshader = none autofit = true monochrome_pal = green @@ -680,10 +682,10 @@ mididevice = mt32 midiconfig = samplerate = 48000 mpuirq = -1 -mt32.romdir = ~/.dos/midi +mt32.romdir = /mnt/games/Roms/Dos/midi/ mt32.model = auto fluid.driver = default -fluid.soundfont = ~/.dos/midi/soundfont1.sf2 +fluid.soundfont = [sblaster] # sbtype: Type of Sound Blaster to emulate. 'gb' is Game Blaster. @@ -1346,5 +1348,5 @@ devicehigh = [autoexec] # Lines in this section will be run at startup. # You can put your MOUNT lines here. -MOUNT E ~/.dos/Roms_Zipped/ -MOUNT C ~/.dos/C/ +MOUNT E /mnt/games/Roms/Dos/Roms_Zipped/ +MOUNT C /mnt/games/Roms/Dos/C/ diff --git a/home/config/nvim/init.lua b/home/config/nvim/init.lua index 8102906..b6522ed 100644 --- a/home/config/nvim/init.lua +++ b/home/config/nvim/init.lua @@ -1,16 +1,16 @@ local vim = vim -require("options") -- lua/options.lua -require("plugins") -- lua/plugins.lua -require("utils.t3_functions") -- lua/utils/t3_functions.lua -require("utils.t3_overrides") -- lua/utils/t3_overrides.lua -require("utils.reload") -- lua/utils/reload.lua -require("vimwiki") -- lua/vimwiki.lua -require("keymaps") -- lua/keymaps.lua -require("lsp") -- lua/lsp.lua -require("completion") -- lua/completion.lua -require("treesitter") -- lua/treesitter.lua -require("autocmds") -- lua/autocmds.lua -require("diagnostics") -- lua/diagnostics.lua +require("options") -- ~/.nixos/home/config/nvim/lua/options.lua +require("plugins") -- ~/.nixos/home/config/nvim/lua/plugins.lua +require("utils.t3_functions") -- ~/.nixos/home/config/nvim/lua/utils/t3_functions.lua +require("utils.t3_overrides") -- ~/.nixos/home/config/nvim/lua/utils/t3_overrides.lua +require("utils.reload") -- ~/.nixos/home/config/nvim/lua/utils/reload.lua +require("vimwiki") -- ~/.nixos/home/config/nvim/lua/vimwiki.lua +require("keymaps") -- ~/.nixos/home/config/nvim/lua/keymaps.lua +require("lsp") -- ~/.nixos/home/config/nvim/lua/lsp.lua +require("completion") -- ~/.nixos/home/config/nvim/lua/completion.lua +require("treesitter") -- ~/.nixos/home/config/nvim/lua/treesitter.lua +require("autocmds") -- ~/.nixos/home/config/nvim/lua/autocmds.lua +require("diagnostics") -- ~/.nixos/home/config/nvim/lua/diagnostics.lua require('tokyonight').setup({ style = "moon", -- "storm", "moon", "day", "night" diff --git a/home/config/nvim/lua/keymaps.lua b/home/config/nvim/lua/keymaps.lua index 148600f..23c6758 100644 --- a/home/config/nvim/lua/keymaps.lua +++ b/home/config/nvim/lua/keymaps.lua @@ -22,15 +22,15 @@ vim.keymap.set("n", "bp", ":bp", { desc = "Previous"}) vim.keymap.set("n", "bn", ":bn", { desc = "Next"}) vim.keymap.set("n", "bd", ":bd", { desc = "Delete"}) -vim.keymap.set("n", "G", "", { desc = "Grep"}) -vim.keymap.set("n", "Gg", ":FzfLua grep", { desc = "Grep"}) -vim.keymap.set("n", "Gr", ":FzfLua grep resume=true", { desc = "Resume Grep"}) +vim.keymap.set("n", "g", "", { desc = "Grep"}) +vim.keymap.set("n", "gg", ":FzfLua grep", { desc = "Grep"}) +vim.keymap.set("n", "gr", ":FzfLua grep resume=true", { desc = "Resume Grep"}) -vim.keymap.set("n", "g", "", { desc = "Git"}) -vim.keymap.set("n", "gg", ":LazyGit", { desc = "LazyGit"}) -vim.keymap.set("n", "gC", ":LazyGitConfig", { desc = "LazyGit Config"}) -vim.keymap.set("n", "gc", ":LazyGitFilter", { desc = "Commits"}) -vim.keymap.set("n", "gl", ":LazyGitLog", { desc = "Log"}) +vim.keymap.set("n", "G", "", { desc = "Git"}) +vim.keymap.set("n", "Gg", ":LazyGit", { desc = "LazyGit"}) +vim.keymap.set("n", "GC", ":LazyGitConfig", { desc = "LazyGit Config"}) +vim.keymap.set("n", "Gc", ":LazyGitFilter", { desc = "Commits"}) +vim.keymap.set("n", "Gl", ":LazyGitLog", { desc = "Log"}) vim.keymap.set("n", "", "", { desc = "Tabs"}) vim.keymap.set("n", "", ":tabnew", { desc = "New Tab"}) diff --git a/home/config/nvim/lua/options.lua b/home/config/nvim/lua/options.lua index 8e60fdb..12f2517 100644 --- a/home/config/nvim/lua/options.lua +++ b/home/config/nvim/lua/options.lua @@ -17,7 +17,7 @@ vim.o.clipboard = "unnamedplus" vim.o.completeopt = "menuone" -- vim.o.completeopt = "menuone,noinsert,noselect" vim.o.cursorline = true - +vim.o.sessionoptions="blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions" vim.g.netrw_keepdir = 1 vim.g.netrw_winsize = 15 vim.g.netrw_banner = 0 diff --git a/home/config/nvim/lua/plugins.lua b/home/config/nvim/lua/plugins.lua index 28bb402..042b5d3 100644 --- a/home/config/nvim/lua/plugins.lua +++ b/home/config/nvim/lua/plugins.lua @@ -95,7 +95,7 @@ require('sniprun').setup({ }) require('toggleterm').setup({ size = 20, - open_mapping = [[]], + open_mapping = [[]], hide_numbers = true, shade_filetypes = {}, shading_factor = 2, diff --git a/home/config/nvim/lua/treesitter.lua b/home/config/nvim/lua/treesitter.lua index 6d02d4e..938e1e0 100644 --- a/home/config/nvim/lua/treesitter.lua +++ b/home/config/nvim/lua/treesitter.lua @@ -1,9 +1,9 @@ local configs = require('nvim-treesitter.configs') configs.setup({ - ensure_installed = { - "ini", "bash", "c", "lua", "vim", "vimdoc", "query", "python", - "rust", "zig", "typescript", "svelte", "css", "html", "nix" - }, + -- ensure_installed = { + -- "ini", "bash", "c", "lua", "vim", "vimdoc", "query", "python", + -- "rust", "zig", "typescript", "svelte", "css", "html", "nix" + -- }, sync_install = false, highlight = { enable = true }, indent = { enable = true, disable = { "norg" }, }, diff --git a/home/config/waybar/power_menu.xml b/home/config/waybar/power_menu.xml new file mode 100644 index 0000000..1279d25 --- /dev/null +++ b/home/config/waybar/power_menu.xml @@ -0,0 +1,33 @@ + + + + + + Suspend + + + + + Hibernate + + + + + Shutdown + + + + + + + + Reboot + + + + + Lock + + + + diff --git a/secrets/smb.creds b/secrets/smb.creds new file mode 100644 index 0000000..4b039d4 --- /dev/null +++ b/secrets/smb.creds @@ -0,0 +1,15 @@ +{ + "data": "ENC[AES256_GCM,data:3UGtPNkpqrr1J6dDjZ9P8B7Bp6qNRhrxDf2o3ROnPKMeB+8E0J1aRr94HEtGeS3hIFiNlzI=,iv:29HTkWSjcI8XL2ss2lSNwkKtTY891NPHrPaoKu4715A=,tag:TlJdoLUT1lWZUbIbMtuovg==,type:str]", + "sops": { + "age": [ + { + "recipient": "age1sgy2zjxwfxggvuw9l55p4zklzxjadp4mcdmt7vdc5pemqgqv3geqh0tgs7", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA1cnBHZ0Zidzlsa3hDQlNn\nNjlzdGpZalhlSHg0ZU1rVHRyaCtnR3VOWkRvCkI1NUJ1UkVIRlJsRXpSSzlST1Bi\nNUdjVnpxWXpzWWJKRzR1YUFvT0IxSGsKLS0tIHlrQk42TzE0UHRwR0dLRXNLdXBn\nSnhyL3FzSHo5Y2VGdmlUNGp3SW5ydjQKfwK51gUaBOZyfrz95dN/CSGeR0jcMcgU\nYWH5WFbxwkjdAZ9HDHTq9Flhb3TwpEs0rzyaP8cZV2aWlYB7EJxCEQ==\n-----END AGE ENCRYPTED FILE-----\n" + } + ], + "lastmodified": "2025-08-16T20:46:32Z", + "mac": "ENC[AES256_GCM,data:bp1//R5ijxeObUOUgDIKdAHOM5yEPYel7DxrakwVnM/CxNpDO8MWD5uqRwUIPReMl0xIYhYip1OVWM7iAX8uLeogG/08P4oyizY1CYUNSNjpVWQZ3MC4zPJt/Mz/T0kBzCTM6DXj7XuLmpJ80kX+pCjLqz8ekkXs22gCxK5uwBM=,iv:wmet5FXe5uCQE9SKGPqVB7f3lobGbjiRJvUa3B839nw=,tag:s1492IWBD/2puLQt5IW/Iw==,type:str]", + "unencrypted_suffix": "_unencrypted", + "version": "3.10.2" + } +}