changes :3

This commit is contained in:
zoey 2025-06-15 18:15:28 -04:00
parent c50bfc3eea
commit 0ad695abcf
Signed by: zoey
GPG key ID: 81FB9FECDD6A33E2
27 changed files with 1022 additions and 656 deletions

635
flake.lock generated

File diff suppressed because it is too large Load diff

View file

@ -74,7 +74,7 @@
hyprland = {
url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
inputs.nixpkgs.follows = "nixpkgs";
# inputs.nixpkgs.follows = "nixpkgs";
};
kb-gui = {
@ -135,9 +135,15 @@
niri-src.url = "github:YaLTeR/niri";
niri-src.inputs.nixpkgs.follows = "nixpkgs";
quickshell = {
url = "git+https://git.outfoxxed.me/outfoxxed/quickshell";
inputs.nixpkgs.follows = "nixpkgs";
};
niri.url = "github:sodiboo/niri-flake";
chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
chaotic.url = "github:chaotic-cx/nyx/7b20daf110d06962ee99114220f2fb98cdc8673d";
};
outputs = inputs @ {self, ...}: let

View file

@ -1,4 +1,5 @@
{
config,
inputs,
pkgs,
system,
@ -6,7 +7,7 @@
...
}: {
wms.hyprland.enable = false;
wms.niri.enable = true;
wms.niri.enable = false;
apps = {
web.librewolf.enable = true;
web.zen.setDefault = true;
@ -124,10 +125,24 @@
work.vpn.enable = true;
programs.atuin = {
enable = true;
enableFishIntegration = config.programs.fish.enable;
enableZshIntegration = config.programs.zsh.enable;
enableNushellIntegration = config.programs.nushell.enable;
};
home.packages = with pkgs; [
gimp3
slack
drawio
littlenavmap
app2unit
awscli2
monero-cli
devenv
@ -246,6 +261,8 @@
options = ["--cmd cd"];
};
services.quickshell.enable = true;
home.file.".mozilla/native-messaging-hosts/gpgmejson.json".text = builtins.toJSON {
name = "gpgmejson";
description = "JavaScript binding for GnuPG";

View file

@ -68,7 +68,7 @@ in {
x = c: "#${c}";
fonts = {
mono = "Iosevka";
mono = "BerkeleyMono Nerd Font Mono";
ui = "SF Pro Display";
};
@ -145,6 +145,7 @@ in {
lavender = {
hex = "#b4befe";
rgb = "rgb(180, 190, 254)";
hypr = "rgb(b4befe)";
hsl = "hsl(232, 97%, 85%)";
};
text = {
@ -195,6 +196,7 @@ in {
base = {
hex = "#1e1e2e";
rgb = "rgb(30, 30, 46)";
hypr = "rgb(1e1e2e)";
hsl = "hsl(240, 21%, 15%)";
};
mantle = {

View file

@ -1,5 +1,5 @@
* {
font-family: Iosevka Nerd Font, monospace;
font-family: monospace;
min-height: 14px;
font-size: 14px;
border: none;

View file

@ -95,9 +95,18 @@ in {
font = {
size = 16.0;
normal = fonts.mono;
bold = "${fonts.mono} Bold";
italic = "${fonts.mono} Italic";
bold_italic = "${fonts.mono} Bold Italic";
bold = {
family = fonts.mono;
style = "Bold";
};
italic = {
family = fonts.mono;
style = "Italic";
};
bold_italic = {
family = fonts.mono;
style = "Bold Italic";
};
offset = {
x = 0;

View file

@ -23,13 +23,11 @@ in {
background = colors.crust.hex;
alpha-blending = "linear-corrected";
window-padding-x = 20;
window-padding-y = 20;
window-padding-balance = true;
font-style = "SemiBold";
font-style-bold = "Bold";
font-style-italic = "SemiBold Italic";
font-style-bold-italic = "Bold Italic";
};
};
};

View file

@ -17,24 +17,28 @@ in {
programs.kitty = {
enable = true;
font = {
name = fonts.mono;
name = "${fonts.mono} SemiLight";
size = 16;
};
extraConfig = ''
bold_font ${fonts.mono} Bold
italic_font ${fonts.mono} Italic
bold_italic_font ${fonts.mono} Bold Italic
bold_font ${fonts.mono} SemiBold
italic_font ${fonts.mono} SemiLight
bold_italic_font ${fonts.mono} SemiBold
'';
catppuccin.enable = true;
settings = {
window_padding_width = 20;
# background_opacity = "0.9";
background_opacity = "0.9";
background = colors.crust.hex;
foreground = colors.text.hex;
font_hinting = "slight";
text_composition_strategy = "1.2 10";
# Normal colors
color0 = colors.surface1.hex; # black
color1 = colors.red.hex; # red

View file

@ -9,7 +9,7 @@ end
-- in this case.
vim.g.lazyvim_blink_main = true
vim.g.snacks_animate = false
vim.o.termguicolors = true
vim.g.lazyvim_python_lsp = "basedpyright"
vim.g.lazyvim_python_lsp = "pyright"

View file

@ -8,47 +8,50 @@ return {
},
{
"catppuccin",
config = function()
require("catppuccin").setup({
transparent_background = false,
integrations = {
blink_cmp = true,
nvimtree = true,
},
custom_highlights = function(colors)
return {
Normal = { bg = colors.crust },
NormalFloat = { bg = colors.crust },
-- Completion menu (nvim-cmp)
Pmenu = { bg = colors.crust },
PmenuSel = { bg = colors.surface0 },
CmpItemAbbr = { bg = colors.crust },
CmpItemAbbrMatch = { bg = colors.crust },
-- Tabs
TabLine = { bg = colors.crust },
TabLineFill = { bg = colors.crust },
TabLineSel = { bg = colors.crust },
-- Status line
StatusLine = { bg = colors.crust },
StatusLineNC = { bg = colors.crust },
-- Line numbers
LineNr = { bg = colors.crust },
SignColumn = { bg = colors.crust },
}
end,
color_overrides = {
mocha = {
base = "#11111b",
mantle = "#11111b",
crust = "#11111b",
},
},
})
end,
opts = {
transparent_background = true,
},
-- config = function()
-- require("catppuccin").setup({
-- transparent_background = true,
-- integrations = {
-- blink_cmp = true,
-- nvimtree = true,
-- },
-- custom_highlights = function(colors)
-- return {
-- Normal = { bg = colors.crust },
-- NormalFloat = { bg = colors.crust },
--
-- -- Completion menu (nvim-cmp)
-- Pmenu = { bg = colors.crust },
-- PmenuSel = { bg = colors.surface0 },
-- CmpItemAbbr = { bg = colors.crust },
-- CmpItemAbbrMatch = { bg = colors.crust },
--
-- -- Tabs
-- TabLine = { bg = colors.crust },
-- TabLineFill = { bg = colors.crust },
-- TabLineSel = { bg = colors.crust },
--
-- -- Status line
-- StatusLine = { bg = colors.crust },
-- StatusLineNC = { bg = colors.crust },
--
-- -- Line numbers
-- LineNr = { bg = colors.crust },
-- SignColumn = { bg = colors.crust },
-- }
-- end,
-- color_overrides = {
-- mocha = {
-- base = "#11111b",
-- mantle = "#11111b",
-- crust = "#11111b",
-- },
-- },
-- })
-- end,
},
"f-person/git-blame.nvim",
{
@ -83,12 +86,12 @@ return {
{ "<c-\\>", "<cmd><C-U>TmuxNavigatePrevious<cr>" },
},
},
{
"m4xshen/hardtime.nvim",
lazy = false,
dependencies = { "MunifTanjim/nui.nvim" },
opts = {},
},
-- {
-- "m4xshen/hardtime.nvim",
-- lazy = false,
-- dependencies = { "MunifTanjim/nui.nvim" },
-- opts = {},
-- },
{
"neovim/nvim-lspconfig",
---@class PluginLspOpts
@ -99,6 +102,9 @@ return {
filetypes = { "html", "jinja" },
},
somesass_ls = {},
qmlls = {
cmd = { "qmlls", "-E" },
},
slangd = {
settings = {
slangd = {

View file

@ -1,193 +0,0 @@
-- since this is just an example spec, don't actually load anything here and return an empty spec
-- stylua: ignore
if true then return {} end
-- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim
--
-- In your plugin files, you can:
-- * add extra plugins
-- * disable/enabled LazyVim plugins
-- * override the configuration of LazyVim plugins
return {
-- add gruvbox
{ "ellisonleao/gruvbox.nvim" },
-- Configure LazyVim to load gruvbox
{
"LazyVim/LazyVim",
opts = {
colorscheme = "gruvbox",
},
},
-- change trouble config
{
"folke/trouble.nvim",
-- opts will be merged with the parent spec
opts = { use_diagnostic_signs = true },
},
-- disable trouble
{ "folke/trouble.nvim", enabled = false },
-- override nvim-cmp and add cmp-emoji
{
"hrsh7th/nvim-cmp",
dependencies = { "hrsh7th/cmp-emoji" },
---@param opts cmp.ConfigSchema
opts = function(_, opts)
table.insert(opts.sources, { name = "emoji" })
end,
},
-- change some telescope options and a keymap to browse plugin files
{
"nvim-telescope/telescope.nvim",
keys = {
-- add a keymap to browse plugin files
-- stylua: ignore
{
"<leader>fp",
function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end,
desc = "Find Plugin File",
},
},
-- change some options
opts = {
defaults = {
layout_strategy = "horizontal",
layout_config = { prompt_position = "top" },
sorting_strategy = "ascending",
winblend = 0,
},
},
},
-- add pyright to lspconfig
{
"neovim/nvim-lspconfig",
---@class PluginLspOpts
opts = {
---@type lspconfig.options
servers = {
-- pyright will be automatically installed with mason and loaded with lspconfig
pyright = {},
},
},
},
-- add tsserver and setup with typescript.nvim instead of lspconfig
{
"neovim/nvim-lspconfig",
dependencies = {
"jose-elias-alvarez/typescript.nvim",
init = function()
require("lazyvim.util").lsp.on_attach(function(_, buffer)
-- stylua: ignore
vim.keymap.set( "n", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" })
vim.keymap.set("n", "<leader>cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer })
end)
end,
},
---@class PluginLspOpts
opts = {
---@type lspconfig.options
servers = {
-- tsserver will be automatically installed with mason and loaded with lspconfig
tsserver = {},
},
-- you can do any additional lsp server setup here
-- return true if you don't want this server to be setup with lspconfig
---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?>
setup = {
-- example to setup with typescript.nvim
tsserver = function(_, opts)
require("typescript").setup({ server = opts })
return true
end,
-- Specify * to use this function as a fallback for any server
-- ["*"] = function(server, opts) end,
},
},
},
-- for typescript, LazyVim also includes extra specs to properly setup lspconfig,
-- treesitter, mason and typescript.nvim. So instead of the above, you can use:
{ import = "lazyvim.plugins.extras.lang.typescript" },
-- add more treesitter parsers
{
"nvim-treesitter/nvim-treesitter",
opts = {
ensure_installed = {
"bash",
"html",
"javascript",
"json",
"lua",
"markdown",
"markdown_inline",
"python",
"query",
"regex",
"tsx",
"typescript",
"vim",
"yaml",
},
},
},
-- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above
-- would overwrite `ensure_installed` with the new value.
-- If you'd rather extend the default config, use the code below instead:
{
"nvim-treesitter/nvim-treesitter",
opts = function(_, opts)
-- add tsx and treesitter
vim.list_extend(opts.ensure_installed, {
"tsx",
"typescript",
})
end,
},
-- the opts function can also be used to change the default opts:
{
"nvim-lualine/lualine.nvim",
event = "VeryLazy",
opts = function(_, opts)
table.insert(opts.sections.lualine_x, "😄")
end,
},
-- or you can return new options to override all the defaults
{
"nvim-lualine/lualine.nvim",
event = "VeryLazy",
opts = function()
return {
--[[add your custom lualine config here]]
}
end,
},
-- use mini.starter instead of alpha
{ import = "lazyvim.plugins.extras.ui.mini-starter" },
-- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc
{ import = "lazyvim.plugins.extras.lang.json" },
-- add any tools you want to have installed below
{
"williamboman/mason.nvim",
opts = {
ensure_installed = {
"stylua",
"shellcheck",
"shfmt",
"flake8",
},
},
},
}

View file

@ -1,43 +0,0 @@
return {
"sethen/line-number-change-mode.nvim",
config = function()
require("catppuccin").setup({
flavour = "mocha",
})
local palette = require("catppuccin.palettes").get_palette("mocha")
if palette == nil then
return nil
end
require("line-number-change-mode").setup({
mode = {
i = {
bg = palette.green,
fg = palette.mantle,
bold = true,
},
n = {
bg = palette.blue,
fg = palette.mantle,
bold = true,
},
R = {
bg = palette.maroon,
fg = palette.mantle,
bold = true,
},
v = {
bg = palette.mauve,
fg = palette.mantle,
bold = true,
},
V = {
bg = palette.mauve,
fg = palette.mantle,
bold = true,
},
},
})
end,
}

View file

@ -188,17 +188,17 @@ return {
ins_left({
"filename",
cond = conditions.buffer_not_empty,
color = { fg = ctp.sapphire },
color = { fg = ctp.subtext0 },
})
ins_left({
-- filesize component
"filesize",
cond = conditions.buffer_not_empty,
color = { fg = ctp.subtext0 },
color = { fg = ctp.subtext1 },
})
ins_left({ "location", color = { fg = ctp.subtext0 } })
ins_left({ "location", color = { fg = ctp.subtext1 } })
ins_left({
"diagnostics",

View file

@ -0,0 +1,11 @@
{
"name": "personal-snippets",
"contributes": {
"snippets": [
{
"language": "nix",
"path": "./nixconfig.json"
}
]
}
}

View file

@ -0,0 +1,47 @@
{
pkgs,
config,
lib,
...
}:
with lib;
with lib.custom; let
cfg = config.scripts;
in {
options.scripts = with types; {
enable = mkBoolOpt false "Enable custom scripts";
onepassword = {
enable = mkBoolOpt false "Enable 1Password search utility";
};
};
config = mkIf cfg.enable {
home.packages = with pkgs;
[
(writeShellScriptBin "opsearch" (builtins.readFile ./opsearch.sh))
]
++ (
if cfg.onepassword.enable
then
with pkgs; [
jq
wl-clipboard
]
else []
);
# Ensure the scripts directory exists and copy scripts there
home.file = {
".local/bin/opsearch.sh" = {
source = ./opsearch.sh;
executable = true;
};
# Add fish function for 1Password search if fish is enabled
".config/fish/functions/ops.fish" = mkIf cfg.onepassword.enable {
source = ../shell/fish/functions/ops.fish;
executable = true;
};
};
};
}

323
modules/home/scripts/opsearch.sh Executable file
View file

@ -0,0 +1,323 @@
#!/usr/bin/env bash
# opsearch.sh - A tool to search through 1Password items
#
# Usage:
# opsearch <search_term> [options]
#
# Options:
# -c, --category Filter by category (login, password, document, etc.)
# -t, --tag Filter by tag
# -v, --vault Specify vault to search in
# -f, --field Search only in specific fields
# -j, --json Output results in JSON format
# -d, --detail Show detailed output for each item
# -n, --nushell Use Nushell for output formatting (if available)
# -p, --password Retrieve and copy password after selection
# -h, --help Show this help message
set -e
# Default options
FORMAT="json"
SHOW_DETAIL=false
CATEGORY=""
TAG=""
VAULT=""
FIELD=""
SEARCH_TERM=""
USE_NUSHELL=false
GET_PASSWORD=false
# Check if 1Password CLI is available
if ! command -v op &>/dev/null; then
echo "Error: 1Password CLI (op) not found."
echo "Please install it from https://1password.com/downloads/command-line/"
exit 1
fi
# Check if 1Password CLI is signed in
if ! op account get --format=json &>/dev/null; then
echo "You need to sign in to 1Password CLI first."
echo "Run: eval \$(op signin)"
exit 1
fi
# Function to display help
show_help() {
cat << EOF
opsearch - Search 1Password items with grep-like functionality
Usage:
opsearch <search_term> [options]
Options:
-c, --category <category> Filter by category (login, password, document, etc.)
-t, --tag <tag> Filter by tag
-v, --vault <vault> Specify vault to search in
-f, --field <field> Search only in specific fields
-j, --json Output results in JSON format
-d, --detail Show detailed output for each item
-n, --nushell Use Nushell for output formatting (if available)
-p, --password Retrieve and copy password after selection
-h, --help Show this help message
Examples:
opsearch github # Search for "github" in all items
opsearch amazon -c login # Search for "amazon" in login items
opsearch bank -v Personal # Search for "bank" in the Personal vault
opsearch -t finance # Show all items with "finance" tag
opsearch email -f username # Search for "email" in username fields
opsearch ssh -d # Show detailed info for SSH items
opsearch github -p # Get GitHub password after selecting item
EOF
exit 0
}
# Parse arguments
while [[ $# -gt 0 ]]; do
case "$1" in
-h|--help)
show_help
;;
-j|--json)
FORMAT="json"
shift
;;
-d|--detail)
SHOW_DETAIL=true
shift
;;
-n|--nushell)
USE_NUSHELL=true
shift
;;
-p|--password)
GET_PASSWORD=true
shift
;;
-c|--category)
CATEGORY="$2"
shift 2
;;
-t|--tag)
TAG="$2"
shift 2
;;
-v|--vault)
VAULT="$2"
shift 2
;;
-f|--field)
FIELD="$2"
shift 2
;;
-*)
echo "Unknown option: $1"
show_help
;;
*)
if [[ -z "$SEARCH_TERM" ]]; then
SEARCH_TERM="$1"
else
echo "Error: Multiple search terms provided. Use quotes for terms with spaces."
exit 1
fi
shift
;;
esac
done
# Check for required tools
check_dependencies() {
if ! command -v jq &> /dev/null; then
echo "Error: jq is required for this script to function properly."
echo "Please install it using your package manager."
exit 1
fi
if [[ "$USE_NUSHELL" == "true" ]] && ! command -v nu &> /dev/null; then
echo "Warning: Nushell not found, falling back to jq for formatting."
USE_NUSHELL=false
fi
if [[ "$GET_PASSWORD" == "true" ]]; then
if ! command -v xclip &> /dev/null && ! command -v pbcopy &> /dev/null && ! command -v wl-copy &> /dev/null; then
echo "Warning: No clipboard utility found (xclip, pbcopy, or wl-copy required)."
echo "Password will be displayed but not copied."
fi
fi
}
# Build the 1Password CLI command
OP_CMD="op item list --format=json"
# Add filters to the command
if [[ -n "$CATEGORY" ]]; then
OP_CMD="$OP_CMD --categories=$CATEGORY"
fi
if [[ -n "$TAG" ]]; then
OP_CMD="$OP_CMD --tags=$TAG"
fi
if [[ -n "$VAULT" ]]; then
OP_CMD="$OP_CMD --vault=$VAULT"
fi
# Function to colorize the output
highlight_match() {
local text="$1"
local pattern="$2"
echo "$text" | grep --color=always -i "$pattern" || echo "$text"
}
# Function to copy to clipboard
copy_to_clipboard() {
local text="$1"
if command -v wl-copy &> /dev/null; then
echo -n "$text" | wl-copy
echo "Copied to clipboard with wl-copy"
elif command -v xclip &> /dev/null; then
echo -n "$text" | xclip -selection clipboard
echo "Copied to clipboard with xclip"
elif command -v pbcopy &> /dev/null; then
echo -n "$text" | pbcopy
echo "Copied to clipboard with pbcopy"
else
echo "No clipboard utility found. Here's the value:"
echo "$text"
fi
}
# Main function to format and display results
display_items() {
local items="$1"
local count=$(echo "$items" | jq 'length')
if [[ $count -eq 0 ]]; then
echo "No items found matching your search criteria."
exit 0
fi
echo "Found $count matching items:"
if [[ "$USE_NUSHELL" == "true" ]]; then
# Use Nushell for pretty output
echo "$items" | nu -c "open - | select id title category updated vault_id | sort-by title"
else
# Use jq for formatting
echo "$items" | jq -r '
["ID", "TITLE", "CATEGORY", "UPDATED"] as $headers |
([$headers] +
(. | map([.id, .title, .category, .updated[0:10]]))) |
.[] | @tsv' | column -t -s $'\t'
fi
if [[ $count -gt 0 ]]; then
echo ""
select_item "$items"
fi
}
# Function to select an item and show details or get password
select_item() {
local items="$1"
local count=$(echo "$items" | jq 'length')
echo "Select an item by number (1-$count) or press Enter to exit:"
select opt in $(echo "$items" | jq -r '.[].title'); do
if [[ -z "$opt" ]]; then
echo "Exiting."
exit 0
fi
local idx=$((REPLY-1))
if [[ $idx -ge 0 && $idx -lt $count ]]; then
local item_id=$(echo "$items" | jq -r ".[$idx].id")
local item_title=$(echo "$items" | jq -r ".[$idx].title")
echo "Selected: $item_title (ID: $item_id)"
if [[ "$GET_PASSWORD" == "true" ]]; then
# Get password and copy to clipboard
local password=$(op item get "$item_id" --fields password)
if [[ -n "$password" ]]; then
copy_to_clipboard "$password"
else
echo "No password field found for this item."
# Show available fields
echo "Available fields:"
op item get "$item_id" --format=json | jq -r '.fields[] | select(.id != "notesPlain") | "\(.id): \(.label)"'
echo "Get a specific field? Enter field ID or press Enter to skip:"
read -r field_id
if [[ -n "$field_id" ]]; then
local field_value=$(op item get "$item_id" --fields "$field_id")
if [[ -n "$field_value" ]]; then
copy_to_clipboard "$field_value"
else
echo "Field not found or empty."
fi
fi
fi
elif [[ "$SHOW_DETAIL" == "true" ]]; then
# Show detailed information
echo "Detailed information:"
echo "------------------------------------------------"
if [[ -n "$FIELD" ]]; then
# Show only the requested field
op item get "$item_id" --fields "$FIELD"
else
# Show all fields
if [[ "$USE_NUSHELL" == "true" ]]; then
op item get "$item_id" --format=json | nu -c "open - | get fields | where id != 'notesPlain' | sort-by label"
else
op item get "$item_id" --format=json | jq -r '.fields[] | select(.id != "notesPlain") | "\(.label): \(.value)"'
fi
fi
echo "------------------------------------------------"
else
# Show basic information
op item get "$item_id" --format=json | jq -r '.fields[] | select(.id == "username" or .id == "password" or .id == "notesPlain") | "\(.label): \(.value // "[Hidden]")"'
fi
echo ""
echo "Select another item or press Ctrl+C to exit:"
else
echo "Invalid selection. Please choose a number between 1 and $count."
fi
done
}
# Execute search
check_dependencies
if [[ -z "$SEARCH_TERM" && -z "$TAG" && -z "$CATEGORY" ]]; then
echo "Error: No search term provided."
show_help
exit 1
fi
# Execute the command and store the results
RESULT=$(eval "$OP_CMD")
# Filter results based on search term
if [[ -n "$SEARCH_TERM" ]]; then
FILTERED_RESULT=$(echo "$RESULT" | jq --arg term "$SEARCH_TERM" -r '[.[] | select(
(.title | ascii_downcase | contains($term | ascii_downcase)) or
(.id | ascii_downcase | contains($term | ascii_downcase)) or
(.additional_information | ascii_downcase | contains($term | ascii_downcase)) or
(.urls != null and (.urls[] | ascii_downcase | contains($term | ascii_downcase))) or
(.tags != null and (.tags[] | ascii_downcase | contains($term | ascii_downcase)))
)]')
else
FILTERED_RESULT="$RESULT"
fi
# Display the results
display_items "$FILTERED_RESULT"

View file

@ -0,0 +1,55 @@
{
lib,
config,
pkgs,
system,
inputs,
...
}:
with lib;
with lib.custom; let
cfg = config.services.quickshell;
mkService = recursiveUpdate {
Unit.PartOf = ["graphical-session.target"];
Unit.After = ["graphical-session.target"];
Install.WantedBy = ["graphical-session.target"];
};
in {
options.services.quickshell = with types; {
enable = mkBoolOpt false "Enable or Disable QuickShell";
};
config = mkIf cfg.enable {
systemd.user.services = {
quickshell = mkService {
Unit.Description = "QuickShell Service";
Service = {
Environment = [
"QSG_RENDER_LOOP=threaded"
# "QT_QUICK_BACKEND=software"
"QT_QPA_PLATFORM=wayland"
"QSG_RENDERER_TIMING=true"
"QML_DISABLE_DISTANCEFIELD=1"
"QT_WAYLAND_DISABLE_WINDOWDECORATION=1"
"QT_QPA_PLATFORMTHEME=qt5ct"
"QT_QPA_REFRESH_RATE=240"
"__GL_SYNC_TO_VBLANK=0"
"LIBGL_ALWAYS_SOFTWARE=0"
"__GL_SYNC_DISPLAY_DEVICE=DP-1" # Adjust this to match your display connection
"QML_ANIMATION_DRIVER=cadence"
"QML_CADENCE_DURATION=4"
"QML_CADENCE_MAX_RENDER_TIME=3.5"
"QSG_RENDERER_USE_THREADED_GL=1"
"QSG_RHI_PREFER_SOFTWARE_RENDERER=0"
"QSG_RHI_FORCE_SYNC=0"
"QSG_INFO=1"
];
ExecStart = ''
${inputs.quickshell.packages.${system}.default}/bin/qs --log-rules 'quickshell.dbus.properties.warning = false;quickshell.dbus.dbusmenu.warning = false;quickshell.service.notifications.warning = false;quickshell.service.sni.host.warning = false'
'';
Restart = "always";
};
};
};
};
}

View file

@ -0,0 +1,75 @@
function ops --description "Search 1Password with grep-like functionality"
set -l options 'h/help' 'c/category=' 't/tag=' 'v/vault=' 'f/field=' 'j/json' 'd/detail' 'n/nushell' 'p/password'
argparse $options -- $argv
if set -q _flag_help
echo "ops - Fish wrapper for opsearch (1Password search utility)"
echo
echo "Usage:"
echo " ops [search_term] [options]"
echo
echo "Options:"
echo " -c/--category [category] Filter by category (login, password, document, etc.)"
echo " -t/--tag [tag] Filter by tag"
echo " -v/--vault [vault] Specify vault to search in"
echo " -f/--field [field] Search only in specific fields"
echo " -j/--json Output results in JSON format"
echo " -d/--detail Show detailed output for each item"
echo " -n/--nushell Use Nushell for output formatting (if available)"
echo " -p/--password Retrieve and copy password after selection"
echo " -h/--help Show this help message"
echo
echo "Examples:"
echo " ops github # Search for \"github\" in all items"
echo " ops amazon -c login # Search for \"amazon\" in login items"
echo " ops bank -v Personal # Search for \"bank\" in the Personal vault"
echo " ops -t finance # Show all items with \"finance\" tag"
echo " ops email -f username # Search for \"email\" in username fields"
echo " ops ssh -d # Show detailed info for SSH items"
echo " ops github -p # Get GitHub password after selection"
return 0
end
set -l cmd_args
# Convert fish options to bash-style options for the shell script
if set -q _flag_category
set -a cmd_args "--category" $_flag_category
end
if set -q _flag_tag
set -a cmd_args "--tag" $_flag_tag
end
if set -q _flag_vault
set -a cmd_args "--vault" $_flag_vault
end
if set -q _flag_field
set -a cmd_args "--field" $_flag_field
end
if set -q _flag_json
set -a cmd_args "--json"
end
if set -q _flag_detail
set -a cmd_args "--detail"
end
if set -q _flag_nushell
set -a cmd_args "--nushell"
end
if set -q _flag_password
set -a cmd_args "--password"
end
# Add search term if provided
if test (count $argv) -gt 0
set -a cmd_args $argv
end
# Execute the shell script with all arguments
$HOME/.local/bin/opsearch.sh $cmd_args
end

View file

@ -24,6 +24,11 @@ in {
set -g FZF_PREVIEW_FILE_CMD "head -n 10"
set -g FZF_PREVIEW_DIR_CMD "ls"
set -gx AWS_DEFAULT_PROFILE (cat ~/.aws_profile | string collect)
set -Ux MANROFFOPT '-c'
set -Ux MANPAGER "sh -c 'col -bx | bat -l man -p'"
if not set -q TMUX
tmux
end
@ -99,8 +104,6 @@ in {
# download from yt and other websites
yt-dlp
zsh-history
# man pages for tiktok attention span mfs
tealdeer

View file

@ -57,7 +57,6 @@ in {
onefetch
cpufetch
yt-dlp
zsh-history
tealdeer
glow
hyperfine

View file

@ -36,7 +36,6 @@ in {
initContent = let
sources = with pkgs; [
"${zsh-nix-shell}/share/zsh-nix-shell/nix-shell.plugin.zsh"
"${zsh-history}/share/zsh/init.zsh"
"${zsh-fzf-tab}/share/fzf-tab/fzf-tab.plugin.zsh"
"${zsh-f-sy-h}/share/zsh/site-functions/F-Sy-H.plugin.zsh"
"${zsh-you-should-use}/share/zsh/plugins/you-should-use/you-should-use.plugin.zsh"
@ -104,8 +103,6 @@ in {
# download from yt and other websites
yt-dlp
zsh-history
# man pages for tiktok attention span mfs
tealdeer

View file

@ -129,8 +129,8 @@ in {
allow_tearing = true;
# active border color
"col.active_border" = "${colors.lavender.rgb}";
"col.inactive_border" = "${colors.base.rgb}";
"col.active_border" = colors.lavender.hypr;
"col.inactive_border" = colors.base.hypr;
};
input = {
@ -146,7 +146,7 @@ in {
decoration = {
# fancy corners
rounding = 0;
rounding = 8;
# blur
blur = {
enabled = true;
@ -257,6 +257,7 @@ in {
# };
# };
services.quickshell.enable = true;
services.wallpaper.enable = true;
};
}

View file

@ -507,6 +507,7 @@ with lib.custom; {
};
};
services.quickshell.enable = false;
services.wallpaper.enable = true;
};
}

View file

@ -9,6 +9,8 @@
with lib;
with lib.custom; let
cfg = config.protocols.wayland;
tuigreet = "${pkgs.greetd.tuigreet}/bin/tuigreet";
in {
options.protocols.wayland = with types; {
enable = mkBoolOpt false "Enable Wayland Protocol";
@ -19,8 +21,8 @@ in {
enable = true;
settings = {
default_session = {
command = "niri-session";
user = "zoey";
command = "${tuigreet} --time --remember --remember-session";
user = "greeter";
};
};
};
@ -51,8 +53,8 @@ in {
# ];
programs.hyprland = {
withUWSM = false;
enable = false;
withUWSM = true;
enable = true;
xwayland.enable = true;
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
portalPackage = inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland;

View file

@ -38,7 +38,7 @@ in {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
client_max_body_size 1G;
client_max_body_size 4G;
'';
};
};

View file

@ -28,33 +28,33 @@ in {
lexend
jost
dejavu_fonts
# iosevka
iosevka
cantarell-fonts
(iosevka.override
{
set = "Custom";
privateBuildPlan = ''
[buildPlans.IosevkaCustom]
family = "Iosevka"
spacing = "fontconfig-mono"
serifs = "sans"
noCvSs = true
exportGlyphNames = true
[buildPlans.IosevkaCustom.variants]
inherits = "ss08"
[buildPlans.IosevkaCustom.widths.Normal]
shape = 500
menu = 5
css = "normal"
[buildPlans.IosevkaCustom.widths.Extended]
shape = 600
menu = 7
css = "expanded"
'';
})
# (iosevka.override
# {
# set = "Custom";
# privateBuildPlan = ''
# [buildPlans.IosevkaCustom]
# family = "Iosevka"
# spacing = "fontconfig-mono"
# serifs = "sans"
# noCvSs = true
# exportGlyphNames = true
#
# [buildPlans.IosevkaCustom.variants]
# inherits = "ss08"
#
# [buildPlans.IosevkaCustom.widths.Normal]
# shape = 500
# menu = 5
# css = "normal"
#
# [buildPlans.IosevkaCustom.widths.Extended]
# shape = 600
# menu = 7
# css = "expanded"
# '';
# })
noto-fonts
noto-fonts-cjk-sans
noto-fonts-emoji
@ -66,6 +66,28 @@ in {
adwaita-fonts
cozette
scientifica
(material-symbols.overrideAttrs {
src = fetchFromGitHub {
owner = "google";
repo = "material-design-icons";
rev = "941fa95d7f6084a599a54ca71bc565f48e7c6d9e";
hash = "sha256-rH/SSBP3xgiyUDyF371pmg8wAi2xavS79vKmOhyLEmI=";
sparseCheckout = ["variablefont" "font"];
};
installPhase = ''
runHook preInstall
rename 's/\[FILL,GRAD,opsz,wght\]//g' variablefont/*
install -Dm755 variablefont/*.ttf -t $out/share/fonts/TTF
install -Dm755 variablefont/*.woff2 -t $out/share/fonts/woff2
install -Dm755 font/*.ttf -t $out/share/fonts/TTF
install -Dm755 font/*.otf -t $out/share/fonts/OTF
runHook postInstall
'';
})
# (nerdfonts.override {fonts = ["ZedMono" "Iosevka"];})
];

View file

@ -100,6 +100,8 @@
ui.fonts.enable = true;
security.sudo-rs.enable = true;
protocols.wayland.enable = true;
programs.openvpn3.enable = true;
@ -140,6 +142,7 @@
pkiBundle = "/etc/secureboot";
};
boot.loader.efi.canTouchEfiVariables = true;
boot.blacklistedKernelModules = ["joydev"];
networking.hostName = "earth"; # Define your hostname.
networking.hostId = "a2a8bfcc";
@ -190,6 +193,7 @@
pkgs.sbctl
pkgs.kdiskmark
pkgs.mangohud
inputs.quickshell.packages.${system}.default
(pkgs.shadps4.overrideAttrs {
version = "0.9.0";
src = pkgs.fetchFromGitHub {
@ -260,6 +264,11 @@
networking.firewall.allowedTCPPorts = [22];
services.monero = {
enable = false;
mining.enable = false;
};
services.samba = {
enable = true;
openFirewall = true;
@ -279,6 +288,8 @@
catppuccin.enable = true;
programs.virt-manager.enable = true;
qt.enable = true;
# Enable Ananicy for automatic process priority management
services.ananicy = {
enable = true;