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 478 additions and 51 deletions
|
|
@ -21,6 +21,7 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
services.blueman.enable = true;
|
||||||
networking.networkmanager.enable = true;
|
networking.networkmanager.enable = true;
|
||||||
networking.networkmanager.settings = {
|
networking.networkmanager.settings = {
|
||||||
connection = {
|
connection = {
|
||||||
|
|
@ -43,7 +44,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.tailscale-set-operator = {
|
systemd.services.tailscale-set-operator = {
|
||||||
description = "Set Tailscale operator user";
|
description = "Set Tailscale local preferences";
|
||||||
after = [ "tailscaled.service" ];
|
after = [ "tailscaled.service" ];
|
||||||
requires = [ "tailscaled.service" ];
|
requires = [ "tailscaled.service" ];
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
|
@ -52,6 +53,7 @@
|
||||||
path = [ pkgs.tailscale ];
|
path = [ pkgs.tailscale ];
|
||||||
script = ''
|
script = ''
|
||||||
tailscale set --operator=jet
|
tailscale set --operator=jet
|
||||||
|
tailscale set --exit-node-allow-lan-access=true
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -89,6 +91,7 @@
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "simple";
|
Type = "simple";
|
||||||
User = "jet";
|
User = "jet";
|
||||||
|
Environment = [ "OPENCODE_DB=opencode.db" ];
|
||||||
Restart = "always";
|
Restart = "always";
|
||||||
RestartSec = 5;
|
RestartSec = 5;
|
||||||
TimeoutStartSec = 75;
|
TimeoutStartSec = 75;
|
||||||
|
|
@ -178,7 +181,6 @@
|
||||||
|
|
||||||
# Keep GNOME's shell and file-manager integration while dropping apps replaced elsewhere.
|
# Keep GNOME's shell and file-manager integration while dropping apps replaced elsewhere.
|
||||||
environment.gnome.excludePackages = with pkgs; [
|
environment.gnome.excludePackages = with pkgs; [
|
||||||
baobab
|
|
||||||
decibels
|
decibels
|
||||||
epiphany
|
epiphany
|
||||||
evince
|
evince
|
||||||
|
|
@ -194,7 +196,6 @@
|
||||||
gnome-logs
|
gnome-logs
|
||||||
gnome-maps
|
gnome-maps
|
||||||
gnome-music
|
gnome-music
|
||||||
gnome-system-monitor
|
|
||||||
gnome-text-editor
|
gnome-text-editor
|
||||||
gnome-tour
|
gnome-tour
|
||||||
gnome-weather
|
gnome-weather
|
||||||
|
|
@ -279,8 +280,19 @@
|
||||||
security.polkit.enable = true;
|
security.polkit.enable = true;
|
||||||
programs.gphoto2.enable = true;
|
programs.gphoto2.enable = true;
|
||||||
|
|
||||||
|
services.avahi = {
|
||||||
|
enable = true;
|
||||||
|
nssmdns4 = true;
|
||||||
|
openFirewall = true;
|
||||||
|
};
|
||||||
|
|
||||||
services.printing.enable = true;
|
services.printing.enable = true;
|
||||||
|
|
||||||
|
hardware.sane = {
|
||||||
|
enable = true;
|
||||||
|
extraBackends = [ pkgs.sane-airscan ];
|
||||||
|
};
|
||||||
|
|
||||||
services.pulseaudio.enable = false;
|
services.pulseaudio.enable = false;
|
||||||
security.rtkit.enable = true;
|
security.rtkit.enable = true;
|
||||||
services.pipewire = {
|
services.pipewire = {
|
||||||
|
|
@ -317,6 +329,8 @@
|
||||||
"render"
|
"render"
|
||||||
"docker"
|
"docker"
|
||||||
"camera"
|
"camera"
|
||||||
|
"scanner"
|
||||||
|
"lp"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -395,8 +409,11 @@
|
||||||
docker-compose
|
docker-compose
|
||||||
exfatprogs
|
exfatprogs
|
||||||
flatpak
|
flatpak
|
||||||
wget
|
|
||||||
nh
|
nh
|
||||||
|
sane-airscan
|
||||||
|
sane-backends
|
||||||
|
simple-scan
|
||||||
|
wget
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.steam.enable = true;
|
programs.steam.enable = true;
|
||||||
|
|
|
||||||
66
flake.lock
generated
66
flake.lock
generated
|
|
@ -107,11 +107,11 @@
|
||||||
"zon2nix": "zon2nix"
|
"zon2nix": "zon2nix"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1778705014,
|
"lastModified": 1779573072,
|
||||||
"narHash": "sha256-w6IojREyFkGvqW78BPCcz4sg7oEYx7YzJs6xgAN6LWA=",
|
"narHash": "sha256-DgdXilZcUCEQdOcgt2+Aj77+up2OkdBFg5Q6En5PUB0=",
|
||||||
"owner": "ghostty-org",
|
"owner": "ghostty-org",
|
||||||
"repo": "ghostty",
|
"repo": "ghostty",
|
||||||
"rev": "b23d567cd89874ffe218036536a2aec52851f34f",
|
"rev": "d5d8cef4d3834cc8999eb9344066b0960b033f2d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -127,11 +127,11 @@
|
||||||
"rust-overlay": "rust-overlay"
|
"rust-overlay": "rust-overlay"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1778551011,
|
"lastModified": 1779426614,
|
||||||
"narHash": "sha256-woJV7tJwwzjR0xWDNuGpwMENe/OEMAdSGg+nqWs9tUE=",
|
"narHash": "sha256-Ynp7Vq/3ycx53zzLh/Dfvjibdvt+mVhTM50O5LCbdmw=",
|
||||||
"owner": "helix-editor",
|
"owner": "helix-editor",
|
||||||
"repo": "helix",
|
"repo": "helix",
|
||||||
"rev": "8c41b11607924f7584b77c8a6e6b16439a2f559f",
|
"rev": "a62d374fcb489f83bddd3a775df250ff4b9b34a9",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -190,11 +190,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1778706808,
|
"lastModified": 1779213149,
|
||||||
"narHash": "sha256-ihH1UnI6nYSOkjAg4QsOadg6sp2LxXnWO9urPbo3/hw=",
|
"narHash": "sha256-Cf+p/T4Z3n9Sw0TiR3kQaIwQI+/hfvLJcoTzeq6yS3E=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "9760b31dab3016fc6e422ca241cfeac605fb89c9",
|
"rev": "bd868f769a69d3b6091a1da68a75cb83a181033c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -211,11 +211,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1777594677,
|
"lastModified": 1778805320,
|
||||||
"narHash": "sha256-h90sHwoRJLRvaTpZroTvU2JRHDFj0czUafM8eqLe1RI=",
|
"narHash": "sha256-nGFJ01m2CTBKD4ABtcY4vLhHrRN91LKr/pn41PcU78A=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "899c08a15beae5da51a5cecd6b2b994777a948da",
|
"rev": "9846abe15e7d0d36b8acbd4d05f2b87461744c92",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -231,11 +231,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1778393439,
|
"lastModified": 1778999127,
|
||||||
"narHash": "sha256-mOtQxUjtKaPHLeoLOY/YEDctmud1X9KwJr4kE1MJ3Wc=",
|
"narHash": "sha256-V5GquqJvAqwFTcpN6hxKSQAtwuJFRUEHmyNKbeaTQDg=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nix-index-database",
|
"repo": "nix-index-database",
|
||||||
"rev": "01466c414c7357ae2ce32be4a272a7c69e94ab5f",
|
"rev": "f680e0d3c1dbefe298c423691662e238496890f2",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -246,11 +246,11 @@
|
||||||
},
|
},
|
||||||
"nixos-hardware": {
|
"nixos-hardware": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1778593042,
|
"lastModified": 1779258371,
|
||||||
"narHash": "sha256-xYGrSg6354UK2K4WSQd4+TfyvfqmvFbSY+ZtGQUXK0c=",
|
"narHash": "sha256-j1iZsLy6oFApqR1oiDmHhvkwxXqcNi0aoSJj643LuwU=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixos-hardware",
|
"repo": "nixos-hardware",
|
||||||
"rev": "9bd7c80d43e258aaa607d83b43661df11444d808",
|
"rev": "c97bc4d15bd3473dd095e8e8ba57330ab1943a77",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -322,11 +322,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs_5": {
|
"nixpkgs_5": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1778443072,
|
"lastModified": 1778869304,
|
||||||
"narHash": "sha256-zi7/fsqM/kFdNuED//4WOCUtezGtKKqRNORjMvfwjnA=",
|
"narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "da5ad661ba4e5ef59ba743f0d112cbc30e474f32",
|
"rev": "d233902339c02a9c334e7e593de68855ad26c4cb",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -344,11 +344,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1778708329,
|
"lastModified": 1779295057,
|
||||||
"narHash": "sha256-JOe9qeUXd6PW+3xrDX5Zd9MREpMALiNXResDymwBl0Y=",
|
"narHash": "sha256-f5Fi5arOp96quGbXiqwbIOnePBBYLw/hS0tqjOZMRv0=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "NUR",
|
"repo": "NUR",
|
||||||
"rev": "7ad26749532188766f452f29b2934b9a1974b609",
|
"rev": "9dfb56523219a31511e0d8e59d0270dcdd96bd6f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -362,11 +362,11 @@
|
||||||
"nixpkgs": "nixpkgs_4"
|
"nixpkgs": "nixpkgs_4"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1778708807,
|
"lastModified": 1779580088,
|
||||||
"narHash": "sha256-3bzJZnQtSO5T/H44nXi4lQWfO0InZ5Vg+qbV/vtOjZU=",
|
"narHash": "sha256-oYEtJtyKegw8CO+OistcabbKDmhrRDrVmSbLcXT9mkw=",
|
||||||
"owner": "anomalyco",
|
"owner": "anomalyco",
|
||||||
"repo": "opencode",
|
"repo": "opencode",
|
||||||
"rev": "0d8c9f343735d3b942e5921a83d764529f64089a",
|
"rev": "0b3a1c2fdf8032d7168d1a5103c460c84dfee882",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -449,11 +449,11 @@
|
||||||
"nixpkgs": "nixpkgs_5"
|
"nixpkgs": "nixpkgs_5"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1778598708,
|
"lastModified": 1778940218,
|
||||||
"narHash": "sha256-zEqv3NDSUYY+09VDLupqY96bfN5gkb/OjPbJFp1/vvM=",
|
"narHash": "sha256-jZ9fPgH9s3+R0uU4s9OhyPXOufo1Seh0Y7wzYz0qAr8=",
|
||||||
"owner": "jetpham",
|
"owner": "jetpham",
|
||||||
"repo": "nix-t3code",
|
"repo": "nix-t3code",
|
||||||
"rev": "87ed3952374699b1fb67e7bd7e051d6a48125aff",
|
"rev": "b4b106ccd832a15a6f3d89796538555437796e18",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -470,11 +470,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1778585655,
|
"lastModified": 1779455631,
|
||||||
"narHash": "sha256-yfxy9aTlIgU2Z36H8cJURgYLgjT4qvFeOzoAC/HXcKM=",
|
"narHash": "sha256-svU6Ro4xiMxMA1KJGwQ/nfKwz3yXE/SONCw2Z1qTXHA=",
|
||||||
"owner": "0xc000022070",
|
"owner": "0xc000022070",
|
||||||
"repo": "zen-browser-flake",
|
"repo": "zen-browser-flake",
|
||||||
"rev": "42f41abcef13dc81c85407b57aa1fd1bde46e46c",
|
"rev": "5bcdfcef664bf62831dcb4b947004d9c5fbf7201",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
||||||
|
|
@ -63,8 +63,13 @@
|
||||||
inputs.nur.overlays.default
|
inputs.nur.overlays.default
|
||||||
inputs.ghostty.overlays.default
|
inputs.ghostty.overlays.default
|
||||||
inputs.helix.overlays.default
|
inputs.helix.overlays.default
|
||||||
(final: prev: {
|
(_final: prev: {
|
||||||
opencode = opencode.packages.${prev.stdenv.hostPlatform.system}.opencode;
|
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"
|
"wifiqrcode@glerro.pm.me"
|
||||||
"system-monitor-next@paradoxxx.zero.gmail.com"
|
"system-monitor-next@paradoxxx.zero.gmail.com"
|
||||||
"clipboard-indicator@tudmotu.com"
|
"clipboard-indicator@tudmotu.com"
|
||||||
"emoji-copy@felipeftn"
|
|
||||||
"tailscale@joaophi.github.com"
|
"tailscale@joaophi.github.com"
|
||||||
"auto-move-windows@gnome-shell-extensions.gcampax.github.com"
|
"auto-move-windows@gnome-shell-extensions.gcampax.github.com"
|
||||||
"appindicatorsupport@rgcjonas.gmail.com"
|
|
||||||
"gnome-shell-extension-maximized-by-default@stiggimy.github.com"
|
"gnome-shell-extension-maximized-by-default@stiggimy.github.com"
|
||||||
"no-titlebar-when-maximized@alec.ninja"
|
"no-titlebar-when-maximized@alec.ninja"
|
||||||
|
"evil-bit-toggle@jetpham.github.com"
|
||||||
|
"reduced-motion-toggle@jetpham.github.com"
|
||||||
];
|
];
|
||||||
favorite-apps = favoriteApps;
|
favorite-apps = favoriteApps;
|
||||||
};
|
};
|
||||||
"org/gnome/shell/extensions/auto-move-windows" = {
|
"org/gnome/shell/extensions/auto-move-windows" = {
|
||||||
application-list = autoMoveApplications;
|
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" = {
|
"org/gnome/shell/keybindings" = {
|
||||||
switch-to-application-1 = [ "<Super>1" ];
|
switch-to-application-1 = [ ];
|
||||||
switch-to-application-2 = [ "<Super>2" ];
|
switch-to-application-2 = [ ];
|
||||||
switch-to-application-3 = [ "<Super>3" ];
|
switch-to-application-3 = [ ];
|
||||||
switch-to-application-4 = [ "<Super>4" ];
|
switch-to-application-4 = [ ];
|
||||||
switch-to-application-5 = [ "<Super>5" ];
|
switch-to-application-5 = [ ];
|
||||||
switch-to-application-6 = [ "<Super>6" ];
|
switch-to-application-6 = [ ];
|
||||||
};
|
};
|
||||||
"org/gtk/gtk4/settings/file-chooser" = {
|
"org/gtk/gtk4/settings/file-chooser" = {
|
||||||
show-hidden = true;
|
show-hidden = true;
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ let
|
||||||
nativeBuildInputs = [ pkgs.makeWrapper ];
|
nativeBuildInputs = [ pkgs.makeWrapper ];
|
||||||
postBuild = ''
|
postBuild = ''
|
||||||
wrapProgram "$out/bin/opencode" \
|
wrapProgram "$out/bin/opencode" \
|
||||||
|
--set OPENCODE_DB opencode.db \
|
||||||
--prefix LD_LIBRARY_PATH : "${pkgs.lib.makeLibraryPath [ pkgs.stdenv.cc.cc.lib ]}"
|
--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";
|
home.file.".agents/skills/check-pr".source = "${homeLib.greptileSkills}/check-pr";
|
||||||
|
|
@ -19,6 +19,30 @@
|
||||||
url = "https://mcp.linear.app/mcp";
|
url = "https://mcp.linear.app/mcp";
|
||||||
enabled = true;
|
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";
|
model = "openai/gpt-5.5-fast";
|
||||||
small_model = "openai/gpt-5.4-mini-fast";
|
small_model = "openai/gpt-5.4-mini-fast";
|
||||||
provider.openai.models."gpt-5.5-fast".options = {
|
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; [
|
home.packages = with pkgs; [
|
||||||
bat
|
bat
|
||||||
|
|
@ -78,16 +182,16 @@
|
||||||
xprop
|
xprop
|
||||||
xdg-utils
|
xdg-utils
|
||||||
|
|
||||||
gnomeExtensions.appindicator
|
|
||||||
gnomeExtensions.auto-move-windows
|
gnomeExtensions.auto-move-windows
|
||||||
gnomeExtensions.clipboard-indicator
|
gnomeExtensions.clipboard-indicator
|
||||||
gnomeExtensions.emoji-copy
|
|
||||||
gnomeExtensions.hide-top-bar
|
gnomeExtensions.hide-top-bar
|
||||||
gnomeExtensions.maximized-by-default-actually-reborn
|
gnomeExtensions.maximized-by-default-actually-reborn
|
||||||
gnomeExtensions.no-titlebar-when-maximized
|
gnomeExtensions.no-titlebar-when-maximized
|
||||||
gnomeExtensions.system-monitor-next
|
gnomeExtensions.system-monitor-next
|
||||||
gnomeExtensions.tailscale-qs
|
tailscaleQsGnome49
|
||||||
gnomeExtensions.wifi-qrcode
|
gnomeExtensions.wifi-qrcode
|
||||||
|
evilBitToggleExtension
|
||||||
|
reducedMotionToggleExtension
|
||||||
|
|
||||||
nerd-fonts.commit-mono
|
nerd-fonts.commit-mono
|
||||||
];
|
];
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue