diff --git a/flake.nix b/flake.nix index b37c184..03f7a5b 100644 --- a/flake.nix +++ b/flake.nix @@ -78,6 +78,17 @@ lib = nixpkgs.lib.extend customLib; libHm = home-manager.lib.extend customLib; + systems = [ + { + hostName = "desktop"; + system = "x86_64-linux"; + } + { + hostName = "thinkpad"; + system = "x86_64-linux"; + } + ]; + in { # @@ -89,51 +100,65 @@ # # ========= Host Configurations ========= # - nixosConfigurations.desktop = - let - hostName = "desktop"; - in - nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - specialArgs = { - inherit - outputs - inputs - common - theme - lib - hostName - ; - isDarwin = false; - }; - modules = [ - ./hosts/desktop - home-manager.nixosModules.home-manager - { - home-manager = { - # Backups conflicting files in case of error - backupFileExtension = "bkp"; - useGlobalPkgs = true; - useUserPackages = true; - extraSpecialArgs = { - inherit - inputs - common - theme - libHm - hostName - ; - }; - users.${common.username} = import ./hosts/${hostName}/home-manager; + nixosConfigurations = builtins.listToAttrs ( + builtins.map ( + { + hostName, + system, + user ? { + name = common.username; + password = "temp"; + }, + version ? common.version, + }: + { + name = hostName; + value = nixpkgs.lib.nixosSystem { + inherit system; + specialArgs = { + inherit + outputs + inputs + common + theme + lib + hostName + version + ; + isDarwin = false; }; - } - { - nixpkgs.overlays = with inputs; [ - hyprpanel.overlay + modules = [ + ./hosts/${hostName} + home-manager.nixosModules.home-manager + { + home-manager = { + # Backups conflicting files in case of error + backupFileExtension = "bkp"; + useGlobalPkgs = true; + useUserPackages = true; + extraSpecialArgs = { + inherit + inputs + common + theme + libHm + hostName + version + ; + }; + users.${user.name} = import ./hosts/${hostName}/home-manager; + }; + } + { + nixpkgs.overlays = with inputs; [ + hyprpanel.overlay + ]; + } ]; - } - ]; - }; + }; + } + ) systems + ); # # ========= Formatting ========= diff --git a/hosts/desktop/home-manager/default.nix b/hosts/desktop/home-manager/default.nix index db18a80..b555ebf 100644 --- a/hosts/desktop/home-manager/default.nix +++ b/hosts/desktop/home-manager/default.nix @@ -25,7 +25,6 @@ in ./media ./nextcloud.nix ./rofi - ./wlogout ./hyprland ./spicetify.nix ./yazi diff --git a/hosts/desktop/home-manager/hyprland/default.nix b/hosts/desktop/home-manager/hyprland/default.nix index 9969757..8763716 100644 --- a/hosts/desktop/home-manager/hyprland/default.nix +++ b/hosts/desktop/home-manager/hyprland/default.nix @@ -2,14 +2,12 @@ { imports = [ ./binds.nix - ./waybar ./hypridle ./hyprlock ./hyprpanel ./hyprpaper.nix ./hyprshot.nix ./settings.nix - ./swaync ]; wayland.windowManager.hyprland = { diff --git a/hosts/desktop/home-manager/hyprland/swaync/default.nix b/hosts/desktop/home-manager/hyprland/swaync/default.nix deleted file mode 100644 index 49986b8..0000000 --- a/hosts/desktop/home-manager/hyprland/swaync/default.nix +++ /dev/null @@ -1,461 +0,0 @@ -{ lib, theme, ... }: - -{ - services.swaync = { - enable = false; - style = lib.mkDefault '' - * { - all: unset; - font-size: 14px; - font-family: "${theme.nerdFont} Nerd Font", monospace; - transition: 200ms; - } - - trough highlight { - background: #${theme.textAlpha}; - } - - scale trough { - margin: 0 1rem; - background-color: #${theme.surface0Alpha}; - min-height: 8px; - min-width: 70px; - } - - slider { - background-color: #${theme.blueAlpha}; - } - - .floating-notifications.background .notification-row .notification-background { - box-shadow: - 0 0 8px 0 rgba(0, 0, 0, 0.8), - inset 0 0 0 1px #${theme.surface0Alpha}; - border-radius: 12.6px; - margin: 18px; - background-color: #${theme.baseAlpha}; - color: #${theme.textAlpha}; - padding: 0; - } - - .floating-notifications.background - .notification-row - .notification-background - .notification { - padding: 7px; - border-radius: 12.6px; - } - - .floating-notifications.background - .notification-row - .notification-background - .notification.critical { - box-shadow: inset 0 0 7px 0 #${theme.redAlpha}; - } - - .floating-notifications.background - .notification-row - .notification-background - .notification - .notification-content { - margin: 7px; - } - - .floating-notifications.background - .notification-row - .notification-background - .notification - .notification-content - .summary { - color: #${theme.textAlpha}; - } - - .floating-notifications.background - .notification-row - .notification-background - .notification - .notification-content - .time { - color: #${theme.subtext0Alpha}; - } - - .floating-notifications.background - .notification-row - .notification-background - .notification - .notification-content - .body { - color: #${theme.textAlpha}; - } - - .floating-notifications.background - .notification-row - .notification-background - .notification - > *:last-child - > * { - min-height: 3.4em; - } - - .floating-notifications.background - .notification-row - .notification-background - .notification - > *:last-child - > * - .notification-action { - border-radius: 7px; - color: #${theme.textAlpha}; - background-color: #${theme.surface0Alpha}; - box-shadow: inset 0 0 0 1px #${theme.surface1Alpha}; - margin: 7px; - } - - .floating-notifications.background - .notification-row - .notification-background - .notification - > *:last-child - > * - .notification-action:hover { - box-shadow: inset 0 0 0 1px #${theme.surface1Alpha}; - background-color: #${theme.surface0Alpha}; - color: #${theme.textAlpha}; - } - - .floating-notifications.background - .notification-row - .notification-background - .notification - > *:last-child - > * - .notification-action:active { - box-shadow: inset 0 0 0 1px #${theme.surface1Alpha}; - background-color: #${theme.sapphireAlpha}; - color: #${theme.textAlpha}; - } - - /* Close Button */ - .floating-notifications.background - .notification-row - .notification-background - .close-button { - margin: 7px; - padding: 2px; - border-radius: 6.3px; - color: #${theme.baseAlpha}; - background-color: #${theme.redAlpha}; - } - - .floating-notifications.background - .notification-row - .notification-background - .close-button:hover { - background-color: #${theme.maroonAlpha}; - color: #${theme.baseAlpha}; - } - - .floating-notifications.background - .notification-row - .notification-background - .close-button:active { - background-color: #${theme.redAlpha}; - color: #${theme.baseAlpha}; - } - - .control-center { - box-shadow: - 0 0 8px 0 rgba(0, 0, 0, 0.8), - inset 0 0 0 1px #${theme.surface0Alpha}; - border-radius: 12.6px; - margin: 18px; - background-color: #${theme.baseAlpha}; - color: #${theme.textAlpha}; - padding: 14px; - } - - .control-center .widget-title > label { - color: #${theme.textAlpha}; - font-size: 1.3em; - } - - .control-center .widget-title button { - border-radius: 7px; - color: #${theme.textAlpha}; - background-color: #${theme.surface0Alpha}; - box-shadow: inset 0 0 0 1px #${theme.surface1Alpha}; - padding: 8px; - } - - .control-center .widget-title button:hover { - box-shadow: inset 0 0 0 1px #${theme.surface1Alpha}; - background-color: #585b70; - color: #${theme.textAlpha}; - } - - .control-center .widget-title button:active { - box-shadow: inset 0 0 0 1px #${theme.surface1Alpha}; - background-color: #${theme.sapphireAlpha}; - color: #${theme.baseAlpha}; - } - - .control-center .notification-row .notification-background { - border-radius: 7px; - color: #${theme.textAlpha}; - background-color: #${theme.surface0Alpha}; - box-shadow: inset 0 0 0 1px #${theme.surface1Alpha}; - margin-top: 14px; - } - - .control-center .notification-row .notification-background .notification { - padding: 7px; - border-radius: 7px; - } - - .control-center - .notification-row - .notification-background - .notification.critical { - box-shadow: inset 0 0 7px 0 #${theme.redAlpha}; - } - - .control-center - .notification-row - .notification-background - .notification - .notification-content { - margin: 7px; - } - - .control-center - .notification-row - .notification-background - .notification - .notification-content - .summary { - color: #${theme.textAlpha}; - } - - .control-center - .notification-row - .notification-background - .notification - .notification-content - .time { - color: #a6adc8; - } - - .control-center - .notification-row - .notification-background - .notification - .notification-content - .body { - color: #${theme.textAlpha}; - } - - .control-center - .notification-row - .notification-background - .notification - > *:last-child - > * { - min-height: 3.4em; - } - - .control-center - .notification-row - .notification-background - .notification - > *:last-child - > * - .notification-action { - border-radius: 7px; - color: #${theme.textAlpha}; - background-color: #${theme.crustAlpha}; - box-shadow: inset 0 0 0 1px #${theme.surface1Alpha}; - margin: 7px; - } - - .control-center - .notification-row - .notification-background - .notification - > *:last-child - > * - .notification-action:hover { - box-shadow: inset 0 0 0 1px #${theme.surface1Alpha}; - background-color: #${theme.surface0Alpha}; - color: #${theme.textAlpha}; - } - - .control-center - .notification-row - .notification-background - .notification - > *:last-child - > * - .notification-action:active { - box-shadow: inset 0 0 0 1px #${theme.surface1Alpha}; - background-color: #${theme.sapphireAlpha}; - color: #${theme.textAlpha}; - } - - .control-center .notification-row .notification-background .close-button { - margin: 7px; - padding: 2px; - border-radius: 6.3px; - color: #${theme.baseAlpha}; - background-color: #${theme.maroonAlpha}; - } - - .close-button { - border-radius: 6.3px; - } - - .control-center .notification-row .notification-background .close-button:hover { - background-color: #${theme.redAlpha}; - color: #${theme.baseAlpha}; - } - - .control-center - .notification-row - .notification-background - .close-button:active { - background-color: #${theme.redAlpha}; - color: #${theme.baseAlpha}; - } - - .control-center .notification-row .notification-background:hover { - box-shadow: inset 0 0 0 1px #${theme.surface1Alpha}; - background-color: #${theme.overlay1Alpha}; - color: #${theme.textAlpha}; - } - - .control-center .notification-row .notification-background:active { - box-shadow: inset 0 0 0 1px #${theme.surface1Alpha}; - background-color: #${theme.sapphireAlpha}; - color: #${theme.textAlpha}; - } - - .notification.critical progress { - background-color: #${theme.redAlpha}; - } - - .notification.low progress, - .notification.normal progress { - background-color: #${theme.blueAlpha}; - } - - .control-center-dnd { - margin-top: 5px; - border-radius: 8px; - background: #${theme.surface0Alpha}; - border: 1px solid #${theme.surface1Alpha}; - box-shadow: none; - } - - .control-center-dnd:checked { - background: #${theme.surface0Alpha}; - } - - .control-center-dnd slider { - background: #${theme.surface1Alpha}; - border-radius: 8px; - } - - .widget-dnd { - margin: 0px; - font-size: 1.1rem; - } - - .widget-dnd > switch { - font-size: initial; - border-radius: 8px; - background: #${theme.surface0Alpha}; - border: 1px solid #${theme.surface1Alpha}; - box-shadow: none; - } - - .widget-dnd > switch:checked { - background: #${theme.surface0Alpha}; - } - - .widget-dnd > switch slider { - background: #${theme.surface1Alpha}; - border-radius: 8px; - border: 1px solid #${theme.overlay0Alpha}; - } - - .widget-mpris .widget-mpris-player { - background: #${theme.surface0Alpha}; - padding: 7px; - } - - .widget-mpris .widget-mpris-title { - font-size: 1.2rem; - } - - .widget-mpris .widget-mpris-subtitle { - font-size: 0.8rem; - } - - .widget-menubar > box > .menu-button-bar > button > label { - font-size: 3rem; - padding: 0.5rem 2rem; - } - - .widget-menubar > box > .menu-button-bar > :last-child { - color: #${theme.redAlpha}; - } - - .power-buttons button:hover, - .powermode-buttons button:hover, - .screenshot-buttons button:hover { - background: #${theme.surface0Alpha}; - } - - .control-center .widget-label > label { - color: #${theme.textAlpha}; - font-size: 2rem; - } - - .widget-buttons-grid { - padding-top: 1rem; - } - - .widget-buttons-grid > flowbox > flowboxchild > button label { - font-size: 2.5rem; - } - - .widget-volume { - padding-top: 1rem; - } - - .widget-volume label { - font-size: 1.5rem; - color: #${theme.sapphireAlpha}; - } - - .widget-volume trough highlight { - background: #${theme.sapphireAlpha}; - } - - .widget-backlight trough highlight { - background: #${theme.yellowAlpha}; - } - - .widget-backlight label { - font-size: 1.5rem; - color: #${theme.yellowAlpha}; - } - - .widget-backlight .KB { - padding-bottom: 1rem; - } - - .image { - padding-right: 0.5rem; - } - ''; - }; -} diff --git a/hosts/desktop/home-manager/hyprland/waybar/config/config.jsonc b/hosts/desktop/home-manager/hyprland/waybar/config/config.jsonc deleted file mode 100644 index 8c09f42..0000000 --- a/hosts/desktop/home-manager/hyprland/waybar/config/config.jsonc +++ /dev/null @@ -1,108 +0,0 @@ -{ - "layer": "top", - // Waybar at top layer - "position": "top", - // Waybar position (top|bottom|left|right) - // "width": 1280, // Waybar width - // Choose the order of the modules - "modules-left": ["hyprland/workspaces", "custom/music"], - "modules-center": ["hyprland/window"], - "modules-right": [ - "hyprland/language", - "wireplumber", - "backlight", - "clock", - "custom/notification", - "tray", - "custom/lock", - "custom/power" - ], - "hyprland/workspaces": { - "disable-scroll": false, - "sort-by-name": true, - "format": " {id} " - }, - "hyprland/window": { - "format": "{initialTitle}" - }, - "tray": { - "icon-size": 21, - "spacing": 10 - }, - // TODO better music module - "custom/music": { - "format": "󰓃 {}", - "escape": true, - "interval": 5, - "tooltip": false, - "exec": "playerctl metadata --format='{{ title }}'", - "on-click": "playerctl play-pause", - "max-length": 50 - }, - "clock": { - "timezone": "Europe/Oslo", - "tooltip-format": "{:%Y %B}\n{calendar}", - "format": " {:%H:%M  %d/%m}", - "calendar": { - "mode": "month", - "weeks-pos": "left", - "format": { - "months": "{}", - "days": "{}", - "weeks": "W{}", - "weekdays": "{}", - "today": "{}" - } - } - }, - "backlight": { - "device": "intel_backlight", - "format": "{icon}", - "format-icons": ["", "", "", "", "", "", "", "", ""] - }, - "wireplumber": { - // "scroll-step": 1, // %, can be a float - "format": "{icon} {volume}%", - "format-muted": " ", - "format-icons": { - "default": ["", " ", " "] - }, - "on-click": "pavucontrol" - }, - "hyprland/language": { - "format-en": "EN", - "format-no": "NO", - "keyboard-name": "logitech-logitech-g710-keyboard", - "on-click": "hyprctl switchxkblayout logitech-logitech-g710-keyboard next" - }, - "custom/lock": { - "tooltip": false, - "on-click": "sh -c '(sleep 0.5s; hyprlock)'", - "format": "" - }, - "custom/power": { - "tooltip": false, - "on-click": "wlogout &", - "format": " " - }, - "custom/notification": { - "tooltip": false, - "format": "{icon}", - "format-icons": { - "notification": "", - "none": "", - "dnd-notification": "", - "dnd-none": "", - "inhibited-notification": "", - "inhibited-none": "", - "dnd-inhibited-notification": "", - "dnd-inhibited-none": "" - }, - "return-type": "json", - "exec-if": "which swaync-client", - "exec": "swaync-client -swb", - "on-click": "swaync-client -t -sw", - "on-click-right": "swaync-client -d -sw", - "escape": true - } -} diff --git a/hosts/desktop/home-manager/hyprland/waybar/config/mocha.css b/hosts/desktop/home-manager/hyprland/waybar/config/mocha.css deleted file mode 100644 index 98e218a..0000000 --- a/hosts/desktop/home-manager/hyprland/waybar/config/mocha.css +++ /dev/null @@ -1,37 +0,0 @@ -/* -* -* Catppuccin Mocha palette -* Maintainer: rubyowo -* -*/ - -@define-color base #1e1e2e; -@define-color mantle #181825; -@define-color crust #11111b; - -@define-color text #cdd6f4; -@define-color subtext0 #a6adc8; -@define-color subtext1 #bac2de; - -@define-color surface0 #313244; -@define-color surface1 #45475a; -@define-color surface2 #585b70; - -@define-color overlay0 #6c7086; -@define-color overlay1 #7f849c; -@define-color overlay2 #9399b2; - -@define-color blue #89b4fa; -@define-color lavender #b4befe; -@define-color sapphire #74c7ec; -@define-color sky #89dceb; -@define-color teal #94e2d5; -@define-color green #a6e3a1; -@define-color yellow #f9e2af; -@define-color peach #fab387; -@define-color maroon #eba0ac; -@define-color red #f38ba8; -@define-color mauve #cba6f7; -@define-color pink #f5c2e7; -@define-color flamingo #f2cdcd; -@define-color rosewater #f5e0dc; diff --git a/hosts/desktop/home-manager/hyprland/waybar/config/style.css b/hosts/desktop/home-manager/hyprland/waybar/config/style.css deleted file mode 100644 index 77d2de3..0000000 --- a/hosts/desktop/home-manager/hyprland/waybar/config/style.css +++ /dev/null @@ -1,104 +0,0 @@ -@import "mocha.css"; - -* { - font-family: JetBrainsMono Nerd Font; - font-size: 15px; - min-height: 0; -} - -#waybar { - background: transparent; - color: @text; - margin: 5px 5px; -} - -#workspaces { - border-radius: 1rem; - background-color: @surface0; - margin: 5px 5px 5px 1rem; -} - -#workspaces button { - color: @lavender; - border-radius: 1rem; - padding: 0.4rem; -} - -#workspaces button.active { - color: @sky; - border-radius: 1rem; -} - -#workspaces button:hover { - color: @sapphire; - border-radius: 1rem; -} - -#language, -#window, -#custom-notification, -#custom-music, -#tray, -#backlight, -#clock, -#wireplumber, -#custom-lock, -#custom-power { - background-color: @surface0; - padding: 0.5rem 1rem; - margin: 5px 0; -} - -#clock { - color: @blue; -} - -#backlight { - color: @yellow; -} - -#backlight { - border-radius: 0; -} - -#language { - color: @red; - border-radius: 1rem 0 0 1rem; - margin-left: 1rem; -} - -#wireplumber { - color: @maroon; -} - -#custom-music { - color: @mauve; - border-radius: 1rem; -} - -#window { - color: @mauve; - border-radius: 1rem; -} - -#custom-lock { - border-radius: 1rem 0 0 1rem; - color: @lavender; -} - -#custom-power { - margin-right: 1rem; - border-radius: 0 1rem 1rem 0; - color: @red; -} - -#custom-notification { - margin-right: 1rem; - border-radius: 0 1rem 1rem 0; - color: @sapphire; -} - -#tray { - margin-right: 1rem; - border-radius: 1rem; -} diff --git a/hosts/desktop/home-manager/hyprland/waybar/default.nix b/hosts/desktop/home-manager/hyprland/waybar/default.nix deleted file mode 100644 index 23c50f4..0000000 --- a/hosts/desktop/home-manager/hyprland/waybar/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - home.file.".config/waybar" = { - source = ./config; - recursive = true; - }; -} diff --git a/hosts/desktop/home-manager/wlogout/default.nix b/hosts/desktop/home-manager/wlogout/default.nix deleted file mode 100644 index de89d02..0000000 --- a/hosts/desktop/home-manager/wlogout/default.nix +++ /dev/null @@ -1,116 +0,0 @@ -# Log out and shutdown menu -{ - home.file = - let - dir = ".config/wlogout"; - in - { - "${dir}/hibernate.svg".source = ./hibernate.svg; - "${dir}/lock.svg".source = ./lock.svg; - "${dir}/logout.svg".source = ./logout.svg; - "${dir}/reboot.svg".source = ./reboot.svg; - "${dir}/shutdown.svg".source = ./shutdown.svg; - "${dir}/suspend.svg".source = ./suspend.svg; - }; - - programs.wlogout = { - enable = false; - layout = [ - { - label = "lock"; - action = "sh -c '(sleep 0.5s; hyprlock)'"; - text = "Lock"; - keybind = "l"; - } - { - label = "hibernate"; - action = "systemctl hibernate"; - text = "Hibernate"; - keybind = "h"; - } - { - label = "logout"; - action = "loginctl terminate-user $USER"; - text = "Logout"; - keybind = "e"; - } - { - label = "shutdown"; - action = "systemctl poweroff"; - text = "Shutdown"; - keybind = "s"; - } - { - label = "suspend"; - action = "systemctl suspend"; - text = "Suspend"; - keybind = "u"; - } - { - label = "reboot"; - action = "systemctl reboot"; - text = "Reboot"; - keybind = "r"; - } - ]; - style = - let - theme = import ../../theme.nix; - in - '' - * { - background-image: none; - box-shadow: none; - } - - window { - background-color: rgba(30, 30, 46, 0.9); - } - - button { - border-radius: 0; - border-color: #${theme.pinkAlpha}; - text-decoration-color: #${theme.textAlpha}; - color: #${theme.textAlpha}; - background-color: #${theme.mantleAlpha}; - border-style: solid; - border-width: 1px; - background-repeat: no-repeat; - background-position: center; - background-size: 25%; - } - - button:focus, - button:active, - button:hover { - /* 20% Overlay 2, 80% mantle */ - background-color: rgb(48, 50, 66); - outline-style: none; - } - - #lock { - background-image: url("./lock.svg"); - } - - #logout { - background-image: url("./logout.svg"); - } - - #suspend { - background-image: url("./suspend.svg"); - } - - #hibernate { - background-image: url("./hibernate.svg"); - } - - #shutdown { - background-image: url("./shutdown.svg"); - } - - #reboot { - background-image: url("./reboot.svg"); - } - ''; - }; -} diff --git a/hosts/desktop/home-manager/wlogout/hibernate.svg b/hosts/desktop/home-manager/wlogout/hibernate.svg deleted file mode 100644 index 5626c72..0000000 --- a/hosts/desktop/home-manager/wlogout/hibernate.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - Svg Vector Icons : http://www.onlinewebfonts.com/icon - - diff --git a/hosts/desktop/home-manager/wlogout/lock.svg b/hosts/desktop/home-manager/wlogout/lock.svg deleted file mode 100644 index 4b629fd..0000000 --- a/hosts/desktop/home-manager/wlogout/lock.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - Svg Vector Icons : http://www.onlinewebfonts.com/icon - - diff --git a/hosts/desktop/home-manager/wlogout/logout.svg b/hosts/desktop/home-manager/wlogout/logout.svg deleted file mode 100644 index 3e0cc80..0000000 --- a/hosts/desktop/home-manager/wlogout/logout.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - Svg Vector Icons : http://www.onlinewebfonts.com/icon - - diff --git a/hosts/desktop/home-manager/wlogout/reboot.svg b/hosts/desktop/home-manager/wlogout/reboot.svg deleted file mode 100644 index c05f000..0000000 --- a/hosts/desktop/home-manager/wlogout/reboot.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - Svg Vector Icons : http://www.onlinewebfonts.com/icon - - diff --git a/hosts/desktop/home-manager/wlogout/shutdown.svg b/hosts/desktop/home-manager/wlogout/shutdown.svg deleted file mode 100644 index 6693b35..0000000 --- a/hosts/desktop/home-manager/wlogout/shutdown.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - Svg Vector Icons : http://www.onlinewebfonts.com/icon - - diff --git a/hosts/desktop/home-manager/wlogout/style.css b/hosts/desktop/home-manager/wlogout/style.css deleted file mode 100644 index 54752da..0000000 --- a/hosts/desktop/home-manager/wlogout/style.css +++ /dev/null @@ -1,53 +0,0 @@ -* { - background-image: none; - box-shadow: none; -} - -window { - background-color: rgba(30, 30, 46, 0.9); -} - -button { - border-radius: 0; - border-color: #f5c2e7; - text-decoration-color: #cdd6f4; - color: #cdd6f4; - background-color: #181825; - border-style: solid; - border-width: 1px; - background-repeat: no-repeat; - background-position: center; - background-size: 25%; -} - -button:focus, -button:active, -button:hover { - /* 20% Overlay 2, 80% mantle */ - background-color: rgb(48, 50, 66); - outline-style: none; -} - -#lock { - background-image: url("./lock.svg"); -} - -#logout { - background-image: url("./logout.svg"); -} - -#suspend { - background-image: url("./suspend.svg"); -} - -#hibernate { - background-image: url("./hibernate.svg"); -} - -#shutdown { - background-image: url("./shutdown.svg"); -} - -#reboot { - background-image: url("./reboot.svg"); -} diff --git a/hosts/desktop/home-manager/wlogout/suspend.svg b/hosts/desktop/home-manager/wlogout/suspend.svg deleted file mode 100644 index 08214b4..0000000 --- a/hosts/desktop/home-manager/wlogout/suspend.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - Svg Vector Icons : http://www.onlinewebfonts.com/icon - - diff --git a/hosts/pi4/default.nix b/hosts/pi4/default.nix new file mode 100644 index 0000000..ff19397 --- /dev/null +++ b/hosts/pi4/default.nix @@ -0,0 +1,54 @@ +{ + pkgs, + hostName, + user, + version, + ... +}: + +{ + boot = { + kernelPackages = pkgs.linuxKernel.packages.linux_rpi4; + initrd.availableKernelModules = [ + "xhci_pci" + "usbhid" + "usb_storage" + ]; + loader = { + grub.enable = false; + generic-extlinux-compatible.enable = true; + }; + }; + + environment.systemPackages = with pkgs; [ + vim + ]; + + fileSystems = { + "/" = { + device = "/dev/disk/by-label/NIXOS_SD"; + fsType = "ext4"; + options = [ "noatime" ]; + }; + }; + + hardware.enableRedistributableFirmware = true; + + networking = { + inherit hostName; + networkmanager.enable = true; + }; + + services.openssh.enable = true; + + system.stateVersion = version; + + users = { + mutableUsers = false; + users.${user.name} = { + isNormalUser = true; + password = user.password; + extraGroups = [ "wheel" ]; + }; + }; +} diff --git a/hosts/thinkpad/common.nix b/hosts/thinkpad/common.nix new file mode 100644 index 0000000..a2fd81c --- /dev/null +++ b/hosts/thinkpad/common.nix @@ -0,0 +1,25 @@ +rec { + default = { + browser = "zen"; + calculator = "gnome-calculator"; + fileManager = "nautilus"; + imageViewer = "loupe"; + lockScreen = "hyprlock"; + terminal = "kitty"; + }; + + dir = { + home = "/home/${username}"; + pictures = "${dir.home}/Pictures"; + }; + + keymaps = { + layout = "gb,no"; + options = "grp:alt_shift_toggle"; # Toggle using ALT + SHIFT + }; + + # Empty matches all + monitor1 = ""; + + username = "martin"; +} diff --git a/hosts/thinkpad/default.nix b/hosts/thinkpad/default.nix new file mode 100644 index 0000000..6f0823f --- /dev/null +++ b/hosts/thinkpad/default.nix @@ -0,0 +1,69 @@ +{ + pkgs, + outputs, + common, + ... +}: + +{ + imports = [ ./modules ]; + + nixpkgs.overlays = [ outputs.overlays.unstable-packages ]; + + # Bootloader. + boot.loader = { + systemd-boot.enable = true; + efi.canTouchEfiVariables = true; + }; + + # Define a user account. Don't forget to set a password with 'passwd'. + users.users.${common.username} = { + isNormalUser = true; + description = common.username; + extraGroups = [ + "networkmanager" + "wheel" + ]; + }; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + environment.sessionVariables = { + # Tells Electron apps to use Wayland + NIXOS_OZONE_WL = "1"; + }; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + brightnessctl + wget + xdg-utils + xdg-desktop-portal + xdg-desktop-portal-gtk + unstable.protonmail-desktop + stremio + fastfetch + discord + nix-prefetch-github # Cmd to get rev and hash from GitHub + gimp + vlc + vdhcoapp + onlyoffice-desktopeditors + ]; + + nix.settings.experimental-features = [ + "nix-command" + "flakes" + ]; + + programs.kdeconnect.enable = true; + + services = { + flatpak.enable = false; + xserver.enable = true; + }; + + system.stateVersion = common.system.version; +} diff --git a/hosts/thinkpad/home-manager/btop.nix b/hosts/thinkpad/home-manager/btop.nix new file mode 100644 index 0000000..3d146b5 --- /dev/null +++ b/hosts/thinkpad/home-manager/btop.nix @@ -0,0 +1,9 @@ +let + theme = import ../theme.nix; +in +{ + catppuccin.btop = { + enable = true; + flavor = theme.flavor; + }; +} diff --git a/hosts/thinkpad/home-manager/cava/cava.png b/hosts/thinkpad/home-manager/cava/cava.png new file mode 100644 index 0000000..60cbec3 Binary files /dev/null and b/hosts/thinkpad/home-manager/cava/cava.png differ diff --git a/hosts/thinkpad/home-manager/cava/default.nix b/hosts/thinkpad/home-manager/cava/default.nix new file mode 100644 index 0000000..661c02b --- /dev/null +++ b/hosts/thinkpad/home-manager/cava/default.nix @@ -0,0 +1,29 @@ +## Audio visualizer +{ pkgs, ... }: + +let + theme = import ../../theme.nix; +in +{ + catppuccin.cava = { + enable = true; + flavor = theme.flavor; + }; + + programs.cava = { + enable = true; + package = pkgs.cava; + }; + + xdg.desktopEntries.cava = { + name = "Cava"; + genericName = "Audio visualizer"; + terminal = true; + exec = "${pkgs.cava}/bin/cava"; + icon = ./cava.png; + categories = [ + "Audio" + "AudioVideo" + ]; + }; +} diff --git a/hosts/thinkpad/home-manager/cursors.nix b/hosts/thinkpad/home-manager/cursors.nix new file mode 100644 index 0000000..d0ad7b9 --- /dev/null +++ b/hosts/thinkpad/home-manager/cursors.nix @@ -0,0 +1,16 @@ +let + theme = import ../theme.nix; +in +{ + catppuccin.cursors = { + enable = true; + flavor = theme.flavor; + accent = "dark"; + }; + + home.pointerCursor = { + gtk.enable = true; + x11.enable = true; + size = 16; + }; +} diff --git a/hosts/thinkpad/home-manager/default-applications.nix b/hosts/thinkpad/home-manager/default-applications.nix new file mode 100644 index 0000000..d3f3e7f --- /dev/null +++ b/hosts/thinkpad/home-manager/default-applications.nix @@ -0,0 +1,24 @@ +# TODO more defaults +{ + xdg.mimeApps = { + enable = true; + defaultApplications = + let + browser = "zen.desktop"; + imageViewer = "org.gnome.Loupe.desktop"; + pdfReader = "org.gnome.Papers.desktop"; + in + { + "text/html" = browser; + "x-scheme-handler/http" = browser; + "x-scheme-handler/https" = browser; + "x-scheme-handler/about" = browser; + "x-scheme-handler/unknown" = browser; + "image/jpg" = imageViewer; + "image/jpeg" = imageViewer; + "image/png" = imageViewer; + "image/gif" = imageViewer; + "application/pdf" = pdfReader; + }; + }; +} diff --git a/hosts/thinkpad/home-manager/default.nix b/hosts/thinkpad/home-manager/default.nix new file mode 100644 index 0000000..c32b866 --- /dev/null +++ b/hosts/thinkpad/home-manager/default.nix @@ -0,0 +1,67 @@ +{ + pkgs, + inputs, + ... +}: +let + common = import ../common.nix; + username = common.username; + dir = common.dir; +in +{ + imports = [ + inputs.catppuccin.homeManagerModules.catppuccin + ./btop.nix + ./cava + ./cursors.nix + ./default-applications.nix + ./development + ./fastfetch.nix + ./fish.nix + ./freetube.nix + ./gtk.nix + ./kitty.nix + ./mpv.nix + ./nextcloud.nix + ./hyprland + ./spicetify.nix + ./yazi + ./zen + ]; + + dconf = { + enable = true; + settings = { + # Prefer dark mode for all GTK apps + "org/gnome/desktop/interface".color-scheme = "prefer-dark"; + }; + }; + + home = { + username = username; + homeDirectory = dir.home; + + sessionVariables = { + XDG_PICTURES_DIR = dir.pictures; # Define the default dir for pictures + }; + + # You can update Home Manager without changing this value. See + # the Home Manager release notes for a list of state version + # changes in each release. + stateVersion = common.system.version; + }; + + programs = { + btop.enable = true; + + # Let Home Manager install and manage itself. + home-manager.enable = true; + }; + + services = { + gpg-agent = { + enable = true; + pinentryPackage = pkgs.pinentry-curses; + }; + }; +} diff --git a/hosts/thinkpad/home-manager/development/default.nix b/hosts/thinkpad/home-manager/development/default.nix new file mode 100644 index 0000000..ed66da1 --- /dev/null +++ b/hosts/thinkpad/home-manager/development/default.nix @@ -0,0 +1,9 @@ +{ + imports = [ + ./git.nix + ./nixvim + ./zed.nix + ]; + # TODO set Wayland vmOptions in Jetbrains products, Requires current installed version in path + # -Dawt.toolkit.name=WLToolKit +} diff --git a/hosts/thinkpad/home-manager/development/git.nix b/hosts/thinkpad/home-manager/development/git.nix new file mode 100644 index 0000000..11b4a4d --- /dev/null +++ b/hosts/thinkpad/home-manager/development/git.nix @@ -0,0 +1,33 @@ +{ pkgs, ... }: + +{ + home.packages = with pkgs; [ git-crypt ]; + + programs.git = + let + package = pkgs.git.override { withLibsecret = true; }; + in + { + enable = true; + package = package; + userName = "Martin Berg Alstad"; + userEmail = "git@martials.no"; + + aliases = { + amend = "commit --amend"; + cm = "commit"; + s = "status"; + }; + + signing = { + signByDefault = true; + key = "848D71DE0590C199"; + }; + + extraConfig = { + push.autoSetupRemote = true; + safe.directory = "/etc/nixos"; + credential.helper = "${package}/bin/git-credential-libsecret"; + }; + }; +} diff --git a/hosts/thinkpad/home-manager/development/nixvim/default.nix b/hosts/thinkpad/home-manager/development/nixvim/default.nix new file mode 100644 index 0000000..1bccf09 --- /dev/null +++ b/hosts/thinkpad/home-manager/development/nixvim/default.nix @@ -0,0 +1,77 @@ +# Neovim configuration for Nix +{ inputs, ... }: + +{ + imports = [ + inputs.nixvim.homeManagerModules.nixvim + ]; + + catppuccin.nvim.enable = true; + + home.sessionVariables.EDITOR = "nvim"; + + programs.nixvim = { + enable = true; + clipboard.providers.wl-copy.enable = true; + colorschemes.catppuccin.enable = true; + defaultEditor = true; + vimdiffAlias = true; # Alias vimdiff to nvim -d + + opts = { + number = true; # Show line numbers + relativenumber = true; # Show relative line numbers + + shiftwidth = 2; # Tab width should be 2 + }; + + plugins = { + bufferline.enable = false; + + # Formatters + conform-nvim = { + enable = true; + # TODO use nix fmt on save + settings = { }; + }; + + lsp = { + enable = true; + servers = { + nixd.enable = true; + }; + }; + + lualine.enable = true; + luasnip.enable = true; + + # Completions + cmp = { + enable = true; + + autoEnableSources = true; + + # TODO complete on + settings = { + sources = [ + { name = "nvim-lsp"; } + { name = "path"; } + { name = "buffer"; } + ]; + }; + }; + + treesitter.enable = true; + web-devicons.enable = true; + }; + + extraConfigLua = '' + -- Translucent background + vim.cmd [[ + highlight Normal guibg=none + highlight NonText guibg=none + highlight Normal ctermbg=none + highlight NonText ctermbg=none + ]] + ''; + }; +} diff --git a/hosts/thinkpad/home-manager/development/zed.nix b/hosts/thinkpad/home-manager/development/zed.nix new file mode 100644 index 0000000..12c45b8 --- /dev/null +++ b/hosts/thinkpad/home-manager/development/zed.nix @@ -0,0 +1,57 @@ +{ pkgs, ... }: + +{ + programs.zed-editor = { + enable = true; + package = pkgs.unstable.zed-editor; + extensions = [ + "html" + "catppuccin" + "catppuccin-icons" + "toml" + "nix" + "git-firefly" + "just" + ]; + userSettings = + let + theme = import ../../theme.nix; + font = "${theme.nerdFont} Nerd Font"; + fontSize = 14; + in + { + assistant = { + default_model = { + provider = "ollama"; + model = "deepseek-r1:8b"; + }; + version = "2"; + }; + autosave = "on_focus_change"; + base_keymap = "JetBrains"; + buffer_font_family = font; + features = { + edit_completion_provider = "zed"; + }; + icon_theme = "Catppuccin Mocha"; + # icon_theme = { TODO replace icon theme above with below + # mode = theme.mode; + # light = "Catppuccin Mocha"; + # dark = "Catppuccin Mocha"; + # }; + ui_font_family = font; + ui_font_size = fontSize; + buffer_font_size = fontSize; + tabs = { + file_icons = true; + git_status = true; + }; + theme = { + mode = theme.mode; + light = "Catppuccin Latte"; + dark = "Catppuccin Mocha"; + }; + lsp.nil.initialization_options.formatting.command = [ "nixfmt" ]; + }; + }; +} diff --git a/hosts/thinkpad/home-manager/fastfetch.nix b/hosts/thinkpad/home-manager/fastfetch.nix new file mode 100644 index 0000000..3da66cf --- /dev/null +++ b/hosts/thinkpad/home-manager/fastfetch.nix @@ -0,0 +1,60 @@ +{ + programs = { + fish.shellAliases.fetch = "fastfetch"; + fastfetch = { + enable = true; + settings = { + logo = { + source = "${../Catppuccin.png}"; + type = "kitty"; + height = 18; + padding.top = 2; + }; + display.separator = " "; + modules = + let + keyColor = "34"; + module = type: key: { + inherit type key keyColor; + }; + formatModule = type: key: format: { + inherit + type + key + format + keyColor + ; + }; + in + [ + "break" + "break" + { + type = "title"; + keyWidth = 10; + } + "break" + (module "os" " ") + (module "kernel" " ") + (formatModule "packages" " " "{} (nixpkgs)") + (module "shell" " ") + (module "terminal" " ") + (module "wm" " ") + (module "theme" " ") + (module "cursor" " ") + (module "terminalfont" " ") + (module "uptime" " ") + (formatModule "datetime" " " "{1}-{3}-{11}") + (module "cpu" " ") + (module "gpu" "󰤽 ") + (module "sound" " ") + (module "lm" " ") + "break" + "colors" + "break" + "break" + ]; + }; + }; + }; +} diff --git a/hosts/thinkpad/home-manager/fish.nix b/hosts/thinkpad/home-manager/fish.nix new file mode 100644 index 0000000..7611f35 --- /dev/null +++ b/hosts/thinkpad/home-manager/fish.nix @@ -0,0 +1,57 @@ +{ pkgs, ... }: +let + theme = import ../theme.nix; +in +{ + catppuccin = { + fish = { + enable = true; + flavor = theme.flavor; + }; + starship = { + enable = true; + flavor = theme.flavor; + }; + }; + + programs = { + fish = { + enable = true; + # Start starship when creating a new shell + interactiveShellInit = '' + starship init fish | source + ${pkgs.fortune}/bin/fortune | ${pkgs.cowsay}/bin/cowsay -f tux + ''; + plugins = [ + { + # !! to get the previous command + # https://github.com/BrewingWeasel/fishbang + name = "fishbang"; + src = pkgs.fetchFromGitHub { + owner = "BrewingWeasel"; + repo = "fishbang"; + rev = "50389667eb9ac79edcff9b987c83e1de8ac93921"; + hash = "sha256-IneNWyfo29C7FDA5b6pTZRX3HpP6y/dRM6GXuLq2+zc="; + }; + } + ]; + shellAliases = { + nix-shell = "nix-shell --run fish"; # Start nix-shells using fishcd + }; + }; + + starship = { + enable = true; + settings = { + directory.substitutions = { + "Documents" = "󰈙 "; + "Downloads" = " "; + "Music" = "󰓃 "; + "Pictures" = " "; + "Git" = " "; + "nextcloud" = " "; + }; + }; + }; + }; +} diff --git a/hosts/thinkpad/home-manager/freetube.nix b/hosts/thinkpad/home-manager/freetube.nix new file mode 100644 index 0000000..aad9f56 --- /dev/null +++ b/hosts/thinkpad/home-manager/freetube.nix @@ -0,0 +1,53 @@ +{ pkgs, ... }: + +{ + catppuccin.freetube.enable = true; + + programs.freetube = { + enable = true; + package = pkgs.unstable.freetube; + settings = { + allowDashAv1Formats = true; + checkForUpdates = false; + currentLocale = "en-GB"; + defaultTheatreMode = true; + defaultQuality = "1080"; + displayVideoPlayButton = false; + region = "NO"; + useSponsorBlock = true; + + sponsorBlockSponsor = { + color = "CatppuccinMochaGreen"; + skip = "autoSkip"; + }; + sponsorBlockSelfPromo = { + color = "CatppuccinMochaYellow"; + skip = "showInSeekBar"; + }; + sponsorBlockInteraction = { + color = "CatppuccinMochaPink"; + skip = "showInSeekBar"; + }; + sponsorBlockIntro = { + color = "CatppuccinMochaSapphire"; + skip = "doNothing"; + }; + sponsorBlockOutro = { + color = "CatppuccinMochaBlue"; + skip = "doNothing"; + }; + sponsorBlockRecap = { + color = "CatppuccinMochaMauve"; + skip = "doNothing"; + }; + sponsorBlockMusicOffTopic = { + color = "CatppuccinMochaFlamingo"; + skip = "doNothing"; + }; + sponsorBlockFiller = { + color = "CatppuccinMochaMauve"; + skip = "doNothing"; + }; + }; + }; +} diff --git a/hosts/thinkpad/home-manager/gtk.nix b/hosts/thinkpad/home-manager/gtk.nix new file mode 100644 index 0000000..4a766d8 --- /dev/null +++ b/hosts/thinkpad/home-manager/gtk.nix @@ -0,0 +1,11 @@ +let + theme = import ../theme.nix; +in +{ + gtk.enable = true; + catppuccin.gtk = { + enable = true; + flavor = theme.flavor; + icon.enable = true; + }; +} diff --git a/hosts/thinkpad/home-manager/hyprland/binds.nix b/hosts/thinkpad/home-manager/hyprland/binds.nix new file mode 100644 index 0000000..d9e3b82 --- /dev/null +++ b/hosts/thinkpad/home-manager/hyprland/binds.nix @@ -0,0 +1,103 @@ +let + common = import ../../common.nix; + app = common.default; +in +{ + # TODO binds to move focused window + wayland.windowManager.hyprland.settings = { + "$mainMod" = "SUPER"; + "$shiftMod" = "$mainMod SHIFT"; + "$ctrlMod" = "$mainMod CTRL"; + "$menu" = "rofi -show drun"; + + bind = [ + "$mainMod, Q, exec, ${app.terminal}" + "$mainMod, C, killactive," + "$shiftMod, M, exit," + "$mainMod, E, exec, ${app.fileManager}" + "$mainMod, V, togglefloating," + "$mainMod, R, exec, $menu" + "$mainMod, P, pseudo," # dwindle + "$mainMod, J, togglesplit," # dwindle + "$mainMod, B, exec, ${app.browser}" + "$mainMod, L, exec, ${app.lockScreen}" + "$mainMod, K, exec, [float] ${app.calculator}" + "$mainMod, ESCAPE, exec, hyprpanel t dashboardmenu" + + # Move focus with mainMod + arrow keys + "$mainMod, left, movefocus, l" + "$mainMod, right, movefocus, r" + "$mainMod, up, movefocus, u" + "$mainMod, down, movefocus, d" + + # Move window with ctrl + mainMod + arrow keys + "$ctrlMod, left, movewindow, l" + "$ctrlMod, right, movewindow, r" + "$ctrlMod, up, movewindow, u" + "$ctrlMod, down, movewindow, d" + + # Switch workspaces with mainMod + [0-9] + "$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" + + # Move active window to a workspace with mainMod + SHIFT + [0-9] + "$shiftMod, 1, movetoworkspace, 1" + "$shiftMod, 2, movetoworkspace, 2" + "$shiftMod, 3, movetoworkspace, 3" + "$shiftMod, 4, movetoworkspace, 4" + "$shiftMod, 5, movetoworkspace, 5" + "$shiftMod, 6, movetoworkspace, 6" + "$shiftMod, 7, movetoworkspace, 7" + "$shiftMod, 8, movetoworkspace, 8" + "$shiftMod, 9, movetoworkspace, 9" + "$shiftMod, 0, movetoworkspace, 10" + + # Example special workspace (scratchpad) + "$mainMod, S, togglespecialworkspace, magic" + "$shiftMod, S, movetoworkspace, special:magic" + + # Scroll through existing workspaces with mainMod + scroll + "$mainMod, mouse_down, workspace, e+1" + "$mainMod, mouse_up, workspace, e-1" + ]; + + binde = [ + # Resize the focused window + "$shiftMod, right, resizeactive, 20 0" + "$shiftMod, left, resizeactive, -20 0" + "$shiftMod, up, resizeactive, 0 -20" + "$shiftMod, down, resizeactive, 0 20" + ]; + + bindm = [ + # Move/resize windows with mainMod + LMB/RMB and dragging + "$mainMod, mouse:272, movewindow" + "$mainMod, mouse:273, resizewindow" + ]; + + bindl = [ + ", XF86AudioNext, exec, playerctl next" + ", XF86AudioPause, exec, playerctl play-pause" + ", XF86AudioPlay, exec, playerctl play-pause" + ", XF86AudioPrev, exec, playerctl previous" + ]; + + bindel = [ + # Laptop multimedia keys for volume and LCD brightness + ",XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+" + ",XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" + ",XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + ",XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" + ",XF86MonBrightnessUp, exec, brightnessctl s 10%+" + ",XF86MonBrightnessDown, exec, brightnessctl s 10%-" + ]; + }; +} diff --git a/hosts/thinkpad/home-manager/hyprland/default.nix b/hosts/thinkpad/home-manager/hyprland/default.nix new file mode 100644 index 0000000..def2943 --- /dev/null +++ b/hosts/thinkpad/home-manager/hyprland/default.nix @@ -0,0 +1,22 @@ +# Home configurations for Hyprland. For system configs, see ./modules/hyprland +{ outputs, ... }: + +{ + imports = [ + ./binds.nix + ./hypridle + ./hyprlock + ./hyprpanel + ./hyprpaper.nix + ./hyprshot.nix + ./settings.nix + ]; + + # Adds pkgs.unstable in order to fetch packages from unstable repositories + nixpkgs.overlays = [ outputs.overlays.unstable-packages ]; + + wayland.windowManager.hyprland = { + enable = true; + systemd.variables = [ "--all" ]; # Import environment into systemd + }; +} diff --git a/hosts/thinkpad/home-manager/hyprland/hypridle/default.nix b/hosts/thinkpad/home-manager/hyprland/hypridle/default.nix new file mode 100644 index 0000000..69768c3 --- /dev/null +++ b/hosts/thinkpad/home-manager/hyprland/hypridle/default.nix @@ -0,0 +1,38 @@ +let + # Time in seconds + lockAfter = 1200; + screenOffAfter = 1500; + suspendAfter = 7200; +in +{ + services.hypridle = { + enable = true; + settings = { + general = { + before_sleep_cmd = "loginctl lock-session"; + after_sleep_cmd = "hyprctl dispatch dpms on"; + lock_cmd = "pidof hyprlock || hyprlock"; # Avoid running multiple instances of hyprlock + }; + + listener = [ + # Lock + { + timeout = lockAfter; + on-timeout = "loginctl lock-session"; + } + # Turn off screens + { + timeout = screenOffAfter; + on-timeout = "hyprctl dispatch dpms off"; + on-resume = "hyprctl dispatch dpms on"; + } + # Suspend + { + timeout = suspendAfter; + on-timeout = "systemctl suspend"; # suspend pc + } + ]; + }; + }; + wayland.windowManager.hyprland.settings.exec-once = [ "hypridle" ]; +} diff --git a/hosts/thinkpad/home-manager/hyprland/hyprlock/default.nix b/hosts/thinkpad/home-manager/hyprland/hyprlock/default.nix new file mode 100644 index 0000000..2ff5a52 --- /dev/null +++ b/hosts/thinkpad/home-manager/hyprland/hyprlock/default.nix @@ -0,0 +1,89 @@ +{ lib, ... }: +let + theme = import ../../../theme.nix; +in +{ + programs.hyprlock = { + enable = true; + settings = { + "$font" = "${theme.nerdFont} Nerd Font"; + + background = [ + { + path = "${../../../wallpapers/catppuccin_page_curl.png}"; + } + ]; + + # GENERAL + general = { + disable_loading_bar = true; + hide_cursor = true; + }; + + # LAYOUT + label = [ + { + text = "$LAYOUT"; + color = "${theme.textRgb}"; + font_size = 25; + font_family = "$font"; + position = "30, -30"; + halign = "left"; + valign = "top"; + } + # TIME + { + text = "$TIME"; + color = "${theme.textRgb}"; + font_size = 90; + font_family = "$font"; + position = "-30, 0"; + halign = "right"; + valign = "top"; + } + # DATE + { + text = "cmd[update:43200000] date +\"%A, %d %B %Y\""; + color = "${theme.textRgb}"; + font_size = 25; + font_family = "$font"; + position = "-30, -150"; + halign = "right"; + valign = "top"; + } + ]; + + # USER AVATAR + image = { + path = "${../../face.png}"; + size = 100; + border_color = "${theme.blueRgb}"; + position = "0, 75"; + halign = "center"; + valign = "center"; + }; + + # INPUT FIELD + input-field = { + size = "300, 60"; + outline_thickness = 4; + dots_size = 0.2; + dots_spacing = 0.2; + dots_center = true; + outer_color = lib.mkDefault "${theme.blueRgb}"; + inner_color = lib.mkDefault "${theme.surface0Rgb}"; + font_color = lib.mkDefault "${theme.textRgb}"; + fade_on_empty = false; + placeholder_text = "󰌾 Logged in as $USER"; + hide_input = false; + check_color = lib.mkDefault "${theme.blueRgb}"; + fail_color = lib.mkDefault "${theme.redRgb}"; + fail_text = "$FAIL ($ATTEMPTS)"; + capslock_color = lib.mkDefault "${theme.yellowRgb}"; + position = "0, -47"; # TODO change to use % at 25.05 + halign = "center"; + valign = "center"; + }; + }; + }; +} diff --git a/hosts/thinkpad/home-manager/hyprland/hyprpanel/default.nix b/hosts/thinkpad/home-manager/hyprland/hyprpanel/default.nix new file mode 100644 index 0000000..4b20d4a --- /dev/null +++ b/hosts/thinkpad/home-manager/hyprland/hyprpanel/default.nix @@ -0,0 +1,123 @@ +{ + pkgs, + inputs, + lib, + ... +}: +let + common = import ../../../common.nix; + theme = import ../../../theme.nix; + loader = import ../../secretsLoader.nix lib; +in +{ + imports = [ inputs.hyprpanel.homeManagerModules.hyprpanel ]; + + programs.hyprpanel = { + enable = true; + # Add hyprpanel to the Hyprland config 'exec-once'. + hyprland.enable = true; + # Fix the overwrite issue with HyprPanel. + overwrite.enable = true; + + # Import a theme from './themes/*.json'. + theme = ""; + + # Override the final config with an arbitrary set. + # Useful for overriding colors in your selected theme. + # Default: {} + override = { + theme.bar.menus.text = "#123ABC"; + }; + + # Configure bar layouts for monitors. + layout = { + "bar.layouts" = { + "*" = { + left = [ + "dashboard" + "workspaces" + "windowtitle" + ]; + middle = [ "media" ]; + right = [ + "kbinput" + "volume" + "network" + "systray" + "clock" + "battery" + "notifications" + ]; + }; + }; + }; + + # Configure and theme almost all options from the GUI. + # Options that require '{}' or '[]' are not yet implemented, + # except for the layout above. + # See 'https://hyprpanel.com/configuration/settings.html'. + # Default: + settings = { + bar = { + clock.format = "%a %b %d %H:%M"; + customModules.kbLayout.leftClick = "hyprctl switchxkblayout keychron-keychron-k8-pro next"; + launcher.autoDetectIcon = true; + network.label = false; + volume = { + scrollDown = "${pkgs.hyprpanel}/bin/hyprpanel 'vol -1'"; + scrollUp = "${pkgs.hyprpanel}/bin/hyprpanel 'vol +1'"; + }; + workspaces = { + show_icons = false; + show_numbered = true; + }; + }; + + menus = { + clock = { + time = { + military = true; + hideSeconds = true; + }; + weather = { + unit = "metric"; + location = "Bergen, Norway"; + key = loader.loadSecret ../../secrets/weather-api-key; + }; + }; + + dashboard = { + directories.enabled = false; + powermenu.avatar.image = "${../../face.png}"; + shortcuts.left = { + shortcut1 = { + command = common.default.browser; + icon = ""; # TODO replace with Zen icon + tooltip = "Zen"; + }; + shortcut2 = { + command = "spotify"; + icon = ""; + tooltip = "Spotify"; + }; + ## shortcut3 === discord + ## shortcut4 === rofi -show drun + }; + stats.enable_gpu = true; + }; + }; + + scalingPriority = "hyprland"; + + theme = { + bar.transparent = true; + font = { + name = "${theme.nerdFont} NF"; + size = "16px"; + }; + }; + + wallpaper.enable = false; + }; + }; +} diff --git a/hosts/thinkpad/home-manager/hyprland/hyprpaper.nix b/hosts/thinkpad/home-manager/hyprland/hyprpaper.nix new file mode 100644 index 0000000..bcb8c54 --- /dev/null +++ b/hosts/thinkpad/home-manager/hyprland/hyprpaper.nix @@ -0,0 +1,33 @@ +# Wallpapers +{ pkgs, ... }: + +let + common = import ../../common.nix; +in +{ + home.packages = with pkgs; [ + hyprpaper + ]; + + services.hyprpaper = { + enable = true; + settings = + let + wallpaperDir = ../../wallpapers; + monitor1 = "${wallpaperDir}/nixos_waves.png"; + in + { + ipc = "on"; + splash = false; + splash_offset = 2.0; + + preload = [ + monitor1 + ]; + + wallpaper = [ + "${common.monitor1},${monitor1}" + ]; + }; + }; +} diff --git a/hosts/thinkpad/home-manager/hyprland/hyprshot.nix b/hosts/thinkpad/home-manager/hyprland/hyprshot.nix new file mode 100644 index 0000000..67dbb6b --- /dev/null +++ b/hosts/thinkpad/home-manager/hyprland/hyprshot.nix @@ -0,0 +1,19 @@ +let + common = import ../../common.nix; +in +{ + wayland.windowManager.hyprland.settings = { + "$mainMod" = "SUPER"; + "$shiftMod" = "$mainMod SHIFT"; + + env = [ + "HYPRSHOT_DIR,${common.dir.pictures}/screenshots" # Store screenshots here + ]; + + bind = [ + "$mainMod, PRINT, exec, hyprshot -m window" # Window + ", PRINT, exec, hyprshot -m output" # Monitor + "$shiftMod, PRINT, exec, hyprshot -m region" # Region + ]; + }; +} diff --git a/hosts/thinkpad/home-manager/hyprland/settings.nix b/hosts/thinkpad/home-manager/hyprland/settings.nix new file mode 100644 index 0000000..92c33f5 --- /dev/null +++ b/hosts/thinkpad/home-manager/hyprland/settings.nix @@ -0,0 +1,135 @@ +{ lib, ... }: +let + common = import ../../common.nix; + theme = import ../../theme.nix; + app = common.default; +in +{ + wayland.windowManager.hyprland.settings = { + monitor = [ + "${common.monitor1}, 1920x1080@60.05, 0x0, 1" + ]; + + # Autostart + exec-once = [ + app.browser + app.terminal + "systemctl --user start hyprpolkitagent" + "hyprsunset -t 5000" # Set blue light filter + ]; + + env = [ + "ELECTRON_OZONE_PLATFORM_HINT,auto" # Tell Electron apps to use Wayland + ]; + + general = { + gaps_in = 5; + gaps_out = 20; + border_size = 2; + "col.active_border" = lib.mkDefault "${theme.mauveRgb} ${theme.tealRgb} 45deg"; + "col.inactive_border" = lib.mkDefault "rgba(${theme.surface2Alpha}aa)"; + resize_on_border = true; + allow_tearing = false; + layout = "dwindle"; + }; + + decoration = { + rounding = 10; + + # Change transparency of focused and unfocused windows + active_opacity = 1.0; + inactive_opacity = 1.0; + + shadow = { + enabled = true; + range = 4; + render_power = 3; + color = lib.mkDefault theme.baseRgb; + }; + + blur = { + enabled = true; + size = 3; + passes = 1; + + vibrancy = 0.1696; + }; + }; + + animations = { + enabled = "yes, please :)"; + + bezier = [ + "easeOutQuint,0.23,1,0.32,1" + "easeInOutCubic,0.65,0.05,0.36,1" + "linear,0,0,1,1" + "almostLinear,0.5,0.5,0.75,1.0" + "quick,0.15,0,0.1,1" + ]; + + animation = [ + "global, 1, 10, default" + "border, 1, 5.39, easeOutQuint" + "windows, 1, 4.79, easeOutQuint" + "windowsIn, 1, 4.1, easeOutQuint, popin 87%" + "windowsOut, 1, 1.49, linear, popin 87%" + "fadeIn, 1, 1.73, almostLinear" + "fadeOut, 1, 1.46, almostLinear" + "fade, 1, 3.03, quick" + "layers, 1, 3.81, easeOutQuint" + "layersIn, 1, 4, easeOutQuint, fade" + "layersOut, 1, 1.5, linear, fade" + "fadeLayersIn, 1, 1.79, almostLinear" + "fadeLayersOut, 1, 1.39, almostLinear" + "workspaces, 1, 1.94, almostLinear, fade" + "workspacesIn, 1, 1.21, almostLinear, fade" + "workspacesOut, 1, 1.94, almostLinear, fade" + ]; + }; + + 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 + }; + + master.new_status = "master"; + + misc = { + force_default_wallpaper = 0; + disable_hyprland_logo = true; + }; + + debug.disable_logs = false; + + input = { + kb_layout = common.keymaps.layout; + kb_options = common.keymaps.options; + follow_mouse = 1; + sensitivity = 0.4; # -1.0 - 1.0, 0 means no modification. + touchpad.natural_scroll = true; + }; + + gestures = { + workspace_swipe = true; + workspace_swipe_distance = 150; + workspace_swipe_min_speed_to_force = 0; + workspace_swipe_cancel_ratio = 0.5; + }; + + device = { + name = "logitech-g502-hero-gaming-mouse"; + sensitivity = -0.10; + }; + + windowrulev2 = [ + # Ignore maximize requests from apps + "suppressevent maximize, class:.*" + # Fix some dragging issues with XWayland + "nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0" + # Avoid locking in fullscreen + "idleinhibit fullscreen, class:^(*)$" + "idleinhibit fullscreen, title:^(*)$" + "idleinhibit fullscreen, fullscreen:1" + ]; + }; +} diff --git a/hosts/thinkpad/home-manager/kitty.nix b/hosts/thinkpad/home-manager/kitty.nix new file mode 100644 index 0000000..4316146 --- /dev/null +++ b/hosts/thinkpad/home-manager/kitty.nix @@ -0,0 +1,25 @@ +let + common = import ../common.nix; + theme = import ../theme.nix; +in +{ + catppuccin.kitty = { + enable = true; + flavor = theme.flavor; + }; + + programs = { + # Transfer shell config to target device + fish.shellAliases.ssh = "kitty +kitten ssh"; + kitty = { + enable = common.default.terminal == "kitty"; + font.name = theme.nerdFont; + settings = { + background_blur = 5; + background_opacity = 0.8; + confirm_os_window_close = 0; + window_padding_width = 10; + }; + }; + }; +} diff --git a/hosts/thinkpad/home-manager/mpv.nix b/hosts/thinkpad/home-manager/mpv.nix new file mode 100644 index 0000000..ef88358 --- /dev/null +++ b/hosts/thinkpad/home-manager/mpv.nix @@ -0,0 +1,29 @@ +{ + catppuccin.mpv = + let + theme = import ../theme.nix; + in + { + enable = true; + flavor = theme.flavor; + }; + + programs = { + fish.shellAliases.mpvl = "mpv --profile=loop"; + mpv = { + enable = true; + config = { + hwdec = "auto-safe"; + vo = "gpu"; + profile = "gpu-hq"; + gpu-context = "wayland"; + }; + profiles = { + loop = { + loop-playlist = "inf"; + loop-file = "inf"; + }; + }; + }; + }; +} diff --git a/hosts/thinkpad/home-manager/nextcloud.nix b/hosts/thinkpad/home-manager/nextcloud.nix new file mode 100644 index 0000000..6d6bc7c --- /dev/null +++ b/hosts/thinkpad/home-manager/nextcloud.nix @@ -0,0 +1,6 @@ +{ + services.nextcloud-client = { + enable = true; + startInBackground = true; + }; +} diff --git a/hosts/thinkpad/home-manager/spicetify.nix b/hosts/thinkpad/home-manager/spicetify.nix new file mode 100644 index 0000000..758b9dc --- /dev/null +++ b/hosts/thinkpad/home-manager/spicetify.nix @@ -0,0 +1,35 @@ +{ + pkgs, + inputs, + lib, + ... +}: + +{ + imports = [ inputs.spicetify-nix.homeManagerModules.default ]; + programs.spicetify = + let + spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system}; + theme = import ../theme.nix; + in + { + enable = true; + + enabledExtensions = with spicePkgs.extensions; [ + adblock + fullAppDisplay + hidePodcasts + shuffle # shuffle+ (special characters are sanitized out of extension names) + ]; + enabledCustomApps = with spicePkgs.apps; [ + newReleases + ncsVisualizer + ]; + enabledSnippets = with spicePkgs.snippets; [ + pointer + ]; + + theme = lib.mkForce spicePkgs.themes.catppuccin; + colorScheme = lib.mkForce theme.flavor; + }; +} diff --git a/hosts/thinkpad/home-manager/yazi/catppuccin-mocha.tmTheme b/hosts/thinkpad/home-manager/yazi/catppuccin-mocha.tmTheme new file mode 100644 index 0000000..6bd0f29 --- /dev/null +++ b/hosts/thinkpad/home-manager/yazi/catppuccin-mocha.tmTheme @@ -0,0 +1,2081 @@ + + + + + name + Catppuccin Mocha + semanticClass + theme.dark.catppuccin-mocha + uuid + 627ce890-fabb-4d39-9819-7be71f4bdca7 + author + Catppuccin Org + colorSpaceName + sRGB + settings + + + settings + + background + #1e1e2e + foreground + #cdd6f4 + caret + #f5e0dc + lineHighlight + #313244 + misspelling + #f38ba8 + accent + #cba6f7 + selection + #9399b240 + activeGuide + #45475a + findHighlight + #3e5767 + gutterForeground + #7f849c + + + + name + Basic text & variable names (incl. leading punctuation) + scope + text, source, variable.other.readwrite, punctuation.definition.variable + settings + + foreground + #cdd6f4 + + + + name + Parentheses, Brackets, Braces + scope + punctuation + settings + + foreground + #9399b2 + fontStyle + + + + + name + Comments + scope + comment, punctuation.definition.comment + settings + + foreground + #6c7086 + fontStyle + italic + + + + scope + string, punctuation.definition.string + settings + + foreground + #a6e3a1 + + + + scope + constant.character.escape + settings + + foreground + #f5c2e7 + + + + name + Booleans, constants, numbers + scope + constant.numeric, variable.other.constant, entity.name.constant, constant.language.boolean, constant.language.false, constant.language.true, keyword.other.unit.user-defined, keyword.other.unit.suffix.floating-point + settings + + foreground + #fab387 + + + + scope + keyword, keyword.operator.word, keyword.operator.new, variable.language.super, support.type.primitive, storage.type, storage.modifier, punctuation.definition.keyword + settings + + foreground + #cba6f7 + fontStyle + + + + + scope + entity.name.tag.documentation + settings + + foreground + #cba6f7 + + + + name + Punctuation + scope + keyword.operator, punctuation.accessor, punctuation.definition.generic, meta.function.closure punctuation.section.parameters, punctuation.definition.tag, punctuation.separator.key-value + settings + + foreground + #94e2d5 + + + + scope + entity.name.function, meta.function-call.method, support.function, support.function.misc, variable.function + settings + + foreground + #89b4fa + fontStyle + italic + + + + name + Classes + scope + entity.name.class, entity.other.inherited-class, support.class, meta.function-call.constructor, entity.name.struct + settings + + foreground + #f9e2af + fontStyle + italic + + + + name + Enum + scope + entity.name.enum + settings + + foreground + #f9e2af + fontStyle + italic + + + + name + Enum member + scope + meta.enum variable.other.readwrite, variable.other.enummember + settings + + foreground + #94e2d5 + + + + name + Object properties + scope + meta.property.object + settings + + foreground + #94e2d5 + + + + name + Types + scope + meta.type, meta.type-alias, support.type, entity.name.type + settings + + foreground + #f9e2af + fontStyle + italic + + + + name + Decorators + scope + meta.annotation variable.function, meta.annotation variable.annotation.function, meta.annotation punctuation.definition.annotation, meta.decorator, punctuation.decorator + settings + + foreground + #fab387 + + + + scope + variable.parameter, meta.function.parameters + settings + + foreground + #eba0ac + fontStyle + italic + + + + name + Built-ins + scope + constant.language, support.function.builtin + settings + + foreground + #f38ba8 + + + + scope + entity.other.attribute-name.documentation + settings + + foreground + #f38ba8 + + + + name + Preprocessor directives + scope + keyword.control.directive, punctuation.definition.directive + settings + + foreground + #f9e2af + + + + name + Type parameters + scope + punctuation.definition.typeparameters + settings + + foreground + #89dceb + + + + name + Namespaces + scope + entity.name.namespace + settings + + foreground + #f9e2af + + + + name + Property names (left hand assignments in json/yaml/css) + scope + support.type.property-name.css + settings + + foreground + #89b4fa + fontStyle + + + + + name + This/Self keyword + scope + variable.language.this, variable.language.this punctuation.definition.variable + settings + + foreground + #f38ba8 + + + + name + Object properties + scope + variable.object.property + settings + + foreground + #cdd6f4 + + + + name + String template interpolation + scope + string.template variable, string variable + settings + + foreground + #cdd6f4 + + + + name + `new` as bold + scope + keyword.operator.new + settings + + fontStyle + bold + + + + name + C++ extern keyword + scope + storage.modifier.specifier.extern.cpp + settings + + foreground + #cba6f7 + + + + name + C++ scope resolution + scope + entity.name.scope-resolution.template.call.cpp, entity.name.scope-resolution.parameter.cpp, entity.name.scope-resolution.cpp, entity.name.scope-resolution.function.definition.cpp + settings + + foreground + #f9e2af + + + + name + C++ doc keywords + scope + storage.type.class.doxygen + settings + + fontStyle + + + + + name + C++ operators + scope + storage.modifier.reference.cpp + settings + + foreground + #94e2d5 + + + + name + C# Interpolated Strings + scope + meta.interpolation.cs + settings + + foreground + #cdd6f4 + + + + name + C# xml-style docs + scope + comment.block.documentation.cs + settings + + foreground + #cdd6f4 + + + + name + Classes, reflecting the className color in JSX + scope + source.css entity.other.attribute-name.class.css, entity.other.attribute-name.parent-selector.css punctuation.definition.entity.css + settings + + foreground + #f9e2af + + + + name + Operators + scope + punctuation.separator.operator.css + settings + + foreground + #94e2d5 + + + + name + Pseudo classes + scope + source.css entity.other.attribute-name.pseudo-class + settings + + foreground + #94e2d5 + + + + scope + source.css constant.other.unicode-range + settings + + foreground + #fab387 + + + + scope + source.css variable.parameter.url + settings + + foreground + #a6e3a1 + fontStyle + + + + + name + CSS vendored property names + scope + support.type.vendored.property-name + settings + + foreground + #89dceb + + + + name + Less/SCSS right-hand variables (@/$-prefixed) + scope + source.css meta.property-value variable, source.css meta.property-value variable.other.less, source.css meta.property-value variable.other.less punctuation.definition.variable.less, meta.definition.variable.scss + settings + + foreground + #eba0ac + + + + name + CSS variables (--prefixed) + scope + source.css meta.property-list variable, meta.property-list variable.other.less, meta.property-list variable.other.less punctuation.definition.variable.less + settings + + foreground + #89b4fa + + + + name + CSS Percentage values, styled the same as numbers + scope + keyword.other.unit.percentage.css + settings + + foreground + #fab387 + + + + name + CSS Attribute selectors, styled the same as strings + scope + source.css meta.attribute-selector + settings + + foreground + #a6e3a1 + + + + name + JSON/YAML keys, other left-hand assignments + scope + keyword.other.definition.ini, punctuation.support.type.property-name.json, support.type.property-name.json, punctuation.support.type.property-name.toml, support.type.property-name.toml, entity.name.tag.yaml, punctuation.support.type.property-name.yaml, support.type.property-name.yaml + settings + + foreground + #89b4fa + fontStyle + + + + + name + JSON/YAML constants + scope + constant.language.json, constant.language.yaml + settings + + foreground + #fab387 + + + + name + YAML anchors + scope + entity.name.type.anchor.yaml, variable.other.alias.yaml + settings + + foreground + #f9e2af + fontStyle + + + + + name + TOML tables / ini groups + scope + support.type.property-name.table, entity.name.section.group-title.ini + settings + + foreground + #f9e2af + + + + name + TOML dates + scope + constant.other.time.datetime.offset.toml + settings + + foreground + #f5c2e7 + + + + name + YAML anchor puctuation + scope + punctuation.definition.anchor.yaml, punctuation.definition.alias.yaml + settings + + foreground + #f5c2e7 + + + + name + YAML triple dashes + scope + entity.other.document.begin.yaml + settings + + foreground + #f5c2e7 + + + + name + Markup Diff + scope + markup.changed.diff + settings + + foreground + #fab387 + + + + name + Diff + scope + meta.diff.header.from-file, meta.diff.header.to-file, punctuation.definition.from-file.diff, punctuation.definition.to-file.diff + settings + + foreground + #89b4fa + + + + name + Diff Inserted + scope + markup.inserted.diff + settings + + foreground + #a6e3a1 + + + + name + Diff Deleted + scope + markup.deleted.diff + settings + + foreground + #f38ba8 + + + + name + dotenv left-hand side assignments + scope + variable.other.env + settings + + foreground + #89b4fa + + + + name + dotenv reference to existing env variable + scope + string.quoted variable.other.env + settings + + foreground + #cdd6f4 + + + + name + GDScript functions + scope + support.function.builtin.gdscript + settings + + foreground + #89b4fa + + + + name + GDScript constants + scope + constant.language.gdscript + settings + + foreground + #fab387 + + + + name + Comment keywords + scope + comment meta.annotation.go + settings + + foreground + #eba0ac + + + + name + go:embed, go:build, etc. + scope + comment meta.annotation.parameters.go + settings + + foreground + #fab387 + + + + name + Go constants (nil, true, false) + scope + constant.language.go + settings + + foreground + #fab387 + + + + name + GraphQL variables + scope + variable.graphql + settings + + foreground + #cdd6f4 + + + + name + GraphQL aliases + scope + string.unquoted.alias.graphql + settings + + foreground + #f2cdcd + + + + name + GraphQL enum members + scope + constant.character.enum.graphql + settings + + foreground + #94e2d5 + + + + name + GraphQL field in types + scope + meta.objectvalues.graphql constant.object.key.graphql string.unquoted.graphql + settings + + foreground + #f2cdcd + + + + name + HTML/XML DOCTYPE as keyword + scope + keyword.other.doctype, meta.tag.sgml.doctype punctuation.definition.tag, meta.tag.metadata.doctype entity.name.tag, meta.tag.metadata.doctype punctuation.definition.tag + settings + + foreground + #cba6f7 + + + + name + HTML/XML-like <tags/> + scope + entity.name.tag + settings + + foreground + #89b4fa + fontStyle + + + + + name + Special characters like &amp; + scope + text.html constant.character.entity, text.html constant.character.entity punctuation, constant.character.entity.xml, constant.character.entity.xml punctuation, constant.character.entity.js.jsx, constant.charactger.entity.js.jsx punctuation, constant.character.entity.tsx, constant.character.entity.tsx punctuation + settings + + foreground + #f38ba8 + + + + name + HTML/XML tag attribute values + scope + entity.other.attribute-name + settings + + foreground + #f9e2af + + + + name + Components + scope + support.class.component, support.class.component.jsx, support.class.component.tsx, support.class.component.vue + settings + + foreground + #f5c2e7 + fontStyle + + + + + name + Annotations + scope + punctuation.definition.annotation, storage.type.annotation + settings + + foreground + #fab387 + + + + name + Java enums + scope + constant.other.enum.java + settings + + foreground + #94e2d5 + + + + name + Java imports + scope + storage.modifier.import.java + settings + + foreground + #cdd6f4 + + + + name + Javadoc + scope + comment.block.javadoc.java keyword.other.documentation.javadoc.java + settings + + fontStyle + + + + + name + Exported Variable + scope + meta.export variable.other.readwrite.js + settings + + foreground + #eba0ac + + + + name + JS/TS constants & properties + scope + variable.other.constant.js, variable.other.constant.ts, variable.other.property.js, variable.other.property.ts + settings + + foreground + #cdd6f4 + + + + name + JSDoc; these are mainly params, so styled as such + scope + variable.other.jsdoc, comment.block.documentation variable.other + settings + + foreground + #eba0ac + fontStyle + + + + + name + JSDoc keywords + scope + storage.type.class.jsdoc + settings + + fontStyle + + + + + scope + support.type.object.console.js + settings + + foreground + #cdd6f4 + + + + name + Node constants as keywords (module, etc.) + scope + support.constant.node, support.type.object.module.js + settings + + foreground + #cba6f7 + + + + name + implements as keyword + scope + storage.modifier.implements + settings + + foreground + #cba6f7 + + + + name + Builtin types + scope + constant.language.null.js, constant.language.null.ts, constant.language.undefined.js, constant.language.undefined.ts, support.type.builtin.ts + settings + + foreground + #cba6f7 + + + + scope + variable.parameter.generic + settings + + foreground + #f9e2af + + + + name + Arrow functions + scope + keyword.declaration.function.arrow.js, storage.type.function.arrow.ts + settings + + foreground + #94e2d5 + + + + name + Decorator punctuations (decorators inherit from blue functions, instead of styleguide peach) + scope + punctuation.decorator.ts + settings + + foreground + #89b4fa + fontStyle + italic + + + + name + Extra JS/TS keywords + scope + keyword.operator.expression.in.js, keyword.operator.expression.in.ts, keyword.operator.expression.infer.ts, keyword.operator.expression.instanceof.js, keyword.operator.expression.instanceof.ts, keyword.operator.expression.is, keyword.operator.expression.keyof.ts, keyword.operator.expression.of.js, keyword.operator.expression.of.ts, keyword.operator.expression.typeof.ts + settings + + foreground + #cba6f7 + + + + name + Julia macros + scope + support.function.macro.julia + settings + + foreground + #94e2d5 + fontStyle + italic + + + + name + Julia language constants (true, false) + scope + constant.language.julia + settings + + foreground + #fab387 + + + + name + Julia other constants (these seem to be arguments inside arrays) + scope + constant.other.symbol.julia + settings + + foreground + #eba0ac + + + + name + LaTeX preamble + scope + text.tex keyword.control.preamble + settings + + foreground + #94e2d5 + + + + name + LaTeX be functions + scope + text.tex support.function.be + settings + + foreground + #89dceb + + + + name + LaTeX math + scope + constant.other.general.math.tex + settings + + foreground + #f2cdcd + + + + name + Lua docstring keywords + scope + comment.line.double-dash.documentation.lua storage.type.annotation.lua + settings + + foreground + #cba6f7 + fontStyle + + + + + name + Lua docstring variables + scope + comment.line.double-dash.documentation.lua entity.name.variable.lua, comment.line.double-dash.documentation.lua variable.lua + settings + + foreground + #cdd6f4 + + + + scope + heading.1.markdown punctuation.definition.heading.markdown, heading.1.markdown, markup.heading.atx.1.mdx, markup.heading.atx.1.mdx punctuation.definition.heading.mdx, markup.heading.setext.1.markdown, markup.heading.heading-0.asciidoc + settings + + foreground + #f38ba8 + + + + scope + heading.2.markdown punctuation.definition.heading.markdown, heading.2.markdown, markup.heading.atx.2.mdx, markup.heading.atx.2.mdx punctuation.definition.heading.mdx, markup.heading.setext.2.markdown, markup.heading.heading-1.asciidoc + settings + + foreground + #fab387 + + + + scope + heading.3.markdown punctuation.definition.heading.markdown, heading.3.markdown, markup.heading.atx.3.mdx, markup.heading.atx.3.mdx punctuation.definition.heading.mdx, markup.heading.heading-2.asciidoc + settings + + foreground + #f9e2af + + + + scope + heading.4.markdown punctuation.definition.heading.markdown, heading.4.markdown, markup.heading.atx.4.mdx, markup.heading.atx.4.mdx punctuation.definition.heading.mdx, markup.heading.heading-3.asciidoc + settings + + foreground + #a6e3a1 + + + + scope + heading.5.markdown punctuation.definition.heading.markdown, heading.5.markdown, markup.heading.atx.5.mdx, markup.heading.atx.5.mdx punctuation.definition.heading.mdx, markup.heading.heading-4.asciidoc + settings + + foreground + #89b4fa + + + + scope + heading.6.markdown punctuation.definition.heading.markdown, heading.6.markdown, markup.heading.atx.6.mdx, markup.heading.atx.6.mdx punctuation.definition.heading.mdx, markup.heading.heading-5.asciidoc + settings + + foreground + #cba6f7 + + + + scope + markup.bold + settings + + foreground + #f38ba8 + fontStyle + bold + + + + scope + markup.italic + settings + + foreground + #f38ba8 + fontStyle + italic + + + + scope + markup.strikethrough + settings + + foreground + #a6adc8 + fontStyle + strikethrough + + + + name + Markdown auto links + scope + punctuation.definition.link, markup.underline.link + settings + + foreground + #89b4fa + + + + name + Markdown links + scope + text.html.markdown punctuation.definition.link.title, string.other.link.title.markdown, markup.link, punctuation.definition.constant.markdown, constant.other.reference.link.markdown, markup.substitution.attribute-reference + settings + + foreground + #b4befe + + + + name + Markdown code spans + scope + punctuation.definition.raw.markdown, markup.inline.raw.string.markdown, markup.raw.block.markdown + settings + + foreground + #a6e3a1 + + + + name + Markdown triple backtick language identifier + scope + fenced_code.block.language + settings + + foreground + #89dceb + + + + name + Markdown triple backticks + scope + markup.fenced_code.block punctuation.definition, markup.raw support.asciidoc + settings + + foreground + #9399b2 + + + + name + Markdown quotes + scope + markup.quote, punctuation.definition.quote.begin + settings + + foreground + #f5c2e7 + + + + name + Markdown separators + scope + meta.separator.markdown + settings + + foreground + #94e2d5 + + + + name + Markdown list bullets + scope + punctuation.definition.list.begin.markdown, markup.list.bullet + settings + + foreground + #94e2d5 + + + + name + Nix attribute names + scope + entity.other.attribute-name.multipart.nix, entity.other.attribute-name.single.nix + settings + + foreground + #89b4fa + + + + name + Nix parameter names + scope + variable.parameter.name.nix + settings + + foreground + #cdd6f4 + fontStyle + + + + + name + Nix interpolated parameter names + scope + meta.embedded variable.parameter.name.nix + settings + + foreground + #b4befe + fontStyle + + + + + name + Nix paths + scope + string.unquoted.path.nix + settings + + foreground + #f5c2e7 + fontStyle + + + + + name + PHP Attributes + scope + support.attribute.builtin, meta.attribute.php + settings + + foreground + #f9e2af + + + + name + PHP Parameters (needed for the leading dollar sign) + scope + meta.function.parameters.php punctuation.definition.variable.php + settings + + foreground + #eba0ac + + + + name + PHP Constants (null, __FILE__, etc.) + scope + constant.language.php + settings + + foreground + #cba6f7 + + + + name + PHP functions + scope + text.html.php support.function + settings + + foreground + #89dceb + + + + name + PHPdoc keywords + scope + keyword.other.phpdoc.php + settings + + fontStyle + + + + + name + Python argument functions reset to text, otherwise they inherit blue from function-call + scope + support.variable.magic.python, meta.function-call.arguments.python + settings + + foreground + #cdd6f4 + + + + name + Python double underscore functions + scope + support.function.magic.python + settings + + foreground + #89dceb + fontStyle + italic + + + + name + Python `self` keyword + scope + variable.parameter.function.language.special.self.python, variable.language.special.self.python + settings + + foreground + #f38ba8 + fontStyle + italic + + + + name + python keyword flow/logical (for ... in) + scope + keyword.control.flow.python, keyword.operator.logical.python + settings + + foreground + #cba6f7 + + + + name + python storage type + scope + storage.type.function.python + settings + + foreground + #cba6f7 + + + + name + python function support + scope + support.token.decorator.python, meta.function.decorator.identifier.python + settings + + foreground + #89dceb + + + + name + python function calls + scope + meta.function-call.python + settings + + foreground + #89b4fa + + + + name + python function decorators + scope + entity.name.function.decorator.python, punctuation.definition.decorator.python + settings + + foreground + #fab387 + fontStyle + italic + + + + name + python placeholder reset to normal string + scope + constant.character.format.placeholder.other.python + settings + + foreground + #f5c2e7 + + + + name + Python exception & builtins such as exit() + scope + support.type.exception.python, support.function.builtin.python + settings + + foreground + #fab387 + + + + name + entity.name.type + scope + support.type.python + settings + + foreground + #fab387 + + + + name + python constants (True/False) + scope + constant.language.python + settings + + foreground + #cba6f7 + + + + name + Arguments accessed later in the function body + scope + meta.indexed-name.python, meta.item-access.python + settings + + foreground + #eba0ac + fontStyle + italic + + + + name + Python f-strings/binary/unicode storage types + scope + storage.type.string.python + settings + + foreground + #a6e3a1 + fontStyle + italic + + + + name + Python type hints + scope + meta.function.parameters.python + settings + + fontStyle + + + + + name + Regex string begin/end in JS/TS + scope + string.regexp punctuation.definition.string.begin, string.regexp punctuation.definition.string.end + settings + + foreground + #f5c2e7 + + + + name + Regex anchors (^, $) + scope + keyword.control.anchor.regexp + settings + + foreground + #cba6f7 + + + + name + Regex regular string match + scope + string.regexp.ts + settings + + foreground + #cdd6f4 + + + + name + Regex group parenthesis & backreference (\1, \2, \3, ...) + scope + punctuation.definition.group.regexp, keyword.other.back-reference.regexp + settings + + foreground + #a6e3a1 + + + + name + Regex character class [] + scope + punctuation.definition.character-class.regexp + settings + + foreground + #f9e2af + + + + name + Regex character classes (\d, \w, \s) + scope + constant.other.character-class.regexp + settings + + foreground + #f5c2e7 + + + + name + Regex range + scope + constant.other.character-class.range.regexp + settings + + foreground + #f5e0dc + + + + name + Regex quantifier + scope + keyword.operator.quantifier.regexp + settings + + foreground + #94e2d5 + + + + name + Regex constant/numeric + scope + constant.character.numeric.regexp + settings + + foreground + #fab387 + + + + name + Regex lookaheads, negative lookaheads, lookbehinds, negative lookbehinds + scope + punctuation.definition.group.no-capture.regexp, meta.assertion.look-ahead.regexp, meta.assertion.negative-look-ahead.regexp + settings + + foreground + #89b4fa + + + + name + Rust attribute + scope + meta.annotation.rust, meta.annotation.rust punctuation, meta.attribute.rust, punctuation.definition.attribute.rust + settings + + foreground + #f9e2af + fontStyle + italic + + + + name + Rust attribute strings + scope + meta.attribute.rust string.quoted.double.rust, meta.attribute.rust string.quoted.single.char.rust + settings + + fontStyle + + + + + name + Rust keyword + scope + entity.name.function.macro.rules.rust, storage.type.module.rust, storage.modifier.rust, storage.type.struct.rust, storage.type.enum.rust, storage.type.trait.rust, storage.type.union.rust, storage.type.impl.rust, storage.type.rust, storage.type.function.rust, storage.type.type.rust + settings + + foreground + #cba6f7 + fontStyle + + + + + name + Rust u/i32, u/i64, etc. + scope + entity.name.type.numeric.rust + settings + + foreground + #cba6f7 + fontStyle + + + + + name + Rust generic + scope + meta.generic.rust + settings + + foreground + #fab387 + + + + name + Rust impl + scope + entity.name.impl.rust + settings + + foreground + #f9e2af + fontStyle + italic + + + + name + Rust module + scope + entity.name.module.rust + settings + + foreground + #fab387 + + + + name + Rust trait + scope + entity.name.trait.rust + settings + + foreground + #f9e2af + fontStyle + italic + + + + name + Rust struct + scope + storage.type.source.rust + settings + + foreground + #f9e2af + + + + name + Rust union + scope + entity.name.union.rust + settings + + foreground + #f9e2af + + + + name + Rust enum member + scope + meta.enum.rust storage.type.source.rust + settings + + foreground + #94e2d5 + + + + name + Rust macro + scope + support.macro.rust, meta.macro.rust support.function.rust, entity.name.function.macro.rust + settings + + foreground + #89b4fa + fontStyle + italic + + + + name + Rust lifetime + scope + storage.modifier.lifetime.rust, entity.name.type.lifetime + settings + + foreground + #89b4fa + fontStyle + italic + + + + name + Rust string formatting + scope + string.quoted.double.rust constant.other.placeholder.rust + settings + + foreground + #f5c2e7 + + + + name + Rust return type generic + scope + meta.function.return-type.rust meta.generic.rust storage.type.rust + settings + + foreground + #cdd6f4 + + + + name + Rust functions + scope + meta.function.call.rust + settings + + foreground + #89b4fa + + + + name + Rust angle brackets + scope + punctuation.brackets.angle.rust + settings + + foreground + #89dceb + + + + name + Rust constants + scope + constant.other.caps.rust + settings + + foreground + #fab387 + + + + name + Rust function parameters + scope + meta.function.definition.rust variable.other.rust + settings + + foreground + #eba0ac + + + + name + Rust closure variables + scope + meta.function.call.rust variable.other.rust + settings + + foreground + #cdd6f4 + + + + name + Rust self + scope + variable.language.self.rust + settings + + foreground + #f38ba8 + + + + name + Rust metavariable names + scope + variable.other.metavariable.name.rust, meta.macro.metavariable.rust keyword.operator.macro.dollar.rust + settings + + foreground + #f5c2e7 + + + + name + Shell shebang + scope + comment.line.shebang, comment.line.shebang punctuation.definition.comment, comment.line.shebang, punctuation.definition.comment.shebang.shell, meta.shebang.shell + settings + + foreground + #f5c2e7 + fontStyle + italic + + + + name + Shell shebang command + scope + comment.line.shebang constant.language + settings + + foreground + #94e2d5 + fontStyle + italic + + + + name + Shell interpolated command + scope + meta.function-call.arguments.shell punctuation.definition.variable.shell, meta.function-call.arguments.shell punctuation.section.interpolation, meta.function-call.arguments.shell punctuation.definition.variable.shell, meta.function-call.arguments.shell punctuation.section.interpolation + settings + + foreground + #f38ba8 + + + + name + Shell interpolated command variable + scope + meta.string meta.interpolation.parameter.shell variable.other.readwrite + settings + + foreground + #fab387 + fontStyle + italic + + + + scope + source.shell punctuation.section.interpolation, punctuation.definition.evaluation.backticks.shell + settings + + foreground + #94e2d5 + + + + name + Shell EOF + scope + entity.name.tag.heredoc.shell + settings + + foreground + #cba6f7 + + + + name + Shell quoted variable + scope + string.quoted.double.shell variable.other.normal.shell + settings + + foreground + #cdd6f4 + + + + name + JSON Keys + scope + source.json meta.mapping.key string + settings + + foreground + #89b4fa + + + + name + JSON key surrounding quotes + scope + source.json meta.mapping.key punctuation.definition.string.begin, source.json meta.mapping.key punctuation.definition.string.end + settings + + foreground + #9399b2 + + + + scope + markup.heading.synopsis.man, markup.heading.title.man, markup.heading.other.man, markup.heading.env.man + settings + + foreground + #cba6f7 + + + + scope + markup.heading.commands.man + settings + + foreground + #89b4fa + + + + scope + markup.heading.env.man + settings + + foreground + #f5c2e7 + + + + name + Man page options + scope + entity.name + settings + + foreground + #94e2d5 + + + + scope + markup.heading.1.markdown + settings + + foreground + #f38ba8 + + + + scope + markup.heading.2.markdown + settings + + foreground + #fab387 + + + + scope + markup.heading.markdown + settings + + foreground + #f9e2af + + + + + \ No newline at end of file diff --git a/hosts/thinkpad/home-manager/yazi/default.nix b/hosts/thinkpad/home-manager/yazi/default.nix new file mode 100644 index 0000000..8376601 --- /dev/null +++ b/hosts/thinkpad/home-manager/yazi/default.nix @@ -0,0 +1,327 @@ +{ lib, ... }: +let + theme = import ../../theme.nix; + batTheme = ".config/yazi/catppuccin-${theme.flavor}.tmTheme"; +in +{ + home.file.${batTheme}.source = ./catppuccin-mocha.tmTheme; + + programs.yazi = { + enable = true; + settings = { + manager = { + ratio = [ + 2 + 4 + 2 + ]; + sort_by = "natural"; + sort_sensitive = true; + sort_reverse = false; + sort_dir_first = true; + linemode = "none"; + show_hidden = true; + show_symlink = true; + }; + + preview = { + image_filter = "lanczos3"; + image_quality = 90; + tab_size = 1; + max_width = 600; + max_height = 900; + cache_dir = ""; + ueberzug_scale = 1; + ueberzug_offset = [ + 0 + 0 + 0 + 0 + ]; + }; + + tasks = { + micro_workers = 5; + macro_workers = 10; + bizarre_retry = 5; + }; + }; + theme = lib.mkForce { + manager = { + cwd = { + fg = "#${theme.tealAlpha}"; + }; + + hovered = { + fg = "#${theme.baseAlpha}"; + bg = "#${theme.blueAlpha}"; + }; + preview_hovered = { + fg = "#${theme.baseAlpha}"; + bg = "#${theme.textAlpha}"; + }; + + find_keyword = { + fg = "#${theme.yellowAlpha}"; + italic = true; + }; + find_position = { + fg = "#${theme.pinkAlpha}"; + bg = "reset"; + italic = true; + }; + + marker_copied = { + fg = "#${theme.greenAlpha}"; + bg = "#${theme.greenAlpha}"; + }; + marker_cut = { + fg = "#${theme.redAlpha}"; + bg = "#${theme.redAlpha}"; + }; + marker_marked = { + fg = "#${theme.tealAlpha}"; + bg = "#${theme.tealAlpha}"; + }; + marker_selected = { + fg = "#${theme.blueAlpha}"; + bg = "#${theme.blueAlpha}"; + }; + + tab_active = { + fg = "#${theme.baseAlpha}"; + bg = "#${theme.textAlpha}"; + }; + tab_inactive = { + fg = "#${theme.textAlpha}"; + bg = "#${theme.surface1Alpha}"; + }; + tab_width = 1; + + count_copied = { + fg = "#${theme.baseAlpha}"; + bg = "#${theme.greenAlpha}"; + }; + count_cut = { + fg = "#${theme.baseAlpha}"; + bg = "#${theme.redAlpha}"; + }; + count_selected = { + fg = "#${theme.baseAlpha}"; + bg = "#${theme.blueAlpha}"; + }; + + border_symbol = "│"; + border_style.fg = "#${theme.overlay1Alpha}"; + + syntect_theme = "~/${batTheme}"; + }; + + mode = { + normal_main = { + fg = "#${theme.baseAlpha}"; + bg = "#${theme.blueAlpha}"; + bold = true; + }; + normal_alt = { + fg = "#${theme.blueAlpha}"; + bg = "#${theme.surface0Alpha}"; + }; + + select_main = { + fg = "#${theme.baseAlpha}"; + bg = "#${theme.greenAlpha}"; + bold = true; + }; + select_alt = { + fg = "#${theme.greenAlpha}"; + bg = "#${theme.surface0Alpha}"; + }; + + unset_main = { + fg = "#${theme.baseAlpha}"; + bg = "#${theme.flamingoAlpha}"; + bold = true; + }; + unset_alt = { + fg = "#${theme.flamingoAlpha}"; + bg = "#${theme.surface0Alpha}"; + }; + }; + + status = { + separator_open = ""; + separator_close = ""; + + progress_label = { + fg = "#ffffff"; + bold = true; + }; + progress_normal = { + fg = "#${theme.blueAlpha}"; + bg = "#${theme.surface1Alpha}"; + }; + progress_error = { + fg = "#${theme.redAlpha}"; + bg = "#${theme.surface1Alpha}"; + }; + + perm_type = { + fg = "#${theme.blueAlpha}"; + }; + perm_read = { + fg = "#${theme.yellowAlpha}"; + }; + perm_write = { + fg = "#${theme.redAlpha}"; + }; + perm_exec = { + fg = "#${theme.greenAlpha}"; + }; + perm_sep = { + fg = "#${theme.overlay1Alpha}"; + }; + }; + + input = { + border = { + fg = "#${theme.blueAlpha}"; + }; + title = { }; + value = { }; + selected.reversed = true; + }; + + pick = { + border = { + fg = "#${theme.blueAlpha}"; + }; + active = { + fg = "#${theme.pinkAlpha}"; + }; + inactive = { }; + }; + + confirm = { + border = { + fg = "#${theme.blueAlpha}"; + }; + title = { + fg = "#${theme.blueAlpha}"; + }; + content = { }; + list = { }; + btn_yes = { + reversed = true; + }; + btn_no = { }; + }; + + completion = { + border = { + fg = "#${theme.blueAlpha}"; + }; + }; + tasks = { + border = { + fg = "#${theme.blueAlpha}"; + }; + title = { }; + hovered = { + underline = true; + }; + }; + + which = { + mask = { + bg = "#${theme.surface0Alpha}"; + }; + cand = { + fg = "#${theme.tealAlpha}"; + }; + rest = { + fg = "#9399b2"; + }; + desc = { + fg = "#${theme.pinkAlpha}"; + }; + separator = "  "; + separator_style = { + fg = "#${theme.surface2Alpha}"; + }; + }; + help = { + on = { + fg = "#${theme.tealAlpha}"; + }; + run = { + fg = "#${theme.pinkAlpha}"; + }; + desc = { + fg = "#9399b2"; + }; + hovered = { + bg = "#${theme.surface2Alpha}"; + bold = true; + }; + footer = { + fg = "#${theme.textAlpha}"; + bg = "#${theme.surface1Alpha}"; + }; + }; + + notify = { + title_info = { + fg = "#${theme.tealAlpha}"; + }; + title_warn = { + fg = "#${theme.yellowAlpha}"; + }; + title_error = { + fg = "#${theme.redAlpha}"; + }; + }; + filetype = { + rules = [ + # Media + { + mime = "image/*"; + fg = "#${theme.tealAlpha}"; + } + { + mime = "{audio;video}/*"; + fg = "#${theme.yellowAlpha}"; + } + + # Archives + { + mime = "application/*zip"; + fg = "#${theme.pinkAlpha}"; + } + { + mime = "application/x-{tar;bzip*;7z-compressed;xz;rar}"; + fg = "#${theme.pinkAlpha}"; + } + + # Documents + { + mime = "application/{pdf;doc;rtf}"; + fg = "#${theme.greenAlpha}"; + } + + # Fallback + { + name = "*"; + fg = "#${theme.textAlpha}"; + } + { + name = "*/"; + fg = "#${theme.blueAlpha}"; + } + ]; + }; + + icon = import ./icons.nix; + }; + }; +} diff --git a/hosts/thinkpad/home-manager/yazi/icons.nix b/hosts/thinkpad/home-manager/yazi/icons.nix new file mode 100644 index 0000000..973cac2 --- /dev/null +++ b/hosts/thinkpad/home-manager/yazi/icons.nix @@ -0,0 +1,3146 @@ +{ + files = [ + { + name = "kritadisplayrc"; + text = ""; + fg = "#cba6f7"; + } + { + name = ".gtkrc-2.0"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "bspwmrc"; + text = ""; + fg = "#313244"; + } + { + name = "webpack"; + text = "󰜫"; + fg = "#74c7ec"; + } + { + name = "tsconfig.json"; + text = ""; + fg = "#74c7ec"; + } + { + name = ".vimrc"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "gemfile$"; + text = ""; + fg = "#313244"; + } + { + name = "xmobarrc"; + text = ""; + fg = "#f38ba8"; + } + { + name = "avif"; + text = ""; + fg = "#7f849c"; + } + { + name = "fp-info-cache"; + text = ""; + fg = "#f5e0dc"; + } + { + name = ".zshrc"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "robots.txt"; + text = "󰚩"; + fg = "#6c7086"; + } + { + name = "dockerfile"; + text = "󰡨"; + fg = "#89b4fa"; + } + { + name = ".git-blame-ignore-revs"; + text = ""; + fg = "#fab387"; + } + { + name = ".nvmrc"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "hyprpaper.conf"; + text = ""; + fg = "#74c7ec"; + } + { + name = ".prettierignore"; + text = ""; + fg = "#89b4fa"; + } + { + name = "rakefile"; + text = ""; + fg = "#313244"; + } + { + name = "code_of_conduct"; + text = ""; + fg = "#f38ba8"; + } + { + name = "cmakelists.txt"; + text = ""; + fg = "#cdd6f4"; + } + { + name = ".env"; + text = ""; + fg = "#f9e2af"; + } + { + name = "copying.lesser"; + text = ""; + fg = "#f9e2af"; + } + { + name = "readme"; + text = "󰂺"; + fg = "#f5e0dc"; + } + { + name = "settings.gradle"; + text = ""; + fg = "#585b70"; + } + { + name = "gruntfile.coffee"; + text = ""; + fg = "#fab387"; + } + { + name = ".eslintignore"; + text = ""; + fg = "#585b70"; + } + { + name = "kdenliverc"; + text = ""; + fg = "#89b4fa"; + } + { + name = ".prettierrc.cjs"; + text = ""; + fg = "#89b4fa"; + } + { + name = "cantorrc"; + text = ""; + fg = "#89b4fa"; + } + { + name = "rmd"; + text = ""; + fg = "#74c7ec"; + } + { + name = "vagrantfile$"; + text = ""; + fg = "#6c7086"; + } + { + name = ".Xauthority"; + text = ""; + fg = "#fab387"; + } + { + name = "prettier.config.ts"; + text = ""; + fg = "#89b4fa"; + } + { + name = "node_modules"; + text = ""; + fg = "#f38ba8"; + } + { + name = ".prettierrc.toml"; + text = ""; + fg = "#89b4fa"; + } + { + name = "build.zig.zon"; + text = ""; + fg = "#fab387"; + } + { + name = ".ds_store"; + text = ""; + fg = "#45475a"; + } + { + name = "PKGBUILD"; + text = ""; + fg = "#89b4fa"; + } + { + name = ".prettierrc"; + text = ""; + fg = "#89b4fa"; + } + { + name = ".bash_profile"; + text = ""; + fg = "#a6e3a1"; + } + { + name = ".npmignore"; + text = ""; + fg = "#f38ba8"; + } + { + name = ".mailmap"; + text = "󰊢"; + fg = "#fab387"; + } + { + name = ".codespellrc"; + text = "󰓆"; + fg = "#a6e3a1"; + } + { + name = "svelte.config.js"; + text = ""; + fg = "#fab387"; + } + { + name = "eslint.config.ts"; + text = ""; + fg = "#585b70"; + } + { + name = "config"; + text = ""; + fg = "#7f849c"; + } + { + name = ".gitlab-ci.yml"; + text = ""; + fg = "#fab387"; + } + { + name = ".gitconfig"; + text = ""; + fg = "#fab387"; + } + { + name = "_gvimrc"; + text = ""; + fg = "#a6e3a1"; + } + { + name = ".xinitrc"; + text = ""; + fg = "#fab387"; + } + { + name = "checkhealth"; + text = "󰓙"; + fg = "#89b4fa"; + } + { + name = "sxhkdrc"; + text = ""; + fg = "#313244"; + } + { + name = ".bashrc"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "tailwind.config.mjs"; + text = "󱏿"; + fg = "#74c7ec"; + } + { + name = "ext_typoscript_setup.txt"; + text = ""; + fg = "#fab387"; + } + { + name = "commitlint.config.ts"; + text = "󰜘"; + fg = "#94e2d5"; + } + { + name = "py.typed"; + text = ""; + fg = "#f9e2af"; + } + { + name = ".nanorc"; + text = ""; + fg = "#313244"; + } + { + name = "commit_editmsg"; + text = ""; + fg = "#fab387"; + } + { + name = ".luaurc"; + text = ""; + fg = "#89b4fa"; + } + { + name = "fp-lib-table"; + text = ""; + fg = "#f5e0dc"; + } + { + name = ".editorconfig"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "justfile"; + text = ""; + fg = "#7f849c"; + } + { + name = "kdeglobals"; + text = ""; + fg = "#89b4fa"; + } + { + name = "license.md"; + text = ""; + fg = "#f9e2af"; + } + { + name = ".clang-format"; + text = ""; + fg = "#7f849c"; + } + { + name = "docker-compose.yaml"; + text = "󰡨"; + fg = "#89b4fa"; + } + { + name = "copying"; + text = ""; + fg = "#f9e2af"; + } + { + name = "go.mod"; + text = ""; + fg = "#74c7ec"; + } + { + name = "lxqt.conf"; + text = ""; + fg = "#89b4fa"; + } + { + name = "brewfile"; + text = ""; + fg = "#313244"; + } + { + name = "gulpfile.coffee"; + text = ""; + fg = "#f38ba8"; + } + { + name = ".dockerignore"; + text = "󰡨"; + fg = "#89b4fa"; + } + { + name = ".settings.json"; + text = ""; + fg = "#6c7086"; + } + { + name = "tailwind.config.js"; + text = "󱏿"; + fg = "#74c7ec"; + } + { + name = ".clang-tidy"; + text = ""; + fg = "#7f849c"; + } + { + name = ".gvimrc"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "nuxt.config.cjs"; + text = "󱄆"; + fg = "#a6e3a1"; + } + { + name = "xsettingsd.conf"; + text = ""; + fg = "#fab387"; + } + { + name = "nuxt.config.js"; + text = "󱄆"; + fg = "#a6e3a1"; + } + { + name = "eslint.config.cjs"; + text = ""; + fg = "#585b70"; + } + { + name = "sym-lib-table"; + text = ""; + fg = "#f5e0dc"; + } + { + name = ".condarc"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "xmonad.hs"; + text = ""; + fg = "#f38ba8"; + } + { + name = "tmux.conf"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "xmobarrc.hs"; + text = ""; + fg = "#f38ba8"; + } + { + name = ".prettierrc.yaml"; + text = ""; + fg = "#89b4fa"; + } + { + name = ".pre-commit-config.yaml"; + text = "󰛢"; + fg = "#fab387"; + } + { + name = "i3blocks.conf"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "xorg.conf"; + text = ""; + fg = "#fab387"; + } + { + name = ".zshenv"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "vlcrc"; + text = "󰕼"; + fg = "#fab387"; + } + { + name = "license"; + text = ""; + fg = "#f9e2af"; + } + { + name = "unlicense"; + text = ""; + fg = "#f9e2af"; + } + { + name = "tmux.conf.local"; + text = ""; + fg = "#a6e3a1"; + } + { + name = ".SRCINFO"; + text = "󰣇"; + fg = "#89b4fa"; + } + { + name = "tailwind.config.ts"; + text = "󱏿"; + fg = "#74c7ec"; + } + { + name = "security.md"; + text = "󰒃"; + fg = "#bac2de"; + } + { + name = "security"; + text = "󰒃"; + fg = "#bac2de"; + } + { + name = ".eslintrc"; + text = ""; + fg = "#585b70"; + } + { + name = "gradle.properties"; + text = ""; + fg = "#585b70"; + } + { + name = "code_of_conduct.md"; + text = ""; + fg = "#f38ba8"; + } + { + name = "PrusaSlicerGcodeViewer.ini"; + text = ""; + fg = "#fab387"; + } + { + name = "PrusaSlicer.ini"; + text = ""; + fg = "#fab387"; + } + { + name = "procfile"; + text = ""; + fg = "#7f849c"; + } + { + name = "mpv.conf"; + text = ""; + fg = "#1e1e2e"; + } + { + name = ".prettierrc.json5"; + text = ""; + fg = "#89b4fa"; + } + { + name = "i3status.conf"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "prettier.config.mjs"; + text = ""; + fg = "#89b4fa"; + } + { + name = ".pylintrc"; + text = ""; + fg = "#7f849c"; + } + { + name = "prettier.config.cjs"; + text = ""; + fg = "#89b4fa"; + } + { + name = ".luacheckrc"; + text = ""; + fg = "#89b4fa"; + } + { + name = "containerfile"; + text = "󰡨"; + fg = "#89b4fa"; + } + { + name = "eslint.config.mjs"; + text = ""; + fg = "#585b70"; + } + { + name = "gruntfile.js"; + text = ""; + fg = "#fab387"; + } + { + name = "bun.lockb"; + text = ""; + fg = "#f5e0dc"; + } + { + name = ".gitattributes"; + text = ""; + fg = "#fab387"; + } + { + name = "gruntfile.ts"; + text = ""; + fg = "#fab387"; + } + { + name = "pom.xml"; + text = ""; + fg = "#313244"; + } + { + name = "favicon.ico"; + text = ""; + fg = "#f9e2af"; + } + { + name = "package-lock.json"; + text = ""; + fg = "#313244"; + } + { + name = "build"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "package.json"; + text = ""; + fg = "#f38ba8"; + } + { + name = "nuxt.config.ts"; + text = "󱄆"; + fg = "#a6e3a1"; + } + { + name = "nuxt.config.mjs"; + text = "󱄆"; + fg = "#a6e3a1"; + } + { + name = "mix.lock"; + text = ""; + fg = "#7f849c"; + } + { + name = "makefile"; + text = ""; + fg = "#7f849c"; + } + { + name = "gulpfile.js"; + text = ""; + fg = "#f38ba8"; + } + { + name = "lxde-rc.xml"; + text = ""; + fg = "#9399b2"; + } + { + name = "kritarc"; + text = ""; + fg = "#cba6f7"; + } + { + name = "gtkrc"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "ionic.config.json"; + text = ""; + fg = "#89b4fa"; + } + { + name = ".prettierrc.mjs"; + text = ""; + fg = "#89b4fa"; + } + { + name = ".prettierrc.yml"; + text = ""; + fg = "#89b4fa"; + } + { + name = ".npmrc"; + text = ""; + fg = "#f38ba8"; + } + { + name = "weston.ini"; + text = ""; + fg = "#f9e2af"; + } + { + name = "gulpfile.babel.js"; + text = ""; + fg = "#f38ba8"; + } + { + name = "i18n.config.ts"; + text = "󰗊"; + fg = "#7f849c"; + } + { + name = "commitlint.config.js"; + text = "󰜘"; + fg = "#94e2d5"; + } + { + name = ".gitmodules"; + text = ""; + fg = "#fab387"; + } + { + name = "gradle-wrapper.properties"; + text = ""; + fg = "#585b70"; + } + { + name = "hypridle.conf"; + text = ""; + fg = "#74c7ec"; + } + { + name = "vercel.json"; + text = "▲"; + fg = "#f5e0dc"; + } + { + name = "hyprlock.conf"; + text = ""; + fg = "#74c7ec"; + } + { + name = "go.sum"; + text = ""; + fg = "#74c7ec"; + } + { + name = "kdenlive-layoutsrc"; + text = ""; + fg = "#89b4fa"; + } + { + name = "gruntfile.babel.js"; + text = ""; + fg = "#fab387"; + } + { + name = "compose.yml"; + text = "󰡨"; + fg = "#89b4fa"; + } + { + name = "i18n.config.js"; + text = "󰗊"; + fg = "#7f849c"; + } + { + name = "readme.md"; + text = "󰂺"; + fg = "#f5e0dc"; + } + { + name = "gradlew"; + text = ""; + fg = "#585b70"; + } + { + name = "go.work"; + text = ""; + fg = "#74c7ec"; + } + { + name = "gulpfile.ts"; + text = ""; + fg = "#f38ba8"; + } + { + name = "gnumakefile"; + text = ""; + fg = "#7f849c"; + } + { + name = "FreeCAD.conf"; + text = ""; + fg = "#f38ba8"; + } + { + name = "compose.yaml"; + text = "󰡨"; + fg = "#89b4fa"; + } + { + name = "eslint.config.js"; + text = ""; + fg = "#585b70"; + } + { + name = "hyprland.conf"; + text = ""; + fg = "#74c7ec"; + } + { + name = "docker-compose.yml"; + text = "󰡨"; + fg = "#89b4fa"; + } + { + name = "groovy"; + text = ""; + fg = "#585b70"; + } + { + name = "QtProject.conf"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "platformio.ini"; + text = ""; + fg = "#fab387"; + } + { + name = "build.gradle"; + text = ""; + fg = "#585b70"; + } + { + name = ".nuxtrc"; + text = "󱄆"; + fg = "#a6e3a1"; + } + { + name = "_vimrc"; + text = ""; + fg = "#a6e3a1"; + } + { + name = ".zprofile"; + text = ""; + fg = "#a6e3a1"; + } + { + name = ".xsession"; + text = ""; + fg = "#fab387"; + } + { + name = "prettier.config.js"; + text = ""; + fg = "#89b4fa"; + } + { + name = ".babelrc"; + text = ""; + fg = "#f9e2af"; + } + { + name = "workspace"; + text = ""; + fg = "#a6e3a1"; + } + { + name = ".prettierrc.json"; + text = ""; + fg = "#89b4fa"; + } + { + name = ".prettierrc.js"; + text = ""; + fg = "#89b4fa"; + } + { + name = ".Xresources"; + text = ""; + fg = "#fab387"; + } + { + name = ".gitignore"; + text = ""; + fg = "#fab387"; + } + { + name = ".justfile"; + text = ""; + fg = "#7f849c"; + } + ]; + exts = [ + { + name = "otf"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "import"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "krz"; + text = ""; + fg = "#cba6f7"; + } + { + name = "adb"; + text = ""; + fg = "#94e2d5"; + } + { + name = "ttf"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "webpack"; + text = "󰜫"; + fg = "#74c7ec"; + } + { + name = "dart"; + text = ""; + fg = "#585b70"; + } + { + name = "vsh"; + text = ""; + fg = "#7f849c"; + } + { + name = "doc"; + text = "󰈬"; + fg = "#585b70"; + } + { + name = "zsh"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "ex"; + text = ""; + fg = "#7f849c"; + } + { + name = "hx"; + text = ""; + fg = "#fab387"; + } + { + name = "fodt"; + text = ""; + fg = "#74c7ec"; + } + { + name = "mojo"; + text = ""; + fg = "#fab387"; + } + { + name = "templ"; + text = ""; + fg = "#f9e2af"; + } + { + name = "nix"; + text = ""; + fg = "#74c7ec"; + } + { + name = "cshtml"; + text = "󱦗"; + fg = "#585b70"; + } + { + name = "fish"; + text = ""; + fg = "#585b70"; + } + { + name = "ply"; + text = "󰆧"; + fg = "#7f849c"; + } + { + name = "sldprt"; + text = "󰻫"; + fg = "#a6e3a1"; + } + { + name = "gemspec"; + text = ""; + fg = "#313244"; + } + { + name = "mjs"; + text = ""; + fg = "#f9e2af"; + } + { + name = "csh"; + text = ""; + fg = "#585b70"; + } + { + name = "cmake"; + text = ""; + fg = "#cdd6f4"; + } + { + name = "fodp"; + text = ""; + fg = "#fab387"; + } + { + name = "vi"; + text = ""; + fg = "#f9e2af"; + } + { + name = "msf"; + text = ""; + fg = "#89b4fa"; + } + { + name = "blp"; + text = "󰺾"; + fg = "#89b4fa"; + } + { + name = "less"; + text = ""; + fg = "#45475a"; + } + { + name = "sh"; + text = ""; + fg = "#585b70"; + } + { + name = "odg"; + text = ""; + fg = "#f9e2af"; + } + { + name = "mint"; + text = "󰌪"; + fg = "#a6e3a1"; + } + { + name = "dll"; + text = ""; + fg = "#11111b"; + } + { + name = "odf"; + text = ""; + fg = "#f38ba8"; + } + { + name = "sqlite3"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "Dockerfile"; + text = "󰡨"; + fg = "#89b4fa"; + } + { + name = "ksh"; + text = ""; + fg = "#585b70"; + } + { + name = "rmd"; + text = ""; + fg = "#74c7ec"; + } + { + name = "wv"; + text = ""; + fg = "#74c7ec"; + } + { + name = "xml"; + text = "󰗀"; + fg = "#fab387"; + } + { + name = "markdown"; + text = ""; + fg = "#cdd6f4"; + } + { + name = "qml"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "3gp"; + text = ""; + fg = "#fab387"; + } + { + name = "pxi"; + text = ""; + fg = "#89b4fa"; + } + { + name = "flac"; + text = ""; + fg = "#6c7086"; + } + { + name = "gpr"; + text = ""; + fg = "#cba6f7"; + } + { + name = "huff"; + text = "󰡘"; + fg = "#585b70"; + } + { + name = "json"; + text = ""; + fg = "#f9e2af"; + } + { + name = "gv"; + text = "󱁉"; + fg = "#585b70"; + } + { + name = "bmp"; + text = ""; + fg = "#7f849c"; + } + { + name = "lock"; + text = ""; + fg = "#bac2de"; + } + { + name = "sha384"; + text = "󰕥"; + fg = "#7f849c"; + } + { + name = "cobol"; + text = "⚙"; + fg = "#585b70"; + } + { + name = "cob"; + text = "⚙"; + fg = "#585b70"; + } + { + name = "java"; + text = ""; + fg = "#f38ba8"; + } + { + name = "cjs"; + text = ""; + fg = "#f9e2af"; + } + { + name = "qm"; + text = ""; + fg = "#74c7ec"; + } + { + name = "ebuild"; + text = ""; + fg = "#45475a"; + } + { + name = "mustache"; + text = ""; + fg = "#fab387"; + } + { + name = "terminal"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "ejs"; + text = ""; + fg = "#f9e2af"; + } + { + name = "brep"; + text = "󰻫"; + fg = "#a6e3a1"; + } + { + name = "rar"; + text = ""; + fg = "#fab387"; + } + { + name = "gradle"; + text = ""; + fg = "#585b70"; + } + { + name = "gnumakefile"; + text = ""; + fg = "#7f849c"; + } + { + name = "applescript"; + text = ""; + fg = "#7f849c"; + } + { + name = "elm"; + text = ""; + fg = "#74c7ec"; + } + { + name = "ebook"; + text = ""; + fg = "#fab387"; + } + { + name = "kra"; + text = ""; + fg = "#cba6f7"; + } + { + name = "tf"; + text = ""; + fg = "#585b70"; + } + { + name = "xls"; + text = "󰈛"; + fg = "#585b70"; + } + { + name = "fnl"; + text = ""; + fg = "#f9e2af"; + } + { + name = "kdbx"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "kicad_pcb"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "cfg"; + text = ""; + fg = "#7f849c"; + } + { + name = "ape"; + text = ""; + fg = "#74c7ec"; + } + { + name = "org"; + text = ""; + fg = "#94e2d5"; + } + { + name = "yml"; + text = ""; + fg = "#7f849c"; + } + { + name = "swift"; + text = ""; + fg = "#fab387"; + } + { + name = "eln"; + text = ""; + fg = "#7f849c"; + } + { + name = "sol"; + text = ""; + fg = "#74c7ec"; + } + { + name = "awk"; + text = ""; + fg = "#585b70"; + } + { + name = "7z"; + text = ""; + fg = "#fab387"; + } + { + name = "apl"; + text = "⍝"; + fg = "#fab387"; + } + { + name = "epp"; + text = ""; + fg = "#fab387"; + } + { + name = "app"; + text = ""; + fg = "#45475a"; + } + { + name = "dot"; + text = "󱁉"; + fg = "#585b70"; + } + { + name = "kpp"; + text = ""; + fg = "#cba6f7"; + } + { + name = "eot"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "hpp"; + text = ""; + fg = "#7f849c"; + } + { + name = "spec.tsx"; + text = ""; + fg = "#585b70"; + } + { + name = "hurl"; + text = ""; + fg = "#f38ba8"; + } + { + name = "cxxm"; + text = ""; + fg = "#74c7ec"; + } + { + name = "c"; + text = ""; + fg = "#89b4fa"; + } + { + name = "fcmacro"; + text = ""; + fg = "#f38ba8"; + } + { + name = "sass"; + text = ""; + fg = "#f38ba8"; + } + { + name = "yaml"; + text = ""; + fg = "#7f849c"; + } + { + name = "xz"; + text = ""; + fg = "#fab387"; + } + { + name = "material"; + text = "󰔉"; + fg = "#f38ba8"; + } + { + name = "json5"; + text = ""; + fg = "#f9e2af"; + } + { + name = "signature"; + text = "λ"; + fg = "#fab387"; + } + { + name = "3mf"; + text = "󰆧"; + fg = "#7f849c"; + } + { + name = "jpg"; + text = ""; + fg = "#7f849c"; + } + { + name = "xpi"; + text = ""; + fg = "#fab387"; + } + { + name = "fcmat"; + text = ""; + fg = "#f38ba8"; + } + { + name = "pot"; + text = ""; + fg = "#74c7ec"; + } + { + name = "bin"; + text = ""; + fg = "#45475a"; + } + { + name = "xlsx"; + text = "󰈛"; + fg = "#585b70"; + } + { + name = "aac"; + text = ""; + fg = "#74c7ec"; + } + { + name = "kicad_sym"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "xcstrings"; + text = ""; + fg = "#74c7ec"; + } + { + name = "lff"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "xcf"; + text = ""; + fg = "#585b70"; + } + { + name = "azcli"; + text = ""; + fg = "#6c7086"; + } + { + name = "license"; + text = ""; + fg = "#f9e2af"; + } + { + name = "jsonc"; + text = ""; + fg = "#f9e2af"; + } + { + name = "xaml"; + text = "󰙳"; + fg = "#585b70"; + } + { + name = "md5"; + text = "󰕥"; + fg = "#7f849c"; + } + { + name = "xm"; + text = ""; + fg = "#74c7ec"; + } + { + name = "sln"; + text = ""; + fg = "#6c7086"; + } + { + name = "jl"; + text = ""; + fg = "#7f849c"; + } + { + name = "ml"; + text = ""; + fg = "#fab387"; + } + { + name = "http"; + text = ""; + fg = "#89b4fa"; + } + { + name = "x"; + text = ""; + fg = "#89b4fa"; + } + { + name = "wvc"; + text = ""; + fg = "#74c7ec"; + } + { + name = "wrz"; + text = "󰆧"; + fg = "#7f849c"; + } + { + name = "csproj"; + text = "󰪮"; + fg = "#585b70"; + } + { + name = "wrl"; + text = "󰆧"; + fg = "#7f849c"; + } + { + name = "wma"; + text = ""; + fg = "#74c7ec"; + } + { + name = "woff2"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "woff"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "tscn"; + text = ""; + fg = "#7f849c"; + } + { + name = "webmanifest"; + text = ""; + fg = "#f9e2af"; + } + { + name = "webm"; + text = ""; + fg = "#fab387"; + } + { + name = "fcbak"; + text = ""; + fg = "#f38ba8"; + } + { + name = "log"; + text = "󰌱"; + fg = "#cdd6f4"; + } + { + name = "wav"; + text = ""; + fg = "#74c7ec"; + } + { + name = "wasm"; + text = ""; + fg = "#585b70"; + } + { + name = "styl"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "gif"; + text = ""; + fg = "#7f849c"; + } + { + name = "resi"; + text = ""; + fg = "#f38ba8"; + } + { + name = "aiff"; + text = ""; + fg = "#74c7ec"; + } + { + name = "sha256"; + text = "󰕥"; + fg = "#7f849c"; + } + { + name = "igs"; + text = "󰻫"; + fg = "#a6e3a1"; + } + { + name = "vsix"; + text = ""; + fg = "#6c7086"; + } + { + name = "vim"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "diff"; + text = ""; + fg = "#45475a"; + } + { + name = "drl"; + text = ""; + fg = "#eba0ac"; + } + { + name = "erl"; + text = ""; + fg = "#f38ba8"; + } + { + name = "vhdl"; + text = "󰍛"; + fg = "#a6e3a1"; + } + { + name = "🔥"; + text = ""; + fg = "#fab387"; + } + { + name = "hrl"; + text = ""; + fg = "#f38ba8"; + } + { + name = "fsi"; + text = ""; + fg = "#74c7ec"; + } + { + name = "mm"; + text = ""; + fg = "#74c7ec"; + } + { + name = "bz"; + text = ""; + fg = "#fab387"; + } + { + name = "vh"; + text = "󰍛"; + fg = "#a6e3a1"; + } + { + name = "kdb"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "gz"; + text = ""; + fg = "#fab387"; + } + { + name = "cpp"; + text = ""; + fg = "#74c7ec"; + } + { + name = "ui"; + text = ""; + fg = "#6c7086"; + } + { + name = "txt"; + text = "󰈙"; + fg = "#a6e3a1"; + } + { + name = "spec.ts"; + text = ""; + fg = "#74c7ec"; + } + { + name = "ccm"; + text = ""; + fg = "#f38ba8"; + } + { + name = "typoscript"; + text = ""; + fg = "#fab387"; + } + { + name = "typ"; + text = ""; + fg = "#89dceb"; + } + { + name = "txz"; + text = ""; + fg = "#fab387"; + } + { + name = "test.ts"; + text = ""; + fg = "#74c7ec"; + } + { + name = "tsx"; + text = ""; + fg = "#585b70"; + } + { + name = "mk"; + text = ""; + fg = "#7f849c"; + } + { + name = "webp"; + text = ""; + fg = "#7f849c"; + } + { + name = "opus"; + text = ""; + fg = "#6c7086"; + } + { + name = "bicep"; + text = ""; + fg = "#74c7ec"; + } + { + name = "ts"; + text = ""; + fg = "#74c7ec"; + } + { + name = "tres"; + text = ""; + fg = "#7f849c"; + } + { + name = "torrent"; + text = ""; + fg = "#94e2d5"; + } + { + name = "cxx"; + text = ""; + fg = "#74c7ec"; + } + { + name = "iso"; + text = ""; + fg = "#f2cdcd"; + } + { + name = "ixx"; + text = ""; + fg = "#74c7ec"; + } + { + name = "hxx"; + text = ""; + fg = "#7f849c"; + } + { + name = "gql"; + text = ""; + fg = "#f38ba8"; + } + { + name = "tmux"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "ini"; + text = ""; + fg = "#7f849c"; + } + { + name = "m3u8"; + text = "󰲹"; + fg = "#f38ba8"; + } + { + name = "image"; + text = ""; + fg = "#f2cdcd"; + } + { + name = "tfvars"; + text = ""; + fg = "#585b70"; + } + { + name = "tex"; + text = ""; + fg = "#45475a"; + } + { + name = "cbl"; + text = "⚙"; + fg = "#585b70"; + } + { + name = "flc"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "elc"; + text = ""; + fg = "#7f849c"; + } + { + name = "test.tsx"; + text = ""; + fg = "#585b70"; + } + { + name = "twig"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "sql"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "test.jsx"; + text = ""; + fg = "#74c7ec"; + } + { + name = "htm"; + text = ""; + fg = "#fab387"; + } + { + name = "gcode"; + text = "󰐫"; + fg = "#6c7086"; + } + { + name = "test.js"; + text = ""; + fg = "#f9e2af"; + } + { + name = "ino"; + text = ""; + fg = "#74c7ec"; + } + { + name = "tcl"; + text = "󰛓"; + fg = "#585b70"; + } + { + name = "cljs"; + text = ""; + fg = "#74c7ec"; + } + { + name = "tsconfig"; + text = ""; + fg = "#fab387"; + } + { + name = "img"; + text = ""; + fg = "#f2cdcd"; + } + { + name = "t"; + text = ""; + fg = "#74c7ec"; + } + { + name = "fcstd1"; + text = ""; + fg = "#f38ba8"; + } + { + name = "out"; + text = ""; + fg = "#45475a"; + } + { + name = "jsx"; + text = ""; + fg = "#74c7ec"; + } + { + name = "bash"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "edn"; + text = ""; + fg = "#74c7ec"; + } + { + name = "rss"; + text = ""; + fg = "#fab387"; + } + { + name = "flf"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "cache"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "sbt"; + text = ""; + fg = "#f38ba8"; + } + { + name = "cppm"; + text = ""; + fg = "#74c7ec"; + } + { + name = "svelte"; + text = ""; + fg = "#fab387"; + } + { + name = "mo"; + text = "∞"; + fg = "#7f849c"; + } + { + name = "sv"; + text = "󰍛"; + fg = "#a6e3a1"; + } + { + name = "ko"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "suo"; + text = ""; + fg = "#6c7086"; + } + { + name = "sldasm"; + text = "󰻫"; + fg = "#a6e3a1"; + } + { + name = "icalendar"; + text = ""; + fg = "#313244"; + } + { + name = "go"; + text = ""; + fg = "#74c7ec"; + } + { + name = "sublime"; + text = ""; + fg = "#fab387"; + } + { + name = "stl"; + text = "󰆧"; + fg = "#7f849c"; + } + { + name = "mobi"; + text = ""; + fg = "#fab387"; + } + { + name = "graphql"; + text = ""; + fg = "#f38ba8"; + } + { + name = "m3u"; + text = "󰲹"; + fg = "#f38ba8"; + } + { + name = "cpy"; + text = "⚙"; + fg = "#585b70"; + } + { + name = "kdenlive"; + text = ""; + fg = "#89b4fa"; + } + { + name = "pyo"; + text = ""; + fg = "#f9e2af"; + } + { + name = "po"; + text = ""; + fg = "#74c7ec"; + } + { + name = "scala"; + text = ""; + fg = "#f38ba8"; + } + { + name = "exs"; + text = ""; + fg = "#7f849c"; + } + { + name = "odp"; + text = ""; + fg = "#fab387"; + } + { + name = "dump"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "stp"; + text = "󰻫"; + fg = "#a6e3a1"; + } + { + name = "step"; + text = "󰻫"; + fg = "#a6e3a1"; + } + { + name = "ste"; + text = "󰻫"; + fg = "#a6e3a1"; + } + { + name = "aif"; + text = ""; + fg = "#74c7ec"; + } + { + name = "strings"; + text = ""; + fg = "#74c7ec"; + } + { + name = "cp"; + text = ""; + fg = "#74c7ec"; + } + { + name = "fsscript"; + text = ""; + fg = "#74c7ec"; + } + { + name = "mli"; + text = ""; + fg = "#fab387"; + } + { + name = "bak"; + text = "󰁯"; + fg = "#7f849c"; + } + { + name = "ssa"; + text = "󰨖"; + fg = "#f9e2af"; + } + { + name = "toml"; + text = ""; + fg = "#585b70"; + } + { + name = "makefile"; + text = ""; + fg = "#7f849c"; + } + { + name = "php"; + text = ""; + fg = "#7f849c"; + } + { + name = "zst"; + text = ""; + fg = "#fab387"; + } + { + name = "spec.jsx"; + text = ""; + fg = "#74c7ec"; + } + { + name = "kbx"; + text = "󰯄"; + fg = "#6c7086"; + } + { + name = "fbx"; + text = "󰆧"; + fg = "#7f849c"; + } + { + name = "blend"; + text = "󰂫"; + fg = "#fab387"; + } + { + name = "ifc"; + text = "󰻫"; + fg = "#a6e3a1"; + } + { + name = "spec.js"; + text = ""; + fg = "#f9e2af"; + } + { + name = "so"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "desktop"; + text = ""; + fg = "#45475a"; + } + { + name = "sml"; + text = "λ"; + fg = "#fab387"; + } + { + name = "slvs"; + text = "󰻫"; + fg = "#a6e3a1"; + } + { + name = "pp"; + text = ""; + fg = "#fab387"; + } + { + name = "ps1"; + text = "󰨊"; + fg = "#6c7086"; + } + { + name = "dropbox"; + text = ""; + fg = "#6c7086"; + } + { + name = "kicad_mod"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "bat"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "slim"; + text = ""; + fg = "#fab387"; + } + { + name = "skp"; + text = "󰻫"; + fg = "#a6e3a1"; + } + { + name = "css"; + text = ""; + fg = "#89b4fa"; + } + { + name = "xul"; + text = ""; + fg = "#fab387"; + } + { + name = "ige"; + text = "󰻫"; + fg = "#a6e3a1"; + } + { + name = "glb"; + text = ""; + fg = "#fab387"; + } + { + name = "ppt"; + text = "󰈧"; + fg = "#f38ba8"; + } + { + name = "sha512"; + text = "󰕥"; + fg = "#7f849c"; + } + { + name = "ics"; + text = ""; + fg = "#313244"; + } + { + name = "mdx"; + text = ""; + fg = "#74c7ec"; + } + { + name = "sha1"; + text = "󰕥"; + fg = "#7f849c"; + } + { + name = "f3d"; + text = "󰻫"; + fg = "#a6e3a1"; + } + { + name = "ass"; + text = "󰨖"; + fg = "#f9e2af"; + } + { + name = "godot"; + text = ""; + fg = "#7f849c"; + } + { + name = "ifb"; + text = ""; + fg = "#313244"; + } + { + name = "cson"; + text = ""; + fg = "#f9e2af"; + } + { + name = "lib"; + text = ""; + fg = "#11111b"; + } + { + name = "luac"; + text = ""; + fg = "#74c7ec"; + } + { + name = "heex"; + text = ""; + fg = "#7f849c"; + } + { + name = "scm"; + text = "󰘧"; + fg = "#f5e0dc"; + } + { + name = "psd1"; + text = "󰨊"; + fg = "#7f849c"; + } + { + name = "sc"; + text = ""; + fg = "#f38ba8"; + } + { + name = "scad"; + text = ""; + fg = "#f9e2af"; + } + { + name = "kts"; + text = ""; + fg = "#6c7086"; + } + { + name = "svh"; + text = "󰍛"; + fg = "#a6e3a1"; + } + { + name = "mts"; + text = ""; + fg = "#74c7ec"; + } + { + name = "nfo"; + text = ""; + fg = "#f9e2af"; + } + { + name = "pck"; + text = ""; + fg = "#7f849c"; + } + { + name = "rproj"; + text = "󰗆"; + fg = "#a6e3a1"; + } + { + name = "rlib"; + text = ""; + fg = "#fab387"; + } + { + name = "cljd"; + text = ""; + fg = "#74c7ec"; + } + { + name = "ods"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "res"; + text = ""; + fg = "#f38ba8"; + } + { + name = "apk"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "haml"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "d.ts"; + text = ""; + fg = "#fab387"; + } + { + name = "razor"; + text = "󱦘"; + fg = "#585b70"; + } + { + name = "rake"; + text = ""; + fg = "#313244"; + } + { + name = "patch"; + text = ""; + fg = "#45475a"; + } + { + name = "cuh"; + text = ""; + fg = "#7f849c"; + } + { + name = "d"; + text = ""; + fg = "#f38ba8"; + } + { + name = "query"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "psb"; + text = ""; + fg = "#74c7ec"; + } + { + name = "nu"; + text = ">"; + fg = "#a6e3a1"; + } + { + name = "mov"; + text = ""; + fg = "#fab387"; + } + { + name = "lrc"; + text = "󰨖"; + fg = "#f9e2af"; + } + { + name = "pyx"; + text = ""; + fg = "#89b4fa"; + } + { + name = "pyw"; + text = ""; + fg = "#89b4fa"; + } + { + name = "cu"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "bazel"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "obj"; + text = "󰆧"; + fg = "#7f849c"; + } + { + name = "pyi"; + text = ""; + fg = "#f9e2af"; + } + { + name = "pyd"; + text = ""; + fg = "#f9e2af"; + } + { + name = "exe"; + text = ""; + fg = "#45475a"; + } + { + name = "pyc"; + text = ""; + fg = "#f9e2af"; + } + { + name = "fctb"; + text = ""; + fg = "#f38ba8"; + } + { + name = "part"; + text = ""; + fg = "#94e2d5"; + } + { + name = "blade.php"; + text = ""; + fg = "#f38ba8"; + } + { + name = "git"; + text = ""; + fg = "#fab387"; + } + { + name = "psd"; + text = ""; + fg = "#74c7ec"; + } + { + name = "qss"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "csv"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "psm1"; + text = "󰨊"; + fg = "#7f849c"; + } + { + name = "dconf"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "config.ru"; + text = ""; + fg = "#313244"; + } + { + name = "prisma"; + text = ""; + fg = "#6c7086"; + } + { + name = "conf"; + text = ""; + fg = "#7f849c"; + } + { + name = "clj"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "o"; + text = ""; + fg = "#45475a"; + } + { + name = "mp4"; + text = ""; + fg = "#fab387"; + } + { + name = "cc"; + text = ""; + fg = "#f38ba8"; + } + { + name = "kicad_prl"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "bz3"; + text = ""; + fg = "#fab387"; + } + { + name = "asc"; + text = "󰦝"; + fg = "#6c7086"; + } + { + name = "png"; + text = ""; + fg = "#7f849c"; + } + { + name = "android"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "pm"; + text = ""; + fg = "#74c7ec"; + } + { + name = "h"; + text = ""; + fg = "#7f849c"; + } + { + name = "pls"; + text = "󰲹"; + fg = "#f38ba8"; + } + { + name = "ipynb"; + text = ""; + fg = "#fab387"; + } + { + name = "pl"; + text = ""; + fg = "#74c7ec"; + } + { + name = "ads"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "sqlite"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "pdf"; + text = ""; + fg = "#585b70"; + } + { + name = "pcm"; + text = ""; + fg = "#6c7086"; + } + { + name = "ico"; + text = ""; + fg = "#f9e2af"; + } + { + name = "a"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "R"; + text = "󰟔"; + fg = "#6c7086"; + } + { + name = "ogg"; + text = ""; + fg = "#6c7086"; + } + { + name = "pxd"; + text = ""; + fg = "#89b4fa"; + } + { + name = "kdenlivetitle"; + text = ""; + fg = "#89b4fa"; + } + { + name = "jxl"; + text = ""; + fg = "#7f849c"; + } + { + name = "nswag"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "nim"; + text = ""; + fg = "#f9e2af"; + } + { + name = "bqn"; + text = "⎉"; + fg = "#6c7086"; + } + { + name = "cts"; + text = ""; + fg = "#74c7ec"; + } + { + name = "fcparam"; + text = ""; + fg = "#f38ba8"; + } + { + name = "rs"; + text = ""; + fg = "#fab387"; + } + { + name = "mpp"; + text = ""; + fg = "#74c7ec"; + } + { + name = "fdmdownload"; + text = ""; + fg = "#94e2d5"; + } + { + name = "pptx"; + text = "󰈧"; + fg = "#f38ba8"; + } + { + name = "jpeg"; + text = ""; + fg = "#7f849c"; + } + { + name = "bib"; + text = "󱉟"; + fg = "#f9e2af"; + } + { + name = "vhd"; + text = "󰍛"; + fg = "#a6e3a1"; + } + { + name = "m"; + text = ""; + fg = "#89b4fa"; + } + { + name = "js"; + text = ""; + fg = "#f9e2af"; + } + { + name = "eex"; + text = ""; + fg = "#7f849c"; + } + { + name = "tbc"; + text = "󰛓"; + fg = "#585b70"; + } + { + name = "astro"; + text = ""; + fg = "#f38ba8"; + } + { + name = "sha224"; + text = "󰕥"; + fg = "#7f849c"; + } + { + name = "xcplayground"; + text = ""; + fg = "#fab387"; + } + { + name = "el"; + text = ""; + fg = "#7f849c"; + } + { + name = "m4v"; + text = ""; + fg = "#fab387"; + } + { + name = "m4a"; + text = ""; + fg = "#74c7ec"; + } + { + name = "cs"; + text = "󰌛"; + fg = "#585b70"; + } + { + name = "hs"; + text = ""; + fg = "#7f849c"; + } + { + name = "tgz"; + text = ""; + fg = "#fab387"; + } + { + name = "fs"; + text = ""; + fg = "#74c7ec"; + } + { + name = "luau"; + text = ""; + fg = "#89b4fa"; + } + { + name = "dxf"; + text = "󰻫"; + fg = "#a6e3a1"; + } + { + name = "download"; + text = ""; + fg = "#94e2d5"; + } + { + name = "cast"; + text = ""; + fg = "#fab387"; + } + { + name = "qrc"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "lua"; + text = ""; + fg = "#74c7ec"; + } + { + name = "lhs"; + text = ""; + fg = "#7f849c"; + } + { + name = "md"; + text = ""; + fg = "#cdd6f4"; + } + { + name = "leex"; + text = ""; + fg = "#7f849c"; + } + { + name = "ai"; + text = ""; + fg = "#f9e2af"; + } + { + name = "lck"; + text = ""; + fg = "#bac2de"; + } + { + name = "kt"; + text = ""; + fg = "#6c7086"; + } + { + name = "bicepparam"; + text = ""; + fg = "#7f849c"; + } + { + name = "hex"; + text = ""; + fg = "#6c7086"; + } + { + name = "zig"; + text = ""; + fg = "#fab387"; + } + { + name = "bzl"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "cljc"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "kicad_dru"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "fctl"; + text = ""; + fg = "#f38ba8"; + } + { + name = "f#"; + text = ""; + fg = "#74c7ec"; + } + { + name = "odt"; + text = ""; + fg = "#74c7ec"; + } + { + name = "conda"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "vala"; + text = ""; + fg = "#585b70"; + } + { + name = "erb"; + text = ""; + fg = "#313244"; + } + { + name = "mp3"; + text = ""; + fg = "#74c7ec"; + } + { + name = "bz2"; + text = ""; + fg = "#fab387"; + } + { + name = "coffee"; + text = ""; + fg = "#f9e2af"; + } + { + name = "cr"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "f90"; + text = "󱈚"; + fg = "#585b70"; + } + { + name = "jwmrc"; + text = ""; + fg = "#6c7086"; + } + { + name = "c++"; + text = ""; + fg = "#f38ba8"; + } + { + name = "fcscript"; + text = ""; + fg = "#f38ba8"; + } + { + name = "fods"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "cue"; + text = "󰲹"; + fg = "#f38ba8"; + } + { + name = "srt"; + text = "󰨖"; + fg = "#f9e2af"; + } + { + name = "info"; + text = ""; + fg = "#f9e2af"; + } + { + name = "hh"; + text = ""; + fg = "#7f849c"; + } + { + name = "sig"; + text = "λ"; + fg = "#fab387"; + } + { + name = "html"; + text = ""; + fg = "#fab387"; + } + { + name = "iges"; + text = "󰻫"; + fg = "#a6e3a1"; + } + { + name = "kicad_wks"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "hbs"; + text = ""; + fg = "#fab387"; + } + { + name = "fcstd"; + text = ""; + fg = "#f38ba8"; + } + { + name = "gresource"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "sub"; + text = "󰨖"; + fg = "#f9e2af"; + } + { + name = "ical"; + text = ""; + fg = "#313244"; + } + { + name = "crdownload"; + text = ""; + fg = "#94e2d5"; + } + { + name = "pub"; + text = "󰷖"; + fg = "#f9e2af"; + } + { + name = "vue"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "gd"; + text = ""; + fg = "#7f849c"; + } + { + name = "fsx"; + text = ""; + fg = "#74c7ec"; + } + { + name = "mkv"; + text = ""; + fg = "#fab387"; + } + { + name = "py"; + text = ""; + fg = "#f9e2af"; + } + { + name = "kicad_sch"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "epub"; + text = ""; + fg = "#fab387"; + } + { + name = "env"; + text = ""; + fg = "#f9e2af"; + } + { + name = "magnet"; + text = ""; + fg = "#45475a"; + } + { + name = "elf"; + text = ""; + fg = "#45475a"; + } + { + name = "fodg"; + text = ""; + fg = "#f9e2af"; + } + { + name = "svg"; + text = "󰜡"; + fg = "#fab387"; + } + { + name = "dwg"; + text = "󰻫"; + fg = "#a6e3a1"; + } + { + name = "docx"; + text = "󰈬"; + fg = "#585b70"; + } + { + name = "pro"; + text = ""; + fg = "#f9e2af"; + } + { + name = "db"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "rb"; + text = ""; + fg = "#313244"; + } + { + name = "r"; + text = "󰟔"; + fg = "#6c7086"; + } + { + name = "scss"; + text = ""; + fg = "#f38ba8"; + } + { + name = "cow"; + text = "󰆚"; + fg = "#fab387"; + } + { + name = "gleam"; + text = ""; + fg = "#f5c2e7"; + } + { + name = "v"; + text = "󰍛"; + fg = "#a6e3a1"; + } + { + name = "kicad_pro"; + text = ""; + fg = "#f5e0dc"; + } + { + name = "liquid"; + text = ""; + fg = "#a6e3a1"; + } + { + name = "zip"; + text = ""; + fg = "#fab387"; + } + ]; +} diff --git a/hosts/thinkpad/home-manager/zen/chrome/userChrome.css b/hosts/thinkpad/home-manager/zen/chrome/userChrome.css new file mode 100644 index 0000000..b37a865 --- /dev/null +++ b/hosts/thinkpad/home-manager/zen/chrome/userChrome.css @@ -0,0 +1,113 @@ +/* Catppuccin Mocha Blue userChrome.css*/ + +@media (prefers-color-scheme: dark) { + :root { + --zen-colors-primary: #313244 !important; + --zen-primary-color: #89b4fa !important; + --zen-colors-secondary: #313244 !important; + --zen-colors-tertiary: #181825 !important; + --zen-colors-border: #89b4fa !important; + --toolbarbutton-icon-fill: #89b4fa !important; + --lwt-text-color: #cdd6f4 !important; + --toolbar-field-color: #cdd6f4 !important; + --tab-selected-textcolor: rgb(171, 197, 247) !important; + --toolbar-field-focus-color: #cdd6f4 !important; + --toolbar-color: #cdd6f4 !important; + --newtab-text-primary-color: #cdd6f4 !important; + --arrowpanel-color: #cdd6f4 !important; + --arrowpanel-background: #1e1e2e !important; + --sidebar-text-color: #cdd6f4 !important; + --lwt-sidebar-text-color: #cdd6f4 !important; + --lwt-sidebar-background-color: #11111b !important; + --toolbar-bgcolor: #313244 !important; + --newtab-background-color: #1e1e2e !important; + --zen-themed-toolbar-bg: #181825 !important; + --zen-main-browser-background: #181825 !important; + } + + #permissions-granted-icon { + color: #181825 !important; + } + + .sidebar-placesTree { + background-color: #1e1e2e !important; + } + + #zen-workspaces-button { + background-color: #1e1e2e !important; + } + + #TabsToolbar { + background-color: #181825 !important; + } + + #urlbar-background { + background-color: #1e1e2e !important; + } + + .content-shortcuts { + background-color: #1e1e2e !important; + border-color: #89b4fa !important; + } + + .urlbarView-url { + color: #89b4fa !important; + } + + #zenEditBookmarkPanelFaviconContainer { + background: #11111b !important; + } + + toolbar .toolbarbutton-1 { + &:not([disabled]) { + &:is([open], [checked]) + > :is( + .toolbarbutton-icon, + .toolbarbutton-text, + .toolbarbutton-badge-stack + ) { + fill: #11111b; + } + } + } + + .identity-color-blue { + --identity-tab-color: #89b4fa !important; + --identity-icon-color: #89b4fa !important; + } + + .identity-color-turquoise { + --identity-tab-color: #94e2d5 !important; + --identity-icon-color: #94e2d5 !important; + } + + .identity-color-green { + --identity-tab-color: #a6e3a1 !important; + --identity-icon-color: #a6e3a1 !important; + } + + .identity-color-yellow { + --identity-tab-color: #f9e2af !important; + --identity-icon-color: #f9e2af !important; + } + + .identity-color-orange { + --identity-tab-color: #fab387 !important; + --identity-icon-color: #fab387 !important; + } + + .identity-color-red { + --identity-tab-color: #f38ba8 !important; + --identity-icon-color: #f38ba8 !important; + } + + .identity-color-pink { + --identity-tab-color: #f5c2e7 !important; + --identity-icon-color: #f5c2e7 !important; + } + + .identity-color-purple { + --identity-tab-color: #cba6f7 !important; + --identity-icon-color: #cba6f7 !important; + } +} diff --git a/hosts/thinkpad/home-manager/zen/chrome/userContent.css b/hosts/thinkpad/home-manager/zen/chrome/userContent.css new file mode 100644 index 0000000..036655d --- /dev/null +++ b/hosts/thinkpad/home-manager/zen/chrome/userContent.css @@ -0,0 +1,158 @@ +/* Catppuccin Mocha Blue userContent.css*/ + +@media (prefers-color-scheme: dark) { + /* Common variables affecting all pages */ + @-moz-document url-prefix("about:") { + :root { + --in-content-page-color: #cdd6f4 !important; + --color-accent-primary: #89b4fa !important; + --color-accent-primary-hover: rgb(163, 197, 251) !important; + --color-accent-primary-active: rgb(138, 153, 250) !important; + background-color: #1e1e2e !important; + --in-content-page-background: #1e1e2e !important; + } + } + + /* Variables and styles specific to about:newtab and about:home */ + @-moz-document url("about:newtab"), url("about:home") { + :root { + --newtab-background-color: #1e1e2e !important; + --newtab-background-color-secondary: #313244 !important; + --newtab-element-hover-color: #313244 !important; + --newtab-text-primary-color: #cdd6f4 !important; + --newtab-wordmark-color: #cdd6f4 !important; + --newtab-primary-action-background: #89b4fa !important; + } + + .icon { + color: #89b4fa !important; + } + + .search-wrapper .logo-and-wordmark .logo { + background: + url("zen-logo-mocha.svg"), + url("https://raw.githubusercontent.com/IAmJafeth/zen-browser/main/themes/Mocha/Blue/zen-logo-mocha.svg") + no-repeat center !important; + display: inline-block !important; + height: 82px !important; + width: 82px !important; + background-size: 82px !important; + } + + @media (max-width: 609px) { + .search-wrapper .logo-and-wordmark .logo { + background-size: 64px !important; + height: 64px !important; + width: 64px !important; + } + } + + .card-outer:is(:hover, :focus, .active):not(.placeholder) .card-title { + color: #89b4fa !important; + } + + .top-site-outer .search-topsite { + background-color: #89b4fa !important; + } + + .compact-cards .card-outer .card-context .card-context-icon.icon-download { + fill: #a6e3a1 !important; + } + } + + /* Variables and styles specific to about:preferences */ + @-moz-document url-prefix("about:preferences") { + :root { + --zen-colors-tertiary: #181825 !important; + --in-content-text-color: #cdd6f4 !important; + --link-color: #89b4fa !important; + --link-color-hover: rgb(163, 197, 251) !important; + --zen-colors-primary: #313244 !important; + --in-content-box-background: #313244 !important; + --zen-primary-color: #89b4fa !important; + } + + groupbox, + moz-card { + background: #1e1e2e !important; + } + + button, + groupbox menulist { + background: #313244 !important; + color: #cdd6f4 !important; + } + + .main-content { + background-color: #11111b !important; + } + + .identity-color-blue { + --identity-tab-color: #8aadf4 !important; + --identity-icon-color: #8aadf4 !important; + } + + .identity-color-turquoise { + --identity-tab-color: #8bd5ca !important; + --identity-icon-color: #8bd5ca !important; + } + + .identity-color-green { + --identity-tab-color: #a6da95 !important; + --identity-icon-color: #a6da95 !important; + } + + .identity-color-yellow { + --identity-tab-color: #eed49f !important; + --identity-icon-color: #eed49f !important; + } + + .identity-color-orange { + --identity-tab-color: #f5a97f !important; + --identity-icon-color: #f5a97f !important; + } + + .identity-color-red { + --identity-tab-color: #ed8796 !important; + --identity-icon-color: #ed8796 !important; + } + + .identity-color-pink { + --identity-tab-color: #f5bde6 !important; + --identity-icon-color: #f5bde6 !important; + } + + .identity-color-purple { + --identity-tab-color: #c6a0f6 !important; + --identity-icon-color: #c6a0f6 !important; + } + } + + /* Variables and styles specific to about:addons */ + @-moz-document url-prefix("about:addons") { + :root { + --zen-dark-color-mix-base: #181825 !important; + --background-color-box: #1e1e2e !important; + } + } + + /* Variables and styles specific to about:protections */ + @-moz-document url-prefix("about:protections") { + :root { + --zen-primary-color: #1e1e2e !important; + --social-color: #cba6f7 !important; + --coockie-color: #89dceb !important; + --fingerprinter-color: #f9e2af !important; + --cryptominer-color: #b4befe !important; + --tracker-color: #a6e3a1 !important; + --in-content-primary-button-background-hover: rgb(81, 83, 105) !important; + --in-content-primary-button-text-color-hover: #cdd6f4 !important; + --in-content-primary-button-background: #45475a !important; + --in-content-primary-button-text-color: #cdd6f4 !important; + } + + .card { + background-color: #313244 !important; + } + } +} diff --git a/hosts/thinkpad/home-manager/zen/chrome/zen-logo.svg b/hosts/thinkpad/home-manager/zen/chrome/zen-logo.svg new file mode 100644 index 0000000..3038ff2 --- /dev/null +++ b/hosts/thinkpad/home-manager/zen/chrome/zen-logo.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/hosts/thinkpad/home-manager/zen/default.nix b/hosts/thinkpad/home-manager/zen/default.nix new file mode 100644 index 0000000..12c5207 --- /dev/null +++ b/hosts/thinkpad/home-manager/zen/default.nix @@ -0,0 +1,12 @@ +{ pkgs, inputs, ... }: + +{ + # TODO programatically get default name + home = { + file.".zen/xdaxqlov.default/chrome" = { + source = ./chrome; + recursive = true; + }; + packages = with pkgs; [ inputs.zen-browser.packages.${system}.default ]; # Beta + }; +} diff --git a/hosts/thinkpad/modules/battery.nix b/hosts/thinkpad/modules/battery.nix new file mode 100644 index 0000000..0dbad90 --- /dev/null +++ b/hosts/thinkpad/modules/battery.nix @@ -0,0 +1,6 @@ +{ + services = { + upower.enable = true; + power-profiles-daemon.enable = true; + }; +} diff --git a/hosts/thinkpad/modules/bluetooth.nix b/hosts/thinkpad/modules/bluetooth.nix new file mode 100644 index 0000000..a11b59f --- /dev/null +++ b/hosts/thinkpad/modules/bluetooth.nix @@ -0,0 +1,14 @@ +{ pkgs, ... }: + +{ + environment.systemPackages = [ + pkgs.bluez + ]; + + hardware.bluetooth = { + enable = true; + powerOnBoot = true; # powers up the default Bluetooth controller on boot + }; + + services.blueman.enable = true; +} diff --git a/hosts/thinkpad/modules/default.nix b/hosts/thinkpad/modules/default.nix new file mode 100644 index 0000000..de7f5de --- /dev/null +++ b/hosts/thinkpad/modules/default.nix @@ -0,0 +1,19 @@ +{ + imports = [ + ./battery.nix + ./bluetooth.nix + ./development.nix + ./fonts.nix + ./gaming + ./gnome + ./hardware + ./locale.nix + ./networking.nix + ./nix-helper.nix + ./hyprland + ./sddm.nix + ./security.nix + ./shell.nix + ./qt.nix + ]; +} diff --git a/hosts/thinkpad/modules/development.nix b/hosts/thinkpad/modules/development.nix new file mode 100644 index 0000000..d0cde6b --- /dev/null +++ b/hosts/thinkpad/modules/development.nix @@ -0,0 +1,41 @@ +{ pkgs, ... }: + +{ + environment.systemPackages = with pkgs; [ + # IDEs + jetbrains.rust-rover + jetbrains.webstorm + jetbrains.rider + vscodium # TODO set up extensions + # Tools + dotnet-sdk_9 + dotnet-aspnetcore_9 + git + rustup + nodejs_22 + pnpm + just + gcc # Required for C, Rust and others + # Language servers + nixd + nil + # Formatters + nixfmt-rfc-style + treefmt + nodePackages.prettier + shfmt + ]; + + virtualisation.docker = { + enable = true; + storageDriver = "btrfs"; + rootless = { + enable = true; + setSocketVariable = true; + }; + }; + + services.ollama = { + enable = true; + }; +} diff --git a/hosts/thinkpad/modules/fonts.nix b/hosts/thinkpad/modules/fonts.nix new file mode 100644 index 0000000..c201c85 --- /dev/null +++ b/hosts/thinkpad/modules/fonts.nix @@ -0,0 +1,23 @@ +{ pkgs, ... }: + +{ + environment.systemPackages = with pkgs; [ + font-awesome # Icons + ]; + + fonts = + let + theme = import ../theme.nix; + in + { + fontconfig.enable = true; + packages = with pkgs; [ + (nerdfonts.override { fonts = [ theme.nerdFont ]; }) + jetbrains-mono + # The line below will replace the lines above in 25.05 + # nerd-fonts.jetbrains-mono + font-awesome + ]; + }; + +} diff --git a/hosts/thinkpad/modules/gaming/default.nix b/hosts/thinkpad/modules/gaming/default.nix new file mode 100644 index 0000000..79f3794 --- /dev/null +++ b/hosts/thinkpad/modules/gaming/default.nix @@ -0,0 +1,12 @@ +{ pkgs, ... }: + +{ + imports = [ + ./steam.nix + ]; + + environment.systemPackages = with pkgs; [ + heroic + wine + ]; +} diff --git a/hosts/thinkpad/modules/gaming/steam.nix b/hosts/thinkpad/modules/gaming/steam.nix new file mode 100644 index 0000000..65035f8 --- /dev/null +++ b/hosts/thinkpad/modules/gaming/steam.nix @@ -0,0 +1,8 @@ +{ + programs.steam = { + enable = true; + remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play + dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server + localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers + }; +} diff --git a/hosts/thinkpad/modules/gnome/default.nix b/hosts/thinkpad/modules/gnome/default.nix new file mode 100644 index 0000000..0a39f32 --- /dev/null +++ b/hosts/thinkpad/modules/gnome/default.nix @@ -0,0 +1,28 @@ +{ pkgs, ... }: + +{ + imports = [ + ./nautilus.nix + ]; + + environment.systemPackages = with pkgs; [ + # adw-gtk3 + glib + adwaita-icon-theme + gnomeExtensions.appindicator + # gnome-extension-manager + loupe + gnome-calculator + gnome-disk-utility + gnome-clocks + papers # PDFReader + ]; + + programs.dconf.enable = true; # Required for some gnome applications + + services = { + gnome.gnome-keyring.enable = true; + gvfs.enable = true; # Gnome Virtual File-system. Required for various things in nautilus + udev.packages = with pkgs; [ gnome-settings-daemon ]; + }; +} diff --git a/hosts/thinkpad/modules/gnome/nautilus.nix b/hosts/thinkpad/modules/gnome/nautilus.nix new file mode 100644 index 0000000..523bb95 --- /dev/null +++ b/hosts/thinkpad/modules/gnome/nautilus.nix @@ -0,0 +1,15 @@ +{ pkgs, ... }: +let + common = import ../../common.nix; +in +{ + environment.systemPackages = with pkgs; [ + nautilus + ffmpegthumbnailer # Thumbnails + ]; + + programs.nautilus-open-any-terminal = { + enable = true; + terminal = common.default.terminal; + }; +} diff --git a/hosts/thinkpad/modules/hardware/audio.nix b/hosts/thinkpad/modules/hardware/audio.nix new file mode 100644 index 0000000..2b3429e --- /dev/null +++ b/hosts/thinkpad/modules/hardware/audio.nix @@ -0,0 +1,33 @@ +{ pkgs, ... }: + +{ + environment.systemPackages = with pkgs; [ + gst_all_1.gstreamer + gst_all_1.gst-plugins-base + gst_all_1.gst-plugins-good + gst_all_1.gst-plugins-bad + + wireplumber + playerctl # Interaction with audioplayers and browsers + pavucontrol # GUI + spotify + ]; + + hardware.pulseaudio.enable = false; # Will be moved to services in 25.05 + + security.rtkit.enable = true; # Enable RealtimeKit for audio purposes + + services = { + pipewire = { + enable = true; + alsa = { + enable = true; + support32Bit = true; + }; + pulse.enable = true; + # Uncomment the following line if you want to use JACK applications + # jack.enable = true; + }; + # pulseaudio.enable = false; # TODO uncommenct at 25.05 + }; +} diff --git a/hosts/thinkpad/modules/hardware/default.nix b/hosts/thinkpad/modules/hardware/default.nix new file mode 100644 index 0000000..ffd2b30 --- /dev/null +++ b/hosts/thinkpad/modules/hardware/default.nix @@ -0,0 +1,8 @@ +{ + imports = [ + ./audio.nix + ./graphics + ./hardware-configuration.nix + ./keyboard.nix + ]; +} diff --git a/hosts/thinkpad/modules/hardware/graphics/default.nix b/hosts/thinkpad/modules/hardware/graphics/default.nix new file mode 100644 index 0000000..eaade71 --- /dev/null +++ b/hosts/thinkpad/modules/hardware/graphics/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ ]; + + # Enable OpenGL + hardware.graphics.enable = true; +} diff --git a/hosts/thinkpad/modules/hardware/hardware-configuration.nix b/hosts/thinkpad/modules/hardware/hardware-configuration.nix new file mode 100644 index 0000000..a46c293 --- /dev/null +++ b/hosts/thinkpad/modules/hardware/hardware-configuration.nix @@ -0,0 +1,57 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ + config, + lib, + pkgs, + modulesPath, + ... +}: + +{ + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ + "nvme" + "xhci_pci" + "usb_storage" + "sd_mod" + "sdhci_pci" + ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/5ac9c425-35ae-47d5-a683-68ee0dbfc2bc"; + fsType = "ext4"; + }; + + boot.initrd.luks.devices."luks-99b73f22-3fa1-42b5-ad48-54b0ccff72cc".device = + "/dev/disk/by-uuid/99b73f22-3fa1-42b5-ad48-54b0ccff72cc"; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/3CFB-D12A"; + fsType = "vfat"; + options = [ + "fmask=0077" + "dmask=0077" + ]; + }; + + swapDevices = [ ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp2s0f0.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/thinkpad/modules/hardware/keyboard.nix b/hosts/thinkpad/modules/hardware/keyboard.nix new file mode 100644 index 0000000..8840a94 --- /dev/null +++ b/hosts/thinkpad/modules/hardware/keyboard.nix @@ -0,0 +1,11 @@ +{ pkgs, ... }: + +{ + environment.systemPackages = with pkgs; [ + via + ]; + + hardware.keyboard.qmk.enable = true; + + services.udev.packages = with pkgs; [ via ]; +} diff --git a/hosts/thinkpad/modules/hyprland/default.nix b/hosts/thinkpad/modules/hyprland/default.nix new file mode 100644 index 0000000..9e7c4a7 --- /dev/null +++ b/hosts/thinkpad/modules/hyprland/default.nix @@ -0,0 +1,25 @@ +# System configurations for Hyprland. For home configs, see ./home-manager/hyprland +{ pkgs, ... }: + +{ + environment.systemPackages = with pkgs; [ + xdg-desktop-portal-hyprland + hyprpolkitagent # Auth deamon providing modals for password auth + hyprshot # Screenshots + hyprsunset # Blue light filter + unstable.hyprsysteminfo + unstable.hyprland-qtutils + unstable.hyprland-qt-support + ]; + + programs = { + hyprland = { + enable = true; + xwayland.enable = true; + withUWSM = true; + }; + hyprlock.enable = true; # Lock screen + }; + + services.hypridle.enable = true; # Lock when unused +} diff --git a/hosts/thinkpad/modules/locale.nix b/hosts/thinkpad/modules/locale.nix new file mode 100644 index 0000000..08677ca --- /dev/null +++ b/hosts/thinkpad/modules/locale.nix @@ -0,0 +1,37 @@ +# TODO move locale config for hyprland here +let + utf-8 = "UTF-8"; + en = "en_GB.${utf-8}"; + nb = "nb_NO.${utf-8}"; + common = import ../common.nix; +in +{ + # Configure console keymap + console.keyMap = "uk"; + + # Select internationalisation properties. + i18n = { + defaultLocale = en; + supportedLocales = [ + "${en}/${utf-8}" + "${nb}/${utf-8}" + ]; + extraLocaleSettings = { + LC_ADDRESS = nb; + LC_IDENTIFICATION = nb; + LC_MEASUREMENT = nb; + LC_MONETARY = nb; + LC_NAME = nb; + LC_NUMERIC = nb; + LC_PAPER = nb; + LC_TELEPHONE = nb; + LC_TIME = nb; + }; + }; + + # Configure keymaps + services.xserver.xkb = common.keymaps; + + # Set your time zone. + time.timeZone = "Europe/Oslo"; +} diff --git a/hosts/thinkpad/modules/networking.nix b/hosts/thinkpad/modules/networking.nix new file mode 100644 index 0000000..23db0c6 --- /dev/null +++ b/hosts/thinkpad/modules/networking.nix @@ -0,0 +1,23 @@ +let + common = import ../common.nix; +in +{ + networking = { + networkmanager.enable = true; + hostName = common.hostname; + # wireless.enable = true; # Enables wireless support via wpa_supplicant. + }; + + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + # Open ports in the firewall. + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + # networking.firewall.enable = false; + + programs.ssh.enableAskPassword = false; + + services.tailscale.enable = true; +} diff --git a/hosts/thinkpad/modules/nix-helper.nix b/hosts/thinkpad/modules/nix-helper.nix new file mode 100644 index 0000000..f60cc0e --- /dev/null +++ b/hosts/thinkpad/modules/nix-helper.nix @@ -0,0 +1,12 @@ +# Nix-Helper: github.com/viperML/nh +{ + programs.nh = { + enable = true; + flake = ../.; + clean = { + enable = true; + dates = "weekly"; + extraArgs = "--keep-since 30d"; + }; + }; +} diff --git a/hosts/thinkpad/modules/qt.nix b/hosts/thinkpad/modules/qt.nix new file mode 100644 index 0000000..789cb01 --- /dev/null +++ b/hosts/thinkpad/modules/qt.nix @@ -0,0 +1,17 @@ +{ pkgs, ... }: + +{ + environment = { + sessionVariables = { + QT_QPA_PLATFORMTHEME = "qt6ct"; + QT_QPA_PLATFORM = "wayland"; # Enable Wayland for QT + }; + systemPackages = with pkgs.kdePackages; [ + qtwayland + qtsvg + qt6ct + ]; + }; + + qt.enable = true; +} diff --git a/hosts/thinkpad/modules/sddm.nix b/hosts/thinkpad/modules/sddm.nix new file mode 100644 index 0000000..ea1ef65 --- /dev/null +++ b/hosts/thinkpad/modules/sddm.nix @@ -0,0 +1,23 @@ +{ pkgs, ... }: +let + theme = import ../theme.nix; + flavor = theme.flavor; +in +{ + environment.systemPackages = with pkgs; [ + (catppuccin-sddm.override { + flavor = flavor; + font = theme.nerdFont; + fontSize = "9"; + background = "${../wallpapers/catppuccin_high.png}"; + loginBackground = true; + }) + ]; + + services.displayManager.sddm = { + enable = true; + theme = "catppuccin-${flavor}"; + wayland.enable = true; + package = pkgs.kdePackages.sddm; + }; +} diff --git a/hosts/thinkpad/modules/security.nix b/hosts/thinkpad/modules/security.nix new file mode 100644 index 0000000..ea466d7 --- /dev/null +++ b/hosts/thinkpad/modules/security.nix @@ -0,0 +1,68 @@ +{ pkgs, ... }: + +{ + environment.systemPackages = with pkgs; [ + gnupg + yubioath-flutter + ]; + + programs.gnupg.agent.enable = true; + + security = { + pam = { + services = { + gdm-fingerprint.text = '' + auth required pam_shells.so + auth requisite pam_nologin.so + auth requisite pam_faillock.so preauth + auth required ${pkgs.fprintd}/lib/security/pam_fprintd.so + auth optional pam_permit.so + auth required pam_env.so + auth [success=ok default=1] ${pkgs.gdm}/lib/security/pam_gdm.so + auth optional ${pkgs.gnome-keyring}/lib/security/pam_gnome_keyring.so + + account include login + + password required pam_deny.so + + session include login + session optional ${pkgs.gnome-keyring}/lib/security/pam_gnome_keyring.so auto_start + ''; + login = { + fprintAuth = false; + u2fAuth = false; # U2F and password + }; + sudo.u2fAuth = true; # U2F or password + }; + u2f = { + enable = true; + settings = { + cue = true; # Prompt: Please touch the device + interactive = false; # Prompt: Insert your U2F device, then press ENTER. + }; + }; + }; + }; + + # Start the driver at boot + systemd.services.fprintd = { + wantedBy = [ "multi-user.target" ]; + serviceConfig.Type = "simple"; + }; + + # Install the driver + services.fprintd = { + enable = true; + tod.driver = pkgs.libfprint-2-tod1-goodix-550a; # Goodix 550a driver (from Lenovo) + }; + + # however for focaltech 2808:a658, use fprintd with overidden package (without tod) + # services.fprintd.package = pkgs.fprintd.override { + # libfprint = pkgs.libfprint-focaltech-2808-a658; + # }; + + services = { + pcscd.enable = true; # Required for Yubikey + udev.packages = with pkgs; [ yubikey-personalization ]; + }; +} diff --git a/hosts/thinkpad/modules/shell.nix b/hosts/thinkpad/modules/shell.nix new file mode 100644 index 0000000..84b5931 --- /dev/null +++ b/hosts/thinkpad/modules/shell.nix @@ -0,0 +1,19 @@ +# For Fish dotfiles, see: /home-manager/fish.nix +{ pkgs, ... }: + +{ + programs = { + bash = { + # Starts the OS using Bash, then starts fish if it's not running + interactiveShellInit = '' + if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]] + then + shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION="" + exec ${pkgs.fish}/bin/fish $LOGIN_OPTION + fi + ''; + }; + + fish.enable = true; + }; +}