diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..82e0cdf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/result \ No newline at end of file diff --git a/README.md b/README.md index 7f509e5..928a5b4 100644 --- a/README.md +++ b/README.md @@ -1,66 +1,76 @@ -# Nixos Configuration +# NixOS configuration ## Overview -This documentation provides an overview of the NixOS configuration setup, including flake configuration, system configuration, user configuration, and Home Manager integration. +This repository contains a flake-based NixOS setup with integrated Home Manager. It defines multiple hosts and composes user programs and development tooling via reusable Home Manager modules. -## `flake.nix` +## Repository layout -### Description -The `flake.nix` file serves as the main entry point for the NixOS configuration flake. +- `flake.nix`: Flake entrypoint. Declares inputs like `nixpkgs`, `home-manager`, `nixos-hardware`, `nix-topology`, `spicetify-nix`, `zen-browser`, and wires outputs. +- `hosts/` + - `shadow/` + - `configuration.nix`: System configuration for host `shadow` (imports Home Manager). + - `hardware-configuration.nix`: Auto-generated by `nixos-generate-config`. + - `home.nix`: User-specific Home Manager configuration for `danny` on `shadow`. +- `modules/home-manager/` + - `development/` + - `default.nix`: Aggregates development modules. + - `ides.nix`: IDE packages (e.g., `neovim`, `code-cursor-fhs`). + - `tools.nix`: CLI/dev tools configuration. + - `zeditor.nix`: Additional editor-related config. + - `programs/` + - `default.nix`: Aggregates program modules. + - `misc/`: Assorted program configs (e.g., `bat.nix`, `git.nix`, `kitty.nix`, `lf.nix`, `nushell.nix`, `obsidian.nix`, `spotify.nix`). + - `mpv/`: MPV player configuration. + - `zathura/`: Zathura PDF viewer configuration. +- `topology.nix`: Network/service topology using `nix-topology` overlay. -### Inputs -- `nixpkgs`: Nixpkgs repository for NixOS unstable. -- `home-manager`: Integration of Home Manager for user-specific configurations. -- `hyprland`: Package necessary for the Window Manager configuration. +## Flake outputs -### Outputs -- `nixosConfigurations`: Defines system configurations. +- `nixosConfigurations.shadow`: Main laptop configuration (ThinkPad T490 hardware module). +- `nixosConfigurations.reaper`: PC configuration. +- `topology.x86_64-linux`: Topology output generated from `topology.nix` and hosts. -## `configuration.nix` (hosts/shadow) +## Quickstart -### System Configuration -- Bootloader, Filesystems, Networking, Time Zone, Internationalization, Services, Programs, Security, Fonts, User Account. +1. Clone your repo and enter it: -### Home Manager Integration -- Manages user-specific configurations. + ```bash + git clone + cd shadow + ``` -## `home.nix` (hosts/shadow) +2. Build and switch for a host (example: `shadow`): -### User Configuration -- Sets username, home directory, and additional packages. -- Defines session variables and enables Home Manager. + ```bash + sudo nixos-rebuild switch --flake .#shadow + ``` -## `hardware-configuration.nix` +3. For another host (example: `reaper`): -- Automatically generated file containing hardware configuration. + ```bash + sudo nixos-rebuild switch --flake .#reaper + ``` -## Home Manager Modules +Home Manager is integrated via `home-manager.nixosModules.default`, so user configuration under `hosts//home.nix` is applied as part of the system rebuild. -- `development/default.nix`: IDEs and development tools. -- `development/ides.nix`: IDE configurations. -- `development/tools.nix`: Development tools configurations. -- `programs/default.nix`: Miscellaneous programs. -- `programs/alacritty/default.nix`: Alacritty terminal configuration. -- `programs/misc/*.nix`: Miscellaneous program configurations. -- `programs/zsh/default.nix`: Zsh shell configuration. +## Common tasks -## Instructions for Replication +- Update inputs and rebuild: -1. **Clone the Repository**: Clone your NixOS configuration repository to your local machine. + ```bash + nix flake update + sudo nixos-rebuild switch --flake .#shadow + ``` - ```bash - git clone https://github.com/enchanted-coder/nix-config/ - ``` - -1. **Navigate to Configuration Directory**: Move to the directory containing your NixOS configuration files. +- Build without switching (dry-run build): - ```bash - cd /nixos-config/ - ``` + ```bash + nix build .#nixosConfigurations.shadow.config.system.build.toplevel + ``` -1. **Build and Activate Configuration**: Run the following command to build and activate your NixOS configuration. +## Notes - ```bash - nixos-rebuild switch --flake .#shadow - ``` +- Hardware-specific modules are included via `nixos-hardware` (e.g., `lenovo-thinkpad-t490`). +- `nix-topology` overlay is enabled in `flake.nix` and used by `topology.nix` for visualization/analysis. +- Some development modules (e.g., `neovim.nix`, `vscode.nix`) are present but may be commented out in `development/default.nix`; enable as needed. diff --git a/flake.lock b/flake.lock index 5e4168d..6a01417 100644 --- a/flake.lock +++ b/flake.lock @@ -1,34 +1,59 @@ { "nodes": { - "catppuccin-bat": { - "flake": false, + "dedsec-grub-theme": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1662253348, + "narHash": "sha256-Cq/espQSpscC89oIuJGE4IP2p6zYpuzp88L6M38uayA=", + "owner": "VandalByte", + "repo": "dedsec-grub-theme", + "rev": "8ccb1beb831f459987522d58263b076827624119", + "type": "gitlab" + }, + "original": { + "owner": "VandalByte", + "repo": "dedsec-grub-theme", + "type": "gitlab" + } + }, + "devshell": { + "inputs": { + "nixpkgs": [ + "nix-topology", + "nixpkgs" + ] + }, "locked": { - "lastModified": 1714038927, - "narHash": "sha256-Q5B4NDrfCIK3UAMs94vdXnR42k4AXCqZz6sRn8bzmf4=", - "owner": "catppuccin", - "repo": "bat", - "rev": "d714cc1d358ea51bfc02550dabab693f70cccea0", + "lastModified": 1728330715, + "narHash": "sha256-xRJ2nPOXb//u1jaBnDP56M7v5ldavjbtR6lfGqSvcKg=", + "owner": "numtide", + "repo": "devshell", + "rev": "dd6b80932022cea34a019e2bb32f6fa9e494dfef", "type": "github" }, "original": { - "owner": "catppuccin", - "repo": "bat", + "owner": "numtide", + "repo": "devshell", "type": "github" } }, - "catppuccin-starship": { + "flake-compat": { "flake": false, "locked": { - "lastModified": 1716565281, - "narHash": "sha256-KzXO4dqpufxTew064ZLp3zKIXBwbF8Bi+I0Xa63j/lI=", - "owner": "catppuccin", - "repo": "starship", - "rev": "ca2fb0600730fd3958a2cb4d4ca97c401877b365", + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", "type": "github" }, "original": { - "owner": "catppuccin", - "repo": "starship", + "owner": "edolstra", + "repo": "flake-compat", "type": "github" } }, @@ -37,11 +62,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1685518550, - "narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -50,6 +75,65 @@ "type": "github" } }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1726560853, + "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "gitfetch": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1761336845, + "narHash": "sha256-IntzX1xvMtlmZWsNugAsTRqQCYlF3cZikGYuXGZlB1Q=", + "owner": "Matars", + "repo": "gitfetch", + "rev": "4ad3acf372e1550518b68dc2838fd526157c2192", + "type": "github" + }, + "original": { + "owner": "Matars", + "repo": "gitfetch", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "nix-topology", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -57,11 +141,32 @@ ] }, "locked": { - "lastModified": 1717525419, - "narHash": "sha256-5z2422pzWnPXHgq2ms8lcCfttM0dz+hg+x1pCcNkAws=", + "lastModified": 1761395627, + "narHash": "sha256-9wQpgBRW2PzYw1wx+MgCt1IbPAYz93csApLMgSZOJCk=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "7296022150cd775917e4c831c393026eae7c2427", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "zen-browser", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1752603129, + "narHash": "sha256-S+wmHhwNQ5Ru689L2Gu8n1OD6s9eU9n9mD827JNR+kw=", "owner": "nix-community", "repo": "home-manager", - "rev": "a7117efb3725e6197dd95424136f79147aa35e5b", + "rev": "e8c19a3cec2814c754f031ab3ae7316b64da085b", "type": "github" }, "original": { @@ -70,13 +175,98 @@ "type": "github" } }, + "nix-topology": { + "inputs": { + "devshell": "devshell", + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs_2", + "pre-commit-hooks": "pre-commit-hooks" + }, + "locked": { + "lastModified": 1752093877, + "narHash": "sha256-P0TySh6sQl1EhfxjW9ZqGxEyUBSsEpdnchOe1QB0pLA=", + "owner": "oddlama", + "repo": "nix-topology", + "rev": "6a536c4b686ee4bcf07a7b0f8b823584560e2633", + "type": "github" + }, + "original": { + "owner": "oddlama", + "repo": "nix-topology", + "type": "github" + } + }, + "nixos-hardware": { + "locked": { + "lastModified": 1760958188, + "narHash": "sha256-2m1S4jl+GEDtlt2QqeHil8Ny456dcGSKJAM7q3j/BFU=", + "owner": "NixOS", + "repo": "nixos-hardware", + "rev": "d6645c340ef7d821602fd2cd199e8d1eed10afbc", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "master", + "repo": "nixos-hardware", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1717602782, - "narHash": "sha256-pL9jeus5QpX5R+9rsp3hhZ+uplVHscNJh8n8VpqscM0=", + "lastModified": 1761114652, + "narHash": "sha256-f/QCJM/YhrV/lavyCVz8iU3rlZun6d+dAiC3H+CDle4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "01f116e4df6a15f4ccdffb1bcd41096869fb385c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1730531603, + "narHash": "sha256-Dqg6si5CqIzm87sp57j5nTaeBbWhHFaVyG7V6L8k3lY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "7ffd9ae656aec493492b44d0ddfb28e79a1ea25d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1761114652, + "narHash": "sha256-f/QCJM/YhrV/lavyCVz8iU3rlZun6d+dAiC3H+CDle4=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "01f116e4df6a15f4ccdffb1bcd41096869fb385c", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1755615617, + "narHash": "sha256-HMwfAJBdrr8wXAkbGhtcby1zGFvs+StOp19xNsbqdOg=", "owner": "nixos", "repo": "nixpkgs", - "rev": "e8057b67ebf307f01bdcc8fba94d94f75039d1f6", + "rev": "20075955deac2583bb12f07151c2df830ef346b4", "type": "github" }, "original": { @@ -86,32 +276,62 @@ "type": "github" } }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat", + "gitignore": "gitignore", + "nixpkgs": [ + "nix-topology", + "nixpkgs" + ], + "nixpkgs-stable": [ + "nix-topology", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1730797577, + "narHash": "sha256-SrID5yVpyUfknUTGWgYkTyvdr9J1LxUym4om3SVGPkg=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "1864030ed24a2b8b4e4d386a5eeaf0c5369e50a9", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, "root": { "inputs": { - "catppuccin-bat": "catppuccin-bat", - "catppuccin-starship": "catppuccin-starship", + "dedsec-grub-theme": "dedsec-grub-theme", + "gitfetch": "gitfetch", "home-manager": "home-manager", - "nixpkgs": "nixpkgs", - "spicetify-nix": "spicetify-nix" + "nix-topology": "nix-topology", + "nixos-hardware": "nixos-hardware", + "nixpkgs": "nixpkgs_3", + "spicetify-nix": "spicetify-nix", + "zen-browser": "zen-browser" } }, "spicetify-nix": { "inputs": { - "flake-utils": "flake-utils", "nixpkgs": [ "nixpkgs" - ] + ], + "systems": "systems_3" }, "locked": { - "lastModified": 1704167711, - "narHash": "sha256-kFDq+kf/Di/P8bq5sUP8pVwRkrSVrABksBjMPmLic3s=", - "owner": "the-argus", + "lastModified": 1760848035, + "narHash": "sha256-H3MFH8+i4wFagkebtHPcosQdkmxQ4a6fl1lMbLb+RkA=", + "owner": "Gerg-L", "repo": "spicetify-nix", - "rev": "1325416f951d6a82cfddb1289864ad782e2b87c4", + "rev": "cde9f78ae705343a38f5d1d19ab34858b5e9caa9", "type": "github" }, "original": { - "owner": "the-argus", + "owner": "Gerg-L", "repo": "spicetify-nix", "type": "github" } @@ -130,6 +350,55 @@ "repo": "default", "type": "github" } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "zen-browser": { + "inputs": { + "home-manager": "home-manager_2", + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1761387499, + "narHash": "sha256-YLKFDesY2QA32Vakj1G2jyNuF5oAqQC783TZkMwC2y4=", + "owner": "0xc000022070", + "repo": "zen-browser-flake", + "rev": "4894effc217ff851b5f5caad300b016dff59029e", + "type": "github" + }, + "original": { + "owner": "0xc000022070", + "repo": "zen-browser-flake", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index eb0f05c..b3866cd 100644 --- a/flake.nix +++ b/flake.nix @@ -2,7 +2,6 @@ description = "My Flake"; inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; home-manager = { @@ -10,33 +9,85 @@ inputs.nixpkgs.follows = "nixpkgs"; }; - catppuccin-bat = { - url = "github:catppuccin/bat"; - flake = false; - }; + nixos-hardware.url = "github:NixOS/nixos-hardware/master"; - catppuccin-starship = { - url = "github:catppuccin/starship"; - flake = false; - }; - spicetify-nix = { - url = "github:the-argus/spicetify-nix"; + url = "github:Gerg-L/spicetify-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; + dedsec-grub-theme = { + url = "gitlab:VandalByte/dedsec-grub-theme"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + nix-topology.url = "github:oddlama/nix-topology"; + + zen-browser = { + url = "github:0xc000022070/zen-browser-flake"; + }; + + #cursor = { + # url = "github:omarcresp/cursor-flake/main"; + #}; -}; + gitfetch = { + url = "github:Matars/gitfetch"; + }; + + }; + + outputs = { self, nixpkgs, nixos-hardware, nix-topology, zen-browser, ... } @ inputs: + let + host = "shadow"; + host2 = "reaper"; + username = "danny"; + system = "x86_64-linux"; # Define the system architecture here + # Define pkgs with the necessary overlays + pkgs = import nixpkgs { + inherit system; + overlays = [ nix-topology.overlays.default ]; + }; - outputs = { self, nixpkgs, ... }@inputs: { - nixosConfigurations = { - shadow = nixpkgs.lib.nixosSystem { - specialArgs = {inherit inputs;}; + in + { + + nixosConfigurations = { + "${host}" = nixpkgs.lib.nixosSystem { + specialArgs = { + inherit inputs; + inherit username; + inherit host; + }; + modules = [ + ./hosts/${host}/configuration.nix + inputs.home-manager.nixosModules.default + inputs.dedsec-grub-theme.nixosModule + inputs.nixos-hardware.nixosModules.lenovo-thinkpad-t490 + inputs.nix-topology.nixosModules.default # Add the nix-topology NixOS module here + ]; + }; + "${host2}" = nixpkgs.lib.nixosSystem { + specialArgs = { + inherit inputs; + inherit username; + inherit host2; + }; + modules = [ + ./hosts/${host2}/configuration.nix + inputs.home-manager.nixosModules.default + inputs.dedsec-grub-theme.nixosModule + ]; + }; + }; + + # Define topology output for the system + topology.x86_64-linux = import nix-topology { + inherit pkgs; # Make sure pkgs includes the nix-topology overlay modules = [ - ./hosts/shadow/configuration.nix - inputs.home-manager.nixosModules.default + ./topology.nix # Define your custom global topology configuration + { nixosConfigurations = self.nixosConfigurations; } # Use existing NixOS configurations ]; }; }; - }; } diff --git a/hosts/shadow/configuration.nix b/hosts/shadow/configuration.nix index 3ee0a43..77e53f9 100644 --- a/hosts/shadow/configuration.nix +++ b/hosts/shadow/configuration.nix @@ -1,89 +1,65 @@ -{ config, pkgs, inputs, ... }: - -{ - imports = - [ # Include the results of the hardware scan. - ./hardware-configuration.nix - ]; +{ config +, pkgs +, inputs +, ... +}: { + imports = [ + # Include the results of the hardware scan. + ./hardware-configuration.nix + ]; # Enable Experimental Features and Package Management nix = { + extraOptions = '' + trusted-users = root danny + ''; settings = { - experimental-features = ["nix-command" "flakes"]; + experimental-features = [ "nix-command" "flakes" ]; auto-optimise-store = true; }; gc = { automatic = true; dates = "weekly"; - options = "--delete-older-than 7d"; - }; - }; - - # Systemd stuff - systemd = { - user.services.polkit-gnome-authentication-agent-1 = { - description = "polkit-gnome-authentication-agent-1"; - wantedBy = [ "graphical-session.target" ]; - wants = [ "grpahical-session.target" ]; - after = [ "graphical-session.target" ]; - serviceConfig = { - Type = "simple"; - ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"; - Restart = "on-failure"; - RestartSec = 1; - TimeoutStopSec = 10; - }; + options = "--delete-older-than 10d"; }; }; - # Bootloader and Filesystems + # Bootloader and Filesystems boot = { + extraModulePackages = with config.boot.kernelPackages; [ + v4l2loopback + ]; + extraModprobeConfig = '' + options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1 + ''; + # Kernel supportedFilesystems = [ "ntfs" "exfat" "mtpfs" ]; loader = { - timeout = 2; + timeout = 3; efi = { canTouchEfiVariables = true; - efiSysMountPoint = "/boot"; + efiSysMountPoint = "/boot/efi"; }; + # systemd-boot.enable = true; grub = { + dedsec-theme = { + enable = true; + style = "compact"; + icon = "color"; + resolution = "1080p"; + }; enable = true; devices = [ "nodev" ]; efiSupport = true; useOSProber = true; extraEntries = '' - menuentry "Reboot" { - reboot - } - menuentry "Poweroff" { - halt - } -''; - }; - }; - initrd.systemd.enable = true; - - }; -/* - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - boot.loader.timeout = 2; - boot.initrd.enable = true; - boot.initrd.systemd.enable = true; - boot.consoleLogLevel = 3; - boot.plymouth = { - enable = true; - font = "${pkgs.jetbrains-mono}/share/fonts/truetype/JetBrainsMono-Regular.ttf"; - themePackages = [ pkgs.catppuccin-plymouth ]; - theme = "catppuccin-macchiato"; - }; */ - - # Enable Display Manager - services.greetd = { - enable = true; - settings = { - default_session = { - command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --time-format '%I:%M %p | %a • %h | %F' --cmd Hyprland"; - user = "greeter"; + menuentry "Reboot" { + reboot + } + menuentry "Poweroff" { + halt + } + ''; }; }; }; @@ -92,7 +68,23 @@ networking = { hostName = "shadow"; networkmanager.enable = true; - # firewall.allowedTCPPorts = [ 80 443 ]; + firewall = rec { + enable = false; + allowedTCPPorts = [ 3074 5223 8080 ]; + allowedTCPPortRanges = [ + { + from = 1714; + to = 1764; + } # KDE Connect + ]; + allowedUDPPorts = [ 88 3074 3658 ]; + allowedUDPPortRanges = [ + { + from = 1714; + to = 1764; + } # KDE Connect + ]; + }; }; # Set your time zone. @@ -107,12 +99,12 @@ # Services services = { - # Desktop Environment xserver = { enable = true; - # displayManager.sddm.enable = true; + videoDrivers = [ "modesetting" "fbdev" ]; }; - # desktopManager.plasma6.enable = true; + displayManager.ly.enable = true; + desktopManager.plasma6.enable = true; # Sound with pipewire pipewire = { @@ -124,41 +116,52 @@ }; }; - # Printing - printing.enable = true; + # bluetooth + # blueman.enable = true; - # File Management - gvfs.enable = true; - tumbler.enable = true; + # Printing + # printing.enable = true; # SSD fstrim.enable = true; # OpenSSH daemon # openssh.enable = true; - - tlp.enable = true; - }; - # Enable Window Manager - programs = { - hyprland = { - enable = true; - xwayland.enable = true; - }; - }; + environment.plasma6.excludePackages = with pkgs.kdePackages; [ + plasma-browser-integration + konsole + oxygen + kdepim-runtime + ]; # Security security = { rtkit.enable = true; - polkit.enable = true; + polkit = { + enable = true; + }; }; - - # OpenGL - hardware.opengl = { - enable = true; - driSupport32Bit = true; + + hardware = { + # OpenGL + graphics = { + enable = true; + enable32Bit = true; + }; + + # Bluetooth + bluetooth = { + enable = false; + powerOnBoot = false; + settings = { + General = { + Enable = "Source,Sink,Media,Socket"; + Experimental = false; + }; + }; + }; }; # Fonts @@ -170,7 +173,8 @@ }; }; packages = with pkgs; [ - (nerdfonts.override { fonts = [ "Meslo" "JetBrainsMono" "Agave" ]; }) + nerd-fonts.agave + nerd-fonts.jetbrains-mono font-awesome powerline-fonts powerline-symbols @@ -178,20 +182,34 @@ }; # User account - users.users.dd0n3 = { + users.users.danny = { isNormalUser = true; - description = "dd0n3"; - extraGroups = [ "networkmanager" "wheel" "disk" "power" "video" ]; + description = "danny"; + extraGroups = [ "adb" "docker" "libvirtd" "kvm" "networkmanager" "wheel" "disk" "power" "video" ]; packages = with pkgs; [ - teams-for-linux + devenv + tree ]; - shell = pkgs.zsh; }; + users.groups.libvirtd.members = [ "danny" ]; + + virtualisation = { + docker.rootless = { + enable = true; + setSocketVariable = true; + }; + libvirtd.enable = true; + kvmgt.enable = true; + spiceUSBRedirection.enable = true; + }; + + programs.virt-manager.enable = true; + home-manager = { extraSpecialArgs = { inherit inputs; }; users = { - "dd0n3" = import ./home.nix; + "danny" = import ./home.nix; }; }; @@ -202,27 +220,13 @@ allowInsecure = true; allowUnsupportedSystem = true; PermittedInsecurePackages = [ - ]; }; }; # Configure programs programs = { - # Shell - zsh.enable = true; - - # Thunar - thunar = { - enable = true; - plugins = with pkgs.xfce; [ - thunar-archive-plugin - thunar-volman - ]; - }; - - # KDE Connect - # kdeconnect.enable = true; + adb.enable = true; # Programs that need SUID wrappers mtr.enable = true; @@ -230,31 +234,33 @@ enable = true; enableSSHSupport = true; }; + }; - + # List packages installed in system profile. To search, run: # $ nix search wget - environment.systemPackages = with pkgs; [ - vim - wget - cmake - greetd.tuigreet - ]; - - environment.sessionVariables.NIXOS_OZONE_WL = "1"; - environment.sessionVariables.WLR_NO_HARDWARE_CURSORS = "1"; + environment = { + sessionVariables = { + #NIXOS_OZONE_WL = "1"; + }; + systemPackages = with pkgs; [ + vim + wget + cmake + ]; + }; - # xdg xdg.portal = { enable = true; xdgOpenUsePortal = true; extraPortals = with pkgs; [ - xdg-desktop-portal-hyprland ]; - # wlr.enable = true; }; + #environment.sessionVariables.NIXOS_OZONE_WL = "1"; + #environment.sessionVariables.WLR_NO_HARDWARE_CURSORS = "1"; + # Open ports in the firewall. # networking.firewall.allowedTCPPorts = [ ... ]; # networking.firewall.allowedUDPPorts = [ ... ]; @@ -267,6 +273,5 @@ # 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 = "24.05"; # Did you read the comment? - + system.stateVersion = "24.11"; # Did you read the comment? } diff --git a/hosts/shadow/hardware-configuration.nix b/hosts/shadow/hardware-configuration.nix index 2156238..a8e239f 100644 --- a/hosts/shadow/hardware-configuration.nix +++ b/hosts/shadow/hardware-configuration.nix @@ -14,17 +14,20 @@ boot.extraModulePackages = [ ]; fileSystems."/" = - { device = "/dev/disk/by-uuid/200ee2e5-8641-4137-a75b-7e4ef5d00269"; + { device = "/dev/disk/by-label/NIXROOT"; fsType = "ext4"; }; fileSystems."/boot" = - { device = "/dev/disk/by-uuid/11AE-33DC"; + { device = "/dev/disk/by-label/NIXBOOT"; fsType = "vfat"; options = [ "fmask=0022" "dmask=0022" ]; }; - swapDevices = [ ]; + swapDevices = [ { + device = "/.swapfile"; + size = 4*1024; + } ]; # 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 diff --git a/hosts/shadow/home.nix b/hosts/shadow/home.nix index ddff26a..8b61177 100644 --- a/hosts/shadow/home.nix +++ b/hosts/shadow/home.nix @@ -1,33 +1,35 @@ -{ config, pkgs, ... }: - +{ config, pkgs, system, inputs, ... }: +let + system = "x86_64-linux"; +in { - imports = [ ../../modules/home-manager/development ../../modules/home-manager/programs ]; - home.username = "dd0n3"; - home.homeDirectory = "/home/dd0n3"; - - home.stateVersion = "23.11"; - + home.username = "danny"; + home.homeDirectory = "/home/danny"; - home.packages = with pkgs; [ - - ]; + # You should not change this value, even if you update Home Manager. If you do + # want to update the value, then make sure to first check the Home Manager + # release notes. + home.stateVersion = "25.05"; # Please read the comment before changing. - nixpkgs.config.allowUnfree = true; - nixpkgs.config.permittedInsecurePackages = [ - + home.packages = [ + inputs.zen-browser.packages."${system}".beta + inputs.gitfetch.packages.${system}.default + #inputs.cursor.packages.${pkgs.system}.default ]; - home.file = { - - }; + # Home Manager is pretty good at managing dotfiles. The primary way to manage + # plain files is through 'home.file'. + home.file = { }; home.sessionVariables = { EDITOR = "vim"; + TERMINAL = "kitty"; + BROWSER = "zen"; }; # Let Home Manager install and manage itself. diff --git a/modules/home-manager/development/default.nix b/modules/home-manager/development/default.nix index 29eec49..1eda416 100644 --- a/modules/home-manager/development/default.nix +++ b/modules/home-manager/development/default.nix @@ -1,6 +1,9 @@ { imports = [ ./ides.nix + #./neovim.nix ./tools.nix + #./vscode.nix + ./zeditor.nix ]; } diff --git a/modules/home-manager/development/ides.nix b/modules/home-manager/development/ides.nix index 79ff8bc..53a6f4f 100644 --- a/modules/home-manager/development/ides.nix +++ b/modules/home-manager/development/ides.nix @@ -1,10 +1,7 @@ -{ pkgs, ... }: - -{ +{ pkgs, ... }: { home.packages = with pkgs; [ neovim - vscode - # jetbrains.idea-ultimate - + #android-studio + code-cursor-fhs ]; } diff --git a/modules/home-manager/development/neovim.nix b/modules/home-manager/development/neovim.nix new file mode 100644 index 0000000..a14d281 --- /dev/null +++ b/modules/home-manager/development/neovim.nix @@ -0,0 +1,25 @@ +{ inputs, config, pkgs, ... }: { + + imports = [ + inputs.nvchad4nix.homeManagerModule + ]; + + programs.nvchad = { + enable = true; + extraPackages = with pkgs; [ + nodePackages.bash-language-server + docker-compose-language-service + dockerfile-language-server-nodejs + emmet-language-server + nixd + (python3.withPackages(ps: with ps; [ + python-lsp-server + flake8 + ])) + ]; + + hm-activation = true; + backup = true; + + }; +} \ No newline at end of file diff --git a/modules/home-manager/development/tools.nix b/modules/home-manager/development/tools.nix index 43af34f..b100533 100644 --- a/modules/home-manager/development/tools.nix +++ b/modules/home-manager/development/tools.nix @@ -1,15 +1,12 @@ -{ pkgs, lib, ... }: - -{ +{ pkgs +, ... +}: { home.packages = with pkgs; [ - # php - # php83Packages.composer - nodePackages_latest.nodejs - (python312Full.withPackages(ps: with ps; [ pygobject3 gobject-introspection pyqt6-sip])) - # bun + bun gcc gnumake license-generator - + inetutils + ripgrep ]; } diff --git a/modules/home-manager/development/zeditor.nix b/modules/home-manager/development/zeditor.nix new file mode 100644 index 0000000..06bddde --- /dev/null +++ b/modules/home-manager/development/zeditor.nix @@ -0,0 +1,469 @@ +{ pkgs, lib, ... }: + +{ + # Install language servers and tools + home.packages = with pkgs; [ + # Nix + nil + + # JavaScript/TypeScript/Node + nodejs + nodePackages.typescript-language-server + nodePackages.vscode-langservers-extracted # HTML, CSS, JSON, ESLint + + # Go + gopls + + # PHP/Laravel + nodePackages.intelephense + php83Packages.php-cs-fixer + + # Python + pyright + + # Markdown + marksman + + # YAML + yaml-language-server + + # Docker + dockerfile-language-server + + # SQL + sqls + + # Kotlin + kotlin-language-server + + # TOML + taplo + + # Shell scripts + nodePackages.bash-language-server + + # Makefile + # Note: No dedicated LSP for Makefiles, but syntax highlighting works + + # Rust (optional) + rust-analyzer + rustfmt + + # Formatters + nixpkgs-fmt # Nix formatter + nodePackages.prettier # JS/TS/JSON/YAML/Markdown + black # Python formatter + gofumpt # Go formatter + ]; + + programs.zed-editor = { + enable = true; + + ## Auto-install extensions + extensions = [ + "nix" + "toml" + "html" + "dockerfile" + "env" + "sql" + "kotlin" + "php" + "prisma" + "make" + ]; + + ## Zed editor settings + userSettings = { + # Assistant configuration + assistant = { + enabled = true; + version = "2"; + default_model = { + provider = "zed.dev"; + model = "claude-sonnet-4"; + }; + }; + + # Completion settings (tone down auto-completion) + show_completions_on_input = true; # Still show completion menu + # But make it less aggressive: + completion_documentation_secondary_delay = 300; # Delay showing docs + + # If you want to disable LSP-based completions entirely (not recommended): + # use_language_server = false; + + # Node configuration + node = { + path = lib.getExe pkgs.nodejs; + npm_path = lib.getExe' pkgs.nodejs "npm"; + }; + + # General settings + hour_format = "hour24"; + auto_update = false; + vim_mode = false; + base_keymap = "VSCode"; + + # Autosave settings + autosave = "on_focus_change"; + autosave_delay = 1000; + + # Format on save + format_on_save = "on"; + + # Inline completion settings (reduce autocomplete aggressiveness) + show_inline_completions = false; # Disable inline completions entirely + + # Alternative: if you want some completions but less aggressive + # show_inline_completions = true; + # inline_completions = { + # disabled_globs = [ ".env" ]; + # }; + + # Theme + theme = { + mode = "system"; + light = "Gruvbox Light Hard"; + dark = "Gruvbox Dark Hard"; + }; + + # Display + show_whitespaces = "selection"; + ui_font_size = 16; + buffer_font_size = 14; + tab_size = 4; + soft_wrap = "editor_width"; + + # Terminal configuration + terminal = { + alternate_scroll = "off"; + blinking = "off"; + copy_on_select = false; + dock = "bottom"; + env = { + TERM = "alacritty"; + }; + font_family = "FiraCode Nerd Font"; + line_height = "comfortable"; + shell = "system"; + toolbar = { + title = true; + }; + working_directory = "current_project_directory"; + }; + + # LSP configuration + lsp = { + # Nix + nil = { + binary = { + path_lookup = true; + }; + }; + + # TypeScript/JavaScript + typescript-language-server = { + binary = { + path_lookup = true; + }; + }; + + # Go + gopls = { + binary = { + path_lookup = true; + }; + }; + + # PHP + intelephense = { + binary = { + path_lookup = true; + }; + }; + + # Python + pyright = { + binary = { + path_lookup = true; + }; + }; + + # Markdown + marksman = { + binary = { + path_lookup = true; + }; + }; + + # YAML + yaml-language-server = { + binary = { + path_lookup = true; + }; + }; + + # TOML + taplo = { + binary = { + path_lookup = true; + }; + }; + + # Docker + dockerfile-language-server = { + binary = { + path_lookup = true; + }; + }; + + # SQL + sqls = { + binary = { + path_lookup = true; + }; + }; + + # Kotlin + kotlin-language-server = { + binary = { + path_lookup = true; + }; + }; + + # Bash + bash-language-server = { + binary = { + path_lookup = true; + }; + }; + + # Rust + rust-analyzer = { + binary = { + path_lookup = true; + }; + }; + + # HTML/CSS/JSON (from vscode-langservers-extracted) + vscode-json-language-server = { + binary = { + path_lookup = true; + }; + }; + + vscode-css-language-server = { + binary = { + path_lookup = true; + }; + }; + + vscode-html-language-server = { + binary = { + path_lookup = true; + }; + }; + }; + + # Language-specific settings + languages = { + "Nix" = { + language_servers = [ "nil" ]; + tab_size = 2; + format_on_save = "on"; + formatter = { + external = { + command = "nixpkgs-fmt"; + }; + }; + }; + + "JavaScript" = { + language_servers = [ "typescript-language-server" ]; + tab_size = 2; + format_on_save = "on"; + formatter = { + external = { + command = "prettier"; + arguments = [ "--stdin-filepath" "{buffer_path}" ]; + }; + }; + }; + + "TypeScript" = { + language_servers = [ "typescript-language-server" ]; + tab_size = 2; + format_on_save = "on"; + formatter = { + external = { + command = "prettier"; + arguments = [ "--stdin-filepath" "{buffer_path}" ]; + }; + }; + }; + + "TSX" = { + language_servers = [ "typescript-language-server" ]; + tab_size = 2; + format_on_save = "on"; + formatter = { + external = { + command = "prettier"; + arguments = [ "--stdin-filepath" "{buffer_path}" ]; + }; + }; + }; + + "JSX" = { + language_servers = [ "typescript-language-server" ]; + tab_size = 2; + format_on_save = "on"; + formatter = { + external = { + command = "prettier"; + arguments = [ "--stdin-filepath" "{buffer_path}" ]; + }; + }; + }; + + "Go" = { + language_servers = [ "gopls" ]; + tab_size = 4; + format_on_save = "on"; + formatter = { + external = { + command = "gofumpt"; + }; + }; + }; + + "PHP" = { + language_servers = [ "intelephense" ]; + tab_size = 4; + format_on_save = "on"; + formatter = { + external = { + command = "php-cs-fixer"; + arguments = [ "fix" "--using-cache=no" "$FILENAME" ]; + }; + }; + }; + + "Python" = { + language_servers = [ "pyright" ]; + tab_size = 4; + format_on_save = "on"; + formatter = { + external = { + command = "black"; + arguments = [ "-" ]; + }; + }; + }; + + "Rust" = { + language_servers = [ "rust-analyzer" ]; + tab_size = 4; + format_on_save = "on"; + }; + + "Markdown" = { + language_servers = [ "marksman" ]; + tab_size = 2; + soft_wrap = "editor_width"; + }; + + "YAML" = { + language_servers = [ "yaml-language-server" ]; + tab_size = 2; + format_on_save = "on"; + formatter = { + external = { + command = "prettier"; + arguments = [ "--stdin-filepath" "{buffer_path}" ]; + }; + }; + }; + + "Dockerfile" = { + language_servers = [ "dockerfile-language-server" ]; + tab_size = 2; + }; + + "SQL" = { + language_servers = [ "sqls" ]; + tab_size = 2; + }; + + "Kotlin" = { + language_servers = [ "kotlin-language-server" ]; + tab_size = 4; + }; + + "HTML" = { + language_servers = [ "vscode-html-language-server" ]; + tab_size = 2; + format_on_save = "on"; + formatter = { + external = { + command = "prettier"; + arguments = [ "--stdin-filepath" "{buffer_path}" ]; + }; + }; + }; + + "CSS" = { + language_servers = [ "vscode-css-language-server" ]; + tab_size = 2; + format_on_save = "on"; + formatter = { + external = { + command = "prettier"; + arguments = [ "--stdin-filepath" "{buffer_path}" ]; + }; + }; + }; + + "JSON" = { + language_servers = [ "vscode-json-language-server" ]; + tab_size = 2; + format_on_save = "on"; + formatter = { + external = { + command = "prettier"; + arguments = [ "--stdin-filepath" "{buffer_path}" ]; + }; + }; + }; + + "Shell Script" = { + language_servers = [ "bash-language-server" ]; + tab_size = 2; + format_on_save = "on"; + }; + + "TOML" = { + language_servers = [ "taplo" ]; + tab_size = 2; + format_on_save = "on"; + }; + + "Makefile" = { + tab_size = 4; + hard_tabs = true; # Makefiles REQUIRE tabs, not spaces + }; + }; + + # Load direnv for per-project environments + load_direnv = "shell_hook"; + + # File associations + file_types = { + "Dockerfile" = [ "Dockerfile*" ]; + "ENV" = [ ".env" ".env.*" ]; + "Makefile" = [ "Makefile" "makefile" "*.mk" "GNUmakefile" ]; + }; + }; + }; +} diff --git a/modules/home-manager/programs/alactritty/default.nix b/modules/home-manager/programs/alactritty/default.nix deleted file mode 100644 index ede66e4..0000000 --- a/modules/home-manager/programs/alactritty/default.nix +++ /dev/null @@ -1,63 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - home.packages = lib.optionals config.programs.alacritty.enable [pkgs.nerdfonts]; - - programs.alacritty = { - enable = true; - - settings = { - - # Font settings - font = { - normal = { - family = "JetBrainsMono Nerd Font"; - style = "Regular"; - }; - bold = { - family = "JetBrainsMono Nerd Font"; - style = "Bold"; - }; - italic = { - family = "JetBrainsMono Nerd Font"; - style = "Italic"; - }; - bold_italic = { - family = "JetbrainsMono Nerd Font"; - style = "Bold Italic"; - }; - size = 11.5; - }; - - # Padding - window = { - padding = { - x = 12; - y = 12; - }; - }; - - # Colors - colors = { - primary = { - background = "#1d2021"; - foreground = "#ebdbb2"; - }; - }; - - # Cursor - cursor = { - style = { - shape = "Block"; - blinking = "Off"; - }; - vi_mode_style = "Block"; - unfocused_hollow = true; - thickness = 0.15; - }; - - # mouse.hidden_when_typing = false; - - }; - }; -} diff --git a/modules/home-manager/programs/default.nix b/modules/home-manager/programs/default.nix index 45baafb..ff5e1af 100644 --- a/modules/home-manager/programs/default.nix +++ b/modules/home-manager/programs/default.nix @@ -1,9 +1,8 @@ { imports = [ - ./alactritty - ./hyprland ./misc - ./waybar - ./wofi + ./mpv + ./zathura + ]; } diff --git a/modules/home-manager/programs/hyprland/config.nix b/modules/home-manager/programs/hyprland/config.nix deleted file mode 100644 index c35993e..0000000 --- a/modules/home-manager/programs/hyprland/config.nix +++ /dev/null @@ -1,225 +0,0 @@ -{ ... }: -{ - wayland.windowManager.hyprland = { - settings = { - - # autostart - exec-once = [ - "waybar &" - # "discord &" - "spotify &" - - ]; - - input = { - kb_layout = "us"; - follow_mouse = 1; - sensitivity = 0; - touchpad = { - natural_scroll = false; - }; - }; - - general = { - "$mainMod" = "SUPER"; - layout = "dwindle"; - gaps_in = 3; - gaps_out = 7; - border_size = 2; - "col.active_border" = "rgb(cc241d)"; - #"col.inactive_border" = "0x00000000"; - "col.inactive_border" = "rgb(1d2021)"; - - }; - - misc = { - disable_hyprland_logo = true; - disable_splash_rendering = true; - }; - - dwindle = { - pseudotile = "yes"; - preserve_split = "yes"; - }; - - master = { - new_is_master = true; - }; - - decoration = { - rounding = 9; - #active_opacity = 0.90; - #inactive_opacity = 0.90; - #fullscreen_opacity = 1.0; - - blur = { - enabled = true; - size = 4; - passes = 2; - brightness = 1; - contrast = 1.400; - ignore_opacity = true; - noise = 0.01170; - - new_optimizations = true; - xray = true; - }; - - drop_shadow = true; - - shadow_ignore_window = true; - shadow_offset = "0 2"; - shadow_range = 20; - shadow_render_power = 3; - "col.shadow" = "rgba(00000055)"; - }; - - animations = { - enabled = true; - - bezier = [ - "overshot, 0.7, 0.6, 0.1, 1.1" - ]; - - animation = [ - "windows, 1, 4, overshot, slide" - "border, 1, 14, default" - "fade, 1, 4, default" - "workspaces, 1, 4, overshot, slide" - ]; - }; - - bind = [ - # keybindings - "$mainMod, Return, exec, alacritty" - "ALT, Return, exec, alacritty --title float_alacritty" - "$mainMod, C, killactive," - "$mainMod, M, exit," - "$mainMod, V, togglefloating," - "$mainMod, F, exec, firefox" - "$mainMod, R, exec, pkill wofi || wofi --show drun" - "$mainMod SHIFT, D, exec, hyprctl dispatch exec '[workspace 4 silent] discord'" - "$mainMod SHIFT, S, exec, hyprctl dispatch exec '[workspace 5 silent] spotify'" - "$mainMod, E, exec, thunar" - - # switch focus - "$mainMod, left, movefocus, l" - "$mainMod, right, movefocus, r" - "$mainMod, up, movefocus, u" - "$mainMod, down, movefocus, d" - - # switch workspace - "$mainMod, 1, workspace, 1" - "$mainMod, 2, workspace, 2" - "$mainMod, 3, workspace, 3" - "$mainMod, 4, workspace, 4" - "$mainMod, 5, workspace, 5" - "$mainMod, 6, workspace, 6" - "$mainMod, 7, workspace, 7" - "$mainMod, 8, workspace, 8" - "$mainMod, 9, workspace, 9" - "$mainMod, 0, workspace, 10" - - # same as above, but switch to the workspace - "$mainMod SHIFT, 1, movetoworkspacesilent, 1" # movetoworkspacesilent - "$mainMod SHIFT, 2, movetoworkspacesilent, 2" - "$mainMod SHIFT, 3, movetoworkspacesilent, 3" - "$mainMod SHIFT, 4, movetoworkspacesilent, 4" - "$mainMod SHIFT, 5, movetoworkspacesilent, 5" - "$mainMod SHIFT, 6, movetoworkspacesilent, 6" - "$mainMod SHIFT, 7, movetoworkspacesilent, 7" - "$mainMod SHIFT, 8, movetoworkspacesilent, 8" - "$mainMod SHIFT, 9, movetoworkspacesilent, 9" - "$mainMod SHIFT, 0, movetoworkspacesilent, 10" - "$mainMod CTRL, c, movetoworkspace, empty" - - # window control - "$mainMod SHIFT, left, movewindow, l" - "$mainMod SHIFT, right, movewindow, r" - "$mainMod SHIFT, up, movewindow, u" - "$mainMod SHIFT, down, movewindow, d" - "$mainMod CTRL, left, resizeactive, -80 0" - "$mainMod CTRL, right, resizeactive, 80 0" - "$mainMod CTRL, up, resizeactive, 0 -80" - "$mainMod CTRL, down, resizeactive, 0 80" - "$mainMod ALT, left, moveactive, -80 0" - "$mainMod ALT, right, moveactive, 80 0" - "$mainMod ALT, up, moveactive, 0 -80" - "$mainMod ALT, down, moveactive, 0 80" - - # brightness controls - ",XF86MonBrightnessUp, exec, brightnessctl s 5%+" - ",XF86MonBrightnessDown, exec, brightnessctl s 5%-" - - # media and volume controls - ",XF86AudioRaiseVolume,exec, pamixer -i 2" - ",XF86AudioLowerVolume,exec, pamixer -d 2" - ",XF86AudioMute,exec, pamixer -t" - ",XF86AudioMicMute, exec, pamixer --default-source -t" - ",XF86AudioPlay,exec, playerctl play-pause" - ",XF86AudioNext,exec, playerctl next" - ",XF86AudioPrev,exec, playerctl previous" - ", XF86AudioStop, exec, playerctl stop" - "$mainMod, mouse_down, workspace, e-1" - "$mainMod, mouse_up, workspace, e+1" - ]; - - # mouse binding - bindm = [ - "$mainMod, mouse:272, movewindow" - "$mainMod, mouse:273, resizewindow" - ]; - - # windowrule - windowrule = [ - "float,title:^(float_kitty)$" - "center,title:^(float_kitty)$" - "size 950 600,title:^(float_kitty)$" - "workspace 4 silent, discord" - "workspace 5 silent, spotify" - "workspace 3 silent, Code" - "pin,wofi" - "float,wofi" - "noborder,wofi" - "float,title:^(Firefox — Sharing Indicator)$" - "move 0 0,title:^(Firefox — Sharing Indicator)$" - ]; - - # windowrulev2 - windowrulev2 = [ - "float, title:^(Picture-in-Picture)$" - "opacity 1.0 override 1.0 override, title:^(Picture-in-Picture)$" - "pin, title:^(Picture-in-Picture)$" - "opacity 1.0 override 1.0 override, title:^(.*imv.*)$" - "opacity 1.0 override 1.0 override, title:^(.*mpv.*)$" - "opacity 1.0 override 1.0 override, class:(Aseprite)" - "opacity 1.0 override 1.0 override, class:(Unity)" - "idleinhibit focus, class:^(mpv)$" - "idleinhibit fullscreen, class:^(firefox)$" - "float,class:^(pavucontrol)$" - "float,class:^(SoundWireServer)$" - "float,class:^(file_progress)$" - "float,class:^(confirm)$" - "float,class:^(dialog)$" - "float,class:^(download)$" - "float,class:^(notification)$" - "float,class:^(error)$" - "float,class:^(confirmreset)$" - "float,title:^(Open File)$" - "float,title:^(branchdialog)$" - "float,title:^(Confirm to replace files)$" - "float,title:^(File Operation Progress)$" - ]; - - }; - - extraConfig = " - monitor=eDP-1,highres,0x0,1 - monitor=HDMI-1,preferred,auto,1,mirror,eDP-1 - - xwayland { - force_zero_scaling = true - } - "; - }; -} diff --git a/modules/home-manager/programs/hyprland/default.nix b/modules/home-manager/programs/hyprland/default.nix deleted file mode 100644 index 23f7812..0000000 --- a/modules/home-manager/programs/hyprland/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ inputs, ... }: -{ - imports = [ (import ./hyprland.nix) ] - ++ [ (import ./config.nix) ] - ++ [ (import ./hyprpaper.nix) ]; -} diff --git a/modules/home-manager/programs/hyprland/hyprland.nix b/modules/home-manager/programs/hyprland/hyprland.nix deleted file mode 100644 index 8daecde..0000000 --- a/modules/home-manager/programs/hyprland/hyprland.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ inputs, pkgs, ...}: -{ - home.packages = with pkgs; [ - # swww - # hyprpicker - wofi - ]; - systemd.user.targets.hyprland-session.Unit.Wants = [ "xdg-desktop-autostart.target" ]; - wayland.windowManager.hyprland = { - enable = true; - xwayland = { - enable = true; - # hidpi = true; - }; - # enableNvidiaPatches = false; - systemd.enable = true; - }; -} diff --git a/modules/home-manager/programs/hyprland/hyprpaper.nix b/modules/home-manager/programs/hyprland/hyprpaper.nix deleted file mode 100644 index f62a330..0000000 --- a/modules/home-manager/programs/hyprland/hyprpaper.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ config, lib, pkgs, ... }: -{ - services.hyprpaper = { - enable = true; - settings = { - preload = [ - "~/pictures/gruv-material.png" - ]; - wallpaper = [ - "eDP-1,~/pictures/gruv-material.png" - ]; - }; - }; -} diff --git a/modules/home-manager/programs/misc/config.nu b/modules/home-manager/programs/misc/config.nu new file mode 100644 index 0000000..e69de29 diff --git a/modules/home-manager/programs/misc/default.nix b/modules/home-manager/programs/misc/default.nix index 1d4b5f1..0c3fe86 100644 --- a/modules/home-manager/programs/misc/default.nix +++ b/modules/home-manager/programs/misc/default.nix @@ -1,17 +1,13 @@ { imports = [ ./bat.nix - # Discord taken out until I find a nice gruvbox theme for it - #./discord.nix ./git.nix - ./gtk.nix ./kitty.nix ./lf.nix - ./mako.nix - ./mpv.nix ./others.nix - ./starship.nix + ./obsidian.nix + ./nushell.nix + ./obs-studio.nix ./spotify.nix - ./zsh.nix ]; } diff --git a/modules/home-manager/programs/misc/discord.nix b/modules/home-manager/programs/misc/discord.nix deleted file mode 100644 index 4b14d9e..0000000 --- a/modules/home-manager/programs/misc/discord.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ pkgs, ... }: -{ - home.packages = with pkgs; [ - (discord.override { - withVencord = true; - }) - ]; - xdg.configFile."Vencord/themes/custom.css".text = '' - /** - * @name Catppuccin Mocha - * @author winston#0001 - * @authorId 505490445468696576 - * @version 0.2.0 - * @description 🎮 Soothing pastel theme for Discord - * @website https://github.com/catppuccin/discord - * @invite r6Mdz5dpFc - * **/ - - @import url("https://catppuccin.github.io/discord/dist/catppuccin-mocha.theme.css"); - ''; -} diff --git a/modules/home-manager/programs/misc/git.nix b/modules/home-manager/programs/misc/git.nix index e56579a..5bca8f3 100644 --- a/modules/home-manager/programs/misc/git.nix +++ b/modules/home-manager/programs/misc/git.nix @@ -1,12 +1,12 @@ -{ pkgs, ... }: +{ pkgs, ... }: { programs.git = { enable = true; - - userName = "enchanted-coder"; - userEmail = "danieltogey@pm.me"; - - extraConfig = { + settings = { + user = { + name = "Daniel Kosgei"; + email = "dannykosgei@gmail.com"; + }; init.defaultBranch = "main"; credential.helper = "store"; }; diff --git a/modules/home-manager/programs/misc/gtk.nix b/modules/home-manager/programs/misc/gtk.nix deleted file mode 100644 index ee1f321..0000000 --- a/modules/home-manager/programs/misc/gtk.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ pkgs, ... }: -{ - fonts.fontconfig.enable = true; - home.packages = [ - pkgs.nerdfonts - (pkgs.nerdfonts.override { fonts = [ "JetBrainsMono" ]; }) - pkgs.twemoji-color-font - pkgs.noto-fonts-emoji - - ]; - - gtk = { - enable = true; - font = { - name = "JetBrainsMono Nerd Font"; - size = 11; - }; - - iconTheme = { - name = "Gruvbox Plus"; - package = pkgs.gruvbox-plus-icons; - }; - - theme = { - name = "Flat-Remix-GTK-Grey-Darkest"; - package = pkgs.flat-remix-gtk; - }; - - cursorTheme = { - name = "Bibata-Modern-Classic"; - package = pkgs.bibata-cursors; - size = 16; - }; - }; - - qt = { - enable = true; - platformTheme.name = "gtk"; - style = { - name = "breeze"; - }; - }; - - home.pointerCursor = { - name = "Bibata-Modern-Classic"; - package = pkgs.bibata-cursors; - size = 16; - }; -} diff --git a/modules/home-manager/programs/misc/kitty.nix b/modules/home-manager/programs/misc/kitty.nix index 6ba3d9d..6f106cb 100644 --- a/modules/home-manager/programs/misc/kitty.nix +++ b/modules/home-manager/programs/misc/kitty.nix @@ -1,23 +1,24 @@ -{ pkgs, ... }: -{ +{pkgs, ...}: { programs.kitty = { enable = true; - theme = "Catppuccin-Mocha"; - + themeFile = "GruvboxMaterialDarkMedium"; + font = { name = "JetBrainsMono Nerd Font"; - size = 12; + size = 10; }; settings = { confirm_os_window_close = 0; - background_opacity = "0.55"; + #dynamic_background_opacity = true; + #background_blur = 5; + #background_opacity = "0.5"; window_padding_width = 10; scrollback_lines = 10000; enable_audio_bell = false; mouse_hide_wait = 60; - + ## Tabs tab_title_template = "{index}"; active_tab_font_style = "normal"; @@ -30,7 +31,7 @@ inactive_tab_background = "#313244"; }; - keybindings = { + keybindings = { ## Tabs "alt+1" = "goto_tab 1"; "alt+2" = "goto_tab 2"; @@ -42,4 +43,4 @@ "ctrl+shift+right" = "no_op"; }; }; -} +} diff --git a/modules/home-manager/programs/misc/lf.nix b/modules/home-manager/programs/misc/lf.nix index 8b0e67e..991db4e 100644 --- a/modules/home-manager/programs/misc/lf.nix +++ b/modules/home-manager/programs/misc/lf.nix @@ -22,8 +22,8 @@ mkdir = '' ''${{ printf "Directory Name: " - read DIR - mkdir $DIR + read DIR + mkdir $DIR }} ''; }; @@ -47,29 +47,82 @@ V = ''''$${pkgs.bat}/bin/bat --paging=always --theme=gruvbox "$f"''; }; - extraConfig = - let - previewer = - pkgs.writeShellScriptBin "pv.sh" '' - file=$1 - w=$2 - h=$3 - x=$4 - y=$5 - - if [[ "$( ${pkgs.file}/bin/file -Lb --mime-type "$file")" =~ ^image ]]; then - ${pkgs.kitty}/bin/kitty +kitten icat --silent --stdin no --transfer-mode file --place "''${w}x''${h}@''${x}x''${y}" "$file" /dev/tty - exit 1 + extraConfig = + let + previewer = pkgs.writeShellScriptBin "pv.sh" '' + file=$1 + w=$2 + h=$3 + x=$4 + y=$5 + + mime_type=$( ${pkgs.file}/bin/file -Lb --mime-type "$file" ) + + # Image Preview + if [[ "$mime_type" =~ ^image ]]; then + ${pkgs.kitty}/bin/kitty +kitten icat --silent --stdin no --transfer-mode file --place "''${w}x''${h}@''${x}x''${y}" "$file" /dev/tty + exit 1 + fi + + # PDF Preview (using python312Packages.pdftotext) + if [[ "$mime_type" =~ ^application/pdf ]]; then + ${pkgs.python312Packages.pdftotext}/bin/pdftotext -m pdftotext "$file" - | ${pkgs.haskellPackages.pager}/bin/less -F -X + exit 1 + fi + + # Text File Preview (including Markdown, JavaScript, JSON, etc.) + if [[ "$mime_type" =~ ^text ]]; then + # If it's a markdown file, use `bat` with Markdown syntax highlighting + if [[ "$file" =~ \.md$ ]]; then + ${pkgs.bat}/bin/bat --style=plain --color=always "$file" + else + ${pkgs.pistol}/bin/pistol "$file" fi + exit 1 + fi + + # JavaScript (Preview as text) + if [[ "$mime_type" =~ ^application/javascript ]]; then + ${pkgs.bat}/bin/bat --style=plain --color=always "$file" + exit 1 + fi + + # TAR File Preview (extract and list the contents) + if [[ "$mime_type" =~ ^application/x-tar ]]; then + tar -tvf "$file" | ${pkgs.haskellPackages.pager}/bin/less -F -X + exit 1 + fi + + # JSON File Preview + if [[ "$mime_type" =~ ^application/json ]]; then + jq . "$file" | ${pkgs.haskellPackages.pager}/bin/less -F -X + exit 1 + fi + + # Video Preview (Using mpv) + if [[ "$mime_type" =~ ^video ]]; then + ${pkgs.mpv}/bin/mpv --fullscreen --no-border "$file" & + exit 1 + fi + + # Audio Preview (Using mpv) + if [[ "$mime_type" =~ ^audio ]]; then + ${pkgs.mpv}/bin/mpv --no-terminal --quiet --loop "$file" & + exit 1 + fi + + # Unsupported File Type + echo "Unsupported file type: $mime_type" + exit 1 +''; + - ${pkgs.pistol}/bin/pistol "file" - ''; cleaner = pkgs.writeShellScriptBin "clean.sh" '' - ${pkgs.kitty}/bin/kitty +kitten icat --clear --stdin no --silent --transfer-mode file < /dev/null > /dev/tty + ${pkgs.kitty}/bin/kitty +kitten icat --clear --stdin no --silent --transfer-mode file < /dev/null > /dev/tty ''; - in + in '' - set cleaner ${cleaner}/bin/clean.sh + set cleaner ${cleaner}/bin/clean.sh set previewer ${previewer}/bin/pv.sh ''; diff --git a/modules/home-manager/programs/misc/mako.nix b/modules/home-manager/programs/misc/mako.nix deleted file mode 100644 index 8d5a69d..0000000 --- a/modules/home-manager/programs/misc/mako.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ config, pkgs, ... }: -{ - services = { - mako = { - enable = true; - font = "JetBrainsMono Nerd Font 12"; - padding = "15"; - defaultTimeout = 5000; - borderSize = 2; - borderRadius = 5; - backgroundColor = "#1d2021"; - borderColor = "#cc241d"; - progressColor = "over #458588"; - textColor = "#ebdbb2"; - icons = true; - actions = true; - extraConfig = '' - text-alignment=center - [urgency=high] - border-color=#9d0006 - ''; - }; - }; -} diff --git a/modules/home-manager/programs/misc/mpv.nix b/modules/home-manager/programs/misc/mpv.nix deleted file mode 100644 index a0fe415..0000000 --- a/modules/home-manager/programs/misc/mpv.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ pkgs, lib, ... }: - -{ - programs.mpv = { - enable = true; - }; -} diff --git a/modules/home-manager/programs/misc/nushell.nix b/modules/home-manager/programs/misc/nushell.nix new file mode 100644 index 0000000..abc8fe2 --- /dev/null +++ b/modules/home-manager/programs/misc/nushell.nix @@ -0,0 +1,56 @@ +{ + lib, + inputs, + ... +}: { + programs = { + nushell = { enable = true; + # The config.nu can be anywhere you want if you like to edit your Nushell with Nu + configFile.source = ./config.nu; + # for editing directly to config.nu + extraConfig = '' + let carapace_completer = {|spans| + carapace $spans.0 nushell $spans | from json + } + $env.config = { + show_banner: false, + completions: { + case_sensitive: false # case-sensitive completions + quick: true # set to false to prevent auto-selecting completions + partial: true # set to false to prevent partial filling of the prompt + algorithm: "fuzzy" # prefix or fuzzy + external: { + # set to false to prevent nushell looking into $env.PATH to find more suggestions + enable: true + # set to lower can improve completion performance at the cost of omitting some options + max_results: 100 + completer: $carapace_completer # check 'carapace_completer' + } + } + } + $env.PATH = ($env.PATH | + split row (char esep) | + prepend /home/myuser/.apps | + append /usr/bin/env + ) + ''; + shellAliases = { + vi = "hx"; + vim = "hx"; + nano = "hx"; + }; + }; + carapace.enable = true; + carapace.enableNushellIntegration = true; + + starship = { enable = true; + settings = { + add_newline = true; + character = { + success_symbol = "[➜](bold green)"; + error_symbol = "[➜](bold red)"; + }; + }; + }; +}; +} diff --git a/modules/home-manager/programs/misc/obs-studio.nix b/modules/home-manager/programs/misc/obs-studio.nix new file mode 100644 index 0000000..edd2865 --- /dev/null +++ b/modules/home-manager/programs/misc/obs-studio.nix @@ -0,0 +1,11 @@ +{ config, pkgs, ... }: +{ + programs.obs-studio = { + enable = true; + plugins = with pkgs.obs-studio-plugins; [ + wlrobs + obs-backgroundremoval + obs-pipewire-audio-capture + ]; + }; +} diff --git a/modules/home-manager/programs/misc/obsidian.nix b/modules/home-manager/programs/misc/obsidian.nix new file mode 100644 index 0000000..49e8c4d --- /dev/null +++ b/modules/home-manager/programs/misc/obsidian.nix @@ -0,0 +1,39 @@ +{ pkgs, ... }: +let + gitSyncObsidian = pkgs.writeScriptBin "git-sync-obsidian" '' + #!/bin/sh + + VAULT_DIR="$HOME/second_brain" + + cd $VAULT_DIR || exit 1 + + git add . + + git commit -m "$(date '+%Y-%m-%d %H:%M:%S')" || exit 0 + + git pull --rebase origin main || exit 0 + + git push origin main + ''; +in +{ + home.packages = [ gitSyncObsidian ]; + + systemd.user.services.git-sync-obsidian = { + Unit = { + Description = "Sync Obsidian Vault with GitHub"; + Wants = "git-sync-obsidian.timer"; + }; + Service = { + ExecStart = "${gitSyncObsidian}/bin/git-sync-obsidian"; + Type = "simple"; + }; + }; + + systemd.user.timers.git-sync-obsidian = { + Unit.Description = "Run Git Sync for Obsidian Vault"; + Timer.OnCalendar = "*:0/15"; + Install.WantedBy = [ "timers.target" ]; + }; + +} diff --git a/modules/home-manager/programs/misc/others.nix b/modules/home-manager/programs/misc/others.nix index 1bdac96..d001726 100644 --- a/modules/home-manager/programs/misc/others.nix +++ b/modules/home-manager/programs/misc/others.nix @@ -1,25 +1,16 @@ -{ pkgs, lib, ... }: - { + pkgs, + lib, + ... +}: { home.packages = with pkgs; [ - hyprpaper - grim - rofi-wayland - brightnessctl - zathura htop - firefox qbittorrent - pavucontrol - pamixer - ripgrep - xdg-utils - neofetch - htop - unzip - chromium + vesktop + fastfetch + obsidian ]; - + nixpkgs = { config = { allowUnfree = true; diff --git a/modules/home-manager/programs/misc/spotify.nix b/modules/home-manager/programs/misc/spotify.nix index 1bb569f..25bc550 100644 --- a/modules/home-manager/programs/misc/spotify.nix +++ b/modules/home-manager/programs/misc/spotify.nix @@ -1,19 +1,25 @@ -{ pkgs, inputs, ... }: -let spicePkgs = inputs.spicetify-nix.packages.${pkgs.system}.default; -in { - imports = [ inputs.spicetify-nix.homeManagerModule ]; - programs.spicetify = { - enable = true; - theme = spicePkgs.themes.Onepunch; - enabledCustomApps = with spicePkgs.apps; [ lyrics-plus ]; - enabledExtensions = with spicePkgs.extensions; [ - hidePodcasts - bookmark - fullAppDisplay - adblock - keyboardShortcut - volumePercentage - autoSkip - ]; - }; +{ config, pkgs, inputs, ...}: +{ + imports = [ + inputs.spicetify-nix.homeManagerModules.default + ]; + + programs.spicetify = + let + spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system}; + in + { + enable = true; + enabledCustomApps = with spicePkgs.apps; [ + marketplace + lyricsPlus + ]; + enabledExtensions = with spicePkgs.extensions; [ + adblock + #hidePodcasts + shuffle + ]; + theme = spicePkgs.themes.onepunch; + + }; } diff --git a/modules/home-manager/programs/misc/starship.nix b/modules/home-manager/programs/misc/starship.nix deleted file mode 100644 index b407476..0000000 --- a/modules/home-manager/programs/misc/starship.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ lib, inputs, ... }: -{ - programs.starship = { - enable = true; - - enableBashIntegration = true; - enableZshIntegration = true; - enableNushellIntegration = true; - - settings = { - right_format = "$cmd_duration"; - - directory = { - format = "[ ](bold #98971a)[ $path ]($style)"; - style = "bold #689d6a"; - }; - - character = { - success_symbol = "[ ](bold #d65d0e)[ ➜](bold green)"; - error_symbol = "[ ](bold #89b4fa)[ ➜](bold red)"; - # error_symbol = "[ ](bold #89dceb)[ ✗](bold red)"; - }; - - cmd_duration = { - format = "[]($style)[[󰔚 ](bg:#282828 fg:#d4c097 bold)$duration](bg:#282828 fg:#BBC3DF)[ ]($style)"; - disabled = true; - style = "bg:none fg:#282828"; - }; - - directory.substitutions = { - "~" = "󰋞"; - "Documents" = "󰈙 "; - "Downloads" = " "; - "Music" = " "; - "Pictures" = " "; - }; - - - } // builtins.fromTOML (builtins.readFile "${inputs.catppuccin-starship}/palettes/mocha.toml"); - }; -} diff --git a/modules/home-manager/programs/misc/zsh.nix b/modules/home-manager/programs/misc/zsh.nix deleted file mode 100644 index a1e32d1..0000000 --- a/modules/home-manager/programs/misc/zsh.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ hostname, config, pkgs, ...}: -{ - programs.zsh = { - enable = true; - enableCompletion = true; - syntaxHighlighting.enable = true; - oh-my-zsh = { - enable = true; - plugins = [ "git" ]; - }; - initExtraFirst = '' - DISABLE_MAGIC_FUNCTIONS=true - export "MICRO_TRUECOLOR=1" - ''; - }; - -} diff --git a/modules/home-manager/programs/mpv/config/input.conf b/modules/home-manager/programs/mpv/config/input.conf new file mode 100644 index 0000000..ad366fc --- /dev/null +++ b/modules/home-manager/programs/mpv/config/input.conf @@ -0,0 +1 @@ +r cycle-values video-rotate 90 180 270 0 \ No newline at end of file diff --git a/modules/home-manager/programs/mpv/default.nix b/modules/home-manager/programs/mpv/default.nix new file mode 100644 index 0000000..744e095 --- /dev/null +++ b/modules/home-manager/programs/mpv/default.nix @@ -0,0 +1,6 @@ +{ lib, pkgs, user, ... }: + +{ + home.packages = [ pkgs.mpv ]; + home.file.".config/mpv/input.conf".source = ./config/input.conf; +} diff --git a/modules/home-manager/programs/waybar/default.nix b/modules/home-manager/programs/waybar/default.nix deleted file mode 100644 index 9b8b240..0000000 --- a/modules/home-manager/programs/waybar/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ ... }: -{ - imports = [ (import ./waybar.nix) ] - ++ [ (import ./settings.nix) ] - ++ [ (import ./style.nix) ]; -} diff --git a/modules/home-manager/programs/waybar/settings.nix b/modules/home-manager/programs/waybar/settings.nix deleted file mode 100644 index 57db3ff..0000000 --- a/modules/home-manager/programs/waybar/settings.nix +++ /dev/null @@ -1,164 +0,0 @@ -{ ... }: -{ - programs.waybar.settings.mainBar = { - position= "top"; - layer= "top"; - height= 35; - margin-top= 10; - margin-bottom= 0; - margin-left= 10; - margin-right= 10; - - modules-left= [ - "custom/icon" - "custom/separator" - "cpu" - "memory" - "temperature" - "custom/separator" - "custom/window-icon" - "hyprland/window" - "tray" - ]; - - modules-center= [ - "hyprland/workspaces" - ]; - - modules-right= [ - "network" - "backlight" - "pulseaudio" - "custom/right-arr" - "battery" - "clock" - ]; - - "hyprland/window" = { - format = "{}"; - # exec = "hyprctl activewindow | grep class | awk '{print $2}'"; - separate-outputs = true; - max-length = 35; - }; - - clock= { - calendar = { - format = { today = "{}"; }; - }; - format = " {:%H:%M}"; - tooltip= "true"; - tooltip-format= "{:%Y %B}\n{calendar}"; - format-alt= " {:%d/%m}"; - }; - - "hyprland/workspaces"= { - format = "{icon}"; - format-icons= { - "1"= " "; - "2"= " "; - "3"= " "; - "4"= " "; - "5"= " "; - "6"= " "; - urgent= ""; - default = ""; - sort-by-number= true; - }; - on-scroll-up = "hyprctl dispatch workspace e-1"; - on-scroll-down = "hyprctl dispatch workspace e+1"; - on-click = "activate"; - }; - - memory= { - format= " {}%"; - interval= 2; - }; - - cpu= { - format= " {usage}%"; - format-alt= " {avg_frequency} GHz"; - interval= 2; - }; - - network = { - format-wifi = " {essid}"; - format-ethernet = ""; - tooltip-format = "Connected to {essid} {ifname} via {gwaddr}"; - format-linked = "{ifname} (No IP)"; - format-disconnected = " "; - }; - - backlight = { - format = "{icon} {percent}%"; - format-icons = [ - "" - "" - "" - "" - "" - "" - "" - "" - "" - ]; - interval = 2; - }; - - "custom/right-arr" = { - format = "  "; - }; - - battery = { - format = "{icon} {capacity}%"; - format-alt = "{icon} {time}"; - format-charging = " {capacity}%"; - format-icons = [" " " " " " " "]; - - }; - - tray= { - icon-size= 20; - spacing= 8; - }; - - pulseaudio= { - format= "{icon} {volume} {format_source}"; - format-source = "{volume}%  "; - format-source-muted = "  "; - format-bluetooth = " ᛒ {volume} "; - format-bluetooth-muted = " "; - format-muted= " {format_source}"; - format-icons= { - default= ["" "" ""]; - }; - scroll-step= 5; - - }; - - temperature = { - critical-threshold = 40; - format = "{icon} {temperatureC}°C"; - format-critical = "{icon} {temperatureC}°C"; - format-icons = [ - "" - "" - "" - ]; - interval = 2; - }; - - "custom/icon"= { - format= ""; - - }; - - "custom/separtor" = { - format = " "; - }; - - "custom/window-icon" = { - # to be added - }; - - }; -} diff --git a/modules/home-manager/programs/waybar/style.nix b/modules/home-manager/programs/waybar/style.nix deleted file mode 100644 index 5d209d6..0000000 --- a/modules/home-manager/programs/waybar/style.nix +++ /dev/null @@ -1,179 +0,0 @@ -{ ... }: -let custom = { - font = "JetBrainsMono Nerd Font"; - font_size = "14px"; - font_weight = "bold"; - bg0_h = "#1d2021"; - bg0 = "#282828"; - fg1 = "#ebdbb2"; - lavender = "#83a598"; - mauve = "#b16286"; - peach = "#fb4934"; - red = "#cc241d"; - sapphire = "#076678"; - aqua = "#427b58"; - green = "#98971a"; - teal = "#458588"; - flamingo = "#d65d0e"; - opacity = "0.98"; -}; -in -{ - programs.waybar.style = '' - - * { - padding: 0; - margin: 0; - font-family: ${custom.font}; - font-size: ${custom.font_size}; - font-weight: ${custom.font_weight}; - } - - window#waybar { - background-color: rgba(0, 0, 0, 0); - } - - .modules-left { - background-color: ${custom.bg0_h}; - border-radius: 8px; - padding-right: 15px; - padding-left: 15px; - } - - .modules-center { - background-color: ${custom.bg0_h}; - border-radius: 8px; - padding-right: 10px; - padding-left: 10px; - } - - .modules-right { - background-color: ${custom.bg0_h}; - border-radius: 8px; - padding-right: 15px; - padding-left: 15px; - } - - #custom-icon { - font-size: 20px; - color: ${custom.flamingo}; - padding-right: 10px; - margin-right: 5px; - } - - #cpu, - #memory, - #temperature { - font-size: 14px; - background: ${custom.bg0}; - margin-top: 5px; - margin-bottom: 5px; - } - - #cpu { - color: #8ec07c; - padding: 0px 10px 0px 12px; - border-radius: 5px 0px 0px 5px; - } - - #memory { - color: ${custom.peach}; - padding: 0px 10px 0px 0px; - } - - #temperature { - color: ${custom.lavender}; - padding: 0px 12px 0px 0px; - border-radius: 0px 5px 5px 0px; - } - - #window { - margin-right: 10px; - margin-left: 10px; - color: ${custom.fg1}; - } - - #workspaces button:nth-child(1) label { - color: ${custom.peach}; - margin: 0px 8px; - } - - #workspaces button:nth-child(2) label { - color: ${custom.green}; - margin: 0px 8px; - } - - #workspaces button:nth-child(3) label { - color: ${custom.teal}; - margin: 0px 8px; - } - - #workspaces button:nth-child(4) label { - color: ${custom.mauve}; - margin: 0px 8px; - } - - #workspaces button:nth-child(5) label { - color: ${custom.aqua}; - margin: 0px 8px; - } - - #workspaces button:nth-child(6) label { - color: ${custom.peach}; - margin: 0px 8px; - } - - #battery { - color: ${custom.aqua}; - margin: 0px 10px 0px 0px; - } - - #pulseaudio, - #backlight { - font-size: 14px; - background: ${custom.bg0}; - margin-top: 5px; - margin-bottom: 5px; - color: #b57614; - padding: 0px 10px 0px 10px; - border-radius: 5px 0px 0px 5px; - } - - #pulseaudio { - color: ${custom.teal}; - padding: 0px 10px 0px 0px; - border-radius: 0px 5px 5px 0px; - } - - #custom-right-arr { - color: ${custom.flamingo}; - } - - #network { - color: ${custom.flamingo}; - margin-right: 10px; - } - - #custom-dot { - color: #6e738d; - padding-left: 10px; - padding-right: 10px; - } - - #custom-dot-alt { - color: #a5adcb; - padding-left: 10px; - padding-right: 10px; - } - - #clock { - padding-left: 10px; - color: ${custom.fg1}; - background-color: ${custom.bg0}; - padding-right: 10px; - margin-top: 5px; - margin-bottom: 5px; - border-radius: 5px; - } - ''; -} diff --git a/modules/home-manager/programs/waybar/waybar.nix b/modules/home-manager/programs/waybar/waybar.nix deleted file mode 100644 index c50e873..0000000 --- a/modules/home-manager/programs/waybar/waybar.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ pkgs, ... }: -{ - programs.waybar = { - enable = true; - }; - programs.waybar.package = pkgs.waybar.overrideAttrs (oa: { - mesonFlags = (oa.mesonFlags or [ ]) ++ [ "-Dexperimental=true" ]; - }); -} diff --git a/modules/home-manager/programs/wofi/config/config b/modules/home-manager/programs/wofi/config/config deleted file mode 100644 index 4506e27..0000000 --- a/modules/home-manager/programs/wofi/config/config +++ /dev/null @@ -1,15 +0,0 @@ -width=400 -height=350 -location=center -show=drun -prompt=Search... -filter_rate=100 -allow_markup=true -no_actions=true -halign=fill -orientation=vertical -content_halign=fill -insensitive=true -allow_images=true -image_size=40 -gtk_dark=true diff --git a/modules/home-manager/programs/wofi/config/style.css b/modules/home-manager/programs/wofi/config/style.css deleted file mode 100644 index 432bf98..0000000 --- a/modules/home-manager/programs/wofi/config/style.css +++ /dev/null @@ -1,95 +0,0 @@ -/* Mocha Mauve */ -@define-color accent #cc241d; -@define-color txt #ebdbb2; -@define-color bg #1d2021; -@define-color bg2 #282828; - - * { - font-family: 'JetBrains Mono Nerd Font', monospace; - font-size: 14px; - font-weight: bold; - } - - /* Window */ - window { - margin: 0px; - padding: 10px; - border: 3px solid @accent; - border-radius: 7px; - background-color: @bg; - animation: slideIn 0.5s ease-in-out both; - } - - /* Slide In */ - @keyframes slideIn { - 0% { - opacity: 0; - } - - 100% { - opacity: 1; - } - } - - /* Inner Box */ - #inner-box { - margin: 5px; - padding: 10px; - border: none; - background-color: @bg; - animation: fadeIn 0.5s ease-in-out both; - } - - /* Fade In */ - @keyframes fadeIn { - 0% { - opacity: 0; - } - - 100% { - opacity: 1; - } - } - - /* Outer Box */ - #outer-box { - margin: 5px; - padding: 10px; - border: none; - background-color: @bg; - } - - /* Scroll */ - #scroll { - margin: 0px; - padding: 10px; - border: none; - } - - /* Input */ - #input { - margin: 5px; - padding: 10px; - border: none; - color: @accent; - background-color: @bg2; - animation: fadeIn 0.5s ease-in-out both; - } - - /* Text */ - #text { - margin: 5px; - padding: 10px; - border: none; - color: @txt; - animation: fadeIn 0.5s ease-in-out both; - } - - /* Selected Entry */ - #entry:selected { - background-color: @accent; - } - - #entry:selected #text { - color: @bg2; - } diff --git a/modules/home-manager/programs/wofi/default.nix b/modules/home-manager/programs/wofi/default.nix deleted file mode 100644 index 54436c2..0000000 --- a/modules/home-manager/programs/wofi/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - imports = [ - ./wofi.nix - ]; -} diff --git a/modules/home-manager/programs/wofi/wofi.nix b/modules/home-manager/programs/wofi/wofi.nix deleted file mode 100644 index 8a341da..0000000 --- a/modules/home-manager/programs/wofi/wofi.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ ... }: -{ - # https://github.com/prtce/wofi - xdg.configFile."wofi".source = ./config; -} \ No newline at end of file diff --git a/modules/home-manager/programs/zathura/default.nix b/modules/home-manager/programs/zathura/default.nix new file mode 100644 index 0000000..9b777b3 --- /dev/null +++ b/modules/home-manager/programs/zathura/default.nix @@ -0,0 +1,6 @@ +{ lib, pkgs, user, ... }: + +{ + home.packages = [ pkgs.zathura ]; + home.file.".config/zathura/zathurarc".source = ./zathurarc; +} \ No newline at end of file diff --git a/modules/home-manager/programs/zathura/zathurarc b/modules/home-manager/programs/zathura/zathurarc new file mode 100644 index 0000000..37bf5d0 --- /dev/null +++ b/modules/home-manager/programs/zathura/zathurarc @@ -0,0 +1,49 @@ + +set font JetBrainsMono +set font 10 + +map D set "first-page-column 1:1" +map set "first-page-column 1:2" + +set selection-clipboard clipboard + +set notification-error-bg "#1d2021" # bg +set notification-error-fg "#fb4934" # bright:red +set notification-warning-bg "#1d2021" # bg +set notification-warning-fg "#fabd2f" # bright:yellow +set notification-bg "#1d2021" # bg +set notification-fg "#b8bb26" # bright:green + +set completion-bg "#1d2021" # bg2 +set completion-fg "#ebdbb2" # fg +set completion-group-bg "#3c3836" # bg1 +set completion-group-fg "#928374" # gray +set completion-highlight-bg "#83a598" # bright:blue +set completion-highlight-fg "#504945" # bg2 + +# Define the color in index mode +set index-bg "#1d2021" # bg2 +set index-fg "#ebdbb2" # fg +set index-active-bg "#83a598" # bright:blue +set index-active-fg "#1d2021" # bg2 + +set inputbar-bg "#1d2021" # bg +set inputbar-fg "#ebdbb2" # fg + +set statusbar-bg "#1d2021" # bg2 +set statusbar-fg "#ebdbb2" # fg + +set highlight-color "#fabd2f" # bright:yellow +set highlight-active-color "#fe8019" # bright:orange + +set default-bg "#1d2021" # bg +set default-fg "#ebdbb2" # fg +set render-loading true +set render-loading-bg "#1d2021" # bg +set render-loading-fg "#ebdbb2" # fg + +# Recolor book content's color +set recolor-lightcolor "#1d2021" # bg +set recolor-darkcolor "#ebdbb2" # fg +set recolor "true" +# set recolor-keephue true # keep original color \ No newline at end of file diff --git a/topology.nix b/topology.nix new file mode 100644 index 0000000..4953984 --- /dev/null +++ b/topology.nix @@ -0,0 +1,34 @@ +{ config, lib, pkgs, ... }: + +let + inherit (lib) mkConnection mkSwitch mkRouter mkInternet; +in +{ + # Host info for 'shadow' + nodes.shadow = { + name = "🖥️ shadow"; + hardware.info = "My thinkpad"; + interfaces = { + enp0s31f6 = { + addresses = [ "192.168.1.100/24" ]; + network = "lan"; + }; + wlp0s20f3 = { + addresses = [ "192.168.1.68/24" ]; + network = "wifi"; + }; + }; + }; + + + # Network configurations + networks.wifi = { + name = "Wi-Fi Network"; + cidrv4 = "192.168.1.68/24"; + }; + + networks.lan = { + name = "LAN Network"; + cidrv4 = "192.168.1.0/24"; + }; +}