Compare commits
25 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 62af141a22 | |||
| e00cbc6c48 | |||
| 7ccb5e7d7c | |||
| b90871cf05 | |||
| b06bea177f | |||
| bfbcb54043 | |||
| a2bf0335da | |||
| f4e561d285 | |||
| c7df1b37f9 | |||
| cdb36293c7 | |||
| 12102ce4f2 | |||
| 30ec487e88 | |||
| d6f032e52e | |||
| da72bc5483 | |||
| d276c2d788 | |||
| 35d0d6923e | |||
| 5e10d2d37b | |||
| 5a6fb9619b | |||
| bd7097e1c7 | |||
| 3f63ea4934 | |||
| da64410338 | |||
| ec8edc2caa | |||
| 6a09fb4832 | |||
| 0c1907ab23 | |||
| 8f453f4828 |
11 changed files with 481 additions and 54 deletions
|
|
@ -21,6 +21,7 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
services.blueman.enable = true;
|
||||
networking.networkmanager.enable = true;
|
||||
networking.networkmanager.settings = {
|
||||
connection = {
|
||||
|
|
@ -43,7 +44,7 @@
|
|||
};
|
||||
|
||||
systemd.services.tailscale-set-operator = {
|
||||
description = "Set Tailscale operator user";
|
||||
description = "Set Tailscale local preferences";
|
||||
after = [ "tailscaled.service" ];
|
||||
requires = [ "tailscaled.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
|
@ -52,6 +53,7 @@
|
|||
path = [ pkgs.tailscale ];
|
||||
script = ''
|
||||
tailscale set --operator=jet
|
||||
tailscale set --exit-node-allow-lan-access=true
|
||||
'';
|
||||
};
|
||||
|
||||
|
|
@ -89,6 +91,7 @@
|
|||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = "jet";
|
||||
Environment = [ "OPENCODE_DB=opencode.db" ];
|
||||
Restart = "always";
|
||||
RestartSec = 5;
|
||||
TimeoutStartSec = 75;
|
||||
|
|
@ -178,7 +181,6 @@
|
|||
|
||||
# Keep GNOME's shell and file-manager integration while dropping apps replaced elsewhere.
|
||||
environment.gnome.excludePackages = with pkgs; [
|
||||
baobab
|
||||
decibels
|
||||
epiphany
|
||||
evince
|
||||
|
|
@ -194,7 +196,6 @@
|
|||
gnome-logs
|
||||
gnome-maps
|
||||
gnome-music
|
||||
gnome-system-monitor
|
||||
gnome-text-editor
|
||||
gnome-tour
|
||||
gnome-weather
|
||||
|
|
@ -279,8 +280,19 @@
|
|||
security.polkit.enable = true;
|
||||
programs.gphoto2.enable = true;
|
||||
|
||||
services.avahi = {
|
||||
enable = true;
|
||||
nssmdns4 = true;
|
||||
openFirewall = true;
|
||||
};
|
||||
|
||||
services.printing.enable = true;
|
||||
|
||||
hardware.sane = {
|
||||
enable = true;
|
||||
extraBackends = [ pkgs.sane-airscan ];
|
||||
};
|
||||
|
||||
services.pulseaudio.enable = false;
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
|
|
@ -317,6 +329,8 @@
|
|||
"render"
|
||||
"docker"
|
||||
"camera"
|
||||
"scanner"
|
||||
"lp"
|
||||
];
|
||||
};
|
||||
|
||||
|
|
@ -395,8 +409,11 @@
|
|||
docker-compose
|
||||
exfatprogs
|
||||
flatpak
|
||||
wget
|
||||
nh
|
||||
sane-airscan
|
||||
sane-backends
|
||||
simple-scan
|
||||
wget
|
||||
];
|
||||
|
||||
programs.steam.enable = true;
|
||||
|
|
|
|||
72
flake.lock
generated
72
flake.lock
generated
|
|
@ -107,11 +107,11 @@
|
|||
"zon2nix": "zon2nix"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778507667,
|
||||
"narHash": "sha256-OxYiulGeX6PRtVXRlYvAQliI25X3KgZ5IUVkctuVvIU=",
|
||||
"lastModified": 1779573072,
|
||||
"narHash": "sha256-DgdXilZcUCEQdOcgt2+Aj77+up2OkdBFg5Q6En5PUB0=",
|
||||
"owner": "ghostty-org",
|
||||
"repo": "ghostty",
|
||||
"rev": "b0f8276658fbcc75318d2125d40146074a3fc505",
|
||||
"rev": "d5d8cef4d3834cc8999eb9344066b0960b033f2d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -127,11 +127,11 @@
|
|||
"rust-overlay": "rust-overlay"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778477882,
|
||||
"narHash": "sha256-iOp0UB1x7oYFKUWdJotH/9LESqB31jDq4z2RFVbos50=",
|
||||
"lastModified": 1779426614,
|
||||
"narHash": "sha256-Ynp7Vq/3ycx53zzLh/Dfvjibdvt+mVhTM50O5LCbdmw=",
|
||||
"owner": "helix-editor",
|
||||
"repo": "helix",
|
||||
"rev": "a8b359b0f3398f42a71a6aade83bba5ef5aa4945",
|
||||
"rev": "a62d374fcb489f83bddd3a775df250ff4b9b34a9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -190,11 +190,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778503501,
|
||||
"narHash": "sha256-08L/X4/do7nET4rzidJ76eV/1r+mB7DchVpdPypsghc=",
|
||||
"lastModified": 1779213149,
|
||||
"narHash": "sha256-Cf+p/T4Z3n9Sw0TiR3kQaIwQI+/hfvLJcoTzeq6yS3E=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "85ba629c79449badf4338117c27f0ee92b4b9f1a",
|
||||
"rev": "bd868f769a69d3b6091a1da68a75cb83a181033c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -211,11 +211,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777594677,
|
||||
"narHash": "sha256-h90sHwoRJLRvaTpZroTvU2JRHDFj0czUafM8eqLe1RI=",
|
||||
"lastModified": 1778805320,
|
||||
"narHash": "sha256-nGFJ01m2CTBKD4ABtcY4vLhHrRN91LKr/pn41PcU78A=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "899c08a15beae5da51a5cecd6b2b994777a948da",
|
||||
"rev": "9846abe15e7d0d36b8acbd4d05f2b87461744c92",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -231,11 +231,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778393439,
|
||||
"narHash": "sha256-mOtQxUjtKaPHLeoLOY/YEDctmud1X9KwJr4kE1MJ3Wc=",
|
||||
"lastModified": 1778999127,
|
||||
"narHash": "sha256-V5GquqJvAqwFTcpN6hxKSQAtwuJFRUEHmyNKbeaTQDg=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-index-database",
|
||||
"rev": "01466c414c7357ae2ce32be4a272a7c69e94ab5f",
|
||||
"rev": "f680e0d3c1dbefe298c423691662e238496890f2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -246,11 +246,11 @@
|
|||
},
|
||||
"nixos-hardware": {
|
||||
"locked": {
|
||||
"lastModified": 1778143761,
|
||||
"narHash": "sha256-lkesY6x2X2qxlqLM7CT2iM/0rP2JB7fruPN3h8POXmI=",
|
||||
"lastModified": 1779258371,
|
||||
"narHash": "sha256-j1iZsLy6oFApqR1oiDmHhvkwxXqcNi0aoSJj643LuwU=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixos-hardware",
|
||||
"rev": "3bcaa367d4c550d687a17ac792fd5cda214ee871",
|
||||
"rev": "c97bc4d15bd3473dd095e8e8ba57330ab1943a77",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -290,11 +290,11 @@
|
|||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1777954456,
|
||||
"narHash": "sha256-hGdgeU2Nk87RAuZyYjyDjFL6LK7dAZN5RE9+hrDTkDU=",
|
||||
"lastModified": 1778443072,
|
||||
"narHash": "sha256-zi7/fsqM/kFdNuED//4WOCUtezGtKKqRNORjMvfwjnA=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "549bd84d6279f9852cae6225e372cc67fb91a4c1",
|
||||
"rev": "da5ad661ba4e5ef59ba743f0d112cbc30e474f32",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -322,11 +322,11 @@
|
|||
},
|
||||
"nixpkgs_5": {
|
||||
"locked": {
|
||||
"lastModified": 1777954456,
|
||||
"narHash": "sha256-hGdgeU2Nk87RAuZyYjyDjFL6LK7dAZN5RE9+hrDTkDU=",
|
||||
"lastModified": 1778869304,
|
||||
"narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "549bd84d6279f9852cae6225e372cc67fb91a4c1",
|
||||
"rev": "d233902339c02a9c334e7e593de68855ad26c4cb",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -344,11 +344,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778530041,
|
||||
"narHash": "sha256-aIoslL3ptPnlRCmySVQagGR1p0VNb5LwT1US9Md+Mz0=",
|
||||
"lastModified": 1779295057,
|
||||
"narHash": "sha256-f5Fi5arOp96quGbXiqwbIOnePBBYLw/hS0tqjOZMRv0=",
|
||||
"owner": "nix-community",
|
||||
"repo": "NUR",
|
||||
"rev": "e76cf17c296da4c155cac338b4c4685487028cbd",
|
||||
"rev": "9dfb56523219a31511e0d8e59d0270dcdd96bd6f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -362,11 +362,11 @@
|
|||
"nixpkgs": "nixpkgs_4"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778530945,
|
||||
"narHash": "sha256-agN68MSFF3MRgo5/G0dsmRaIc8hnrjyZSHiJGG/92Bw=",
|
||||
"lastModified": 1779580088,
|
||||
"narHash": "sha256-oYEtJtyKegw8CO+OistcabbKDmhrRDrVmSbLcXT9mkw=",
|
||||
"owner": "anomalyco",
|
||||
"repo": "opencode",
|
||||
"rev": "9067218b74874bdffd3a53142c6b2d0ff65bb479",
|
||||
"rev": "0b3a1c2fdf8032d7168d1a5103c460c84dfee882",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -449,11 +449,11 @@
|
|||
"nixpkgs": "nixpkgs_5"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777991278,
|
||||
"narHash": "sha256-tM0JFurV6BwOdmBcGi96th/dzgN9KQbkK7FKmdsM5Zo=",
|
||||
"lastModified": 1778940218,
|
||||
"narHash": "sha256-jZ9fPgH9s3+R0uU4s9OhyPXOufo1Seh0Y7wzYz0qAr8=",
|
||||
"owner": "jetpham",
|
||||
"repo": "nix-t3code",
|
||||
"rev": "47257aeb62d037a0550294ec17698f59c4297444",
|
||||
"rev": "b4b106ccd832a15a6f3d89796538555437796e18",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -470,11 +470,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778394798,
|
||||
"narHash": "sha256-/jR8bModWv0ji305ecMgAB+2eaXLZiYdH+9Z4JIRkuA=",
|
||||
"lastModified": 1779455631,
|
||||
"narHash": "sha256-svU6Ro4xiMxMA1KJGwQ/nfKwz3yXE/SONCw2Z1qTXHA=",
|
||||
"owner": "0xc000022070",
|
||||
"repo": "zen-browser-flake",
|
||||
"rev": "45bc54456044b96492923739bfae633e1a4352e1",
|
||||
"rev": "5bcdfcef664bf62831dcb4b947004d9c5fbf7201",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
|
|||
|
|
@ -63,8 +63,13 @@
|
|||
inputs.nur.overlays.default
|
||||
inputs.ghostty.overlays.default
|
||||
inputs.helix.overlays.default
|
||||
(final: prev: {
|
||||
opencode = opencode.packages.${prev.stdenv.hostPlatform.system}.opencode;
|
||||
(_final: prev: {
|
||||
opencode = opencode.packages.${prev.stdenv.hostPlatform.system}.opencode.overrideAttrs (old: {
|
||||
postPatch = (old.postPatch or "") + ''
|
||||
substituteInPlace package.json \
|
||||
--replace-fail '"packageManager": "bun@1.3.14"' '"packageManager": "bun@1.3.13"'
|
||||
'';
|
||||
});
|
||||
})
|
||||
];
|
||||
}
|
||||
|
|
|
|||
151
gnome-extensions/evil-bit-toggle/extension.js
Normal file
151
gnome-extensions/evil-bit-toggle/extension.js
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
import Gio from 'gi://Gio';
|
||||
import GLib from 'gi://GLib';
|
||||
import GObject from 'gi://GObject';
|
||||
|
||||
import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||
import * as QuickSettings from 'resource:///org/gnome/shell/ui/quickSettings.js';
|
||||
|
||||
const EVIL_BIT_CTL = '@evilBitCtl@';
|
||||
const PKEXEC = '/run/wrappers/bin/pkexec';
|
||||
const STATE_FILE = '/run/evil-bit-toggle/enabled';
|
||||
const ICON_NAME = 'dialog-warning-symbolic';
|
||||
|
||||
const EvilBitToggle = GObject.registerClass(
|
||||
class EvilBitToggle extends QuickSettings.QuickToggle {
|
||||
constructor() {
|
||||
super({
|
||||
title: 'Evil Bit',
|
||||
subtitle: 'RFC 3514: good',
|
||||
iconName: ICON_NAME,
|
||||
toggleMode: true,
|
||||
});
|
||||
|
||||
this._syncing = false;
|
||||
this._pending = false;
|
||||
this._destroyed = false;
|
||||
this._syncFromState();
|
||||
|
||||
this._checkedId = this.connect('notify::checked', () => {
|
||||
if (this._syncing)
|
||||
return;
|
||||
|
||||
this._setEvilBit(this.checked);
|
||||
});
|
||||
}
|
||||
|
||||
_isEnabled() {
|
||||
return GLib.file_test(STATE_FILE, GLib.FileTest.EXISTS);
|
||||
}
|
||||
|
||||
_syncFromState() {
|
||||
this._syncing = true;
|
||||
this.checked = this._isEnabled();
|
||||
this._syncing = false;
|
||||
this._syncSubtitle();
|
||||
}
|
||||
|
||||
_setEvilBit(enabled) {
|
||||
if (this._pending)
|
||||
return;
|
||||
|
||||
this._pending = true;
|
||||
this.reactive = false;
|
||||
this.subtitle = 'Applying...';
|
||||
|
||||
const action = enabled ? 'enable' : 'disable';
|
||||
let proc;
|
||||
|
||||
try {
|
||||
proc = Gio.Subprocess.new(
|
||||
[PKEXEC, EVIL_BIT_CTL, action],
|
||||
Gio.SubprocessFlags.STDOUT_PIPE | Gio.SubprocessFlags.STDERR_PIPE
|
||||
);
|
||||
} catch (error) {
|
||||
this._finishSetEvilBit(error);
|
||||
return;
|
||||
}
|
||||
|
||||
proc.communicate_utf8_async(null, null, (subprocess, result) => {
|
||||
try {
|
||||
const [, , stderr] = subprocess.communicate_utf8_finish(result);
|
||||
|
||||
if (!subprocess.get_successful())
|
||||
throw new Error(stderr.trim() || `evil-bitctl ${action} failed`);
|
||||
|
||||
this._finishSetEvilBit(null);
|
||||
} catch (error) {
|
||||
this._finishSetEvilBit(error);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
_finishSetEvilBit(error) {
|
||||
if (error)
|
||||
console.warn(`Unable to toggle Evil Bit: ${error.message}`);
|
||||
|
||||
if (this._destroyed)
|
||||
return;
|
||||
|
||||
this._pending = false;
|
||||
this.reactive = true;
|
||||
this._syncFromState();
|
||||
}
|
||||
|
||||
_syncSubtitle() {
|
||||
this.subtitle = this.checked ? 'RFC 3514: evil' : 'RFC 3514: good';
|
||||
}
|
||||
|
||||
destroy() {
|
||||
this._destroyed = true;
|
||||
|
||||
if (this._checkedId) {
|
||||
this.disconnect(this._checkedId);
|
||||
this._checkedId = null;
|
||||
}
|
||||
|
||||
super.destroy();
|
||||
}
|
||||
});
|
||||
|
||||
const EvilBitIndicator = GObject.registerClass(
|
||||
class EvilBitIndicator extends QuickSettings.SystemIndicator {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this._indicator = this._addIndicator();
|
||||
this._indicator.icon_name = ICON_NAME;
|
||||
|
||||
this._toggle = new EvilBitToggle();
|
||||
this._indicator.visible = this._toggle.checked;
|
||||
this._checkedId = this._toggle.connect('notify::checked', () => {
|
||||
this._indicator.visible = this._toggle.checked;
|
||||
});
|
||||
|
||||
this.quickSettingsItems.push(this._toggle);
|
||||
}
|
||||
|
||||
destroy() {
|
||||
if (this._checkedId) {
|
||||
this._toggle.disconnect(this._checkedId);
|
||||
this._checkedId = null;
|
||||
}
|
||||
|
||||
this.quickSettingsItems.forEach(item => item.destroy());
|
||||
this._toggle = null;
|
||||
|
||||
super.destroy();
|
||||
}
|
||||
});
|
||||
|
||||
export default class EvilBitToggleExtension extends Extension {
|
||||
enable() {
|
||||
this._indicator = new EvilBitIndicator();
|
||||
Main.panel.statusArea.quickSettings.addExternalIndicator(this._indicator);
|
||||
}
|
||||
|
||||
disable() {
|
||||
this._indicator.destroy();
|
||||
this._indicator = null;
|
||||
}
|
||||
}
|
||||
6
gnome-extensions/evil-bit-toggle/metadata.json
Normal file
6
gnome-extensions/evil-bit-toggle/metadata.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"uuid": "evil-bit-toggle@jetpham.github.com",
|
||||
"name": "Evil Bit Toggle",
|
||||
"description": "Adds a Quick Settings toggle for the RFC 3514 evil bit.",
|
||||
"shell-version": ["49"]
|
||||
}
|
||||
96
gnome-extensions/reduced-motion-toggle/extension.js
Normal file
96
gnome-extensions/reduced-motion-toggle/extension.js
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
import Gio from 'gi://Gio';
|
||||
import GObject from 'gi://GObject';
|
||||
|
||||
import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||
import * as QuickSettings from 'resource:///org/gnome/shell/ui/quickSettings.js';
|
||||
|
||||
const INTERFACE_SCHEMA = 'org.gnome.desktop.interface';
|
||||
const ENABLE_ANIMATIONS_KEY = 'enable-animations';
|
||||
|
||||
const ReducedMotionToggle = GObject.registerClass(
|
||||
class ReducedMotionToggle extends QuickSettings.QuickToggle {
|
||||
constructor() {
|
||||
super({
|
||||
title: 'Reduced Motion',
|
||||
subtitle: 'Prefer fewer animations',
|
||||
iconName: 'preferences-desktop-accessibility-symbolic',
|
||||
toggleMode: true,
|
||||
});
|
||||
|
||||
this._settings = new Gio.Settings({schema_id: INTERFACE_SCHEMA});
|
||||
this._syncing = false;
|
||||
this._changedId = this._settings.connect(
|
||||
`changed::${ENABLE_ANIMATIONS_KEY}`,
|
||||
() => this._sync()
|
||||
);
|
||||
this._checkedId = this.connect('notify::checked', () => {
|
||||
if (!this._syncing)
|
||||
this._settings.set_boolean(ENABLE_ANIMATIONS_KEY, !this.checked);
|
||||
});
|
||||
|
||||
this._sync();
|
||||
}
|
||||
|
||||
_sync() {
|
||||
const reducedMotionEnabled = !this._settings.get_boolean(ENABLE_ANIMATIONS_KEY);
|
||||
|
||||
if (this.checked === reducedMotionEnabled)
|
||||
return;
|
||||
|
||||
this._syncing = true;
|
||||
this.checked = reducedMotionEnabled;
|
||||
this._syncing = false;
|
||||
}
|
||||
|
||||
destroy() {
|
||||
if (this._changedId) {
|
||||
this._settings.disconnect(this._changedId);
|
||||
this._changedId = null;
|
||||
}
|
||||
|
||||
if (this._checkedId) {
|
||||
this.disconnect(this._checkedId);
|
||||
this._checkedId = null;
|
||||
}
|
||||
|
||||
super.destroy();
|
||||
}
|
||||
});
|
||||
|
||||
const ReducedMotionIndicator = GObject.registerClass(
|
||||
class ReducedMotionIndicator extends QuickSettings.SystemIndicator {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this._indicator = this._addIndicator();
|
||||
this._indicator.icon_name = 'preferences-desktop-accessibility-symbolic';
|
||||
|
||||
this._toggle = new ReducedMotionToggle();
|
||||
this._indicator.visible = this._toggle.checked;
|
||||
this._toggle.connect('notify::checked', () => {
|
||||
this._indicator.visible = this._toggle.checked;
|
||||
});
|
||||
|
||||
this.quickSettingsItems.push(this._toggle);
|
||||
}
|
||||
|
||||
destroy() {
|
||||
this.quickSettingsItems.forEach(item => item.destroy());
|
||||
this._toggle = null;
|
||||
|
||||
super.destroy();
|
||||
}
|
||||
});
|
||||
|
||||
export default class ReducedMotionToggleExtension extends Extension {
|
||||
enable() {
|
||||
this._indicator = new ReducedMotionIndicator();
|
||||
Main.panel.statusArea.quickSettings.addExternalIndicator(this._indicator);
|
||||
}
|
||||
|
||||
disable() {
|
||||
this._indicator.destroy();
|
||||
this._indicator = null;
|
||||
}
|
||||
}
|
||||
6
gnome-extensions/reduced-motion-toggle/metadata.json
Normal file
6
gnome-extensions/reduced-motion-toggle/metadata.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"uuid": "reduced-motion-toggle@jetpham.github.com",
|
||||
"name": "Reduced Motion Toggle",
|
||||
"description": "Adds a Quick Settings toggle for GNOME's reduced motion preference.",
|
||||
"shell-version": ["49"]
|
||||
}
|
||||
|
|
@ -176,25 +176,42 @@ in
|
|||
"wifiqrcode@glerro.pm.me"
|
||||
"system-monitor-next@paradoxxx.zero.gmail.com"
|
||||
"clipboard-indicator@tudmotu.com"
|
||||
"emoji-copy@felipeftn"
|
||||
"tailscale@joaophi.github.com"
|
||||
"auto-move-windows@gnome-shell-extensions.gcampax.github.com"
|
||||
"appindicatorsupport@rgcjonas.gmail.com"
|
||||
"gnome-shell-extension-maximized-by-default@stiggimy.github.com"
|
||||
"no-titlebar-when-maximized@alec.ninja"
|
||||
"evil-bit-toggle@jetpham.github.com"
|
||||
"reduced-motion-toggle@jetpham.github.com"
|
||||
];
|
||||
favorite-apps = favoriteApps;
|
||||
};
|
||||
"org/gnome/shell/extensions/auto-move-windows" = {
|
||||
application-list = autoMoveApplications;
|
||||
};
|
||||
"org/gnome/shell/extensions/hidetopbar" = {
|
||||
enable-intellihide = true;
|
||||
show-in-overview = true;
|
||||
};
|
||||
"org/gnome/shell/extensions/system-monitor-next-applet" = {
|
||||
center-display = false;
|
||||
left-display = true;
|
||||
move-clock = false;
|
||||
};
|
||||
"org/gnome/desktop/wm/keybindings" = {
|
||||
switch-to-workspace-1 = [ "<Super>1" ];
|
||||
switch-to-workspace-2 = [ "<Super>2" ];
|
||||
switch-to-workspace-3 = [ "<Super>3" ];
|
||||
switch-to-workspace-4 = [ "<Super>4" ];
|
||||
switch-to-workspace-5 = [ "<Super>5" ];
|
||||
switch-to-workspace-6 = [ "<Super>6" ];
|
||||
};
|
||||
"org/gnome/shell/keybindings" = {
|
||||
switch-to-application-1 = [ "<Super>1" ];
|
||||
switch-to-application-2 = [ "<Super>2" ];
|
||||
switch-to-application-3 = [ "<Super>3" ];
|
||||
switch-to-application-4 = [ "<Super>4" ];
|
||||
switch-to-application-5 = [ "<Super>5" ];
|
||||
switch-to-application-6 = [ "<Super>6" ];
|
||||
switch-to-application-1 = [ ];
|
||||
switch-to-application-2 = [ ];
|
||||
switch-to-application-3 = [ ];
|
||||
switch-to-application-4 = [ ];
|
||||
switch-to-application-5 = [ ];
|
||||
switch-to-application-6 = [ ];
|
||||
};
|
||||
"org/gtk/gtk4/settings/file-chooser" = {
|
||||
show-hidden = true;
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ let
|
|||
nativeBuildInputs = [ pkgs.makeWrapper ];
|
||||
postBuild = ''
|
||||
wrapProgram "$out/bin/opencode" \
|
||||
--set OPENCODE_DB opencode.db \
|
||||
--prefix LD_LIBRARY_PATH : "${pkgs.lib.makeLibraryPath [ pkgs.stdenv.cc.cc.lib ]}"
|
||||
'';
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{ homeLib, ... }:
|
||||
{ homeLib, pkgs, ... }:
|
||||
|
||||
{
|
||||
home.file.".agents/skills/check-pr".source = "${homeLib.greptileSkills}/check-pr";
|
||||
|
|
@ -19,6 +19,30 @@
|
|||
url = "https://mcp.linear.app/mcp";
|
||||
enabled = true;
|
||||
};
|
||||
mcp.heytea = {
|
||||
type = "remote";
|
||||
url = "https://mcp.heytea.dev/mcp";
|
||||
enabled = true;
|
||||
};
|
||||
mcp.chrome-devtools = {
|
||||
type = "local";
|
||||
command = [
|
||||
"${pkgs.nodejs_24}/bin/npx"
|
||||
"-y"
|
||||
"chrome-devtools-mcp@latest"
|
||||
"--executable-path=${pkgs.google-chrome}/bin/google-chrome-stable"
|
||||
"--no-usage-statistics"
|
||||
"--no-performance-crux"
|
||||
];
|
||||
enabled = true;
|
||||
env = {
|
||||
CHROME_DEVTOOLS_MCP_NO_UPDATE_CHECKS = "1";
|
||||
NO_UPDATE_NOTIFIER = "1";
|
||||
NPM_CONFIG_AUDIT = "false";
|
||||
NPM_CONFIG_FUND = "false";
|
||||
NPM_CONFIG_UPDATE_NOTIFIER = "false";
|
||||
};
|
||||
};
|
||||
model = "openai/gpt-5.5-fast";
|
||||
small_model = "openai/gpt-5.4-mini-fast";
|
||||
provider.openai.models."gpt-5.5-fast".options = {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,110 @@
|
|||
...
|
||||
}:
|
||||
|
||||
let
|
||||
tailscaleQsGnome49 = pkgs.gnomeExtensions.tailscale-qs.overrideAttrs (old: {
|
||||
postInstall = (old.postInstall or "") + ''
|
||||
substituteInPlace "$out/share/gnome-shell/extensions/tailscale@joaophi.github.com/metadata.json" \
|
||||
--replace-fail '"48"' '"48", "49"'
|
||||
'';
|
||||
});
|
||||
|
||||
evilBitCtl = pkgs.writeShellApplication {
|
||||
name = "evil-bitctl";
|
||||
runtimeInputs = [
|
||||
pkgs.coreutils
|
||||
pkgs.nftables
|
||||
];
|
||||
text = ''
|
||||
state_dir=/run/evil-bit-toggle
|
||||
state_file="$state_dir/enabled"
|
||||
table=evil_bit
|
||||
chain=output
|
||||
|
||||
usage() {
|
||||
printf 'Usage: evil-bitctl {enable|disable|status}\n' >&2
|
||||
exit 64
|
||||
}
|
||||
|
||||
enable() {
|
||||
nft add table ip "$table" 2>/dev/null || true
|
||||
|
||||
if nft list chain ip "$table" "$chain" >/dev/null 2>&1; then
|
||||
nft flush chain ip "$table" "$chain"
|
||||
else
|
||||
nft add chain ip "$table" "$chain" '{ type route hook output priority mangle; policy accept; }'
|
||||
fi
|
||||
|
||||
nft add rule ip "$table" "$chain" ip frag-off set ip frag-off '|' 0x8000
|
||||
install -d -m 0755 "$state_dir"
|
||||
touch "$state_file"
|
||||
}
|
||||
|
||||
disable() {
|
||||
nft delete table ip "$table" 2>/dev/null || true
|
||||
rm -f "$state_file"
|
||||
rmdir "$state_dir" 2>/dev/null || true
|
||||
}
|
||||
|
||||
status() {
|
||||
if [ -e "$state_file" ] && nft list table ip "$table" >/dev/null 2>&1; then
|
||||
printf 'enabled\n'
|
||||
else
|
||||
printf 'disabled\n'
|
||||
fi
|
||||
}
|
||||
|
||||
case "''${1:-}" in
|
||||
enable)
|
||||
enable
|
||||
;;
|
||||
disable)
|
||||
disable
|
||||
;;
|
||||
status)
|
||||
status
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
'';
|
||||
};
|
||||
|
||||
reducedMotionToggleExtension = pkgs.stdenvNoCC.mkDerivation {
|
||||
pname = "gnome-shell-extension-reduced-motion-toggle";
|
||||
version = "1";
|
||||
src = ../gnome-extensions/reduced-motion-toggle;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p "$out/share/gnome-shell/extensions/reduced-motion-toggle@jetpham.github.com"
|
||||
cp -r . "$out/share/gnome-shell/extensions/reduced-motion-toggle@jetpham.github.com"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
};
|
||||
|
||||
evilBitToggleExtension = pkgs.stdenvNoCC.mkDerivation {
|
||||
pname = "gnome-shell-extension-evil-bit-toggle";
|
||||
version = "1";
|
||||
src = ../gnome-extensions/evil-bit-toggle;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
substituteInPlace extension.js \
|
||||
--replace-fail @evilBitCtl@ ${evilBitCtl}/bin/evil-bitctl
|
||||
|
||||
mkdir -p "$out/share/gnome-shell/extensions/evil-bit-toggle@jetpham.github.com"
|
||||
cp -r . "$out/share/gnome-shell/extensions/evil-bit-toggle@jetpham.github.com"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
};
|
||||
in
|
||||
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
bat
|
||||
|
|
@ -78,16 +182,16 @@
|
|||
xprop
|
||||
xdg-utils
|
||||
|
||||
gnomeExtensions.appindicator
|
||||
gnomeExtensions.auto-move-windows
|
||||
gnomeExtensions.clipboard-indicator
|
||||
gnomeExtensions.emoji-copy
|
||||
gnomeExtensions.hide-top-bar
|
||||
gnomeExtensions.maximized-by-default-actually-reborn
|
||||
gnomeExtensions.no-titlebar-when-maximized
|
||||
gnomeExtensions.system-monitor-next
|
||||
gnomeExtensions.tailscale-qs
|
||||
tailscaleQsGnome49
|
||||
gnomeExtensions.wifi-qrcode
|
||||
evilBitToggleExtension
|
||||
reducedMotionToggleExtension
|
||||
|
||||
nerd-fonts.commit-mono
|
||||
];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue