refactor: implement component-based architecture for enhanced maintainability
- Reorganize directory structure into core/, features/, and themes/ - Colocate application Nix logic, configs, scripts, and theme overrides - Implement 'Inversion of Control' for theming: apps now pull theme-specific layouts - Update flake.nix and shared library paths to match the new structure - Document the new Feature-Centric architecture in README.md
This commit is contained in:
39
core/home/bash.nix
Normal file
39
core/home/bash.nix
Normal file
@@ -0,0 +1,39 @@
|
||||
{ config, lib, ... }:
|
||||
|
||||
{
|
||||
programs.bash = {
|
||||
enable = true;
|
||||
|
||||
bashrcExtra = ''
|
||||
if [[ -f ~/.config/nomarchy/default/bash/rc ]]; then
|
||||
source ~/.config/nomarchy/default/bash/rc
|
||||
fi
|
||||
'';
|
||||
|
||||
shellAliases = lib.mkDefault {
|
||||
# File system
|
||||
lsa = "ls -a";
|
||||
|
||||
# Directories
|
||||
".." = "cd ..";
|
||||
"..." = "cd ../..";
|
||||
"...." = "cd ../../..";
|
||||
|
||||
# Tools
|
||||
c = "opencode";
|
||||
d = "docker";
|
||||
r = "rails";
|
||||
t = "tmux attach || tmux new -s Work";
|
||||
|
||||
# Git
|
||||
g = "git";
|
||||
gcm = "git commit -m";
|
||||
gcam = "git commit -a -m";
|
||||
gcad = "git commit -a --amend";
|
||||
|
||||
# NixOS commands
|
||||
sys-update = "sudo nixos-rebuild switch --flake /etc/nixos#default --impure";
|
||||
env-update = "nomarchy-preflight-migration && home-manager switch --flake /etc/nixos#default --impure";
|
||||
};
|
||||
};
|
||||
}
|
||||
97
core/home/behavior.nix
Normal file
97
core/home/behavior.nix
Normal file
@@ -0,0 +1,97 @@
|
||||
{ config, lib, ... }:
|
||||
|
||||
# Behavior Configuration Module
|
||||
#
|
||||
# This module deploys non-visual configuration files (keybindings, input settings,
|
||||
# window rules, etc.) with lib.mkDefault, allowing downstream users to override.
|
||||
#
|
||||
# Visual/theme configs are handled separately by theme-loader.nix and stylix.nix.
|
||||
#
|
||||
# Behavior configs include:
|
||||
# - Keybindings (bindings, media keys, clipboard)
|
||||
# - Input settings (keyboard, mouse, touchpad)
|
||||
# - Window rules and layouts
|
||||
# - Autostart applications
|
||||
# - Environment variables
|
||||
|
||||
let
|
||||
configDir = ../../config;
|
||||
overridesDir = "${config.home.homeDirectory}/.config/nomarchy/overrides";
|
||||
|
||||
# Check if user has an override for a specific config
|
||||
hasOverride = path: builtins.pathExists "${overridesDir}/${path}";
|
||||
|
||||
# Behavior config categories with their source paths
|
||||
behaviorConfigs = {
|
||||
# Hyprland behavior (non-visual)
|
||||
"nomarchy/default/hypr/bindings.conf" = "hypr/bindings.conf";
|
||||
"nomarchy/default/hypr/bindings/media.conf" = "hypr/bindings/media.conf";
|
||||
"nomarchy/default/hypr/bindings/clipboard.conf" = "hypr/bindings/clipboard.conf";
|
||||
"nomarchy/default/hypr/bindings/tiling-v2.conf" = "hypr/bindings/tiling-v2.conf";
|
||||
"nomarchy/default/hypr/bindings/utilities.conf" = "hypr/bindings/utilities.conf";
|
||||
"nomarchy/default/hypr/input.conf" = "hypr/input.conf";
|
||||
"nomarchy/default/hypr/windows.conf" = "hypr/windows.conf";
|
||||
"nomarchy/default/hypr/autostart.conf" = "hypr/autostart.conf";
|
||||
"nomarchy/default/hypr/envs.conf" = "hypr/envs.conf";
|
||||
"nomarchy/default/hypr/looknfeel.conf" = "hypr/looknfeel.conf";
|
||||
|
||||
# App-specific window rules (behavior, not visual)
|
||||
"nomarchy/default/hypr/apps.conf" = "hypr/apps.conf";
|
||||
"nomarchy/default/hypr/apps/qemu.conf" = "hypr/apps/qemu.conf";
|
||||
"nomarchy/default/hypr/apps/steam.conf" = "hypr/apps/steam.conf";
|
||||
"nomarchy/default/hypr/apps/terminals.conf" = "hypr/apps/terminals.conf";
|
||||
"nomarchy/default/hypr/apps/walker.conf" = "hypr/apps/walker.conf";
|
||||
"nomarchy/default/hypr/apps/browser.conf" = "hypr/apps/browser.conf";
|
||||
"nomarchy/default/hypr/apps/1password.conf" = "hypr/apps/1password.conf";
|
||||
"nomarchy/default/hypr/apps/bitwarden.conf" = "hypr/apps/bitwarden.conf";
|
||||
"nomarchy/default/hypr/apps/pip.conf" = "hypr/apps/pip.conf";
|
||||
"nomarchy/default/hypr/apps/system.conf" = "hypr/apps/system.conf";
|
||||
"nomarchy/default/hypr/apps/localsend.conf" = "hypr/apps/localsend.conf";
|
||||
"nomarchy/default/hypr/apps/telegram.conf" = "hypr/apps/telegram.conf";
|
||||
"nomarchy/default/hypr/apps/geforce.conf" = "hypr/apps/geforce.conf";
|
||||
"nomarchy/default/hypr/apps/moonlight.conf" = "hypr/apps/moonlight.conf";
|
||||
"nomarchy/default/hypr/apps/retroarch.conf" = "hypr/apps/retroarch.conf";
|
||||
"nomarchy/default/hypr/apps/webcam-overlay.conf" = "hypr/apps/webcam-overlay.conf";
|
||||
"nomarchy/default/hypr/apps/davinci-resolve.conf" = "hypr/apps/davinci-resolve.conf";
|
||||
"nomarchy/default/hypr/apps/hyprshot.conf" = "hypr/apps/hyprshot.conf";
|
||||
};
|
||||
|
||||
in
|
||||
{
|
||||
options.nomarchy.behavior = {
|
||||
hyprland = {
|
||||
bindings = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = "Whether to deploy default Hyprland keybindings.";
|
||||
};
|
||||
input = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = "Whether to deploy default input settings.";
|
||||
};
|
||||
windowRules = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = "Whether to deploy default window rules.";
|
||||
};
|
||||
autostart = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = "Whether to deploy default autostart configuration.";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
# Note: The actual config deployment is handled by configs.nix
|
||||
# This module provides the options and documentation for behavior configs
|
||||
# The separation allows users to selectively disable behavior categories
|
||||
|
||||
# Ensure behavior config directories exist in overrides
|
||||
home.activation.createBehaviorOverrideDirs = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||
mkdir -p "${overridesDir}/hypr/bindings"
|
||||
mkdir -p "${overridesDir}/hypr/apps"
|
||||
'';
|
||||
};
|
||||
}
|
||||
309
core/home/config/Typora/themes/ia_typora.css
Normal file
309
core/home/config/Typora/themes/ia_typora.css
Normal file
@@ -0,0 +1,309 @@
|
||||
:root {
|
||||
--accent-color: #aeb1b5; /* #'s before H1-3 */
|
||||
--background-color: white;
|
||||
--border-color: #ddd;
|
||||
--code-bg-color: #f8f8f8;
|
||||
--font-color: #42464c;
|
||||
--header-color: #222324;
|
||||
--link-color: #2077b2;
|
||||
--control-text-color: #667176;
|
||||
--side-bar-bg-color: #fafafa;
|
||||
--body-font: "iA Writer Mono S";
|
||||
--border-radius: 2px;
|
||||
--document-horizontal-margin: 80px;
|
||||
--document-padding-x: 10ch;
|
||||
--font-size: 20px;
|
||||
--h1-fontsize: 20px; /* 1,5 rem = 24px */
|
||||
--h2-fontsize: 20px; /* 1,375 rem = 22px */
|
||||
--h3-fontsize: 20px; /* 1,25 rem = 20px */
|
||||
--h4-fontsize: 20px; /* 1,125 rem = 18px */
|
||||
--line-height: 1.8;
|
||||
--main-content-margin: 0 auto;
|
||||
--main-content-max-width: 85ch;
|
||||
--monospace-font-size: 20px;
|
||||
--monospace-font: "iA Writer Mono S";
|
||||
--monospace-line-height: 1.6;
|
||||
--monospace: var(--monospace-font); /* Fixes source code mode */
|
||||
--nav-width: 200px;
|
||||
--vertical-padding: 40px;
|
||||
}
|
||||
|
||||
/* Narrow layout styles */
|
||||
@media (max-width: 640px) {
|
||||
:root {
|
||||
--document-padding-x: 4ch;
|
||||
}
|
||||
}
|
||||
|
||||
html {
|
||||
font-size: var(--font-size);
|
||||
background-color: var(--background-color);
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
color: var(--font-color);
|
||||
font-family: var(--body-font);
|
||||
line-height: var(--line-height);
|
||||
}
|
||||
|
||||
#write {
|
||||
/* size of writing area: */
|
||||
padding-left: var(--document-padding-x);
|
||||
padding-right: var(--document-padding-x);
|
||||
max-width: var(--main-content-max-width);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/**
|
||||
* ---------------------
|
||||
* Block Elements
|
||||
*/
|
||||
|
||||
/* yaml */
|
||||
pre.md-meta-block {
|
||||
background-color: var(--background-color);
|
||||
padding-bottom: .5rem;
|
||||
color: var(--accent-color);
|
||||
border-bottom: 2px solid var(--border-color);
|
||||
font-family: var(--monospace-font);
|
||||
}
|
||||
|
||||
/* headings */
|
||||
h1, h2, h3 {
|
||||
font-weight: bold;
|
||||
color: var(--header-color);
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin-top: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
font-size: var(--h1-fontsize);
|
||||
}
|
||||
|
||||
h1:not(:first-child) {
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin-top: 1rem;
|
||||
margin-bottom: 0rem;
|
||||
font-size: var(--h2-fontsize);
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin-top: 1rem;
|
||||
margin-bottom: 0rem;
|
||||
font-size: var(--h3-fontsize);
|
||||
}
|
||||
|
||||
h4, h5, h6 {
|
||||
color: var(--header-color);
|
||||
margin-top: 1rem;
|
||||
margin-bottom: 0rem;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: var(--h4-fontsize);
|
||||
}
|
||||
|
||||
h6 {
|
||||
color: var(--control-text-color);
|
||||
}
|
||||
|
||||
h1::before,
|
||||
h2::before,
|
||||
h3::before {
|
||||
font-weight: 400;
|
||||
text-align: right;
|
||||
width: 5ch;
|
||||
padding-right: 1ch;
|
||||
margin-left: -5ch;
|
||||
color: var(--accent-color);
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
h1::before {
|
||||
content: '#';
|
||||
}
|
||||
|
||||
h2::before {
|
||||
content: '##';
|
||||
}
|
||||
|
||||
h3::before {
|
||||
content: '###';
|
||||
}
|
||||
|
||||
h1 tt,
|
||||
h1 code {
|
||||
font-size: inherit;
|
||||
}
|
||||
h2 tt,
|
||||
h2 code {
|
||||
font-size: inherit;
|
||||
}
|
||||
h3 tt,
|
||||
h3 code {
|
||||
font-size: inherit;
|
||||
}
|
||||
h4 tt,
|
||||
h4 code {
|
||||
font-size: inherit;
|
||||
}
|
||||
h5 tt,
|
||||
h5 code {
|
||||
font-size: inherit;
|
||||
}
|
||||
h6 tt,
|
||||
h6 code {
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
/* table */
|
||||
table {
|
||||
margin-top: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
table tr:nth-child(2n),
|
||||
thead {
|
||||
background-color: var(--side-bar-bg-color);
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
border-style: solid;
|
||||
border-color: var(--border-color);
|
||||
border-width: 1px;
|
||||
padding: .35rem .7rem
|
||||
}
|
||||
|
||||
li p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.task-list {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.task-list-item {
|
||||
padding-left: 1.5em;
|
||||
margin-bottom: 0rem;
|
||||
}
|
||||
|
||||
#write input[type='checkbox'] {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 1rem 0;
|
||||
padding-left: 2ch;
|
||||
margin-left: .5ch;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
border-left: 2px solid var(--border-color);
|
||||
color: var(--accent-color);
|
||||
}
|
||||
|
||||
/* horizontal line */
|
||||
hr {
|
||||
border: none;
|
||||
border-bottom: 2px solid var(--border-color);
|
||||
margin-top: 1.4rem;
|
||||
margin-bottom: 1.4rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 2rem 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Code Fences
|
||||
* see http:/*support.typora.io/Code-Block-Styles
|
||||
*/
|
||||
|
||||
.cm-s-inner .CodeMirror-gutters {
|
||||
background: var(--code-bg-color);
|
||||
}
|
||||
|
||||
.code-tooltip {
|
||||
box-shadow: none;
|
||||
border-radius: var(--border-radius);
|
||||
background-color: var(--code-bg-color);
|
||||
border-color: var(--border-color);
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
.code-tooltip input {
|
||||
outline: none;
|
||||
width: 20ch;
|
||||
}
|
||||
|
||||
.md-fences .code-tooltip {
|
||||
bottom: -1.8rem;
|
||||
padding: none;
|
||||
}
|
||||
|
||||
.md-fences.md-focus .cm-s-inner {
|
||||
/* Remove bottom right border radius when tooltip is shown */
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
|
||||
/* code tooltip autocomplete list */
|
||||
|
||||
.autoComplt-hint {
|
||||
background-color: transparent !important;
|
||||
margin: 0 !important;
|
||||
padding: 0.125rem 0.375rem !important;
|
||||
color: var(--text-color) !important;
|
||||
line-height: var(--line-height) !important;
|
||||
height: 1.4rem !important;
|
||||
}
|
||||
|
||||
.autoComplt-hint-selected {
|
||||
background-color: var(--link-color) !important;
|
||||
color: var(--background-color) !important;
|
||||
}
|
||||
|
||||
/* basic styles */
|
||||
|
||||
.md-fences,
|
||||
code,
|
||||
tt {
|
||||
border: 1px solid var(--border-color);
|
||||
background-color: var(--code-bg-color);
|
||||
font-family: var(--monospace-font);
|
||||
font-size: var(--monospace-font-size);
|
||||
border-radius: .25rem;
|
||||
padding: 0 .125rem;
|
||||
line-height: var(--monospace-line-height);
|
||||
}
|
||||
|
||||
.md-fences {
|
||||
margin-bottom: 18px;
|
||||
margin-top: 15px;
|
||||
padding: 0.2em 1em;
|
||||
padding-top: 8px;
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--link-color);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Control UI (optional)
|
||||
*/
|
||||
|
||||
.outline-item:hover {
|
||||
color: var(--header-color);
|
||||
}
|
||||
|
||||
#write div.md-toc-tooltip {
|
||||
background-color: var(--background-color);
|
||||
}
|
||||
|
||||
95
core/home/config/Typora/themes/ia_typora_night.css
Normal file
95
core/home/config/Typora/themes/ia_typora_night.css
Normal file
@@ -0,0 +1,95 @@
|
||||
@import 'night/codeblock.dark.css';
|
||||
@import 'night/mermaid.dark.css';
|
||||
@import 'night/sourcemode.dark.css';
|
||||
@import 'ia_typora.css';
|
||||
|
||||
:root {
|
||||
--accented-background-color: #1e1e1e;
|
||||
--light-header-color: #dbdbdb; /* H1-H3 */
|
||||
--select-text-bg-color: #186a9a;
|
||||
--accent-color: #4f525a;
|
||||
--background-color: #101010;
|
||||
--font-color: #bbbcbc;
|
||||
--header-color: #bebebe; /* H4-H6 */
|
||||
--border-color: #232629;
|
||||
--link-color: #5584aa;
|
||||
--code-bg-color: #1c1a1a;
|
||||
--hover-bg-color: #050505;
|
||||
--control-text-color: var(--font-color);
|
||||
--side-bar-bg-color: var(--accented-background-color);
|
||||
--control-text-hover-color: var(--header-color);
|
||||
--item-hover-text-color: var(--header-color);
|
||||
--item-hover-bg-color: var(--hover-bg-color);
|
||||
--bg-color: var(--background-color);
|
||||
--text-color: var(--font-color);
|
||||
--meta-content-color: var(--accent-color);
|
||||
--md-char-color: var(--accent-color);
|
||||
--window-border: 1px solid rgba(0,0,0,.07);
|
||||
--active-file-bg-color: var(--hover-bg-color);
|
||||
}
|
||||
|
||||
.outline-item:hover {
|
||||
background-color: var(--hover-bg-color);
|
||||
}
|
||||
|
||||
#write {
|
||||
cursor: -webkit-image-set(url("night/cursor.png") 1x, url("night/cursor@2x.png") 2x) 8 8, auto;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3 {
|
||||
color: var(--light-header-color);
|
||||
}
|
||||
|
||||
mark {
|
||||
background: #b8b80a
|
||||
}
|
||||
|
||||
table tr:nth-child(2n),
|
||||
thead {
|
||||
background-color: #141313;
|
||||
}
|
||||
|
||||
sup.md-footnote {
|
||||
background-color: var(--code-bg-color);
|
||||
color: var(--font-color);
|
||||
}
|
||||
|
||||
/* right click menu */
|
||||
.context-menu {
|
||||
background-color: #141313;
|
||||
}
|
||||
|
||||
.context-menu.dropdown-menu .divider {
|
||||
background-color: #232629;
|
||||
}
|
||||
|
||||
/* focus mode */
|
||||
.on-focus-mode .md-end-block:not(.md-focus):not(.md-focus-container) * {
|
||||
color: #4f525a !important;
|
||||
}
|
||||
|
||||
.on-focus-mode .md-end-block:not(.md-focus) img,
|
||||
.on-focus-mode .md-task-list-item:not(.md-focus-container)>input {
|
||||
opacity: #4f525a !important;
|
||||
}
|
||||
|
||||
.on-focus-mode li[cid]:not(.md-focus-container){
|
||||
color: #4f525a;
|
||||
}
|
||||
|
||||
.on-focus-mode .md-fences.md-focus .CodeMirror-code>*:not(.CodeMirror-activeline) *,
|
||||
.on-focus-mode .CodeMirror.cm-s-inner:not(.CodeMirror-focused) * {
|
||||
color: #4f525a !important;
|
||||
}
|
||||
|
||||
.on-focus-mode .md-focus,
|
||||
.on-focus-mode .md-focus-container {
|
||||
color: var(--light-header-color);
|
||||
}
|
||||
|
||||
.on-focus-mode #typora-source .CodeMirror-code>*:not(.CodeMirror-activeline) * {
|
||||
color: #4f525a !important;
|
||||
}
|
||||
|
||||
4
core/home/config/brave-flags.conf
Normal file
4
core/home/config/brave-flags.conf
Normal file
@@ -0,0 +1,4 @@
|
||||
--ozone-platform=wayland
|
||||
--ozone-platform-hint=wayland
|
||||
--enable-features=TouchpadOverscrollHistoryNavigation
|
||||
--load-extension=~/.config/nomarchy/default/chromium/extensions/copy-url
|
||||
4
core/home/config/chromium-flags.conf
Normal file
4
core/home/config/chromium-flags.conf
Normal file
@@ -0,0 +1,4 @@
|
||||
--ozone-platform=wayland
|
||||
--ozone-platform-hint=wayland
|
||||
--enable-features=TouchpadOverscrollHistoryNavigation
|
||||
--load-extension=~/.config/nomarchy/default/chromium/extensions/copy-url
|
||||
4
core/home/config/environment.d/fcitx.conf
Normal file
4
core/home/config/environment.d/fcitx.conf
Normal file
@@ -0,0 +1,4 @@
|
||||
INPUT_METHOD=fcitx
|
||||
QT_IM_MODULE=fcitx
|
||||
XMODIFIERS=@im=fcitx
|
||||
SDL_IM_MODULE=fcitx
|
||||
137
core/home/config/fastfetch/config.jsonc
Normal file
137
core/home/config/fastfetch/config.jsonc
Normal file
@@ -0,0 +1,137 @@
|
||||
{
|
||||
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
|
||||
"logo": {
|
||||
"type": "file",
|
||||
"source": "~/.config/nomarchy/branding/icon.txt",
|
||||
"color": { "1": "green", "2": "blue" },
|
||||
"padding": {
|
||||
"top": 2,
|
||||
"right": 6,
|
||||
"left": 2
|
||||
}
|
||||
},
|
||||
"modules": [
|
||||
"break",
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "\u001b[90m┌──────────────────────Hardware──────────────────────┐"
|
||||
},
|
||||
{
|
||||
"type": "host",
|
||||
"key": " PC",
|
||||
"keyColor": "green"
|
||||
},
|
||||
{
|
||||
"type": "cpu",
|
||||
"key": "│ ├",
|
||||
"showPeCoreCount": true,
|
||||
"keyColor": "green"
|
||||
},
|
||||
{
|
||||
"type": "gpu",
|
||||
"key": "│ ├",
|
||||
"detectionMethod": "pci",
|
||||
"keyColor": "green"
|
||||
},
|
||||
{
|
||||
"type": "display",
|
||||
"key": "│ ├",
|
||||
"keyColor": "green"
|
||||
},
|
||||
{
|
||||
"type": "disk",
|
||||
"key": "│ ├",
|
||||
"keyColor": "green"
|
||||
},
|
||||
{
|
||||
"type": "memory",
|
||||
"key": "│ ├",
|
||||
"keyColor": "green"
|
||||
},
|
||||
{
|
||||
"type": "swap",
|
||||
"key": "└ └ ",
|
||||
"keyColor": "green"
|
||||
},
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "\u001b[90m└────────────────────────────────────────────────────┘"
|
||||
},
|
||||
"break",
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "\u001b[90m┌──────────────────────Software──────────────────────┐"
|
||||
},
|
||||
{
|
||||
"type": "os",
|
||||
"key": "\ue900 OS",
|
||||
"keyColor": "blue"
|
||||
},
|
||||
{
|
||||
"type": "kernel",
|
||||
"key": "│ ├",
|
||||
"keyColor": "blue"
|
||||
},
|
||||
{
|
||||
"type": "wm",
|
||||
"key": "│ ├",
|
||||
"keyColor": "blue"
|
||||
},
|
||||
{
|
||||
"type": "de",
|
||||
"key": " DE",
|
||||
"keyColor": "blue"
|
||||
},
|
||||
{
|
||||
"type": "terminal",
|
||||
"key": "│ ├",
|
||||
"keyColor": "blue"
|
||||
},
|
||||
{
|
||||
"type": "packages",
|
||||
"key": "│ ├",
|
||||
"keyColor": "blue"
|
||||
},
|
||||
{
|
||||
"type": "wmtheme",
|
||||
"key": "│ ├",
|
||||
"keyColor": "blue"
|
||||
},
|
||||
{
|
||||
"type": "command",
|
||||
"key": "│ ├",
|
||||
"keyColor": "blue",
|
||||
"text": "theme=$(cat ~/.config/nomarchy/current/theme.name); echo -e \"$theme \\e[38m●\\e[37m●\\e[36m●\\e[35m●\\e[34m●\\e[33m●\\e[32m●\\e[31m●\""
|
||||
},
|
||||
{
|
||||
"type": "terminalfont",
|
||||
"key": "└ └",
|
||||
"keyColor": "blue"
|
||||
},
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "\u001b[90m└────────────────────────────────────────────────────┘"
|
||||
},
|
||||
"break",
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "\u001b[90m┌────────────────Age / Uptime / Update───────────────┐"
|
||||
},
|
||||
{
|
||||
"type": "command",
|
||||
"key": " OS Age",
|
||||
"keyColor": "magenta",
|
||||
"text": "echo $(( ($(date +%s) - $(stat -c %W /)) / 86400 )) days"
|
||||
},
|
||||
{
|
||||
"type": "uptime",
|
||||
"key": " Uptime",
|
||||
"keyColor": "magenta"
|
||||
},
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "\u001b[90m└────────────────────────────────────────────────────┘"
|
||||
},
|
||||
"break"
|
||||
]
|
||||
}
|
||||
2
core/home/config/fcitx5/conf/clipboard.conf
Normal file
2
core/home/config/fcitx5/conf/clipboard.conf
Normal file
@@ -0,0 +1,2 @@
|
||||
TriggerKey=
|
||||
PastePrimaryKey=
|
||||
1
core/home/config/fcitx5/conf/xcb.conf
Normal file
1
core/home/config/fcitx5/conf/xcb.conf
Normal file
@@ -0,0 +1 @@
|
||||
Allow Overriding System XKB Settings=False
|
||||
79
core/home/config/fontconfig/fonts.conf
Normal file
79
core/home/config/fontconfig/fonts.conf
Normal file
@@ -0,0 +1,79 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
|
||||
<fontconfig>
|
||||
<match target="pattern">
|
||||
<test name="family" qual="any">
|
||||
<string>sans-serif</string>
|
||||
</test>
|
||||
<edit name="family" mode="assign" binding="strong">
|
||||
<string>Liberation Sans</string>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
<match target="pattern">
|
||||
<test name="family" qual="any">
|
||||
<string>serif</string>
|
||||
</test>
|
||||
<edit name="family" mode="assign" binding="strong">
|
||||
<string>Liberation Serif</string>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
<match target="pattern">
|
||||
<test name="family" qual="any">
|
||||
<string>monospace</string>
|
||||
</test>
|
||||
<edit name="family" mode="assign" binding="strong">
|
||||
<string>JetBrainsMono Nerd Font</string>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
<alias>
|
||||
<family>system-ui</family>
|
||||
<prefer>
|
||||
<family>Liberation Sans</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>ui-monospace</family>
|
||||
<default>
|
||||
<family>monospace</family>
|
||||
</default>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>-apple-system</family>
|
||||
<prefer>
|
||||
<family>Liberation Sans</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>BlinkMacSystemFont</family>
|
||||
<prefer>
|
||||
<family>Liberation Sans</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>sans-serif</family>
|
||||
<accept>
|
||||
<family>Noto Color Emoji</family>
|
||||
</accept>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>serif</family>
|
||||
<accept>
|
||||
<family>Noto Color Emoji</family>
|
||||
</accept>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>monospace</family>
|
||||
<accept>
|
||||
<family>Noto Color Emoji</family>
|
||||
</accept>
|
||||
</alias>
|
||||
</fontconfig>
|
||||
28
core/home/config/git/config
Normal file
28
core/home/config/git/config
Normal file
@@ -0,0 +1,28 @@
|
||||
# See https://git-scm.com/docs/git-config
|
||||
|
||||
[alias]
|
||||
co = checkout
|
||||
br = branch
|
||||
ci = commit
|
||||
st = status
|
||||
[init]
|
||||
defaultBranch = master
|
||||
[pull]
|
||||
rebase = true # Rebase (instead of merge) on pull
|
||||
[push]
|
||||
autoSetupRemote = true # Automatically set upstream branch on push
|
||||
[diff]
|
||||
algorithm = histogram # Clearer diffs on moved/edited lines
|
||||
colorMoved = plain # Highlight moved blocks in diffs
|
||||
mnemonicPrefix = true # More intuitive refs in diff output
|
||||
[commit]
|
||||
verbose = true # Include diff comment in commit message template
|
||||
[column]
|
||||
ui = auto # Output in columns when possible
|
||||
[branch]
|
||||
sort = -committerdate # Sort branches by most recent commit first
|
||||
[tag]
|
||||
sort = -version:refname # Sort version numbers as you would expect
|
||||
[rerere]
|
||||
enabled = true # Record and reuse conflict resolutions
|
||||
autoupdate = true # Apply stored conflict resolutions automatically
|
||||
13
core/home/config/imv/config
Normal file
13
core/home/config/imv/config
Normal file
@@ -0,0 +1,13 @@
|
||||
[binds]
|
||||
|
||||
# Print the current image file
|
||||
<Ctrl+p> = exec lp "$imv_current_file"
|
||||
|
||||
# Delete the current image and quit the viewer
|
||||
<Ctrl+x> = exec rm "$imv_current_file"; quit
|
||||
|
||||
# Delete the current image and move to the next one
|
||||
<Ctrl+Shift+X> = exec rm "$imv_current_file"; close
|
||||
|
||||
# Rotate the currently open image by 90 degrees
|
||||
<Ctrl+r> = exec mogrify -rotate 90 "$imv_current_file"
|
||||
84
core/home/config/nautilus-python/extensions/localsend.py
Normal file
84
core/home/config/nautilus-python/extensions/localsend.py
Normal file
@@ -0,0 +1,84 @@
|
||||
import os
|
||||
import shutil
|
||||
|
||||
from gi import require_version
|
||||
|
||||
require_version("Nautilus", "4.1")
|
||||
|
||||
from gi.repository import GObject, Gio, Nautilus
|
||||
|
||||
|
||||
class SendViaLocalSendAction(GObject.GObject, Nautilus.MenuProvider):
|
||||
def _launch_localsend(self, paths):
|
||||
command = self._resolve_command()
|
||||
if not command:
|
||||
return
|
||||
|
||||
if command[-1] == "@@":
|
||||
command = command + paths + ["@@"]
|
||||
else:
|
||||
command = command + paths
|
||||
|
||||
Gio.Subprocess.new(command, Gio.SubprocessFlags.NONE)
|
||||
|
||||
def _resolve_command(self):
|
||||
localsend = shutil.which("localsend")
|
||||
if localsend:
|
||||
return [localsend, "--headless", "send"]
|
||||
|
||||
flatpak = shutil.which("flatpak")
|
||||
if flatpak and self._has_flatpak_app(flatpak, "org.localsend.localsend_app"):
|
||||
return [
|
||||
flatpak,
|
||||
"run",
|
||||
"--file-forwarding",
|
||||
"org.localsend.localsend_app",
|
||||
"@@",
|
||||
]
|
||||
|
||||
return None
|
||||
|
||||
def _has_flatpak_app(self, flatpak, app_id):
|
||||
process = Gio.Subprocess.new(
|
||||
[flatpak, "info", app_id],
|
||||
Gio.SubprocessFlags.STDOUT_SILENCE | Gio.SubprocessFlags.STDERR_SILENCE,
|
||||
)
|
||||
return process.wait_check()
|
||||
|
||||
def _selected_paths(self, files):
|
||||
paths = []
|
||||
|
||||
for file in files:
|
||||
location = file.get_location()
|
||||
if not location:
|
||||
continue
|
||||
|
||||
path = location.get_path()
|
||||
if path and path not in paths:
|
||||
paths.append(path)
|
||||
|
||||
return paths
|
||||
|
||||
def _make_item(self, paths):
|
||||
label = (
|
||||
"Send via LocalSend" if len(paths) == 1 else "Send selected via LocalSend"
|
||||
)
|
||||
item = Nautilus.MenuItem(
|
||||
name="LocalSendNautilus::send_via_localsend",
|
||||
label=label,
|
||||
icon="localsend",
|
||||
)
|
||||
item.connect("activate", self._on_activate, paths)
|
||||
return item
|
||||
|
||||
def _on_activate(self, _menu, paths):
|
||||
self._launch_localsend(paths)
|
||||
|
||||
def get_file_items(self, *args):
|
||||
files = args[0] if len(args) == 1 else args[1]
|
||||
paths = self._selected_paths(files)
|
||||
|
||||
if not paths or not self._resolve_command():
|
||||
return []
|
||||
|
||||
return [self._make_item(paths)]
|
||||
366
core/home/config/nomarchy-skill/SKILL.md
Normal file
366
core/home/config/nomarchy-skill/SKILL.md
Normal file
@@ -0,0 +1,366 @@
|
||||
---
|
||||
name: nomarchy
|
||||
description: >
|
||||
REQUIRED for end-user customization of Linux desktop, window manager, or system config.
|
||||
Use when editing ~/.config/hypr/, ~/.config/waybar/, ~/.config/walker/,
|
||||
~/.config/alacritty/, ~/.config/kitty/, ~/.config/ghostty/, ~/.config/mako/,
|
||||
or ~/.config/nomarchy/. Triggers: Hyprland, window rules, animations, keybindings,
|
||||
monitors, gaps, borders, blur, opacity, waybar, walker, terminal config, themes,
|
||||
wallpaper, night light, idle, lock screen, screenshots, layer rules, workspace
|
||||
settings, display config, and user-facing nomarchy commands. Excludes Nomarchy
|
||||
source development in ~/.local/share/nomarchy/ and nomarchy-dev-* workflows.
|
||||
---
|
||||
|
||||
# Nomarchy Skill
|
||||
|
||||
Manage [Nomarchy](https://nomarchy.org/) Linux systems - a beautiful, modern, opinionated Arch Linux distribution with Hyprland.
|
||||
|
||||
This skill is for end-user customization on installed systems.
|
||||
It is not for contributing to Nomarchy source code.
|
||||
|
||||
## When This Skill MUST Be Used
|
||||
|
||||
**ALWAYS invoke this skill for end-user requests involving ANY of these:**
|
||||
|
||||
- Editing ANY file in `~/.config/hypr/` (window rules, animations, keybindings, monitors, etc.)
|
||||
- Editing ANY file in `~/.config/waybar/`, `~/.config/walker/`, `~/.config/mako/`
|
||||
- Editing terminal configs (alacritty, kitty, ghostty)
|
||||
- Editing ANY file in `~/.config/nomarchy/`
|
||||
- Window behavior, animations, opacity, blur, gaps, borders
|
||||
- Layer rules, workspace settings, display/monitor configuration
|
||||
- Themes, wallpapers, fonts, appearance changes
|
||||
- User-facing `nomarchy-*` commands (`nomarchy-theme-*`, `nomarchy-refresh-*`, `nomarchy-restart-*`, etc.)
|
||||
- Screenshots, screen recording, night light, idle behavior, lock screen
|
||||
|
||||
**If you're about to edit a config file in ~/.config/ on this system, STOP and use this skill first.**
|
||||
|
||||
**Do NOT use this skill for Nomarchy development tasks** (editing files in `~/.local/share/nomarchy/`, creating migrations, or running `nomarchy-dev-*` workflows).
|
||||
|
||||
## Critical Safety Rules
|
||||
|
||||
**For end-user customization tasks, NEVER modify anything in `~/.local/share/nomarchy/`** - but READING is safe and encouraged.
|
||||
|
||||
This directory contains Nomarchy's source files managed by git. Any changes will be:
|
||||
- Lost on next `nomarchy-update`
|
||||
- Cause conflicts with upstream
|
||||
- Break the system's update mechanism
|
||||
|
||||
```
|
||||
~/.local/share/nomarchy/ # READ-ONLY - NEVER EDIT (reading is OK)
|
||||
├── bin/ # Source scripts (symlinked to PATH)
|
||||
├── config/ # Default config templates
|
||||
├── themes/ # Stock themes
|
||||
├── default/ # System defaults
|
||||
├── migrations/ # Update migrations
|
||||
└── install/ # Installation scripts
|
||||
```
|
||||
|
||||
**Reading `~/.local/share/nomarchy/` is SAFE and useful** - do it freely to:
|
||||
- Understand how nomarchy commands work: `cat $(which nomarchy-theme-set)`
|
||||
- See default configs before customizing: `cat ~/.local/share/nomarchy/config/waybar/config.jsonc`
|
||||
- Check stock theme files to copy for customization
|
||||
- Reference default hyprland settings: `cat ~/.config/nomarchy/default/hypr/*`
|
||||
|
||||
**Always use these safe locations instead:**
|
||||
- `~/.config/` - User configuration (safe to edit)
|
||||
- `~/.config/nomarchy/themes/<custom-name>/` - Custom themes (must be real directories)
|
||||
- `~/.config/nomarchy/hooks/` - Custom automation hooks
|
||||
|
||||
If the request is to develop Nomarchy itself, this skill is out of scope. Follow repository development instructions instead of this skill.
|
||||
|
||||
## System Architecture
|
||||
|
||||
Nomarchy is built on:
|
||||
|
||||
| Component | Purpose | Config Location |
|
||||
|-----------|---------|-----------------|
|
||||
| **Arch Linux** | Base OS | `/etc/`, `~/.config/` |
|
||||
| **Hyprland** | Wayland compositor/WM | `~/.config/hypr/` |
|
||||
| **Waybar** | Status bar | `~/.config/waybar/` |
|
||||
| **Walker** | App launcher | `~/.config/walker/` |
|
||||
| **Alacritty/Kitty/Ghostty** | Terminals | `~/.config/<terminal>/` |
|
||||
| **Mako** | Notifications | `~/.config/mako/` |
|
||||
| **SwayOSD** | On-screen display | `~/.config/swayosd/` |
|
||||
|
||||
## Command Discovery
|
||||
|
||||
Nomarchy provides ~145 commands following `nomarchy-<category>-<action>` pattern.
|
||||
|
||||
```bash
|
||||
# List all nomarchy commands
|
||||
compgen -c | grep -E '^nomarchy-' | sort -u
|
||||
|
||||
# Find commands by category
|
||||
compgen -c | grep -E '^nomarchy-theme'
|
||||
compgen -c | grep -E '^nomarchy-restart'
|
||||
|
||||
# Read a command's source to understand it
|
||||
cat $(which nomarchy-theme-set)
|
||||
```
|
||||
|
||||
### Command Categories
|
||||
|
||||
| Prefix | Purpose | Example |
|
||||
|--------|---------|---------|
|
||||
| `nomarchy-refresh-*` | Reset config to defaults (backs up first) | `nomarchy-refresh-waybar` |
|
||||
| `nomarchy-restart-*` | Restart a service/app | `nomarchy-restart-waybar` |
|
||||
| `nomarchy-toggle-*` | Toggle feature on/off | `nomarchy-toggle-nightlight` |
|
||||
| `nomarchy-theme-*` | Theme management | `nomarchy-theme-set <name>` |
|
||||
| `nomarchy-install-*` | Install optional software | `nomarchy-install-docker-dbs` |
|
||||
| `nomarchy-launch-*` | Launch apps | `nomarchy-launch-browser` |
|
||||
| `nomarchy-cmd-*` | System commands | `nomarchy-cmd-screenshot` |
|
||||
| `nomarchy-pkg-*` | Package management | `nomarchy-pkg-install <pkg>` |
|
||||
| `nomarchy-setup-*` | Initial setup tasks | `nomarchy-setup-fingerprint` |
|
||||
| `nomarchy-update-*` | System updates | `nomarchy-update` |
|
||||
|
||||
## Configuration Locations
|
||||
|
||||
### Hyprland (Window Manager)
|
||||
|
||||
```
|
||||
~/.config/hypr/
|
||||
├── hyprland.conf # Main config (sources others)
|
||||
├── bindings.conf # Keybindings
|
||||
├── monitors.conf # Display configuration
|
||||
├── input.conf # Keyboard/mouse settings
|
||||
├── looknfeel.conf # Appearance (gaps, borders, animations)
|
||||
├── envs.conf # Environment variables
|
||||
├── autostart.conf # Startup applications
|
||||
├── hypridle.conf # Idle behavior (screen off, lock, suspend)
|
||||
├── hyprlock.conf # Lock screen appearance
|
||||
└── hyprsunset.conf # Night light / blue light filter
|
||||
```
|
||||
|
||||
**Key behaviors:**
|
||||
- Hyprland auto-reloads on config save (no restart needed for most changes)
|
||||
- Use `hyprctl reload` to force reload
|
||||
- Use `nomarchy-refresh-hyprland` to reset to defaults
|
||||
|
||||
### Waybar (Status Bar)
|
||||
|
||||
```
|
||||
~/.config/waybar/
|
||||
├── config.jsonc # Bar layout and modules (JSONC format)
|
||||
└── style.css # Styling
|
||||
```
|
||||
|
||||
**Waybar does NOT auto-reload.** You MUST run `nomarchy-restart-waybar` after any config changes.
|
||||
|
||||
**Commands:** `nomarchy-restart-waybar`, `nomarchy-refresh-waybar`, `nomarchy-toggle-waybar`
|
||||
|
||||
### Terminals
|
||||
|
||||
```
|
||||
~/.config/alacritty/alacritty.toml
|
||||
~/.config/kitty/kitty.conf
|
||||
~/.config/ghostty/config
|
||||
```
|
||||
|
||||
**Command:** `nomarchy-restart-terminal`
|
||||
|
||||
### Other Configs
|
||||
|
||||
| App | Location |
|
||||
|-----|----------|
|
||||
| btop | `~/.config/btop/btop.conf` |
|
||||
| fastfetch | `~/.config/fastfetch/config.jsonc` |
|
||||
| lazygit | `~/.config/lazygit/config.yml` |
|
||||
| starship | `~/.config/starship.toml` |
|
||||
| git | `~/.config/git/config` |
|
||||
| walker | `~/.config/walker/config.toml` |
|
||||
|
||||
## Safe Customization Patterns
|
||||
|
||||
### Pattern 1: Edit User Config Directly
|
||||
|
||||
For simple changes, edit files in `~/.config/`:
|
||||
|
||||
```bash
|
||||
# 1. Read current config
|
||||
cat ~/.config/hypr/bindings.conf
|
||||
|
||||
# 2. Backup before changes
|
||||
cp ~/.config/hypr/bindings.conf ~/.config/hypr/bindings.conf.bak.$(date +%s)
|
||||
|
||||
# 3. Make changes with Edit tool
|
||||
|
||||
# 4. Apply changes
|
||||
# - Hyprland: auto-reloads on save (no restart needed)
|
||||
# - Waybar: MUST restart with nomarchy-restart-waybar
|
||||
# - Walker: MUST restart with nomarchy-restart-walker
|
||||
# - Terminals: MUST restart with nomarchy-restart-terminal
|
||||
```
|
||||
|
||||
### Pattern 2: Make a new theme
|
||||
|
||||
1. Create a directory under ~/.config/nomarchy/themes.
|
||||
2. See how an existing theme is done via ~/.local/share/nomarchy/themes/catppuccin.
|
||||
3. Download a matching background (or several) from the internet and put them in ~/.config/nomarchy/themes/[name-of-new-theme]
|
||||
4. When done with the theme, run nomarchy-theme-set "Name of new theme"
|
||||
|
||||
### Pattern 3: Use Hooks for Automation
|
||||
|
||||
Create scripts in `~/.config/nomarchy/hooks/` to run automatically on events:
|
||||
|
||||
```bash
|
||||
# Available hooks (see samples in ~/.config/nomarchy/hooks/):
|
||||
~/.config/nomarchy/hooks/
|
||||
├── theme-set # Runs after theme change (receives theme name as $1)
|
||||
├── font-set # Runs after font change
|
||||
└── post-update # Runs after nomarchy-update
|
||||
```
|
||||
|
||||
Example hook (`~/.config/nomarchy/hooks/theme-set`):
|
||||
```bash
|
||||
#!/bin/bash
|
||||
THEME_NAME=$1
|
||||
echo "Theme changed to: $THEME_NAME"
|
||||
# Add custom actions here
|
||||
```
|
||||
|
||||
### Pattern 4: Reset to Defaults -- ALWAYS SEEK USER CONFIRMATION BEFORE RUNNING
|
||||
|
||||
When customizations go wrong:
|
||||
|
||||
```bash
|
||||
# Reset specific config (creates backup automatically)
|
||||
nomarchy-refresh-waybar
|
||||
nomarchy-refresh-hyprland
|
||||
|
||||
# The refresh command:
|
||||
# 1. Backs up current config with timestamp
|
||||
# 2. Copies default from ~/.local/share/nomarchy/config/
|
||||
# 3. Restarts the component
|
||||
```
|
||||
|
||||
## Common Tasks
|
||||
|
||||
### Themes
|
||||
|
||||
```bash
|
||||
nomarchy-theme-list # Show available themes
|
||||
nomarchy-theme-current # Show current theme
|
||||
nomarchy-theme-set <name> # Apply theme (use "Tokyo Night" not "tokyo-night")
|
||||
nomarchy-theme-next # Cycle to next theme
|
||||
nomarchy-theme-bg-next # Cycle wallpaper
|
||||
nomarchy-theme-install <url> # Install from git repo
|
||||
```
|
||||
|
||||
### Keybindings
|
||||
|
||||
Edit `~/.config/hypr/bindings.conf`. Format:
|
||||
```
|
||||
bind = SUPER, Return, exec, xdg-terminal-exec
|
||||
bind = SUPER, Q, killactive
|
||||
bind = SUPER SHIFT, E, exit
|
||||
```
|
||||
|
||||
View current bindings: `nomarchy-menu-keybindings --print`
|
||||
|
||||
**IMPORTANT: When re-binding an existing key:**
|
||||
|
||||
1. First check existing bindings: `nomarchy-menu-keybindings --print`
|
||||
2. If the key is already bound, you MUST add an `unbind` directive BEFORE your new `bind`
|
||||
3. Inform the user what the key was previously bound to
|
||||
|
||||
Example - rebinding SUPER+F (which is bound to fullscreen by default):
|
||||
```
|
||||
# Unbind existing SUPER+F (was: fullscreen)
|
||||
unbind = SUPER, F
|
||||
# New binding for file manager
|
||||
bind = SUPER, F, exec, nautilus
|
||||
```
|
||||
|
||||
Always tell the user: "Note: SUPER+F was previously bound to fullscreen. I've added an unbind directive to override it."
|
||||
|
||||
### Display/Monitors
|
||||
|
||||
Edit `~/.config/hypr/monitors.conf`. Format:
|
||||
```
|
||||
monitor = eDP-1, 1920x1080@60, 0x0, 1
|
||||
monitor = HDMI-A-1, 2560x1440@144, 1920x0, 1
|
||||
```
|
||||
|
||||
List monitors: `hyprctl monitors`
|
||||
|
||||
### Window Rules
|
||||
|
||||
**CRITICAL: Hyprland window rules syntax changes frequently between versions.**
|
||||
|
||||
Before writing ANY window rules, you MUST fetch the current documentation from the official Hyprland wiki:
|
||||
- https://github.com/hyprwm/hyprland-wiki/blob/main/content/Configuring/Window-Rules.md
|
||||
|
||||
DO NOT rely on cached or memorized window rule syntax. The format has changed multiple times and using outdated syntax will cause errors or unexpected behavior.
|
||||
|
||||
Window rules go in `~/.config/hypr/hyprland.conf` or a sourced file. Always verify the current syntax from the wiki first.
|
||||
|
||||
### Fonts
|
||||
|
||||
```bash
|
||||
nomarchy-font-list # Available fonts
|
||||
nomarchy-font-current # Current font
|
||||
nomarchy-font-set <name> # Change font
|
||||
```
|
||||
|
||||
### System
|
||||
|
||||
```bash
|
||||
nomarchy-update # Full system update
|
||||
nomarchy-version # Show Nomarchy version
|
||||
nomarchy-debug --no-sudo --print # Debug info (ALWAYS use these flags)
|
||||
nomarchy-lock-screen # Lock screen
|
||||
nomarchy-system-shutdown # Shutdown
|
||||
nomarchy-system-reboot # Reboot
|
||||
```
|
||||
|
||||
**IMPORTANT:** Always run `nomarchy-debug` with `--no-sudo --print` flags to avoid interactive sudo prompts that will hang the terminal.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
```bash
|
||||
# Get debug information (ALWAYS use these flags to avoid interactive prompts)
|
||||
nomarchy-debug --no-sudo --print
|
||||
|
||||
# Upload logs for support
|
||||
nomarchy-upload-log
|
||||
|
||||
# Reset specific config to defaults
|
||||
nomarchy-refresh-<app>
|
||||
|
||||
# Refresh specific config file
|
||||
# config-file path is relative to ~/.config/
|
||||
# eg. nomarchy-refresh-config hypr/hyprlock.conf will refresh ~/.config/hypr/hyprlock.conf
|
||||
nomarchy-refresh-config <config-file>
|
||||
|
||||
# Full reinstall of configs (nuclear option)
|
||||
nomarchy-reinstall
|
||||
```
|
||||
|
||||
## Decision Framework
|
||||
|
||||
When user requests system changes:
|
||||
|
||||
1. **Is it a stock nomarchy command?** Use it directly
|
||||
2. **Is it a config edit?** Edit in `~/.config/`, never `~/.local/share/nomarchy/`
|
||||
3. **Is it a theme customization?** Create a NEW custom theme directory
|
||||
4. **Is it automation?** Use hooks in `~/.config/nomarchy/hooks/`
|
||||
5. **Is it a package install?** Use `nomarchy-pkg-add` (or `nomarchy-pkg-aur-add` for AUR-only packages)
|
||||
6. **Unsure if command exists?** Search with `compgen -c | grep nomarchy`
|
||||
|
||||
## Out of Scope
|
||||
|
||||
This skill intentionally does not cover Nomarchy source development. Do not use this skill for:
|
||||
- Editing files in `~/.local/share/nomarchy/` (`bin/`, `config/`, `default/`, `themes/`, `migrations/`, etc.)
|
||||
- Creating or editing migrations
|
||||
- Running `nomarchy-dev-*` commands
|
||||
|
||||
## Example Requests
|
||||
|
||||
- "Change my theme to catppuccin" -> `nomarchy-theme-set catppuccin`
|
||||
- "Add a keybinding for Super+E to open file manager" -> Check existing bindings first, add `unbind` if needed, then add `bind` in `~/.config/hypr/bindings.conf`
|
||||
- "Configure my external monitor" -> Edit `~/.config/hypr/monitors.conf`
|
||||
- "Make the window gaps smaller" -> Edit `~/.config/hypr/looknfeel.conf`
|
||||
- "Set up night light to turn on at sunset" -> `nomarchy-toggle-nightlight` or edit `~/.config/hypr/hyprsunset.conf`
|
||||
- "Customize the catppuccin theme colors" -> Create `~/.config/nomarchy/themes/catppuccin-custom/` by copying from stock, then edit
|
||||
- "Run a script every time I change themes" -> Create `~/.config/nomarchy/hooks/theme-set`
|
||||
- "Reset waybar to defaults" -> `nomarchy-refresh-waybar`
|
||||
BIN
core/home/config/nomarchy.ttf
Normal file
BIN
core/home/config/nomarchy.ttf
Normal file
Binary file not shown.
11
core/home/config/nomarchy/default/alacritty/screensaver.toml
Normal file
11
core/home/config/nomarchy/default/alacritty/screensaver.toml
Normal file
@@ -0,0 +1,11 @@
|
||||
[colors.primary]
|
||||
background = "0x000000"
|
||||
|
||||
[colors.cursor]
|
||||
cursor = "0x000000"
|
||||
|
||||
[font]
|
||||
size = 18.0
|
||||
|
||||
[window]
|
||||
opacity = 1.0
|
||||
57
core/home/config/nomarchy/default/bash/aliases
Normal file
57
core/home/config/nomarchy/default/bash/aliases
Normal file
@@ -0,0 +1,57 @@
|
||||
# File system
|
||||
if command -v eza &> /dev/null; then
|
||||
alias ls='eza -lh --group-directories-first --icons=auto'
|
||||
alias lsa='ls -a'
|
||||
alias lt='eza --tree --level=2 --long --icons --git'
|
||||
alias lta='lt -a'
|
||||
fi
|
||||
|
||||
if [[ "$TERM" == "xterm-kitty" ]]; then
|
||||
alias ff="fzf --preview 'case \$(file --mime-type -b {}) in image/*) kitty icat --clear --transfer-mode=memory --stdin=no --place=\${FZF_PREVIEW_COLUMNS}x\${FZF_PREVIEW_LINES}@0x0 {} ;; *) bat --style=numbers --color=always {} ;; esac'"
|
||||
else
|
||||
alias ff="fzf --preview 'bat --style=numbers --color=always {}'"
|
||||
fi
|
||||
alias eff='$EDITOR "$(ff)"'
|
||||
sff() { if [ $# -eq 0 ]; then echo "Usage: sff <destination> (e.g. sff host:/tmp/)"; return 1; fi; local file; file=$(find . -type f -printf '%T@\t%p\n' | sort -rn | cut -f2- | ff) && [ -n "$file" ] && scp "$file" "$1"; }
|
||||
|
||||
if command -v zoxide &> /dev/null; then
|
||||
alias cd="zd"
|
||||
zd() {
|
||||
if (( $# == 0 )); then
|
||||
builtin cd ~ || return
|
||||
elif [[ -d $1 ]]; then
|
||||
builtin cd "$1" || return
|
||||
else
|
||||
if ! z "$@"; then
|
||||
echo "Error: Directory not found"
|
||||
return 1
|
||||
fi
|
||||
|
||||
printf "\U000F17A9 "
|
||||
pwd
|
||||
fi
|
||||
}
|
||||
fi
|
||||
|
||||
open() (
|
||||
xdg-open "$@" >/dev/null 2>&1 &
|
||||
)
|
||||
|
||||
# Directories
|
||||
alias ..='cd ..'
|
||||
alias ...='cd ../..'
|
||||
alias ....='cd ../../..'
|
||||
|
||||
# Tools
|
||||
alias c='opencode'
|
||||
alias cx='printf "\033[2J\033[3J\033[H" && claude --allow-dangerously-skip-permissions'
|
||||
alias d='docker'
|
||||
alias r='rails'
|
||||
alias t='tmux attach || tmux new -s Work'
|
||||
n() { if [ "$#" -eq 0 ]; then command nvim . ; else command nvim "$@"; fi; }
|
||||
|
||||
# Git
|
||||
alias g='git'
|
||||
alias gcm='git commit -m'
|
||||
alias gcam='git commit -a -m'
|
||||
alias gcad='git commit -a --amend'
|
||||
7
core/home/config/nomarchy/default/bash/envs
Normal file
7
core/home/config/nomarchy/default/bash/envs
Normal file
@@ -0,0 +1,7 @@
|
||||
# Editor used by CLI
|
||||
export SUDO_EDITOR="$EDITOR"
|
||||
export BAT_THEME=ansi
|
||||
|
||||
# Duplicated from .config/uwsm/env so SSH works too
|
||||
export NOMARCHY_PATH=$HOME/.local/share/nomarchy
|
||||
export PATH=$NOMARCHY_PATH/bin:$PATH:$HOME/.local/bin
|
||||
3
core/home/config/nomarchy/default/bash/fns/compression
Normal file
3
core/home/config/nomarchy/default/bash/fns/compression
Normal file
@@ -0,0 +1,3 @@
|
||||
# Compression
|
||||
compress() { tar -czf "${1%/}.tar.gz" "${1%/}"; }
|
||||
alias decompress="tar -xzf"
|
||||
59
core/home/config/nomarchy/default/bash/fns/drives
Normal file
59
core/home/config/nomarchy/default/bash/fns/drives
Normal file
@@ -0,0 +1,59 @@
|
||||
# Write iso file to sd card
|
||||
iso2sd() {
|
||||
if (( $# < 1 )); then
|
||||
echo "Usage: iso2sd <input_file> [output_device]"
|
||||
echo "Example: iso2sd ~/Downloads/ubuntu-25.04-desktop-amd64.iso /dev/sda"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local iso="$1"
|
||||
local drive="$2"
|
||||
|
||||
if [[ -z $drive ]]; then
|
||||
local available_sds=$(lsblk -dpno NAME | grep -E '/dev/sd')
|
||||
|
||||
if [[ -z $available_sds ]]; then
|
||||
echo "No SD drives found and no drive specified"
|
||||
return 1
|
||||
fi
|
||||
|
||||
drive=$(nomarchy-drive-select "$available_sds")
|
||||
|
||||
if [[ -z $drive ]]; then
|
||||
echo "No drive selected"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
sudo dd bs=4M status=progress oflag=sync if="$iso" of="$drive"
|
||||
sudo eject "$drive"
|
||||
}
|
||||
|
||||
# Format an entire drive for a single partition using exFAT
|
||||
format-drive() {
|
||||
if (( $# != 2 )); then
|
||||
echo "Usage: format-drive <device> <name>"
|
||||
echo "Example: format-drive /dev/sda 'My Stuff'"
|
||||
echo -e "\nAvailable drives:"
|
||||
lsblk -d -o NAME -n | awk '{print "/dev/"$1}'
|
||||
else
|
||||
echo "WARNING: This will completely erase all data on $1 and label it '$2'."
|
||||
read -rp "Are you sure you want to continue? (y/N): " confirm
|
||||
|
||||
if [[ $confirm =~ ^[Yy]$ ]]; then
|
||||
sudo wipefs -a "$1"
|
||||
sudo dd if=/dev/zero of="$1" bs=1M count=100 status=progress
|
||||
sudo parted -s "$1" mklabel gpt
|
||||
sudo parted -s "$1" mkpart primary 1MiB 100%
|
||||
sudo parted -s "$1" set 1 msftdata on
|
||||
|
||||
partition="$([[ $1 == *"nvme"* ]] && echo "${1}p1" || echo "${1}1")"
|
||||
sudo partprobe "$1" || true
|
||||
sudo udevadm settle || true
|
||||
|
||||
sudo mkfs.exfat -n "$2" "$partition"
|
||||
|
||||
echo "Drive $1 formatted as exFAT and labeled '$2'."
|
||||
fi
|
||||
fi
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
# SSH Port Forwarding Functions
|
||||
fip() {
|
||||
(( $# < 2 )) && echo "Usage: fip <host> <port1> [port2] ..." && return 1
|
||||
local host="$1"
|
||||
shift
|
||||
for port in "$@"; do
|
||||
ssh -f -N -L "$port:localhost:$port" "$host" && echo "Forwarding localhost:$port -> $host:$port"
|
||||
done
|
||||
}
|
||||
|
||||
dip() {
|
||||
(( $# == 0 )) && echo "Usage: dip <port1> [port2] ..." && return 1
|
||||
for port in "$@"; do
|
||||
pkill -f "ssh.*-L $port:localhost:$port" && echo "Stopped forwarding port $port" || echo "No forwarding on port $port"
|
||||
done
|
||||
}
|
||||
|
||||
lip() {
|
||||
pgrep -af "ssh.*-L [0-9]+:localhost:[0-9]+" || echo "No active forwards"
|
||||
}
|
||||
97
core/home/config/nomarchy/default/bash/fns/tmux
Normal file
97
core/home/config/nomarchy/default/bash/fns/tmux
Normal file
@@ -0,0 +1,97 @@
|
||||
# Create a Tmux Dev Layout with editor, ai, and terminal
|
||||
# Usage: tdl <c|cx|codex|other_ai> [<second_ai>]
|
||||
tdl() {
|
||||
[[ -z $1 ]] && { echo "Usage: tdl <c|cx|codex|other_ai> [<second_ai>]"; return 1; }
|
||||
[[ -z $TMUX ]] && { echo "You must start tmux to use tdl."; return 1; }
|
||||
|
||||
local current_dir="${PWD}"
|
||||
local editor_pane ai_pane ai2_pane
|
||||
local ai="$1"
|
||||
local ai2="$2"
|
||||
|
||||
# Use TMUX_PANE for the pane we're running in (stable even if active window changes)
|
||||
editor_pane="$TMUX_PANE"
|
||||
|
||||
# Name the current window after the base directory name
|
||||
tmux rename-window -t "$editor_pane" "$(basename "$current_dir")"
|
||||
|
||||
# Split window vertically - top 85%, bottom 15% (target editor pane explicitly)
|
||||
tmux split-window -v -p 15 -t "$editor_pane" -c "$current_dir"
|
||||
|
||||
# Split editor pane horizontally - AI on right 30% (capture new pane ID directly)
|
||||
ai_pane=$(tmux split-window -h -p 30 -t "$editor_pane" -c "$current_dir" -P -F '#{pane_id}')
|
||||
|
||||
# If second AI provided, split the AI pane vertically
|
||||
if [[ -n $ai2 ]]; then
|
||||
ai2_pane=$(tmux split-window -v -t "$ai_pane" -c "$current_dir" -P -F '#{pane_id}')
|
||||
tmux send-keys -t "$ai2_pane" "$ai2" C-m
|
||||
fi
|
||||
|
||||
# Run ai in the right pane
|
||||
tmux send-keys -t "$ai_pane" "$ai" C-m
|
||||
|
||||
# Run nvim in the left pane
|
||||
tmux send-keys -t "$editor_pane" "$EDITOR ." C-m
|
||||
|
||||
# Select the nvim pane for focus
|
||||
tmux select-pane -t "$editor_pane"
|
||||
}
|
||||
|
||||
# Create multiple tdl windows with one per subdirectory in the current directory
|
||||
# Usage: tdlm <c|cx|codex|other_ai> [<second_ai>]
|
||||
tdlm() {
|
||||
[[ -z $1 ]] && { echo "Usage: tdlm <c|cx|codex|other_ai> [<second_ai>]"; return 1; }
|
||||
[[ -z $TMUX ]] && { echo "You must start tmux to use tdlm."; return 1; }
|
||||
|
||||
local ai="$1"
|
||||
local ai2="$2"
|
||||
local base_dir="$PWD"
|
||||
local first=true
|
||||
|
||||
# Rename the session to the current directory name (replace dots/colons which tmux disallows)
|
||||
tmux rename-session "$(basename "$base_dir" | tr '.:' '--')"
|
||||
|
||||
for dir in "$base_dir"/*/; do
|
||||
[[ -d $dir ]] || continue
|
||||
local dirpath="${dir%/}"
|
||||
|
||||
if $first; then
|
||||
# Reuse the current window for the first project
|
||||
tmux send-keys -t "$TMUX_PANE" "cd '$dirpath' && tdl $ai $ai2" C-m
|
||||
first=false
|
||||
else
|
||||
local pane_id=$(tmux new-window -c "$dirpath" -P -F '#{pane_id}')
|
||||
tmux send-keys -t "$pane_id" "tdl $ai $ai2" C-m
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Create a multi-pane swarm layout with the same command started in each pane (great for AI)
|
||||
# Usage: tsl <pane_count> <command>
|
||||
tsl() {
|
||||
[[ -z $1 || -z $2 ]] && { echo "Usage: tsl <pane_count> <command>"; return 1; }
|
||||
[[ -z $TMUX ]] && { echo "You must start tmux to use tsl."; return 1; }
|
||||
|
||||
local count="$1"
|
||||
local cmd="$2"
|
||||
local current_dir="${PWD}"
|
||||
local -a panes
|
||||
|
||||
tmux rename-window -t "$TMUX_PANE" "$(basename "$current_dir")"
|
||||
|
||||
panes+=("$TMUX_PANE")
|
||||
|
||||
while (( ${#panes[@]} < count )); do
|
||||
local new_pane
|
||||
local split_target="${panes[-1]}"
|
||||
new_pane=$(tmux split-window -h -t "$split_target" -c "$current_dir" -P -F '#{pane_id}')
|
||||
panes+=("$new_pane")
|
||||
tmux select-layout -t "${panes[0]}" tiled
|
||||
done
|
||||
|
||||
for pane in "${panes[@]}"; do
|
||||
tmux send-keys -t "$pane" "$cmd" C-m
|
||||
done
|
||||
|
||||
tmux select-pane -t "${panes[0]}"
|
||||
}
|
||||
53
core/home/config/nomarchy/default/bash/fns/transcoding
Normal file
53
core/home/config/nomarchy/default/bash/fns/transcoding
Normal file
@@ -0,0 +1,53 @@
|
||||
# Transcode a video to a good-balance 1080p that's great for sharing online
|
||||
transcode-video-1080p() {
|
||||
ffmpeg -i "$1" -vf scale=1920:1080 -c:v libx264 -preset fast -crf 23 -c:a copy "${1%.*}-1080p.mp4"
|
||||
}
|
||||
|
||||
# Transcode a video to a good-balance 4K that's great for sharing online
|
||||
transcode-video-4K() {
|
||||
ffmpeg -i "$1" -c:v libx265 -preset slow -crf 24 -c:a aac -b:a 192k "${1%.*}-optimized.mp4"
|
||||
}
|
||||
|
||||
# Transcode any image to JPG image that's great for shrinking wallpapers
|
||||
img2jpg() {
|
||||
img="$1"
|
||||
shift
|
||||
|
||||
magick "$img" "$@" -quality 85 -strip "${img%.*}-converted.jpg"
|
||||
}
|
||||
|
||||
# Transcode any image to a small JPG (max 1080px wide)
|
||||
img2jpg-small() {
|
||||
img="$1"
|
||||
shift
|
||||
|
||||
magick "$img" "$@" -resize 1080x\> -quality 85 -strip "${img%.*}-small.jpg"
|
||||
}
|
||||
|
||||
# Transcode any image to a 4K JPG (max 2160px wide)
|
||||
img2jpg-medium() {
|
||||
img="$1"
|
||||
shift
|
||||
|
||||
magick "$img" "$@" -resize 2160x\> -quality 85 -strip "${img%.*}-medium.jpg"
|
||||
}
|
||||
|
||||
# Transcode any image to a 6K JPG (max 3160px wide)
|
||||
img2jpg-large() {
|
||||
img="$1"
|
||||
shift
|
||||
|
||||
magick "$img" "$@" -resize 3160x\> -quality 85 -strip "${img%.*}-large.jpg"
|
||||
}
|
||||
|
||||
# Transcode any image to compressed-but-lossless PNG
|
||||
img2png() {
|
||||
img="$1"
|
||||
shift
|
||||
|
||||
magick "$img" "$@" -strip -define png:compression-filter=5 \
|
||||
-define png:compression-level=9 \
|
||||
-define png:compression-strategy=1 \
|
||||
-define png:exclude-chunk=all \
|
||||
"${img%.*}-optimized.png"
|
||||
}
|
||||
36
core/home/config/nomarchy/default/bash/fns/worktrees
Normal file
36
core/home/config/nomarchy/default/bash/fns/worktrees
Normal file
@@ -0,0 +1,36 @@
|
||||
# Create a new worktree and branch from within current git directory.
|
||||
ga() {
|
||||
if [[ -z "$1" ]]; then
|
||||
echo "Usage: ga [branch name]"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local branch="$1"
|
||||
local base="$(basename "$PWD")"
|
||||
local wt_path="../${base}--${branch}"
|
||||
|
||||
git worktree add -b "$branch" "$wt_path"
|
||||
mise trust "$wt_path"
|
||||
cd "$wt_path"
|
||||
}
|
||||
|
||||
# Remove worktree and branch from within active worktree directory.
|
||||
gd() {
|
||||
if gum confirm "Remove worktree and branch?"; then
|
||||
local cwd base branch root worktree
|
||||
|
||||
cwd="$(pwd)"
|
||||
worktree="$(basename "$cwd")"
|
||||
|
||||
# split on first `--`
|
||||
root="${worktree%%--*}"
|
||||
branch="${worktree#*--}"
|
||||
|
||||
# Protect against accidentally nuking a non-worktree directory
|
||||
if [[ "$root" != "$worktree" ]]; then
|
||||
cd "../$root"
|
||||
git worktree remove "$cwd" --force || return 1
|
||||
git branch -D "$branch"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
1
core/home/config/nomarchy/default/bash/functions
Normal file
1
core/home/config/nomarchy/default/bash/functions
Normal file
@@ -0,0 +1 @@
|
||||
for f in $HOME/.config/nomarchy/default/bash/fns/*; do source "$f"; done
|
||||
24
core/home/config/nomarchy/default/bash/init
Normal file
24
core/home/config/nomarchy/default/bash/init
Normal file
@@ -0,0 +1,24 @@
|
||||
if command -v mise &> /dev/null; then
|
||||
eval "$(mise activate bash)"
|
||||
fi
|
||||
|
||||
if command -v starship &> /dev/null; then
|
||||
eval "$(starship init bash)"
|
||||
fi
|
||||
|
||||
if command -v zoxide &> /dev/null; then
|
||||
eval "$(zoxide init bash)"
|
||||
fi
|
||||
|
||||
if command -v try &> /dev/null; then
|
||||
eval "$(SHELL=/bin/bash command try init ~/Work/tries)"
|
||||
fi
|
||||
|
||||
if command -v fzf &> /dev/null; then
|
||||
if [[ -f /usr/share/fzf/completion.bash ]]; then
|
||||
source /usr/share/fzf/completion.bash
|
||||
fi
|
||||
if [[ -f /usr/share/fzf/key-bindings.bash ]]; then
|
||||
source /usr/share/fzf/key-bindings.bash
|
||||
fi
|
||||
fi
|
||||
47
core/home/config/nomarchy/default/bash/inputrc
Normal file
47
core/home/config/nomarchy/default/bash/inputrc
Normal file
@@ -0,0 +1,47 @@
|
||||
set meta-flag on
|
||||
set input-meta on
|
||||
set output-meta on
|
||||
set convert-meta off
|
||||
set completion-ignore-case on
|
||||
set completion-prefix-display-length 2
|
||||
set show-all-if-ambiguous on
|
||||
set show-all-if-unmodified on
|
||||
|
||||
# Arrow keys match what you've typed so far against your command history
|
||||
"\e[A": history-search-backward
|
||||
"\e[B": history-search-forward
|
||||
"\e[C": forward-char
|
||||
"\e[D": backward-char
|
||||
|
||||
# Immediately add a trailing slash when autocompleting symlinks to directories
|
||||
set mark-symlinked-directories on
|
||||
|
||||
# Do not autocomplete hidden files unless the pattern explicitly begins with a dot
|
||||
set match-hidden-files off
|
||||
|
||||
# Show all autocomplete results at once
|
||||
set page-completions off
|
||||
|
||||
# If there are more than 200 possible completions for a word, ask to show them all
|
||||
set completion-query-items 200
|
||||
|
||||
# Show extra file information when completing, like `ls -F` does
|
||||
set visible-stats on
|
||||
|
||||
# Be more intelligent when autocompleting by also looking at the text after
|
||||
# the cursor. For example, when the current line is "cd ~/src/mozil", and
|
||||
# the cursor is on the "z", pressing Tab will not autocomplete it to "cd
|
||||
# ~/src/mozillail", but to "cd ~/src/mozilla". (This is supported by the
|
||||
# Readline used by Bash 4.)
|
||||
set skip-completed-text on
|
||||
|
||||
# Coloring for Bash 4 tab completions.
|
||||
set colored-stats on
|
||||
|
||||
# Cycle forward and backward through completion candidates (tab/shift+tab)
|
||||
# (completion listing and display behavior configured above)
|
||||
TAB: menu-complete
|
||||
"\e[Z": menu-complete-backward
|
||||
|
||||
# On first Tab, complete the common prefix before cycling candidates
|
||||
set menu-complete-display-prefix on
|
||||
6
core/home/config/nomarchy/default/bash/rc
Normal file
6
core/home/config/nomarchy/default/bash/rc
Normal file
@@ -0,0 +1,6 @@
|
||||
source ~/.config/nomarchy/default/bash/envs
|
||||
source ~/.config/nomarchy/default/bash/shell
|
||||
source ~/.config/nomarchy/default/bash/aliases
|
||||
source ~/.config/nomarchy/default/bash/functions
|
||||
source ~/.config/nomarchy/default/bash/init
|
||||
[[ $- == *i* ]] && bind -f ~/.config/nomarchy/default/bash/inputrc
|
||||
13
core/home/config/nomarchy/default/bash/shell
Normal file
13
core/home/config/nomarchy/default/bash/shell
Normal file
@@ -0,0 +1,13 @@
|
||||
# History control
|
||||
shopt -s histappend
|
||||
HISTCONTROL=ignoreboth
|
||||
HISTSIZE=32768
|
||||
HISTFILESIZE="${HISTSIZE}"
|
||||
|
||||
# Autocompletion
|
||||
if [[ ! -v BASH_COMPLETION_VERSINFO && -f /usr/share/bash-completion/bash_completion ]]; then
|
||||
source /usr/share/bash-completion/bash_completion
|
||||
fi
|
||||
|
||||
# Ensure command hashing is off for mise
|
||||
set +h
|
||||
11
core/home/config/nomarchy/default/bashrc
Normal file
11
core/home/config/nomarchy/default/bashrc
Normal file
@@ -0,0 +1,11 @@
|
||||
# If not running interactively, don't do anything (leave this at the top of this file)
|
||||
[[ $- != *i* ]] && return
|
||||
|
||||
# All the default Nomarchy aliases and functions
|
||||
# (don't mess with these directly, just overwrite them here!)
|
||||
source ~/.config/nomarchy/default/bash/rc
|
||||
|
||||
# Add your own exports, aliases, and functions here.
|
||||
#
|
||||
# Make an alias for invoking commands you use constantly
|
||||
# alias p='python'
|
||||
@@ -0,0 +1,21 @@
|
||||
chrome.commands.onCommand.addListener((command) => {
|
||||
if (command === 'copy-url') {
|
||||
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
|
||||
const currentTab = tabs[0];
|
||||
|
||||
chrome.scripting.executeScript({
|
||||
target: { tabId: currentTab.id },
|
||||
func: () => {
|
||||
navigator.clipboard.writeText(window.location.href);
|
||||
}
|
||||
}).then(() => {
|
||||
chrome.notifications.create({
|
||||
type: 'basic',
|
||||
iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==',
|
||||
title: ' URL copied to clipboard',
|
||||
message: ''
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1 @@
|
||||
../../../../icon.png
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"manifest_version": 3,
|
||||
"name": "Copy URL",
|
||||
"version": "1.0",
|
||||
"description": "Copy current URL to clipboard, this extension is installed by Nomarchy",
|
||||
"permissions": ["activeTab", "scripting", "notifications"],
|
||||
"icons": {
|
||||
"16": "icon.png",
|
||||
"48": "icon.png",
|
||||
"128": "icon.png"
|
||||
},
|
||||
"commands": {
|
||||
"copy-url": {
|
||||
"suggested_key": {"default": "Alt+Shift+L"},
|
||||
"description": "Copy URL"
|
||||
}
|
||||
},
|
||||
"background": {"service_worker": "background.js"}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
Name = "nomarchyBackgroundSelector"
|
||||
NamePretty = "Nomarchy Background Selector"
|
||||
Cache = false
|
||||
HideFromProviderlist = true
|
||||
SearchName = true
|
||||
|
||||
local function ShellEscape(s)
|
||||
return "'" .. s:gsub("'", "'\\''") .. "'"
|
||||
end
|
||||
|
||||
function FormatName(filename)
|
||||
-- Remove leading number and dash
|
||||
local name = filename:gsub("^%d+", ""):gsub("^%-", "")
|
||||
-- Remove extension
|
||||
name = name:gsub("%.[^%.]+$", "")
|
||||
-- Replace dashes with spaces
|
||||
name = name:gsub("-", " ")
|
||||
-- Capitalize each word
|
||||
name = name:gsub("%S+", function(word)
|
||||
return word:sub(1, 1):upper() .. word:sub(2):lower()
|
||||
end)
|
||||
return name
|
||||
end
|
||||
|
||||
function GetEntries()
|
||||
local entries = {}
|
||||
local home = os.getenv("HOME")
|
||||
|
||||
-- Read current theme name
|
||||
local theme_name_file = io.open(home .. "/.config/nomarchy/current/theme.name", "r")
|
||||
local theme_name = theme_name_file and theme_name_file:read("*l") or nil
|
||||
if theme_name_file then
|
||||
theme_name_file:close()
|
||||
end
|
||||
|
||||
-- Directories to search
|
||||
local dirs = {
|
||||
home .. "/.config/nomarchy/current/theme/backgrounds",
|
||||
}
|
||||
if theme_name then
|
||||
table.insert(dirs, home .. "/.config/nomarchy/backgrounds/" .. theme_name)
|
||||
end
|
||||
|
||||
-- Track added files to avoid duplicates
|
||||
local seen = {}
|
||||
|
||||
for _, wallpaper_dir in ipairs(dirs) do
|
||||
local handle = io.popen(
|
||||
"find " .. ShellEscape(wallpaper_dir)
|
||||
.. " -maxdepth 1 -type f \\( -name '*.jpg' -o -name '*.jpeg' -o -name '*.png' -o -name '*.gif' -o -name '*.bmp' -o -name '*.webp' \\) 2>/dev/null | sort"
|
||||
)
|
||||
if handle then
|
||||
for background in handle:lines() do
|
||||
local filename = background:match("([^/]+)$")
|
||||
if filename and not seen[filename] then
|
||||
seen[filename] = true
|
||||
table.insert(entries, {
|
||||
Text = FormatName(filename),
|
||||
Value = background,
|
||||
Actions = {
|
||||
activate = "nomarchy-theme-bg-set " .. ShellEscape(background),
|
||||
},
|
||||
Preview = background,
|
||||
PreviewType = "file",
|
||||
})
|
||||
end
|
||||
end
|
||||
handle:close()
|
||||
end
|
||||
end
|
||||
|
||||
return entries
|
||||
end
|
||||
@@ -0,0 +1,96 @@
|
||||
--
|
||||
-- Dynamic Nomarchy Theme Menu for Elephant/Walker
|
||||
--
|
||||
Name = "nomarchythemes"
|
||||
NamePretty = "Nomarchy Themes"
|
||||
HideFromProviderlist = true
|
||||
|
||||
-- Check if file exists using Lua (no subprocess)
|
||||
local function file_exists(path)
|
||||
local f = io.open(path, "r")
|
||||
if f then
|
||||
f:close()
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- Get first matching file from directory using ls (single call for fallback)
|
||||
local function first_image_in_dir(dir)
|
||||
local handle = io.popen("ls -1 '" .. dir .. "' 2>/dev/null | head -n 1")
|
||||
if handle then
|
||||
local file = handle:read("*l")
|
||||
handle:close()
|
||||
if file and file ~= "" then
|
||||
return dir .. "/" .. file
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
-- The main function elephant will call
|
||||
function GetEntries()
|
||||
local entries = {}
|
||||
local user_theme_dir = os.getenv("HOME") .. "/.config/nomarchy/themes"
|
||||
local nomarchy_path = os.getenv("NOMARCHY_PATH") or ""
|
||||
local default_theme_dir = nomarchy_path .. "/themes"
|
||||
|
||||
local seen_themes = {}
|
||||
|
||||
-- Helper function to process themes from a directory
|
||||
local function process_themes_from_dir(theme_dir)
|
||||
-- Single find call to get all theme directories
|
||||
local handle = io.popen("find -L '" .. theme_dir .. "' -mindepth 1 -maxdepth 1 -type d 2>/dev/null")
|
||||
if not handle then
|
||||
return
|
||||
end
|
||||
|
||||
for theme_path in handle:lines() do
|
||||
local theme_name = theme_path:match(".*/(.+)$")
|
||||
|
||||
if theme_name and not seen_themes[theme_name] then
|
||||
seen_themes[theme_name] = true
|
||||
|
||||
-- Check for preview images directly (no subprocess)
|
||||
local preview_path = nil
|
||||
local preview_png = theme_path .. "/preview.png"
|
||||
local preview_jpg = theme_path .. "/preview.jpg"
|
||||
|
||||
if file_exists(preview_png) then
|
||||
preview_path = preview_png
|
||||
elseif file_exists(preview_jpg) then
|
||||
preview_path = preview_jpg
|
||||
else
|
||||
-- Fallback: get first image from backgrounds (one ls call)
|
||||
preview_path = first_image_in_dir(theme_path .. "/backgrounds")
|
||||
end
|
||||
|
||||
if preview_path and preview_path ~= "" then
|
||||
local display_name = theme_name:gsub("_", " "):gsub("%-", " ")
|
||||
display_name = display_name:gsub("(%a)([%w_']*)", function(first, rest)
|
||||
return first:upper() .. rest:lower()
|
||||
end)
|
||||
display_name = display_name .. " "
|
||||
|
||||
table.insert(entries, {
|
||||
Text = display_name,
|
||||
Preview = preview_path,
|
||||
PreviewType = "file",
|
||||
Actions = {
|
||||
activate = "nomarchy-theme-set " .. theme_name,
|
||||
},
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
handle:close()
|
||||
end
|
||||
|
||||
-- Process user themes first (they take precedence)
|
||||
process_themes_from_dir(user_theme_dir)
|
||||
-- Then process default themes (only if not already seen)
|
||||
process_themes_from_dir(default_theme_dir)
|
||||
|
||||
return entries
|
||||
end
|
||||
3
core/home/config/nomarchy/default/ghostty/screensaver
Normal file
3
core/home/config/nomarchy/default/ghostty/screensaver
Normal file
@@ -0,0 +1,3 @@
|
||||
window-padding-x = 0
|
||||
window-padding-y = 0
|
||||
window-padding-color = "extend-always"
|
||||
7
core/home/config/nomarchy/default/gpg/dirmngr.conf
Normal file
7
core/home/config/nomarchy/default/gpg/dirmngr.conf
Normal file
@@ -0,0 +1,7 @@
|
||||
keyserver hkps://keyserver.ubuntu.com
|
||||
keyserver hkps://pgp.surfnet.nl
|
||||
keyserver hkps://keys.mailvelope.com
|
||||
keyserver hkps://keyring.debian.org
|
||||
keyserver hkps://pgp.mit.edu
|
||||
|
||||
connect-quick-timeout 4
|
||||
9
core/home/config/nomarchy/default/hypr/apps.conf
Normal file
9
core/home/config/nomarchy/default/hypr/apps.conf
Normal file
@@ -0,0 +1,9 @@
|
||||
# App-specific tweaks
|
||||
source = ~/.config/nomarchy/default/hypr/apps/browser.conf
|
||||
source = ~/.config/nomarchy/default/hypr/apps/hyprshot.conf
|
||||
source = ~/.config/nomarchy/default/hypr/apps/localsend.conf
|
||||
source = ~/.config/nomarchy/default/hypr/apps/retroarch.conf
|
||||
source = ~/.config/nomarchy/default/hypr/apps/telegram.conf
|
||||
source = ~/.config/nomarchy/default/hypr/apps/terminals.conf
|
||||
source = ~/.config/nomarchy/default/hypr/apps/walker.conf
|
||||
source = ~/.config/nomarchy/default/hypr/apps/webcam-overlay.conf
|
||||
@@ -0,0 +1,2 @@
|
||||
windowrulev2 = noscreenshare, class:^(1[p|P]assword)$
|
||||
windowrulev2 = tag +floating-window, class:^(1[p|P]assword)$
|
||||
@@ -0,0 +1,6 @@
|
||||
windowrulev2 = noscreenshare, class:^(Bitwarden)$
|
||||
windowrulev2 = tag +floating-window, class:^(Bitwarden)$
|
||||
|
||||
# Bitwarden Chrome Extension
|
||||
windowrulev2 = noscreenshare, class:chrome-nngceckbapebfimnlniiiahkandclblb-Default
|
||||
windowrulev2 = tag +floating-window, class:chrome-nngceckbapebfimnlniiiahkandclblb-Default
|
||||
16
core/home/config/nomarchy/default/hypr/apps/browser.conf
Normal file
16
core/home/config/nomarchy/default/hypr/apps/browser.conf
Normal file
@@ -0,0 +1,16 @@
|
||||
# Browser types
|
||||
windowrulev2 = tag +chromium-based-browser, class:((google-)?[cC]hrom(e|ium)|[bB]rave-browser|[mM]icrosoft-edge|Vivaldi-stable|helium)
|
||||
windowrulev2 = tag +firefox-based-browser, class:([fF]irefox|zen|librewolf)
|
||||
windowrulev2 = tag -default-opacity, tag:chromium-based-browser
|
||||
windowrulev2 = tag -default-opacity, tag:firefox-based-browser
|
||||
|
||||
# Video apps: remove chromium browser tag so they don't get opacity applied
|
||||
windowrulev2 = tag -chromium-based-browser, class:(chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default)
|
||||
windowrulev2 = tag -default-opacity, class:(chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default)
|
||||
|
||||
# Force chromium-based browsers into a tile to deal with --app bug
|
||||
windowrulev2 = tile, tag:chromium-based-browser
|
||||
|
||||
# Only a subtle opacity change, but not for video sites
|
||||
windowrulev2 = opacity 1.0 0.97, tag:chromium-based-browser
|
||||
windowrulev2 = opacity 1.0 0.97, tag:firefox-based-browser
|
||||
@@ -0,0 +1,2 @@
|
||||
# Focus floating DaVinci Resolve dialog windows
|
||||
windowrulev2 = stayfocused, class:.*[Rr]esolve.*, float:1
|
||||
5
core/home/config/nomarchy/default/hypr/apps/geforce.conf
Normal file
5
core/home/config/nomarchy/default/hypr/apps/geforce.conf
Normal file
@@ -0,0 +1,5 @@
|
||||
windowrule {
|
||||
name = geforce
|
||||
class:= GeForceNOW
|
||||
idle_inhibit = fullscreen
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
# Remove 1px border around hyprshot screenshots
|
||||
layerrule = noanim, namespace:selection
|
||||
@@ -0,0 +1,4 @@
|
||||
# Float LocalSend and fzf file picker
|
||||
windowrulev2 = float, class:(Share|localsend)
|
||||
windowrulev2 = center, class:(Share|localsend)
|
||||
windowrulev2 = size 1100 700, class:localsend
|
||||
@@ -0,0 +1,6 @@
|
||||
windowrule {
|
||||
name = moonlight
|
||||
class:= com.moonlight_stream.Moonlight
|
||||
fullscreen = 1
|
||||
idle_inhibit = fullscreen
|
||||
}
|
||||
10
core/home/config/nomarchy/default/hypr/apps/pip.conf
Normal file
10
core/home/config/nomarchy/default/hypr/apps/pip.conf
Normal file
@@ -0,0 +1,10 @@
|
||||
# Picture-in-picture overlays
|
||||
windowrulev2 = tag +pip, title:(Picture.?in.?[Pp]icture)
|
||||
windowrulev2 = tag -default-opacity, tag:pip
|
||||
windowrulev2 = float, tag:pip
|
||||
windowrulev2 = pin, tag:pip
|
||||
windowrulev2 = size 600 338, tag:pip
|
||||
windowrulev2 = keep_aspect_ratio on, tag:pip
|
||||
windowrulev2 = border_size 0, tag:pip
|
||||
windowrulev2 = opacity 1 1, tag:pip
|
||||
windowrulev2 = move (monitor_w-window_w-40) (monitor_h*0.04), tag:pip
|
||||
2
core/home/config/nomarchy/default/hypr/apps/qemu.conf
Normal file
2
core/home/config/nomarchy/default/hypr/apps/qemu.conf
Normal file
@@ -0,0 +1,2 @@
|
||||
windowrulev2 = tag -default-opacity, class:qemu
|
||||
windowrulev2 = opacity 1 1, class:qemu
|
||||
@@ -0,0 +1,4 @@
|
||||
windowrulev2 = fullscreen, class:com.libretro.RetroArch
|
||||
windowrulev2 = tag -default-opacity, class:com.libretro.RetroArch
|
||||
windowrulev2 = opacity 1 1, class:com.libretro.RetroArch
|
||||
windowrulev2 = idleinhibit, fullscreen, class:com.libretro.RetroArch
|
||||
8
core/home/config/nomarchy/default/hypr/apps/steam.conf
Normal file
8
core/home/config/nomarchy/default/hypr/apps/steam.conf
Normal file
@@ -0,0 +1,8 @@
|
||||
# Float Steam
|
||||
windowrulev2 = float, class:steam
|
||||
windowrulev2 = center, class:steam, title:Steam
|
||||
windowrulev2 = tag -default-opacity, class:steam.*
|
||||
windowrulev2 = opacity 1 1, class:steam.*
|
||||
windowrulev2 = size 1100 700, class:steam, title:Steam
|
||||
windowrulev2 = size 460 800, class:steam, title:Friends List
|
||||
windowrulev2 = idleinhibit, fullscreen, class:steam
|
||||
23
core/home/config/nomarchy/default/hypr/apps/system.conf
Normal file
23
core/home/config/nomarchy/default/hypr/apps/system.conf
Normal file
@@ -0,0 +1,23 @@
|
||||
# Floating windows
|
||||
windowrulev2 = float, tag:floating-window
|
||||
windowrulev2 = center, tag:floating-window
|
||||
windowrulev2 = size 875 600, tag:floating-window
|
||||
|
||||
windowrulev2 = tag +floating-window, class:(org.nomarchy.bluetui|org.nomarchy.impala|org.nomarchy.wiremix|org.nomarchy.btop|org.nomarchy.terminal|org.nomarchy.bash|org.gnome.NautilusPreviewer|org.gnome.Evince|com.gabm.satty|Nomarchy|About|TUI.float|imv|mpv)
|
||||
windowrulev2 = tag +floating-window, class:(xdg-desktop-portal-gtk|sublime_text|DesktopEditors|org.gnome.Nautilus), title:^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*)
|
||||
windowrulev2 = float, class:org.gnome.Calculator
|
||||
|
||||
# Fullscreen screensaver
|
||||
windowrulev2 = fullscreen, class:org.nomarchy.screensaver
|
||||
windowrulev2 = float, class:org.nomarchy.screensaver
|
||||
windowrulev2 = animation slide, class:org.nomarchy.screensaver
|
||||
|
||||
# No transparency on media windows
|
||||
windowrulev2 = tag -default-opacity, class:^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$
|
||||
windowrulev2 = opacity 1 1, class:^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$
|
||||
|
||||
# Popped window rounding
|
||||
windowrulev2 = rounding 8, tag:pop
|
||||
|
||||
# Prevent idle while open
|
||||
windowrulev2 = idleinhibit, always, tag:noidle
|
||||
@@ -0,0 +1,2 @@
|
||||
# Prevent Telegram from stealing focus on new messages
|
||||
windowrulev2 = focusonactivate off, class:org.telegram.desktop
|
||||
@@ -0,0 +1,4 @@
|
||||
# Define terminal tag to style them uniformly
|
||||
windowrulev2 = tag +terminal, class:(Alacritty|kitty|com.mitchellh.ghostty)
|
||||
windowrulev2 = tag -default-opacity, tag:terminal
|
||||
windowrulev2 = opacity 0.97 0.9, tag:terminal
|
||||
2
core/home/config/nomarchy/default/hypr/apps/walker.conf
Normal file
2
core/home/config/nomarchy/default/hypr/apps/walker.conf
Normal file
@@ -0,0 +1,2 @@
|
||||
# Application-specific animation
|
||||
layerrule = noanim, namespace:walker
|
||||
@@ -0,0 +1,6 @@
|
||||
# Webcam overlay for screen recording
|
||||
windowrulev2 = float, title:WebcamOverlay
|
||||
windowrulev2 = pin, title:WebcamOverlay
|
||||
windowrulev2 = noinitialfocus, title:WebcamOverlay
|
||||
windowrulev2 = nodim, title:WebcamOverlay
|
||||
windowrulev2 = move (monitor_w-window_w-40) (monitor_h-window_h-40), title:WebcamOverlay
|
||||
11
core/home/config/nomarchy/default/hypr/autostart.conf
Normal file
11
core/home/config/nomarchy/default/hypr/autostart.conf
Normal file
@@ -0,0 +1,11 @@
|
||||
exec-once = uwsm-app -- hypridle
|
||||
exec-once = uwsm-app -- mako
|
||||
# exec-once = uwsm-app -- waybar
|
||||
exec-once = uwsm-app -- fcitx5 --disable notificationitem
|
||||
exec-once = uwsm-app -- swaybg -i ~/.config/nomarchy/current/background -m fill
|
||||
exec-once = uwsm-app -- swayosd-server
|
||||
exec-once = nomarchy-cmd-first-run
|
||||
|
||||
# Slow app launch fix -- set systemd vars
|
||||
exec-once = systemctl --user import-environment $(env | cut -d'=' -f 1)
|
||||
exec-once = dbus-update-activation-environment --systemd --all
|
||||
16
core/home/config/nomarchy/default/hypr/bindings.conf
Normal file
16
core/home/config/nomarchy/default/hypr/bindings.conf
Normal file
@@ -0,0 +1,16 @@
|
||||
# Deprecated bindings file. New installations include everything directly.
|
||||
|
||||
bindd = SUPER, RETURN, Terminal, exec, $terminal
|
||||
bindd = SUPER, F, File manager, exec, $fileManager
|
||||
bindd = SUPER, B, Web browser, exec, $browser
|
||||
bindd = SUPER, M, Music player, exec, $music
|
||||
bindd = SUPER, N, Neovim, exec, $terminal -e nvim
|
||||
bindd = SUPER, T, Top, exec, $terminal -e btop
|
||||
bindd = SUPER, D, Lazy Docker, exec, $terminal -e lazydocker
|
||||
bindd = SUPER, G, Messenger, exec, $messenger
|
||||
bindd = SUPER, O, Obsidian, exec, obsidian -disable-gpu
|
||||
bindd = SUPER, SLASH, Password manager, exec, $passwordManager
|
||||
|
||||
source = ~/.config/nomarchy/default/hypr/bindings/media.conf
|
||||
source = ~/.config/nomarchy/default/hypr/bindings/tiling.conf
|
||||
source = ~/.config/nomarchy/default/hypr/bindings/utilities.conf
|
||||
@@ -0,0 +1,5 @@
|
||||
# Copy / Paste
|
||||
bindd = SUPER, C, Universal copy, sendshortcut, CTRL, Insert,
|
||||
bindd = SUPER, V, Universal paste, sendshortcut, SHIFT, Insert,
|
||||
bindd = SUPER, X, Universal cut, sendshortcut, CTRL, X,
|
||||
bindd = SUPER CTRL, V, Clipboard manager, exec, nomarchy-launch-walker -m clipboard
|
||||
28
core/home/config/nomarchy/default/hypr/bindings/media.conf
Normal file
28
core/home/config/nomarchy/default/hypr/bindings/media.conf
Normal file
@@ -0,0 +1,28 @@
|
||||
# Only display the OSD on the currently focused monitor
|
||||
$osdclient = swayosd-client --monitor "$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')"
|
||||
|
||||
# Laptop multimedia keys for volume and LCD brightness (with OSD)
|
||||
bindeld = ,XF86AudioRaiseVolume, Volume up, exec, $osdclient --output-volume raise
|
||||
bindeld = ,XF86AudioLowerVolume, Volume down, exec, $osdclient --output-volume lower
|
||||
bindeld = ,XF86AudioMute, Mute, exec, $osdclient --output-volume mute-toggle
|
||||
bindeld = ,XF86AudioMicMute, Mute microphone, exec, $osdclient --input-volume mute-toggle
|
||||
bindeld = ,XF86MonBrightnessUp, Brightness up, exec, nomarchy-brightness-display +5%
|
||||
bindeld = ,XF86MonBrightnessDown, Brightness down, exec, nomarchy-brightness-display 5%-
|
||||
bindeld = ,XF86KbdBrightnessUp, Keyboard brightness up, exec, nomarchy-brightness-keyboard up
|
||||
bindeld = ,XF86KbdBrightnessDown, Keyboard brightness down, exec, nomarchy-brightness-keyboard down
|
||||
bindld = ,XF86KbdLightOnOff, Keyboard backlight cycle, exec, nomarchy-brightness-keyboard cycle
|
||||
|
||||
# Precise 1% multimedia adjustments with Alt modifier
|
||||
bindeld = ALT, XF86AudioRaiseVolume, Volume up precise, exec, $osdclient --output-volume +1
|
||||
bindeld = ALT, XF86AudioLowerVolume, Volume down precise, exec, $osdclient --output-volume -1
|
||||
bindeld = ALT, XF86MonBrightnessUp, Brightness up precise, exec, nomarchy-brightness-display +1%
|
||||
bindeld = ALT, XF86MonBrightnessDown, Brightness down precise, exec, nomarchy-brightness-display 1%-
|
||||
|
||||
# Requires playerctl
|
||||
bindld = , XF86AudioNext, Next track, exec, $osdclient --playerctl next
|
||||
bindld = , XF86AudioPause, Pause, exec, $osdclient --playerctl play-pause
|
||||
bindld = , XF86AudioPlay, Play, exec, $osdclient --playerctl play-pause
|
||||
bindld = , XF86AudioPrev, Previous track, exec, $osdclient --playerctl previous
|
||||
|
||||
# Switch audio output with Super + Mute
|
||||
bindld = SUPER, XF86AudioMute, Switch audio output, exec, nomarchy-cmd-audio-switch
|
||||
128
core/home/config/nomarchy/default/hypr/bindings/tiling-v2.conf
Normal file
128
core/home/config/nomarchy/default/hypr/bindings/tiling-v2.conf
Normal file
@@ -0,0 +1,128 @@
|
||||
# Close windows
|
||||
bindd = SUPER, W, Close window, killactive,
|
||||
bindd = CTRL ALT, DELETE, Close all windows, exec, nomarchy-hyprland-window-close-all
|
||||
|
||||
# Control tiling
|
||||
bindd = SUPER, J, Toggle window split, layoutmsg, togglesplit
|
||||
bindd = SUPER, P, Pseudo window, pseudo, # dwindle
|
||||
bindd = SUPER, T, Toggle window floating/tiling, togglefloating,
|
||||
bindd = SUPER, F, Full screen, fullscreen, 0
|
||||
bindd = SUPER CTRL, F, Tiled full screen, fullscreenstate, 0 2
|
||||
bindd = SUPER ALT, F, Full width, fullscreen, 1
|
||||
bindd = SUPER, O, Pop window out (float & pin), exec, nomarchy-hyprland-window-pop
|
||||
bindd = SUPER, L, Toggle workspace layout, exec, nomarchy-hyprland-workspace-layout-toggle
|
||||
|
||||
# Move focus with SUPER + arrow keys
|
||||
bindd = SUPER, LEFT, Move window focus left, movefocus, l
|
||||
bindd = SUPER, RIGHT, Move window focus right, movefocus, r
|
||||
bindd = SUPER, UP, Move window focus up, movefocus, u
|
||||
bindd = SUPER, DOWN, Move window focus down, movefocus, d
|
||||
|
||||
# Switch workspaces with SUPER + [1-9; 0]
|
||||
bindd = SUPER, code:10, Switch to workspace 1, workspace, 1
|
||||
bindd = SUPER, code:11, Switch to workspace 2, workspace, 2
|
||||
bindd = SUPER, code:12, Switch to workspace 3, workspace, 3
|
||||
bindd = SUPER, code:13, Switch to workspace 4, workspace, 4
|
||||
bindd = SUPER, code:14, Switch to workspace 5, workspace, 5
|
||||
bindd = SUPER, code:15, Switch to workspace 6, workspace, 6
|
||||
bindd = SUPER, code:16, Switch to workspace 7, workspace, 7
|
||||
bindd = SUPER, code:17, Switch to workspace 8, workspace, 8
|
||||
bindd = SUPER, code:18, Switch to workspace 9, workspace, 9
|
||||
bindd = SUPER, code:19, Switch to workspace 10, workspace, 10
|
||||
|
||||
# Move active window to a workspace with SUPER + SHIFT + [1-9; 0]
|
||||
bindd = SUPER SHIFT, code:10, Move window to workspace 1, movetoworkspace, 1
|
||||
bindd = SUPER SHIFT, code:11, Move window to workspace 2, movetoworkspace, 2
|
||||
bindd = SUPER SHIFT, code:12, Move window to workspace 3, movetoworkspace, 3
|
||||
bindd = SUPER SHIFT, code:13, Move window to workspace 4, movetoworkspace, 4
|
||||
bindd = SUPER SHIFT, code:14, Move window to workspace 5, movetoworkspace, 5
|
||||
bindd = SUPER SHIFT, code:15, Move window to workspace 6, movetoworkspace, 6
|
||||
bindd = SUPER SHIFT, code:16, Move window to workspace 7, movetoworkspace, 7
|
||||
bindd = SUPER SHIFT, code:17, Move window to workspace 8, movetoworkspace, 8
|
||||
bindd = SUPER SHIFT, code:18, Move window to workspace 9, movetoworkspace, 9
|
||||
bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10
|
||||
|
||||
# Move active window silently to a workspace with SUPER + SHIFT + ALT + [1-9; 0]
|
||||
bindd = SUPER SHIFT ALT, code:10, Move window silently to workspace 1, movetoworkspacesilent, 1
|
||||
bindd = SUPER SHIFT ALT, code:11, Move window silently to workspace 2, movetoworkspacesilent, 2
|
||||
bindd = SUPER SHIFT ALT, code:12, Move window silently to workspace 3, movetoworkspacesilent, 3
|
||||
bindd = SUPER SHIFT ALT, code:13, Move window silently to workspace 4, movetoworkspacesilent, 4
|
||||
bindd = SUPER SHIFT ALT, code:14, Move window silently to workspace 5, movetoworkspacesilent, 5
|
||||
bindd = SUPER SHIFT ALT, code:15, Move window silently to workspace 6, movetoworkspacesilent, 6
|
||||
bindd = SUPER SHIFT ALT, code:16, Move window silently to workspace 7, movetoworkspacesilent, 7
|
||||
bindd = SUPER SHIFT ALT, code:17, Move window silently to workspace 8, movetoworkspacesilent, 8
|
||||
bindd = SUPER SHIFT ALT, code:18, Move window silently to workspace 9, movetoworkspacesilent, 9
|
||||
bindd = SUPER SHIFT ALT, code:19, Move window silently to workspace 10, movetoworkspacesilent, 10
|
||||
|
||||
# Control scratchpad
|
||||
bindd = SUPER, S, Toggle scratchpad, togglespecialworkspace, scratchpad
|
||||
bindd = SUPER ALT, S, Move window to scratchpad, movetoworkspacesilent, special:scratchpad
|
||||
|
||||
# TAB between workspaces
|
||||
bindd = SUPER, TAB, Next workspace, workspace, e+1
|
||||
bindd = SUPER SHIFT, TAB, Previous workspace, workspace, e-1
|
||||
bindd = SUPER CTRL, TAB, Former workspace, workspace, previous
|
||||
|
||||
# Move workspaces to other monitors
|
||||
bindd = SUPER SHIFT ALT, LEFT, Move workspace to left monitor, movecurrentworkspacetomonitor, l
|
||||
bindd = SUPER SHIFT ALT, RIGHT, Move workspace to right monitor, movecurrentworkspacetomonitor, r
|
||||
bindd = SUPER SHIFT ALT, UP, Move workspace to up monitor, movecurrentworkspacetomonitor, u
|
||||
bindd = SUPER SHIFT ALT, DOWN, Move workspace to down monitor, movecurrentworkspacetomonitor, d
|
||||
|
||||
# Swap active window with the one next to it with SUPER + SHIFT + arrow keys
|
||||
bindd = SUPER SHIFT, LEFT, Swap window to the left, swapwindow, l
|
||||
bindd = SUPER SHIFT, RIGHT, Swap window to the right, swapwindow, r
|
||||
bindd = SUPER SHIFT, UP, Swap window up, swapwindow, u
|
||||
bindd = SUPER SHIFT, DOWN, Swap window down, swapwindow, d
|
||||
|
||||
# Cycle through applications on active workspace
|
||||
bindd = ALT, TAB, Cycle to next window, cyclenext
|
||||
bindd = ALT SHIFT, TAB, Cycle to prev window, cyclenext, prev
|
||||
bindd = ALT, TAB, Reveal active window on top, bringactivetotop
|
||||
bindd = ALT SHIFT, TAB, Reveal active window on top, bringactivetotop
|
||||
|
||||
# Resize active window
|
||||
bindd = SUPER, code:20, Expand window left, resizeactive, -100 0 # - key
|
||||
bindd = SUPER, code:21, Shrink window left, resizeactive, 100 0 # = key
|
||||
bindd = SUPER SHIFT, code:20, Shrink window up, resizeactive, 0 -100
|
||||
bindd = SUPER SHIFT, code:21, Expand window down, resizeactive, 0 100
|
||||
|
||||
# Scroll through existing workspaces with SUPER + scroll
|
||||
bindd = SUPER, mouse_down, Scroll active workspace forward, workspace, e+1
|
||||
bindd = SUPER, mouse_up, Scroll active workspace backward, workspace, e-1
|
||||
|
||||
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
bindmd = SUPER, mouse:272, Move window, movewindow
|
||||
bindmd = SUPER, mouse:273, Resize window, resizewindow
|
||||
|
||||
# Toggle groups
|
||||
bindd = SUPER, G, Toggle window grouping, togglegroup
|
||||
bindd = SUPER ALT, G, Move active window out of group, moveoutofgroup
|
||||
|
||||
# Join groups
|
||||
bindd = SUPER ALT, LEFT, Move window to group on left, moveintogroup, l
|
||||
bindd = SUPER ALT, RIGHT, Move window to group on right, moveintogroup, r
|
||||
bindd = SUPER ALT, UP, Move window to group on top, moveintogroup, u
|
||||
bindd = SUPER ALT, DOWN, Move window to group on bottom, moveintogroup, d
|
||||
|
||||
# Navigate a single set of grouped windows
|
||||
bindd = SUPER ALT, TAB, Next window in group, changegroupactive, f
|
||||
bindd = SUPER ALT SHIFT, TAB, Previous window in group, changegroupactive, b
|
||||
|
||||
# Window navigation for grouped windows
|
||||
bindd = SUPER CTRL, LEFT, Move grouped window focus left, changegroupactive, b
|
||||
bindd = SUPER CTRL, RIGHT, Move grouped window focus right, changegroupactive, f
|
||||
|
||||
# Scroll through a set of grouped windows with SUPER + ALT + scroll
|
||||
bindd = SUPER ALT, mouse_down, Next window in group, changegroupactive, f
|
||||
bindd = SUPER ALT, mouse_up, Previous window in group, changegroupactive, b
|
||||
|
||||
# Activate window in a group by number
|
||||
bindd = SUPER ALT, code:10, Switch to group window 1, changegroupactive, 1
|
||||
bindd = SUPER ALT, code:11, Switch to group window 2, changegroupactive, 2
|
||||
bindd = SUPER ALT, code:12, Switch to group window 3, changegroupactive, 3
|
||||
bindd = SUPER ALT, code:13, Switch to group window 4, changegroupactive, 4
|
||||
bindd = SUPER ALT, code:14, Switch to group window 5, changegroupactive, 5
|
||||
|
||||
# Cycle monitor scaling
|
||||
bindd = SUPER, Slash, Cycle monitor scaling, exec, nomarchy-hyprland-monitor-scaling-cycle
|
||||
74
core/home/config/nomarchy/default/hypr/bindings/tiling.conf
Normal file
74
core/home/config/nomarchy/default/hypr/bindings/tiling.conf
Normal file
@@ -0,0 +1,74 @@
|
||||
# This is now a deprecated file meant for those who did not wish to learn the latest Nomarchy hotkeys.
|
||||
# Do not make changes here, but bring them to tiling-v2.conf instead.
|
||||
|
||||
# Close windows
|
||||
bindd = SUPER, W, Close window, killactive,
|
||||
bindd = CTRL ALT, DELETE, Close all windows, exec, nomarchy-hyprland-window-close-all
|
||||
|
||||
# Control tiling
|
||||
bindd = SUPER, J, Toggle window split, togglesplit, # dwindle
|
||||
bindd = SUPER, P, Pseudo window, pseudo, # dwindle
|
||||
bindd = SUPER SHIFT, V, Toggle window floating/tiling, togglefloating,
|
||||
bindd = SHIFT, F11, Force full screen, fullscreen, 0
|
||||
bindd = ALT, F11, Full width, fullscreen, 1
|
||||
|
||||
# Move focus with SUPER + arrow keys
|
||||
bindd = SUPER, LEFT, Move focus left, movefocus, l
|
||||
bindd = SUPER, RIGHT, Move focus right, movefocus, r
|
||||
bindd = SUPER, UP, Move focus up, movefocus, u
|
||||
bindd = SUPER, DOWN, Move focus down, movefocus, d
|
||||
|
||||
# Switch workspaces with SUPER + [0-9]
|
||||
bindd = SUPER, code:10, Switch to workspace 1, workspace, 1
|
||||
bindd = SUPER, code:11, Switch to workspace 2, workspace, 2
|
||||
bindd = SUPER, code:12, Switch to workspace 3, workspace, 3
|
||||
bindd = SUPER, code:13, Switch to workspace 4, workspace, 4
|
||||
bindd = SUPER, code:14, Switch to workspace 5, workspace, 5
|
||||
bindd = SUPER, code:15, Switch to workspace 6, workspace, 6
|
||||
bindd = SUPER, code:16, Switch to workspace 7, workspace, 7
|
||||
bindd = SUPER, code:17, Switch to workspace 8, workspace, 8
|
||||
bindd = SUPER, code:18, Switch to workspace 9, workspace, 9
|
||||
bindd = SUPER, code:19, Switch to workspace 10, workspace, 10
|
||||
|
||||
# Move active window to a workspace with SUPER + SHIFT + [0-9]
|
||||
bindd = SUPER SHIFT, code:10, Move window to workspace 1, movetoworkspace, 1
|
||||
bindd = SUPER SHIFT, code:11, Move window to workspace 2, movetoworkspace, 2
|
||||
bindd = SUPER SHIFT, code:12, Move window to workspace 3, movetoworkspace, 3
|
||||
bindd = SUPER SHIFT, code:13, Move window to workspace 4, movetoworkspace, 4
|
||||
bindd = SUPER SHIFT, code:14, Move window to workspace 5, movetoworkspace, 5
|
||||
bindd = SUPER SHIFT, code:15, Move window to workspace 6, movetoworkspace, 6
|
||||
bindd = SUPER SHIFT, code:16, Move window to workspace 7, movetoworkspace, 7
|
||||
bindd = SUPER SHIFT, code:17, Move window to workspace 8, movetoworkspace, 8
|
||||
bindd = SUPER SHIFT, code:18, Move window to workspace 9, movetoworkspace, 9
|
||||
bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10
|
||||
|
||||
# TAB between workspaces
|
||||
bindd = SUPER, TAB, Next workspace, workspace, e+1
|
||||
bindd = SUPER SHIFT, TAB, Previous workspace, workspace, e-1
|
||||
bindd = SUPER CTRL, TAB, Former workspace, workspace, previous
|
||||
|
||||
# Swap active window with the one next to it with SUPER + SHIFT + arrow keys
|
||||
bindd = SUPER SHIFT, LEFT, Swap window to the left, swapwindow, l
|
||||
bindd = SUPER SHIFT, RIGHT, Swap window to the right, swapwindow, r
|
||||
bindd = SUPER SHIFT, UP, Swap window up, swapwindow, u
|
||||
bindd = SUPER SHIFT, DOWN, Swap window down, swapwindow, d
|
||||
|
||||
# Cycle through applications on active workspace
|
||||
bindd = ALT, TAB, Cycle to next window, cyclenext
|
||||
bindd = ALT SHIFT, TAB, Cycle to prev window, cyclenext, prev
|
||||
bindd = ALT, TAB, Reveal active window on top, bringactivetotop
|
||||
bindd = ALT SHIFT, TAB, Reveal active window on top, bringactivetotop
|
||||
|
||||
# Resize active window
|
||||
bindd = SUPER, code:20, Expand window left, resizeactive, -100 0 # - key
|
||||
bindd = SUPER, code:21, Shrink window left, resizeactive, 100 0 # = key
|
||||
bindd = SUPER SHIFT, code:20, Shrink window up, resizeactive, 0 -100
|
||||
bindd = SUPER SHIFT, code:21, Expand window down, resizeactive, 0 100
|
||||
|
||||
# Scroll through existing workspaces with SUPER + scroll
|
||||
bindd = SUPER, MOUSE_DOWN, Scroll active workspace forward, workspace, e+1
|
||||
bindd = SUPER, MOUSE_UP, Scroll active workspace backward, workspace, e-1
|
||||
|
||||
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
bindmd = SUPER, mouse:272, Move window, movewindow
|
||||
bindmd = SUPER, mouse:273, Resize window, resizewindow
|
||||
@@ -0,0 +1,62 @@
|
||||
# Menus
|
||||
bindd = SUPER, SPACE, Launch apps, exec, nomarchy-launch-walker
|
||||
bindd = SUPER CTRL, E, Emoji picker, exec, nomarchy-launch-walker -m symbols
|
||||
bindd = SUPER CTRL, C, Capture menu, exec, nomarchy-menu capture
|
||||
bindd = SUPER CTRL, O, Toggle menu, exec, nomarchy-menu toggle
|
||||
bindd = SUPER ALT, SPACE, Nomarchy menu, exec, nomarchy-menu
|
||||
bindd = SUPER, ESCAPE, System menu, exec, nomarchy-menu system
|
||||
bindld = , XF86PowerOff, Power menu, exec, nomarchy-menu system
|
||||
bindd = SUPER, K, Show key bindings, exec, nomarchy-menu-keybindings
|
||||
bindd = , XF86Calculator, Calculator, exec, gnome-calculator
|
||||
|
||||
# Aesthetics
|
||||
bindd = SUPER SHIFT, SPACE, Toggle top bar, exec, nomarchy-toggle-waybar
|
||||
bindd = SUPER CTRL, SPACE, Theme background menu, exec, nomarchy-menu background
|
||||
bindd = SUPER SHIFT CTRL, SPACE, Theme menu, exec, nomarchy-menu theme
|
||||
bindd = SUPER, BACKSPACE, Toggle window transparency, exec, nomarchy-hyprland-active-window-transparency-toggle
|
||||
bindd = SUPER SHIFT, BACKSPACE, Toggle window gaps, exec, nomarchy-hyprland-window-gaps-toggle
|
||||
bindd = SUPER CTRL, BACKSPACE, Toggle single-window square aspect, exec, nomarchy-hyprland-window-single-square-aspect-toggle
|
||||
|
||||
# Notifications
|
||||
bindd = SUPER, COMMA, Dismiss last notification, exec, makoctl dismiss
|
||||
bindd = SUPER SHIFT, COMMA, Dismiss all notifications, exec, makoctl dismiss --all
|
||||
bindd = SUPER CTRL, COMMA, Toggle silencing notifications, exec, nomarchy-toggle-notification-silencing
|
||||
bindd = SUPER ALT, COMMA, Invoke last notification, exec, makoctl invoke
|
||||
bindd = SUPER SHIFT ALT, COMMA, Restore last notification, exec, makoctl restore
|
||||
|
||||
# Toggles
|
||||
bindd = SUPER CTRL, I, Toggle locking on idle, exec, nomarchy-toggle-idle
|
||||
bindd = SUPER CTRL, N, Toggle nightlight, exec, nomarchy-toggle-nightlight
|
||||
|
||||
# Control Apple Display brightness
|
||||
bindd = CTRL, F1, Apple Display brightness down, exec, nomarchy-brightness-display-apple -5000
|
||||
bindd = CTRL, F2, Apple Display brightness up, exec, nomarchy-brightness-display-apple +5000
|
||||
bindd = SHIFT CTRL, F2, Apple Display full brightness, exec, nomarchy-brightness-display-apple +60000
|
||||
|
||||
# Captures
|
||||
bindd = , PRINT, Screenshot, exec, nomarchy-cmd-screenshot
|
||||
bindd = ALT, PRINT, Screenrecording, exec, nomarchy-menu screenrecord
|
||||
bindd = SUPER, PRINT, Color picker, exec, pkill hyprpicker || hyprpicker -a
|
||||
|
||||
# File sharing
|
||||
bindd = SUPER CTRL, S, Share, exec, nomarchy-menu share
|
||||
|
||||
# Waybar-less information
|
||||
bindd = SUPER CTRL ALT, T, Show time, exec, notify-send -u low " $(date +"%A %H:%M · %d %B %Y · Week %V")"
|
||||
bindd = SUPER CTRL ALT, B, Show battery remaining, exec, notify-send -u low "$(nomarchy-battery-status)"
|
||||
|
||||
# Control panels
|
||||
bindd = SUPER CTRL, A, Audio controls, exec, nomarchy-launch-audio
|
||||
bindd = SUPER CTRL, B, Bluetooth controls, exec, nomarchy-launch-bluetooth
|
||||
bindd = SUPER CTRL, W, Wifi controls, exec, nomarchy-launch-wifi
|
||||
bindd = SUPER CTRL, T, Activity, exec, nomarchy-launch-tui btop
|
||||
|
||||
# Dictation
|
||||
bindd = SUPER CTRL, X, Toggle dictation, exec, voxtype record toggle
|
||||
|
||||
# Zoom
|
||||
bindd = SUPER CTRL, Z, Zoom in, exec, hyprctl keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '.float + 1')
|
||||
bindd = SUPER CTRL ALT, Z, Reset zoom, exec, hyprctl keyword cursor:zoom_factor 1
|
||||
|
||||
# Lock system
|
||||
bindd = SUPER CTRL, L, Lock system, exec, nomarchy-lock-screen
|
||||
12
core/home/config/nomarchy/default/hypr/colors.conf
Normal file
12
core/home/config/nomarchy/default/hypr/colors.conf
Normal file
@@ -0,0 +1,12 @@
|
||||
# Hyprland Color Configuration (Visual)
|
||||
# This file contains only color-related settings.
|
||||
# It's sourced AFTER theme colors are applied, allowing theme-specific overrides.
|
||||
|
||||
# These are placeholder values - actual colors come from the active theme
|
||||
# via ~/.config/nomarchy/current/theme/hyprland.conf
|
||||
|
||||
# Border colors (set by theme-loader based on active theme)
|
||||
# The theme's hyprland.conf will define $activeBorderColor and $inactiveBorderColor
|
||||
|
||||
# Group bar colors (set by theme)
|
||||
# Themes can override group bar colors in their hyprland.conf
|
||||
29
core/home/config/nomarchy/default/hypr/envs.conf
Normal file
29
core/home/config/nomarchy/default/hypr/envs.conf
Normal file
@@ -0,0 +1,29 @@
|
||||
# Cursor size
|
||||
env = XCURSOR_SIZE,24
|
||||
env = HYPRCURSOR_SIZE,24
|
||||
|
||||
# Force all apps to use Wayland
|
||||
env = GDK_BACKEND,wayland,x11,*
|
||||
env = QT_QPA_PLATFORM,wayland;xcb
|
||||
env = QT_STYLE_OVERRIDE,kvantum
|
||||
env = SDL_VIDEODRIVER,wayland,x11
|
||||
env = MOZ_ENABLE_WAYLAND,1
|
||||
env = ELECTRON_OZONE_PLATFORM_HINT,wayland
|
||||
env = OZONE_PLATFORM,wayland
|
||||
env = XDG_SESSION_TYPE,wayland
|
||||
|
||||
# Allow better support for screen sharing (Google Meet, Discord, etc)
|
||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
||||
env = XDG_SESSION_DESKTOP,Hyprland
|
||||
|
||||
xwayland {
|
||||
force_zero_scaling = true
|
||||
}
|
||||
|
||||
# Use XCompose file
|
||||
env = XCOMPOSEFILE,~/.XCompose
|
||||
|
||||
# Don't show update on first launch
|
||||
ecosystem {
|
||||
no_update_news = true
|
||||
}
|
||||
21
core/home/config/nomarchy/default/hypr/input.conf
Normal file
21
core/home/config/nomarchy/default/hypr/input.conf
Normal file
@@ -0,0 +1,21 @@
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#input
|
||||
input {
|
||||
kb_layout = us
|
||||
kb_variant =
|
||||
kb_model =
|
||||
kb_options = compose:caps
|
||||
kb_rules =
|
||||
|
||||
follow_mouse = 1
|
||||
|
||||
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||
|
||||
touchpad {
|
||||
natural_scroll = false
|
||||
}
|
||||
}
|
||||
|
||||
misc {
|
||||
key_press_enables_dpms = true # key press will trigger wake
|
||||
mouse_move_enables_dpms = true # mouse move will trigger wake
|
||||
}
|
||||
146
core/home/config/nomarchy/default/hypr/looknfeel.conf
Normal file
146
core/home/config/nomarchy/default/hypr/looknfeel.conf
Normal file
@@ -0,0 +1,146 @@
|
||||
# Refer to https://wiki.hyprland.org/Configuring/Variables/
|
||||
|
||||
# Variables
|
||||
$activeBorderColor = rgba(33ccffee) rgba(00ff99ee) 45deg
|
||||
$inactiveBorderColor = rgba(595959aa)
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#general
|
||||
general {
|
||||
gaps_in = 5
|
||||
gaps_out = 10
|
||||
|
||||
border_size = 2
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
|
||||
col.active_border = $activeBorderColor
|
||||
col.inactive_border = $inactiveBorderColor
|
||||
|
||||
# Set to true enable resizing windows by clicking and dragging on borders and gaps
|
||||
resize_on_border = false
|
||||
|
||||
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
||||
allow_tearing = false
|
||||
|
||||
layout = dwindle
|
||||
}
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#decoration
|
||||
decoration {
|
||||
rounding = 0
|
||||
|
||||
shadow {
|
||||
enabled = true
|
||||
range = 2
|
||||
render_power = 3
|
||||
color = rgba(1a1a1aee)
|
||||
}
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#blur
|
||||
blur {
|
||||
enabled = true
|
||||
size = 2
|
||||
passes = 2
|
||||
special = true
|
||||
brightness = 0.60
|
||||
contrast = 0.75
|
||||
}
|
||||
}
|
||||
|
||||
# https://wiki.hypr.land/Configuring/Variables/#group
|
||||
group {
|
||||
col.border_active = $activeBorderColor
|
||||
col.border_inactive = $inactiveBorderColor
|
||||
col.border_locked_active = -1
|
||||
col.border_locked_inactive = -1
|
||||
|
||||
groupbar {
|
||||
font_size = 12
|
||||
font_family = monospace
|
||||
font_weight_active = ultraheavy
|
||||
font_weight_inactive = normal
|
||||
|
||||
indicator_height = 0
|
||||
indicator_gap = 5
|
||||
height = 22
|
||||
gaps_in = 5
|
||||
gaps_out = 0
|
||||
|
||||
text_color = rgb(ffffff)
|
||||
text_color_inactive = rgba(ffffff90)
|
||||
col.active = rgba(00000040)
|
||||
col.inactive = rgba(00000020)
|
||||
|
||||
gradients = true
|
||||
gradient_rounding = 0
|
||||
gradient_round_only_edges = false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#animations
|
||||
animations {
|
||||
enabled = yes, please :)
|
||||
|
||||
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||
|
||||
bezier = easeOutQuint,0.23,1,0.32,1
|
||||
bezier = easeInOutCubic,0.65,0.05,0.36,1
|
||||
bezier = linear,0,0,1,1
|
||||
bezier = almostLinear,0.5,0.5,0.75,1.0
|
||||
bezier = quick,0.15,0,0.1,1
|
||||
|
||||
animation = global, 1, 10, default
|
||||
animation = border, 1, 5.39, easeOutQuint
|
||||
animation = windows, 1, 4.79, easeOutQuint
|
||||
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
|
||||
animation = windowsOut, 1, 1.49, linear, popin 87%
|
||||
animation = fadeIn, 1, 1.73, almostLinear
|
||||
animation = fadeOut, 1, 1.46, almostLinear
|
||||
animation = fade, 1, 3.03, quick
|
||||
animation = layers, 1, 3.81, easeOutQuint
|
||||
animation = layersIn, 1, 4, easeOutQuint, fade
|
||||
animation = layersOut, 1, 1.5, linear, fade
|
||||
animation = fadeLayersIn, 1, 1.79, almostLinear
|
||||
animation = fadeLayersOut, 1, 1.39, almostLinear
|
||||
animation = workspaces, 0, 0, ease
|
||||
animation = specialWorkspace, 1, 4, easeOutQuint, slidevert
|
||||
}
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||
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
|
||||
force_split = 2 # Always split on the right
|
||||
}
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
||||
master {
|
||||
new_status = master
|
||||
}
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#misc
|
||||
misc {
|
||||
disable_hyprland_logo = true
|
||||
disable_splash_rendering = true
|
||||
disable_scale_notification = true
|
||||
focus_on_activate = true
|
||||
}
|
||||
|
||||
# https://wiki.hypr.land/Configuring/Variables/#cursor
|
||||
cursor {
|
||||
hide_on_key_press = true
|
||||
warp_on_change_workspace = 1
|
||||
}
|
||||
|
||||
# Auto toggle scratchpad on switching workspace from scratchpad
|
||||
binds {
|
||||
hide_special_on_workspace_change = true
|
||||
}
|
||||
|
||||
# Style Gum confirm to match terminal theme
|
||||
env = GUM_CONFIRM_PROMPT_FOREGROUND,6 # Cyan
|
||||
env = GUM_CONFIRM_SELECTED_FOREGROUND,0 # Black
|
||||
env = GUM_CONFIRM_SELECTED_BACKGROUND,2 # Green
|
||||
env = GUM_CONFIRM_UNSELECTED_FOREGROUND,7 # White
|
||||
env = GUM_CONFIRM_UNSELECTED_BACKGROUND,8 # Dark grey
|
||||
# Dark grey
|
||||
16
core/home/config/nomarchy/default/hypr/plain-bindings.conf
Normal file
16
core/home/config/nomarchy/default/hypr/plain-bindings.conf
Normal file
@@ -0,0 +1,16 @@
|
||||
# Application bindings
|
||||
bindd = SUPER, RETURN, Terminal, exec, uwsm-app -- xdg-terminal-exec --dir="$(nomarchy-cmd-terminal-cwd)"
|
||||
bindd = SUPER SHIFT, RETURN, Browser, exec, nomarchy-launch-browser
|
||||
bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window
|
||||
bindd = SUPER ALT SHIFT, F, File manager (cwd), exec, uwsm-app -- nautilus --new-window "$(nomarchy-cmd-terminal-cwd)"
|
||||
bindd = SUPER SHIFT, B, Browser, exec, nomarchy-launch-browser
|
||||
bindd = SUPER SHIFT ALT, B, Browser (private), exec, nomarchy-launch-browser --private
|
||||
bindd = SUPER SHIFT, N, Editor, exec, nomarchy-launch-editor
|
||||
|
||||
# Add extra bindings
|
||||
# bindd = SUPER SHIFT, A, ChatGPT, exec, nomarchy-launch-webapp "https://chatgpt.com"
|
||||
# bindd = SUPER SHIFT, R, exec, alacritty -e ssh your-server
|
||||
|
||||
# Overwrite existing bindings, like putting Nomarchy Menu on Super + Space
|
||||
# unbind = SUPER, SPACE
|
||||
# bindd = SUPER, SPACE, Nomarchy menu, exec, nomarchy-menu
|
||||
15
core/home/config/nomarchy/default/hypr/windows.conf
Normal file
15
core/home/config/nomarchy/default/hypr/windows.conf
Normal file
@@ -0,0 +1,15 @@
|
||||
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||
# Hyprland 0.53+ syntax
|
||||
#windowrulev2 = suppressevent maximize, class:.*
|
||||
|
||||
# Tag all windows for default opacity (apps can override with -default-opacity tag)
|
||||
#windowrulev2 = tag +default-opacity, class:.*
|
||||
|
||||
# Fix some dragging issues with XWayland
|
||||
#windowrulev2 = nofocus, class:^$, title:^$, xwayland:1, float:1, fullscreen:0, pin:0
|
||||
|
||||
# App-specific tweaks (may remove default-opacity tag)
|
||||
source = ~/.config/nomarchy/default/hypr/apps.conf
|
||||
|
||||
# Apply default opacity after apps have had a chance to opt out
|
||||
#windowrulev2 = opacity 0.97 0.9, tag:default-opacity
|
||||
34
core/home/config/nomarchy/default/mako/core.ini
Normal file
34
core/home/config/nomarchy/default/mako/core.ini
Normal file
@@ -0,0 +1,34 @@
|
||||
anchor=top-right
|
||||
default-timeout=5000
|
||||
width=420
|
||||
outer-margin=20
|
||||
padding=10,15
|
||||
border-size=2
|
||||
max-icon-size=32
|
||||
font=sans-serif 14px
|
||||
|
||||
[app-name=Spotify]
|
||||
invisible=1
|
||||
|
||||
[mode=do-not-disturb]
|
||||
invisible=true
|
||||
|
||||
[mode=do-not-disturb app-name=notify-send]
|
||||
invisible=false
|
||||
|
||||
[urgency=critical]
|
||||
default-timeout=0
|
||||
layer=overlay
|
||||
|
||||
[summary~="Setup Wi-Fi"]
|
||||
on-button-left=exec sh -c 'nomarchy-notification-dismiss "Setup Wi-Fi"; nomarchy-launch-wifi'
|
||||
|
||||
[summary~="Update System"]
|
||||
on-button-left=exec sh -c 'nomarchy-notification-dismiss "Update System"; nomarchy-launch-floating-terminal-with-presentation nomarchy-update'
|
||||
|
||||
[summary~="Learn Keybindings"]
|
||||
on-button-left=exec sh -c 'nomarchy-notification-dismiss "Learn Keybindings"; nomarchy-menu-keybindings'
|
||||
|
||||
[summary~="Screenshot copied & saved"]
|
||||
max-icon-size=80
|
||||
format=<b>%s</b>\n%b
|
||||
97
core/home/config/nomarchy/default/voxtype/config.toml
Normal file
97
core/home/config/nomarchy/default/voxtype/config.toml
Normal file
@@ -0,0 +1,97 @@
|
||||
# Voxtype Configuration
|
||||
#
|
||||
# Location: ~/.config/voxtype/config.toml
|
||||
# All settings can be overridden via CLI flags
|
||||
#
|
||||
# State file for external integrations (Waybar, polybar, etc.)
|
||||
# Use "auto" for default location ($XDG_RUNTIME_DIR/voxtype/state),
|
||||
# a custom path, or "disabled" to turn off. The daemon writes state
|
||||
# ("idle", "recording", "transcribing") to this file whenever it changes.
|
||||
# Required for `voxtype record toggle` and `voxtype status` commands.
|
||||
state_file = "auto"
|
||||
|
||||
[hotkey]
|
||||
# Hotkey is configured in Hyprland. Default is Super + Ctrl + X
|
||||
enabled = false
|
||||
|
||||
[audio]
|
||||
# Audio input device ("default" uses system default)
|
||||
# List devices with: pactl list sources short
|
||||
device = "default"
|
||||
|
||||
# Sample rate in Hz (whisper expects 16000)
|
||||
sample_rate = 16000
|
||||
|
||||
# Maximum recording duration in seconds (safety limit)
|
||||
max_duration_secs = 60
|
||||
|
||||
# [audio.feedback]
|
||||
# Enable audio feedback sounds (beeps when recording starts/stops)
|
||||
# enabled = true
|
||||
#
|
||||
# Sound theme: "default", "subtle", "mechanical", or path to custom theme directory
|
||||
# theme = "default"
|
||||
#
|
||||
# Volume level (0.0 to 1.0)
|
||||
# volume = 0.7
|
||||
|
||||
[whisper]
|
||||
# Model to use for transcription
|
||||
# Options: tiny, tiny.en, base, base.en, small, small.en, medium, medium.en, large-v3, large-v3-turbo
|
||||
# .en models are English-only but faster and more accurate for English
|
||||
# large-v3-turbo is faster than large-v3 with minimal accuracy loss (recommended for GPU)
|
||||
# Or provide absolute path to a custom .bin model file
|
||||
model = "base.en"
|
||||
|
||||
# Language for transcription
|
||||
# Use "en" for English, "auto" for auto-detection
|
||||
# See: https://github.com/openai/whisper#available-models-and-languages
|
||||
language = "en"
|
||||
|
||||
# Translate non-English speech to English
|
||||
translate = false
|
||||
|
||||
# Number of CPU threads for inference (omit for auto-detection)
|
||||
# threads = 4
|
||||
|
||||
[output]
|
||||
# Primary output mode: "type" or "clipboard"
|
||||
# - type: Simulates keyboard input at cursor position (requires ydotool)
|
||||
# - clipboard: Copies text to clipboard (requires wl-copy)
|
||||
mode = "type"
|
||||
|
||||
# Fall back to clipboard if typing fails
|
||||
fallback_to_clipboard = true
|
||||
|
||||
# Delay between typed characters in milliseconds
|
||||
# 0 = fastest possible, increase if characters are dropped
|
||||
type_delay_ms = 1
|
||||
|
||||
# Post-processing command (optional)
|
||||
# Pipe transcribed text through an external command for cleanup before output.
|
||||
# The command receives text on stdin and outputs processed text on stdout.
|
||||
# Useful for LLM-based text cleanup, grammar correction, filler word removal.
|
||||
# On any failure (timeout, error), falls back to original transcription.
|
||||
#
|
||||
# [output.post_process]
|
||||
# command = "ollama run llama3.2:1b 'Clean up this dictation. Fix grammar, remove filler words. Output only the cleaned text:'"
|
||||
# timeout_ms = 30000 # 30 second timeout (generous for LLM)
|
||||
|
||||
[output.notification]
|
||||
# Show notification when recording starts (hotkey pressed)
|
||||
on_recording_start = false
|
||||
|
||||
# Show notification when recording stops (transcription beginning)
|
||||
on_recording_stop = false
|
||||
|
||||
# Show notification with transcribed text after transcription completes
|
||||
on_transcription = false
|
||||
|
||||
# [text]
|
||||
# Text processing options (word replacements, spoken punctuation)
|
||||
#
|
||||
# Enable spoken punctuation conversion (e.g., say "period" to get ".")
|
||||
# spoken_punctuation = false
|
||||
#
|
||||
# Custom word replacements (case-insensitive)
|
||||
# replacements = { "hyperwhisper" = "hyprwhspr" }
|
||||
3
core/home/config/nomarchy/default/walker/restart.conf
Normal file
3
core/home/config/nomarchy/default/walker/restart.conf
Normal file
@@ -0,0 +1,3 @@
|
||||
[Service]
|
||||
Restart=always
|
||||
RestartSec=2
|
||||
@@ -0,0 +1,156 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk" version="4.0"></requires>
|
||||
<object class="GtkWindow" id="Window">
|
||||
<style>
|
||||
<class name="window"></class>
|
||||
</style>
|
||||
<property name="resizable">true</property>
|
||||
<property name="title">Walker</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="BoxWrapper">
|
||||
<style>
|
||||
<class name="box-wrapper"></class>
|
||||
</style>
|
||||
<property name="width-request">644</property>
|
||||
<property name="overflow">hidden</property>
|
||||
<property name="orientation">horizontal</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="halign">center</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="Box">
|
||||
<style>
|
||||
<class name="box"></class>
|
||||
</style>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="hexpand-set">true</property>
|
||||
<property name="hexpand">true</property>
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="SearchContainer">
|
||||
<style>
|
||||
<class name="search-container"></class>
|
||||
</style>
|
||||
<property name="overflow">hidden</property>
|
||||
<property name="orientation">horizontal</property>
|
||||
<property name="halign">fill</property>
|
||||
<property name="hexpand-set">true</property>
|
||||
<property name="hexpand">true</property>
|
||||
<child>
|
||||
<object class="GtkEntry" id="Input">
|
||||
<style>
|
||||
<class name="input"></class>
|
||||
</style>
|
||||
<property name="halign">fill</property>
|
||||
<property name="hexpand-set">true</property>
|
||||
<property name="hexpand">true</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="ContentContainer">
|
||||
<style>
|
||||
<class name="content-container"></class>
|
||||
</style>
|
||||
<property name="orientation">horizontal</property>
|
||||
<property name="spacing">10</property>
|
||||
<property name="vexpand">true</property>
|
||||
<property name="vexpand-set">true</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="ElephantHint">
|
||||
<style>
|
||||
<class name="elephant-hint"></class>
|
||||
</style>
|
||||
<property name="hexpand">true</property>
|
||||
<property name="height-request">100</property>
|
||||
<property name="label">Waiting for elephant...</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="Placeholder">
|
||||
<style>
|
||||
<class name="placeholder"></class>
|
||||
</style>
|
||||
<property name="label">No Results</property>
|
||||
<property name="yalign">0.0</property>
|
||||
<property name="hexpand">true</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="Scroll">
|
||||
<style>
|
||||
<class name="scroll"></class>
|
||||
</style>
|
||||
<property name="hexpand">true</property>
|
||||
<property name="can_focus">false</property>
|
||||
<property name="overlay-scrolling">true</property>
|
||||
<property name="max-content-width">600</property>
|
||||
<property name="max-content-height">300</property>
|
||||
<property name="min-content-height">0</property>
|
||||
<property name="propagate-natural-height">true</property>
|
||||
<property name="propagate-natural-width">true</property>
|
||||
<property name="hscrollbar-policy">automatic</property>
|
||||
<property name="vscrollbar-policy">automatic</property>
|
||||
<child>
|
||||
<object class="GtkGridView" id="List">
|
||||
<style>
|
||||
<class name="list"></class>
|
||||
</style>
|
||||
<property name="max_columns">1</property>
|
||||
<property name="can_focus">false</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="Preview">
|
||||
<style>
|
||||
<class name="preview"></class>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="Keybinds">
|
||||
<property name="hexpand">true</property>
|
||||
<property name="margin-top">10</property>
|
||||
<style>
|
||||
<class name="keybinds"></class>
|
||||
</style>
|
||||
<child>
|
||||
<object class="GtkBox" id="GlobalKeybinds">
|
||||
<property name="spacing">10</property>
|
||||
<style>
|
||||
<class name="global-keybinds"></class>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="ItemKeybinds">
|
||||
<property name="hexpand">true</property>
|
||||
<property name="halign">end</property>
|
||||
<property name="spacing">10</property>
|
||||
<style>
|
||||
<class name="item-keybinds"></class>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="Error">
|
||||
<style>
|
||||
<class name="error"></class>
|
||||
</style>
|
||||
<property name="xalign">0</property>
|
||||
<property name="visible">false</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
@@ -0,0 +1,117 @@
|
||||
@import "../../../../../../../.config/nomarchy/current/theme/walker.css";
|
||||
|
||||
* {
|
||||
all: unset;
|
||||
}
|
||||
|
||||
* {
|
||||
font-family: monospace;
|
||||
font-size: 18px;
|
||||
color: @text;
|
||||
}
|
||||
|
||||
scrollbar {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.normal-icons {
|
||||
-gtk-icon-size: 16px;
|
||||
}
|
||||
|
||||
.large-icons {
|
||||
-gtk-icon-size: 32px;
|
||||
}
|
||||
|
||||
.box-wrapper {
|
||||
background: alpha(@base, 0.95);
|
||||
padding: 20px;
|
||||
border: 2px solid @border;
|
||||
}
|
||||
|
||||
.preview-box {
|
||||
}
|
||||
|
||||
.box {
|
||||
}
|
||||
|
||||
.search-container {
|
||||
background: @base;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.input placeholder {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.input {
|
||||
}
|
||||
|
||||
.input:focus,
|
||||
.input:active {
|
||||
box-shadow: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.content-container {
|
||||
}
|
||||
|
||||
.placeholder {
|
||||
}
|
||||
|
||||
.scroll {
|
||||
}
|
||||
|
||||
.list {
|
||||
}
|
||||
|
||||
child,
|
||||
child > * {
|
||||
}
|
||||
|
||||
child:hover .item-box {
|
||||
}
|
||||
|
||||
child:selected .item-box {
|
||||
background-color: @selected-background;
|
||||
}
|
||||
|
||||
child:selected .item-box * {
|
||||
color: @selected-text;
|
||||
}
|
||||
|
||||
.item-box {
|
||||
padding-left: 14px;
|
||||
}
|
||||
|
||||
.item-text-box {
|
||||
all: unset;
|
||||
padding: 14px 0;
|
||||
}
|
||||
|
||||
.item-text {
|
||||
}
|
||||
|
||||
.item-subtext {
|
||||
font-size: 0px;
|
||||
min-height: 0px;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.item-image {
|
||||
margin-right: 14px;
|
||||
-gtk-icon-transform: scale(0.9);
|
||||
}
|
||||
|
||||
.current {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.keybind-hints {
|
||||
background: @background;
|
||||
padding: 10px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.preview {
|
||||
}
|
||||
7
core/home/config/nomarchy/default/walker/walker.desktop
Normal file
7
core/home/config/nomarchy/default/walker/walker.desktop
Normal file
@@ -0,0 +1,7 @@
|
||||
[Desktop Entry]
|
||||
Name=Walker
|
||||
Comment=Walker Service
|
||||
Exec=walker --gapplication-service
|
||||
StartupNotify=false
|
||||
Terminal=false
|
||||
Type=Application
|
||||
7
core/home/config/nomarchy/default/waybar/indicators/idle.sh
Executable file
7
core/home/config/nomarchy/default/waybar/indicators/idle.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if pgrep -x hypridle >/dev/null; then
|
||||
echo '{"text": ""}'
|
||||
else
|
||||
echo '{"text": "", "tooltip": "Idle lock disabled", "class": "active"}'
|
||||
fi
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if makoctl mode | grep -q 'do-not-disturb'; then
|
||||
echo '{"text": "", "tooltip": "Notifications silenced", "class": "active"}'
|
||||
else
|
||||
echo '{"text": ""}'
|
||||
fi
|
||||
7
core/home/config/nomarchy/default/waybar/indicators/screen-recording.sh
Executable file
7
core/home/config/nomarchy/default/waybar/indicators/screen-recording.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if pgrep -f "^gpu-screen-recorder" >/dev/null; then
|
||||
echo '{"text": "", "tooltip": "Stop recording", "class": "active"}'
|
||||
else
|
||||
echo '{"text": ""}'
|
||||
fi
|
||||
@@ -0,0 +1,18 @@
|
||||
## Use software volume control for all ALSA devices.
|
||||
## This prevents hardware mixer quirks (like muffled audio on Realtek codecs)
|
||||
## and provides consistent volume behavior across all hardware.
|
||||
|
||||
monitor.alsa.rules = [
|
||||
{
|
||||
matches = [
|
||||
{
|
||||
device.name = "~alsa_card.*"
|
||||
}
|
||||
]
|
||||
actions = {
|
||||
update-props = {
|
||||
api.alsa.soft-mixer = true
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
29
core/home/config/nomarchy/default/xcompose
Normal file
29
core/home/config/nomarchy/default/xcompose
Normal file
@@ -0,0 +1,29 @@
|
||||
include "%L"
|
||||
|
||||
# Emoji
|
||||
<Multi_key> <m> <s> : "😄" # smile
|
||||
<Multi_key> <m> <c> : "😂" # cry
|
||||
<Multi_key> <m> <l> : "😍" # love
|
||||
<Multi_key> <m> <v> : "✌️" # victory
|
||||
<Multi_key> <m> <h> : "❤️" # heart
|
||||
<Multi_key> <m> <y> : "👍" # yes
|
||||
<Multi_key> <m> <n> : "👎" # no
|
||||
<Multi_key> <m> <f> : "🖕" # fuck
|
||||
<Multi_key> <m> <w> : "🤞" # wish
|
||||
<Multi_key> <m> <r> : "🤘" # rock
|
||||
<Multi_key> <m> <k> : "😘" # kiss
|
||||
<Multi_key> <m> <e> : "🙄" # eyeroll
|
||||
<Multi_key> <m> <d> : "🤤" # droll
|
||||
<Multi_key> <m> <m> : "💰" # money
|
||||
<Multi_key> <m> <x> : "🎉" # xellebrate
|
||||
<Multi_key> <m> <1> : "💯" # 100%
|
||||
<Multi_key> <m> <t> : "🥂" # toast
|
||||
<Multi_key> <m> <p> : "🙏" # pray
|
||||
<Multi_key> <m> <i> : "😉" # wink
|
||||
<Multi_key> <m> <o> : "👌" # OK
|
||||
<Multi_key> <m> <g> : "👋" # greeting
|
||||
<Multi_key> <m> <a> : "💪" # arm
|
||||
<Multi_key> <m> <b> : "🤯" # blowing
|
||||
|
||||
# Typography
|
||||
<Multi_key> <space> <space> : "—"
|
||||
20
core/home/config/nomarchy/extensions/menu.sh
Normal file
20
core/home/config/nomarchy/extensions/menu.sh
Normal file
@@ -0,0 +1,20 @@
|
||||
# Overwrite parts of the nomarchy-menu with user-specific submenus.
|
||||
# See $OMARCHY_PATH/bin/nomarchy-menu for functions that can be overwritten.
|
||||
#
|
||||
# WARNING: Overwritten functions will obviously not be updated when Nomarchy changes.
|
||||
#
|
||||
# Example of minimal system menu:
|
||||
#
|
||||
# show_system_menu() {
|
||||
# case $(menu "System" " Lock\n Shutdown") in
|
||||
# *Lock*) nomarchy-lock-screen ;;
|
||||
# *Shutdown*) nomarchy-system-shutdown ;;
|
||||
# *) back_to show_main_menu ;;
|
||||
# esac
|
||||
# }
|
||||
#
|
||||
# Example of overriding just the about menu action: (Using zsh instead of bash (default))
|
||||
#
|
||||
# show_about() {
|
||||
# exec nomarchy-launch-or-focus-tui "zsh -c 'fastfetch; read -k 1'"
|
||||
# }
|
||||
10
core/home/config/nomarchy/hooks/battery-low.sample
Normal file
10
core/home/config/nomarchy/hooks/battery-low.sample
Normal file
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This hook is called with the current battery percentage when the low battery
|
||||
# notification is sent. To put it into use, remove .sample from the name.
|
||||
|
||||
SOUND_FILE="/usr/share/sounds/freedesktop/stereo/dialog-warning.oga"
|
||||
|
||||
if nomarchy-cmd-present mpv && [[ -f $SOUND_FILE ]]; then
|
||||
mpv --no-video "$SOUND_FILE" >/dev/null 2>&1
|
||||
fi
|
||||
7
core/home/config/nomarchy/hooks/font-set.sample
Normal file
7
core/home/config/nomarchy/hooks/font-set.sample
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This hook is called with the snake-cased name of the font that has just been set.
|
||||
# To put it into use, remove .sample from the name.
|
||||
|
||||
# Example: Show the name of the theme that was just set.
|
||||
# notify-send -u low "New font" "Your new font is $1"
|
||||
7
core/home/config/nomarchy/hooks/post-update.sample
Normal file
7
core/home/config/nomarchy/hooks/post-update.sample
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This hook is called after an Nomarchy system update has been performed.
|
||||
# To put it into use, remove .sample from the name.
|
||||
|
||||
# Example: Show notification after the system has been updated.
|
||||
# notify-send -u low "Update Performed" "Your system is now up to date"
|
||||
7
core/home/config/nomarchy/hooks/theme-set.sample
Normal file
7
core/home/config/nomarchy/hooks/theme-set.sample
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This hook is called with the snake-cased name of the theme that has just been set.
|
||||
# To put it into use, remove .sample from the name.
|
||||
|
||||
# Example: Show the name of the theme that was just set.
|
||||
# notify-send -u low "New theme" "Your new theme is $1"
|
||||
86
core/home/config/nomarchy/themed/alacritty.toml.tpl.sample
Normal file
86
core/home/config/nomarchy/themed/alacritty.toml.tpl.sample
Normal file
@@ -0,0 +1,86 @@
|
||||
# Nomarchy User Template Example: Alacritty
|
||||
#
|
||||
# This is a sample template file demonstrating how to create custom themed
|
||||
# configurations. Templates use placeholder variables that get replaced with
|
||||
# your current theme's colors when you switch themes.
|
||||
#
|
||||
# HOW TO USE:
|
||||
# 1. Rename this file to: alacritty.toml.tpl (remove the .sample extension)
|
||||
# 2. Customize it as needed
|
||||
# 3. Change your theme to apply the template
|
||||
#
|
||||
# User templates in ~/.config/nomarchy/themed/ take priority over the built-in
|
||||
# templates in the Nomarchy default/themed/ directory. This lets you override
|
||||
# any built-in template or create templates for applications not included
|
||||
# by default.
|
||||
#
|
||||
# AVAILABLE VARIABLES:
|
||||
# {{ background }} - Main background color (e.g., "#1a1b26")
|
||||
# {{ foreground }} - Main foreground/text color
|
||||
# {{ cursor }} - Cursor color
|
||||
# {{ accent }} - Theme accent color
|
||||
# {{ selection_background }} - Selection highlight background
|
||||
# {{ selection_foreground }} - Selection highlight foreground
|
||||
#
|
||||
# {{ color0 }} through {{ color15 }} - Standard 16-color terminal palette
|
||||
# color0-7: Normal colors (black, red, green, yellow, blue, magenta, cyan, white)
|
||||
# color8-15: Bright variants
|
||||
#
|
||||
# VARIABLE MODIFIERS:
|
||||
# {{ variable_strip }} - Hex color without the # prefix (e.g., "1a1b26")
|
||||
# {{ variable_rgb }} - Decimal RGB values (e.g., "26,27,38")
|
||||
#
|
||||
# Example using modifiers:
|
||||
# background = "{{ background }}" -> background = "#1a1b26"
|
||||
# background = "{{ background_strip }}" -> background = "1a1b26"
|
||||
# background = "rgb({{ background_rgb }})" -> background = "rgb(26,27,38)"
|
||||
#
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
[colors.primary]
|
||||
background = "{{ background }}"
|
||||
foreground = "{{ foreground }}"
|
||||
|
||||
[colors.cursor]
|
||||
text = "{{ background }}"
|
||||
cursor = "{{ cursor }}"
|
||||
|
||||
[colors.vi_mode_cursor]
|
||||
text = "{{ background }}"
|
||||
cursor = "{{ cursor }}"
|
||||
|
||||
[colors.search.matches]
|
||||
foreground = "{{ background }}"
|
||||
background = "{{ color3 }}"
|
||||
|
||||
[colors.search.focused_match]
|
||||
foreground = "{{ background }}"
|
||||
background = "{{ color1 }}"
|
||||
|
||||
[colors.footer_bar]
|
||||
foreground = "{{ background }}"
|
||||
background = "{{ foreground }}"
|
||||
|
||||
[colors.selection]
|
||||
text = "{{ selection_foreground }}"
|
||||
background = "{{ selection_background }}"
|
||||
|
||||
[colors.normal]
|
||||
black = "{{ color0 }}"
|
||||
red = "{{ color1 }}"
|
||||
green = "{{ color2 }}"
|
||||
yellow = "{{ color3 }}"
|
||||
blue = "{{ color4 }}"
|
||||
magenta = "{{ color5 }}"
|
||||
cyan = "{{ color6 }}"
|
||||
white = "{{ color7 }}"
|
||||
|
||||
[colors.bright]
|
||||
black = "{{ color8 }}"
|
||||
red = "{{ color9 }}"
|
||||
green = "{{ color10 }}"
|
||||
yellow = "{{ color11 }}"
|
||||
blue = "{{ color12 }}"
|
||||
magenta = "{{ color13 }}"
|
||||
cyan = "{{ color14 }}"
|
||||
white = "{{ color15 }}"
|
||||
32
core/home/config/starship.toml
Normal file
32
core/home/config/starship.toml
Normal file
@@ -0,0 +1,32 @@
|
||||
add_newline = true
|
||||
command_timeout = 200
|
||||
format = "[$directory$git_branch$git_status]($style)$character"
|
||||
|
||||
[character]
|
||||
error_symbol = "[✗](bold cyan)"
|
||||
success_symbol = "[❯](bold cyan)"
|
||||
|
||||
[directory]
|
||||
truncation_length = 2
|
||||
truncation_symbol = "…/"
|
||||
repo_root_style = "bold cyan"
|
||||
repo_root_format = "[$repo_root]($repo_root_style)[$path]($style)[$read_only]($read_only_style) "
|
||||
|
||||
[git_branch]
|
||||
format = "[$branch]($style) "
|
||||
style = "italic cyan"
|
||||
|
||||
[git_status]
|
||||
format = '[$all_status]($style)'
|
||||
style = "cyan"
|
||||
ahead = "⇡${count} "
|
||||
diverged = "⇕⇡${ahead_count}⇣${behind_count} "
|
||||
behind = "⇣${count} "
|
||||
conflicted = " "
|
||||
up_to_date = " "
|
||||
untracked = "? "
|
||||
modified = " "
|
||||
stashed = ""
|
||||
staged = ""
|
||||
renamed = ""
|
||||
deleted = ""
|
||||
13
core/home/config/uwsm/default
Normal file
13
core/home/config/uwsm/default
Normal file
@@ -0,0 +1,13 @@
|
||||
# Changes require a restart to take effect.
|
||||
|
||||
# Install other terminals via Install > Terminal
|
||||
export TERMINAL=xdg-terminal-exec
|
||||
|
||||
# Use code for VSCode
|
||||
export EDITOR=nvim
|
||||
|
||||
# Use a custom directory for screenshots (remember to make the directory!)
|
||||
# export OMARCHY_SCREENSHOT_DIR="$HOME/Pictures/Screenshots"
|
||||
|
||||
# Use a custom directory for screenrecordings (remember to make the directory!)
|
||||
# export OMARCHY_SCREENRECORD_DIR="$HOME/Videos/Screencasts"
|
||||
11
core/home/config/uwsm/env
Normal file
11
core/home/config/uwsm/env
Normal file
@@ -0,0 +1,11 @@
|
||||
# Changes require a restart to take effect.
|
||||
|
||||
# Ensure Nomarchy bins are in the path
|
||||
export OMARCHY_PATH=$HOME/.local/share/nomarchy
|
||||
export PATH=$OMARCHY_PATH/bin:$PATH:$HOME/.local/bin
|
||||
|
||||
# Set default terminal and editor
|
||||
source ~/.config/uwsm/default
|
||||
|
||||
# Activate mise if present on the system
|
||||
nomarchy-cmd-present mise && eval "$(mise activate bash --shims)"
|
||||
5
core/home/config/wiremix/wiremix.toml
Normal file
5
core/home/config/wiremix/wiremix.toml
Normal file
@@ -0,0 +1,5 @@
|
||||
# overwrites default wiremix configuration
|
||||
# defaults: https://github.com/tsowell/wiremix/blob/main/wiremix.toml
|
||||
|
||||
[char_sets.default]
|
||||
default_device = "⮞"
|
||||
3
core/home/config/xdg-terminals.list
Normal file
3
core/home/config/xdg-terminals.list
Normal file
@@ -0,0 +1,3 @@
|
||||
# Terminal emulator preference order for xdg-terminal-exec
|
||||
# The first found and valid terminal will be used
|
||||
Alacritty.desktop
|
||||
268
core/home/config/xournalpp/settings.xml
Normal file
268
core/home/config/xournalpp/settings.xml
Normal file
@@ -0,0 +1,268 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--The Xournal++ settings file. Do not edit this file! Most settings are available in the Settings dialog, the others are commented in this file, but handle with care!-->
|
||||
<settings>
|
||||
<property name="pressureSensitivity" value="true"/>
|
||||
<property name="minimumPressure" value="0.05"/>
|
||||
<property name="pressureMultiplier" value="1"/>
|
||||
<property name="zoomGesturesEnabled" value="true"/>
|
||||
<property name="selectedToolbar" value="Portrait"/>
|
||||
<property name="lastSavePath" value="/home/dhh/Downloads"/>
|
||||
<property name="lastOpenPath" value=""/>
|
||||
<property name="lastImagePath" value="/home/dhh/Dropbox/Images"/>
|
||||
<property name="edgePanSpeed" value="20"/>
|
||||
<property name="edgePanMaxMult" value="5"/>
|
||||
<property name="zoomStep" value="10"/>
|
||||
<property name="zoomStepScroll" value="2"/>
|
||||
<property name="displayDpi" value="72"/>
|
||||
<property name="mainWndWidth" value="800"/>
|
||||
<property name="mainWndHeight" value="600"/>
|
||||
<property name="maximized" value="true"/>
|
||||
<property name="showToolbar" value="true"/>
|
||||
<property name="showSidebar" value="true"/>
|
||||
<property name="sidebarWidth" value="150"/>
|
||||
<property name="sidebarNumberingStyle" value="1"/>
|
||||
<property name="sidebarOnRight" value="false"/>
|
||||
<property name="scrollbarOnLeft" value="false"/>
|
||||
<property name="menubarVisible" value="true"/>
|
||||
<property name="filepathShownInTitlebar" value="false"/>
|
||||
<property name="numColumns" value="1"/>
|
||||
<property name="numRows" value="1"/>
|
||||
<property name="viewFixedRows" value="false"/>
|
||||
<property name="showPairedPages" value="false"/>
|
||||
<property name="layoutVertical" value="false"/>
|
||||
<property name="layoutRightToLeft" value="false"/>
|
||||
<property name="layoutBottomToTop" value="false"/>
|
||||
<property name="numPairsOffset" value="1"/>
|
||||
<!--The icon theme, allowed values are "disabled", "onDrawOfLastPage", and "onScrollOfLastPage"-->
|
||||
<property name="emptyLastPageAppend" value="disabled"/>
|
||||
<property name="presentationMode" value="false"/>
|
||||
<!--Which GUI elements are shown in default view mode, separated by a colon (,)-->
|
||||
<property name="defaultViewModeAttributes" value="showMenubar,showToolbar,showSidebar"/>
|
||||
<!--Which GUI elements are shown in fullscreen view mode, separated by a colon (,)-->
|
||||
<property name="fullscreenViewModeAttributes" value="goFullscren,showToolbar,showSidebar"/>
|
||||
<!--Which GUI elements are shown in presentation view mode, separated by a colon (,)-->
|
||||
<property name="presentationViewModeAttributes" value="goFullscren,showToolbar"/>
|
||||
<!--The cursor icon used with a stylus, allowed values are "none", "dot", "big", "arrow"-->
|
||||
<property name="stylusCursorType" value="dot"/>
|
||||
<!--The eraser cursor visibility used with a stylus, allowed values are "never", "always", "hover", "touch"-->
|
||||
<property name="eraserVisibility" value="always"/>
|
||||
<!--The icon theme, allowed values are "iconsColor", "iconsLucide"-->
|
||||
<property name="iconTheme" value="iconsColor"/>
|
||||
<!--Dark/light mode, allowed values are "useSystem", "forceLight", "forceDark"-->
|
||||
<property name="themeVariant" value="forceDark"/>
|
||||
<property name="highlightPosition" value="false"/>
|
||||
<property name="cursorHighlightColor" value="2164260608"/>
|
||||
<property name="cursorHighlightBorderColor" value="2147483903"/>
|
||||
<property name="cursorHighlightRadius" value="30"/>
|
||||
<property name="cursorHighlightBorderWidth" value="0"/>
|
||||
<property name="useStockIcons" value="false"/>
|
||||
<property name="disableScrollbarFadeout" value="false"/>
|
||||
<property name="disableAudio" value="false"/>
|
||||
<!--Hides scroolbars in the main window, allowed values: "none", "horizontal", "vertical", "both"-->
|
||||
<property name="scrollbarHideType" value="none"/>
|
||||
<property name="autoloadMostRecent" value="false"/>
|
||||
<property name="autoloadPdfXoj" value="true"/>
|
||||
<property name="defaultSaveName" value="%F-Note-%H-%M"/>
|
||||
<property name="defaultPdfExportName" value="%{name}_annotated"/>
|
||||
<property name="autosaveEnabled" value="true"/>
|
||||
<property name="autosaveTimeout" value="3"/>
|
||||
<property name="addHorizontalSpace" value="false"/>
|
||||
<property name="addHorizontalSpaceAmount" value="150"/>
|
||||
<property name="addVerticalSpace" value="false"/>
|
||||
<property name="addVerticalSpaceAmount" value="150"/>
|
||||
<property name="drawDirModsEnabled" value="false"/>
|
||||
<property name="drawDirModsRadius" value="50"/>
|
||||
<property name="snapRotation" value="true"/>
|
||||
<property name="snapRotationTolerance" value="0.3"/>
|
||||
<property name="snapGrid" value="true"/>
|
||||
<property name="snapGridTolerance" value="0.5"/>
|
||||
<property name="snapGridSize" value="14.17"/>
|
||||
<property name="strokeRecognizerMinSize" value="40"/>
|
||||
<property name="touchDrawing" value="false"/>
|
||||
<property name="gtkTouchInertialScrolling" value="true"/>
|
||||
<property name="pressureGuessing" value="false"/>
|
||||
<property name="selectionBorderColor" value="4294901760"/>
|
||||
<property name="backgroundColor" value="4292664021"/>
|
||||
<property name="selectionMarkerColor" value="4285702095"/>
|
||||
<property name="touchZoomStartThreshold" value="0"/>
|
||||
<property name="pageRerenderThreshold" value="5"/>
|
||||
<!--The count of rendered PDF pages which will be cached.-->
|
||||
<property name="pdfPageCacheSize" value="10"/>
|
||||
<property name="preloadPagesBefore" value="3"/>
|
||||
<property name="preloadPagesAfter" value="5"/>
|
||||
<property name="eagerPageCleanup" value="true"/>
|
||||
<!--Config for new pages-->
|
||||
<property name="pageTemplate" value="xoj/template copyLastPageSettings=true size=595.275591x841.889764 backgroundType=lined backgroundColor=#ffffff "/>
|
||||
<property name="sizeUnit" value=""/>
|
||||
<property name="audioFolder" value=""/>
|
||||
<property name="audioInputDevice" value="-1"/>
|
||||
<property name="audioOutputDevice" value="-1"/>
|
||||
<property name="audioSampleRate" value="44100"/>
|
||||
<property name="audioGain" value="1"/>
|
||||
<property name="defaultSeekTime" value="5"/>
|
||||
<property name="pluginEnabled" value=""/>
|
||||
<property name="pluginDisabled" value=""/>
|
||||
<property name="strokeFilterIgnoreTime" value="150"/>
|
||||
<property name="strokeFilterIgnoreLength" value="1"/>
|
||||
<property name="strokeFilterSuccessiveTime" value="500"/>
|
||||
<property name="strokeFilterEnabled" value="false"/>
|
||||
<property name="doActionOnStrokeFiltered" value="false"/>
|
||||
<property name="trySelectOnStrokeFiltered" value="false"/>
|
||||
<property name="snapRecognizedShapesEnabled" value="false"/>
|
||||
<property name="restoreLineWidthEnabled" value="false"/>
|
||||
<property name="numIgnoredStylusEvents" value="0"/>
|
||||
<property name="inputSystemTPCButton" value="false"/>
|
||||
<property name="inputSystemDrawOutsideWindow" value="true"/>
|
||||
<property name="preferredLocale" value=""/>
|
||||
<property name="stabilizerAveragingMethod" value="0"/>
|
||||
<property name="stabilizerPreprocessor" value="0"/>
|
||||
<property name="stabilizerBuffersize" value="20"/>
|
||||
<property name="stabilizerSigma" value="0.5"/>
|
||||
<property name="stabilizerDeadzoneRadius" value="1.3"/>
|
||||
<property name="stabilizerDrag" value="0.4"/>
|
||||
<property name="stabilizerMass" value="5"/>
|
||||
<property name="stabilizerCuspDetection" value="true"/>
|
||||
<property name="stabilizerFinalizeStroke" value="true"/>
|
||||
<property name="latexSettings.autoCheckDependencies" value="true"/>
|
||||
<property name="latexSettings.defaultText" value="x^2"/>
|
||||
<property name="latexSettings.globalTemplatePath" value="/usr/share/xournalpp/resources/default_template.tex"/>
|
||||
<property name="latexSettings.genCmd" value="pdflatex -halt-on-error -interaction=nonstopmode '{}'"/>
|
||||
<property name="latexSettings.sourceViewThemeId" value=""/>
|
||||
<property name="latexSettings.editorFont" value="Monospace 12"/>
|
||||
<property name="latexSettings.useCustomEditorFont" value="false"/>
|
||||
<property name="latexSettings.editorWordWrap" value="true"/>
|
||||
<property name="latexSettings.sourceViewAutoIndent" value="true"/>
|
||||
<property name="latexSettings.sourceViewSyntaxHighlight" value="true"/>
|
||||
<property name="latexSettings.sourceViewShowLineNumbers" value="false"/>
|
||||
<property name="font" font="Sans" size="12"/>
|
||||
<data name="buttonConfig">
|
||||
<data name="default">
|
||||
<attribute name="color" type="hex" value="ff000000"/>
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
<attribute name="size" type="string" value="thin"/>
|
||||
<attribute name="tool" type="string" value="pen"/>
|
||||
</data>
|
||||
<data name="eraser">
|
||||
<attribute name="eraserMode" type="string" value="none"/>
|
||||
<attribute name="size" type="string" value="none"/>
|
||||
<attribute name="tool" type="string" value="eraser"/>
|
||||
</data>
|
||||
<data name="middle">
|
||||
<attribute name="tool" type="string" value="hand"/>
|
||||
</data>
|
||||
<data name="right">
|
||||
<attribute name="tool" type="string" value="none"/>
|
||||
</data>
|
||||
<data name="stylus">
|
||||
<attribute name="tool" type="string" value="none"/>
|
||||
</data>
|
||||
<data name="stylus2">
|
||||
<attribute name="tool" type="string" value="none"/>
|
||||
</data>
|
||||
<data name="touch">
|
||||
<attribute name="device" type="string" value=""/>
|
||||
<attribute name="disableDrawing" type="boolean" value="false"/>
|
||||
<attribute name="tool" type="string" value="none"/>
|
||||
</data>
|
||||
</data>
|
||||
<data name="deviceClasses">
|
||||
<data name="Wayland Finger Scrolling">
|
||||
<attribute name="deviceClass" type="int" value="1"/>
|
||||
<attribute name="deviceSource" type="int" value="6"/>
|
||||
</data>
|
||||
<data name="Wayland Pointer">
|
||||
<attribute name="deviceClass" type="int" value="1"/>
|
||||
<attribute name="deviceSource" type="int" value="0"/>
|
||||
</data>
|
||||
</data>
|
||||
<data name="tools">
|
||||
<attribute name="current" type="string" value="text"/>
|
||||
<data name="drawArrow">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="drawCoordinateSystem">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="drawDoubleArrow">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="drawEllipse">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="drawRect">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="drawSpline">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="eraser">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
<attribute name="size" type="string" value="MEDIUM"/>
|
||||
<attribute name="type" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="hand">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="highlighter">
|
||||
<attribute name="color" type="hex" value="ffffff00"/>
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
<attribute name="fill" type="int" value="0"/>
|
||||
<attribute name="fillAlpha" type="int" value="128"/>
|
||||
<attribute name="size" type="string" value="MEDIUM"/>
|
||||
</data>
|
||||
<data name="image">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="pen">
|
||||
<attribute name="color" type="hex" value="ff3333cc"/>
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
<attribute name="fill" type="int" value="0"/>
|
||||
<attribute name="fillAlpha" type="int" value="128"/>
|
||||
<attribute name="size" type="string" value="MEDIUM"/>
|
||||
<attribute name="style" type="string" value="plain"/>
|
||||
</data>
|
||||
<data name="playObject">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="selectMultiLayerRect">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="selectMultiLayerRegion">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="selectObject">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="selectPdfTextLinear">
|
||||
<attribute name="color" type="hex" value="ff000000"/>
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="selectPdfTextRect">
|
||||
<attribute name="color" type="hex" value="ff000000"/>
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="selectRect">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="selectRegion">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="showFloatingToolbox">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="text">
|
||||
<attribute name="color" type="hex" value="ff000000"/>
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
<data name="verticalSpace">
|
||||
<attribute name="drawingType" type="string" value="default"/>
|
||||
</data>
|
||||
</data>
|
||||
<data name="touch">
|
||||
<attribute name="cmdDisable" type="string" value=""/>
|
||||
<attribute name="cmdEnable" type="string" value=""/>
|
||||
<attribute name="disableTouch" type="boolean" value="false"/>
|
||||
<attribute name="method" type="string" value="auto"/>
|
||||
<attribute name="timeout" type="int" value="1000"/>
|
||||
</data>
|
||||
</settings>
|
||||
69
core/home/configs.nix
Normal file
69
core/home/configs.nix
Normal file
@@ -0,0 +1,69 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
configDir = ../../config;
|
||||
|
||||
# Explicit list of config items to manage
|
||||
# This replaces dynamic builtins.readDir for clarity and faster evaluation
|
||||
configItems = {
|
||||
# Directories
|
||||
btop = "directory";
|
||||
chromium = "directory";
|
||||
elephant = "directory";
|
||||
"environment.d" = "directory";
|
||||
fastfetch = "directory";
|
||||
fcitx5 = "directory";
|
||||
fontconfig = "directory";
|
||||
ghostty = "directory";
|
||||
git = "directory";
|
||||
hypr = "directory";
|
||||
"hyprland-preview-share-picker" = "directory";
|
||||
imv = "directory";
|
||||
kitty = "directory";
|
||||
lazygit = "directory";
|
||||
nomarchy = "directory";
|
||||
opencode = "directory";
|
||||
systemd = "directory";
|
||||
tmux = "directory";
|
||||
Typora = "directory";
|
||||
uwsm = "directory";
|
||||
wiremix = "directory";
|
||||
xournalpp = "directory";
|
||||
|
||||
# Files
|
||||
"brave-flags.conf" = "regular";
|
||||
"chromium-flags.conf" = "regular";
|
||||
"starship.toml" = "regular";
|
||||
"xdg-terminals.list" = "regular";
|
||||
};
|
||||
|
||||
# Files/directories handled elsewhere or not intended for ~/.config/
|
||||
# - nomarchy.ttf: font file, not a config
|
||||
# - waybar: handled in waybar.nix
|
||||
# - walker: handled in walker.nix
|
||||
# - alacritty: handled in alacritty.nix
|
||||
# - swayosd: handled in swayosd.nix
|
||||
|
||||
# Check for user overrides
|
||||
userConfigDir = config.nomarchy.configOverrides;
|
||||
hasUserOverrides = userConfigDir != null && builtins.pathExists userConfigDir;
|
||||
|
||||
# Generate the xdg.configFile attribute set
|
||||
makeMapping = name: type:
|
||||
let
|
||||
hasUserOverride = hasUserOverrides && builtins.pathExists "${userConfigDir}/${name}";
|
||||
source = if hasUserOverride then "${userConfigDir}/${name}" else "${configDir}/${name}";
|
||||
in {
|
||||
inherit name;
|
||||
value = lib.mkDefault {
|
||||
inherit source;
|
||||
recursive = type == "directory";
|
||||
};
|
||||
};
|
||||
|
||||
configMappings = lib.mapAttrs' (name: type: makeMapping name type) configItems;
|
||||
|
||||
in
|
||||
{
|
||||
xdg.configFile = configMappings;
|
||||
}
|
||||
8
core/home/fonts.nix
Normal file
8
core/home/fonts.nix
Normal file
@@ -0,0 +1,8 @@
|
||||
{ lib, ... }:
|
||||
|
||||
{
|
||||
config = {
|
||||
fonts.fontconfig.enable = lib.mkDefault true;
|
||||
xdg.dataFile."fonts/nomarchy.ttf".source = lib.mkDefault ../../config/nomarchy.ttf;
|
||||
};
|
||||
}
|
||||
104
core/home/options.nix
Normal file
104
core/home/options.nix
Normal file
@@ -0,0 +1,104 @@
|
||||
{ lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
options.nomarchy = {
|
||||
toggles = {
|
||||
suspend = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = "Whether to show suspend in system menu.";
|
||||
};
|
||||
screensaver = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = "Whether the screensaver is enabled.";
|
||||
};
|
||||
idle = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = "Whether the idle lock is enabled.";
|
||||
};
|
||||
nightlight = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Whether the nightlight is enabled.";
|
||||
};
|
||||
waybar = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = "Whether the top bar is enabled.";
|
||||
};
|
||||
skipVsCodeTheme = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Whether to skip theme changes in VSCode.";
|
||||
};
|
||||
};
|
||||
nightlightTemperature = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 4000;
|
||||
description = "Temperature for the nightlight.";
|
||||
};
|
||||
theme = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "nord";
|
||||
description = "System theme name.";
|
||||
};
|
||||
wallpaper = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "";
|
||||
description = "System wallpaper path.";
|
||||
};
|
||||
hyprland = {
|
||||
gaps_in = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 5;
|
||||
description = "Inner gaps for Hyprland.";
|
||||
};
|
||||
gaps_out = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 10;
|
||||
description = "Outer gaps for Hyprland.";
|
||||
};
|
||||
border_size = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 2;
|
||||
description = "Border size for Hyprland.";
|
||||
};
|
||||
};
|
||||
fonts = {
|
||||
monospace = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "JetBrainsMono Nerd Font";
|
||||
description = "System monospace font.";
|
||||
};
|
||||
};
|
||||
iconsTheme = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "Yaru-blue";
|
||||
description = "System icon theme name.";
|
||||
};
|
||||
isLightMode = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Whether the current theme is light mode.";
|
||||
};
|
||||
cursor = {
|
||||
name = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "Bibata-Modern-Ice";
|
||||
description = "Mouse cursor theme name.";
|
||||
};
|
||||
package = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
default = pkgs.bibata-cursors;
|
||||
description = "Package providing the cursor theme.";
|
||||
};
|
||||
};
|
||||
configOverrides = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.path;
|
||||
default = null;
|
||||
description = "Path to a directory containing configuration overrides.";
|
||||
};
|
||||
};
|
||||
}
|
||||
102
core/home/overrides.nix
Normal file
102
core/home/overrides.nix
Normal file
@@ -0,0 +1,102 @@
|
||||
{ config, lib, ... }:
|
||||
|
||||
# File-based override system for Nomarchy
|
||||
#
|
||||
# Users can place config files in ~/.config/nomarchy/overrides/ to completely
|
||||
# replace upstream defaults. Override priority (highest to lowest):
|
||||
# 1. User Nix options
|
||||
# 2. User file overrides (~/.config/nomarchy/overrides/)
|
||||
# 3. Upstream defaults
|
||||
#
|
||||
# Supported override paths:
|
||||
# - hypr/ - Hyprland configs (bindings.conf, input.conf, etc.)
|
||||
# - waybar/ - Waybar config and style
|
||||
# - alacritty/ - Alacritty terminal config
|
||||
# - walker/ - Walker launcher config
|
||||
# - kitty/ - Kitty terminal config
|
||||
# - btop/ - Btop resource monitor config
|
||||
# - apps/ - Other application configs
|
||||
|
||||
let
|
||||
overridesDir = "${config.home.homeDirectory}/.config/nomarchy/overrides";
|
||||
|
||||
# Check if a specific override exists
|
||||
hasOverride = path: builtins.pathExists "${overridesDir}/${path}";
|
||||
|
||||
# Get override source if it exists, otherwise use default
|
||||
getOverrideOrDefault = { path, default }:
|
||||
if hasOverride path
|
||||
then "${overridesDir}/${path}"
|
||||
else default;
|
||||
|
||||
in
|
||||
{
|
||||
options.nomarchy.overrides = {
|
||||
enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = "Whether to enable file-based override loading from ~/.config/nomarchy/overrides/";
|
||||
};
|
||||
|
||||
paths = lib.mkOption {
|
||||
type = lib.types.attrsOf lib.types.path;
|
||||
default = {};
|
||||
description = "Override paths discovered at build time. Populated by the override system.";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf config.nomarchy.overrides.enable {
|
||||
# Create the overrides directory structure if it doesn't exist
|
||||
home.activation.createOverridesDir = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||
mkdir -p "${overridesDir}"
|
||||
mkdir -p "${overridesDir}/hypr"
|
||||
mkdir -p "${overridesDir}/waybar"
|
||||
mkdir -p "${overridesDir}/apps"
|
||||
'';
|
||||
|
||||
# Document the override system
|
||||
xdg.configFile."nomarchy/overrides/README.md".text = lib.mkDefault ''
|
||||
# Nomarchy Configuration Overrides
|
||||
|
||||
Place files in this directory to override upstream Nomarchy defaults.
|
||||
|
||||
## Directory Structure
|
||||
|
||||
```
|
||||
overrides/
|
||||
├── hypr/
|
||||
│ ├── bindings.conf # Keybindings
|
||||
│ ├── input.conf # Input settings
|
||||
│ ├── monitors.conf # Monitor layout
|
||||
│ ├── rules.conf # Window rules
|
||||
│ └── autostart.conf # Startup apps
|
||||
├── waybar/
|
||||
│ ├── config.jsonc # Waybar layout
|
||||
│ └── style.css # Waybar styling
|
||||
├── apps/
|
||||
│ ├── alacritty.toml # Terminal behavior
|
||||
│ └── ...
|
||||
└── README.md # This file
|
||||
```
|
||||
|
||||
## Override Priority
|
||||
|
||||
1. **Nix Options** (highest) - Set in your flake/config
|
||||
2. **File Overrides** - Files in this directory
|
||||
3. **Upstream Defaults** (lowest) - Nomarchy defaults
|
||||
|
||||
## Usage
|
||||
|
||||
1. Copy the file you want to customize from the upstream config
|
||||
2. Place it in the appropriate directory here
|
||||
3. Edit to your preferences
|
||||
4. Run `nixos-rebuild switch` or `home-manager switch`
|
||||
|
||||
## Tips
|
||||
|
||||
- For keybindings, copy `~/.config/hypr/bindings.conf` to `overrides/hypr/`
|
||||
- For Waybar styling, copy `~/.config/waybar/style.css` to `overrides/waybar/`
|
||||
- Changes here persist across Nomarchy updates
|
||||
'';
|
||||
};
|
||||
}
|
||||
22
core/home/security.nix
Normal file
22
core/home/security.nix
Normal file
@@ -0,0 +1,22 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
systemd.user.services.polkit-gnome-authentication-agent-1 = {
|
||||
Unit = {
|
||||
Description = "Polkit GNOME Authentication Agent";
|
||||
After = [ "graphical-session.target" ];
|
||||
PartOf = [ "graphical-session.target" ];
|
||||
};
|
||||
|
||||
Service = {
|
||||
ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
|
||||
Restart = "on-failure";
|
||||
RestartSec = 1;
|
||||
TimeoutStopSec = 10;
|
||||
};
|
||||
|
||||
Install = {
|
||||
WantedBy = [ "graphical-session.target" ];
|
||||
};
|
||||
};
|
||||
}
|
||||
42
core/home/state.nix
Normal file
42
core/home/state.nix
Normal file
@@ -0,0 +1,42 @@
|
||||
{ config, lib, ... }:
|
||||
|
||||
let
|
||||
nomarchyLib = import ../lib { inherit lib; };
|
||||
assetsPath = ../../assets/themes;
|
||||
|
||||
# Read unified state from ~/.config/nomarchy/state.json
|
||||
togglesState = nomarchyLib.readHomeState config.home.homeDirectory;
|
||||
in
|
||||
{
|
||||
config = {
|
||||
nomarchy = {
|
||||
toggles = {
|
||||
suspend = togglesState.suspend or true;
|
||||
screensaver = togglesState.screensaver or true;
|
||||
idle = togglesState.idle or true;
|
||||
nightlight = togglesState.nightlight or false;
|
||||
waybar = togglesState.waybar or true;
|
||||
skipVsCodeTheme = togglesState.skipVsCodeTheme or false;
|
||||
};
|
||||
nightlightTemperature = togglesState.nightlightTemperature or 4000;
|
||||
theme = togglesState.theme or "nord";
|
||||
wallpaper = togglesState.wallpaper or "";
|
||||
hyprland = {
|
||||
gaps_in = togglesState.hyprland.gaps_in or 5;
|
||||
gaps_out = togglesState.hyprland.gaps_out or 10;
|
||||
border_size = togglesState.hyprland.border_size or 2;
|
||||
};
|
||||
fonts.monospace = togglesState.font or "JetBrainsMono Nerd Font";
|
||||
|
||||
# Derived properties from the theme directory
|
||||
isLightMode = nomarchyLib.isThemeLightMode {
|
||||
themeName = togglesState.theme or "nord";
|
||||
inherit assetsPath;
|
||||
};
|
||||
iconsTheme = nomarchyLib.getIconsTheme {
|
||||
themeName = togglesState.theme or "nord";
|
||||
inherit assetsPath;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user