diff --git a/.forgejo/workflows/update-inputs.yml b/.forgejo/workflows/update-inputs.yml new file mode 100644 index 00000000..c63d914a --- /dev/null +++ b/.forgejo/workflows/update-inputs.yml @@ -0,0 +1,90 @@ +name: update-inputs + +on: + schedule: + - cron: "0 6 * * 2,5" # Tue & Fri + workflow_dispatch: + +jobs: + update-flake-lock: + runs-on: nixos + + env: + BASE_BRANCH: main + BRANCH_PREFIX: flake-lock-update + FJ_URL: https://code.oliverdavies.uk + GIT_AUTHOR_EMAIL: flake-bot@local + GIT_AUTHOR_NAME: flake-bot + GIT_COMMITTER_EMAIL: ${{ env.GIT_AUTHOR_EMAIL }} + GIT_COMMITTER_NAME: ${{ env.GIT_AUTHOR_NAME }} + + steps: + - uses: actions/checkout@v3 + with: { fetch-depth: 0 } + + - name: Update inputs & commit + id: bump + run: | + set -o errexit + set -o nounset + set -o pipefail + + BRANCH="${BRANCH_PREFIX}-${GITHUB_RUN_ID}" + git switch -c "$BRANCH" + + BEFORE=$(git rev-parse HEAD) + + # Nix updates inputs and commits if needed + nix flake update --commit-lock-file + + AFTER=$(git rev-parse HEAD) + if [ "$BEFORE" = "$AFTER" ]; then + echo "changed=false" >> "$GITHUB_OUTPUT" + exit 0 + fi + + # ── Grab commit info ──────────────────────────────────────────────── + # Full message + COMMIT_RAW=$(git log -1 --pretty=%B) + + # First line is the short summary; we keep lines AFTER the first blank + COMMIT_BODY=$(printf '%s\n' "$COMMIT_RAW" \ + | sed '1,/^$/d' \ + | sed 's/^• */* /') # nicer Markdown bullet + + # Title becomes first line of the PR + COMMIT_TITLE=$(printf '%s\n' "$COMMIT_RAW" | head -n1) + + # JSON-escape the body so \n etc. are valid JSON + BODY_JSON=$(printf '%s' "$COMMIT_BODY" | jq -Rs .) + + echo "changed=true" >> "$GITHUB_OUTPUT" + echo "branch=$BRANCH" >> "$GITHUB_OUTPUT" + echo "title=$COMMIT_TITLE" >> "$GITHUB_OUTPUT" + echo "body_json=$BODY_JSON" >> "$GITHUB_OUTPUT" + + git push -u origin "$BRANCH" + + - name: Open pull-request + if: steps.bump.outputs.changed == 'true' + env: + TOKEN: ${{ secrets.FLAKE_UPDATE_PAT }} + BRANCH: ${{ steps.bump.outputs.branch }} + TITLE: ${{ steps.bump.outputs.title }} + BODY_JSON: ${{ steps.bump.outputs.body_json }} + run: | + set -o errexit + set -o nounset + + OWNER="${GITHUB_REPOSITORY%%/*}" + REPO="${GITHUB_REPOSITORY#*/}" + + curl -fSs -X POST "$FJ_URL/api/v1/repos/$OWNER/$REPO/pulls" \ + -H "Authorization: token $TOKEN" \ + --json '{ + "base": "'"$BASE_BRANCH"'", + "body": '"$BODY_JSON"', + "draft": false, + "head": "'"$BRANCH"'", + "title": "'"$TITLE"'" + }' diff --git a/.ignore b/.ignore new file mode 100644 index 00000000..2d2ecd68 --- /dev/null +++ b/.ignore @@ -0,0 +1 @@ +.git/ diff --git a/.mailmap b/.mailmap index 0de08bbe..6350744e 100644 --- a/.mailmap +++ b/.mailmap @@ -4,3 +4,4 @@ Oliver Davies Oliver Davies Oliver Davies Oliver Davies +Oliver Davies diff --git a/README.md b/README.md index 86e4c2cd..7f398fb1 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,3 @@ -| Hostname | Description | Manufacturer | Model | Role | -|------------|-------------------------|--------------|----------------------------------------|---------| -| `PW05CH3L` | My work laptop. | Lenovo | ThinkPad L13 | Laptop | -| `lemp11` | My son's laptop. | System76 | Lemur Pro | Laptop | -| `t480` | My personal laptop. | Lenovo | ThinkPad T480 | Laptop | -| `t490` | My other son's laptop. | Lenovo | ThinkPad T490 | Laptop | -| `nixedo` | My homelab/home server. | TUXEDO | InfinityBook Pro Gen7 (MK1) (Standard) | Server | +# nix-config + +Originally my `dotfiles` repository, this repository contains my NixOS and Home Manager-based configurations for my personal laptop (`t480`) and home server/homelab (`nixedo`). diff --git a/flake.lock b/flake.lock index 774e2506..ce5e0080 100644 --- a/flake.lock +++ b/flake.lock @@ -4,15 +4,17 @@ "inputs": { "darwin": "darwin", "home-manager": "home-manager", - "nixpkgs": "nixpkgs", + "nixpkgs": [ + "nixpkgs" + ], "systems": "systems" }, "locked": { - "lastModified": 1747575206, - "narHash": "sha256-NwmAFuDUO/PFcgaGGr4j3ozG9Pe5hZ/ogitWhY+D81k=", + "lastModified": 1754433428, + "narHash": "sha256-NA/FT2hVhKDftbHSwVnoRTFhes62+7dxZbxj5Gxvghs=", "owner": "ryantm", "repo": "agenix", - "rev": "4835b1dc898959d8547a871ef484930675cb47f1", + "rev": "9edb1787864c4f59ae5074ad498b6272b3ec308d", "type": "github" }, "original": { @@ -21,6 +23,38 @@ "type": "github" } }, + "bop-scripts": { + "flake": false, + "locked": { + "lastModified": 1756931648, + "narHash": "sha256-bfAmJ1IY0B6eNbJvoWkUMQ7Ya4ShrIoVSdQrnE/cn40=", + "owner": "breadonpenguins", + "repo": "scripts", + "rev": "d04bcbe63176e623e1ce8edc4c3840c506a28d96", + "type": "github" + }, + "original": { + "owner": "breadonpenguins", + "repo": "scripts", + "type": "github" + } + }, + "conf-vim": { + "flake": false, + "locked": { + "lastModified": 1507549264, + "narHash": "sha256-AjiTJsoim0BAnyfqk1IQzNsa6jhFM2+A66E7q9sJqz0=", + "owner": "tjdevries", + "repo": "conf.vim", + "rev": "a716df0fd5d7ba558c07dac2e07f05d5eba11afb", + "type": "github" + }, + "original": { + "owner": "tjdevries", + "repo": "conf.vim", + "type": "github" + } + }, "darwin": { "inputs": { "nixpkgs": [ @@ -43,6 +77,27 @@ "type": "github" } }, + "devshell": { + "inputs": { + "nixpkgs": [ + "git-repo-updater", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1741473158, + "narHash": "sha256-kWNaq6wQUbUMlPgw8Y+9/9wP0F8SHkjy24/mN3UAppg=", + "owner": "numtide", + "repo": "devshell", + "rev": "7c9e793ebe66bcba8292989a68c0419b737a22a0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, "disko": { "inputs": { "nixpkgs": [ @@ -50,11 +105,11 @@ ] }, "locked": { - "lastModified": 1748225455, - "narHash": "sha256-AzlJCKaM4wbEyEpV3I/PUq5mHnib2ryEy32c+qfj6xk=", + "lastModified": 1756733629, + "narHash": "sha256-dwWGlDhcO5SMIvMSTB4mjQ5Pvo2vtxvpIknhVnSz2I8=", "owner": "nix-community", "repo": "disko", - "rev": "a894f2811e1ee8d10c50560551e50d6ab3c392ba", + "rev": "a5c4f2ab72e3d1ab43e3e65aa421c6f2bd2e12a1", "type": "github" }, "original": { @@ -63,23 +118,41 @@ "type": "github" } }, - "flake-compat": { + "edit-alternate-vim": { "flake": false, "locked": { - "lastModified": 1733328505, - "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "lastModified": 1635180789, + "narHash": "sha256-mEKnqYAhgrdxPRoKf4S4yYecdFIHGg8bDxpqPuC1+S4=", + "owner": "tjdevries", + "repo": "edit_alternate.vim", + "rev": "ef3019115d9bb7ffd691d2859eda213dd99e0b0a", "type": "github" }, "original": { - "owner": "edolstra", - "repo": "flake-compat", + "owner": "tjdevries", + "repo": "edit_alternate.vim", "type": "github" } }, "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1756770412, + "narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "4524271976b625a4a605beefd893f270620fd751", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { "inputs": { "nixpkgs-lib": [ "nur", @@ -100,6 +173,51 @@ "type": "github" } }, + "flake-utils": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "git-repo-updater": { + "inputs": { + "devshell": "devshell", + "flake-parts": [ + "flake-parts" + ], + "import-tree": [ + "import-tree" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1757018109, + "narHash": "sha256-KfRzBPOOM5cf8mFVeWjV7TGa3p+ul/flxnUdwGW4Sds=", + "ref": "refs/heads/main", + "rev": "63235768261976efe0d9c825e69c44fff8c80e5d", + "revCount": 1, + "type": "git", + "url": "https://code.oliverdavies.uk/opdavies/git-repo-updater" + }, + "original": { + "type": "git", + "url": "https://code.oliverdavies.uk/opdavies/git-repo-updater" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -128,11 +246,11 @@ ] }, "locked": { - "lastModified": 1748668774, - "narHash": "sha256-fYk/vk4ClmvHIgnGv/5GNRiDLtNCwXo9aLq36L/x+P4=", + "lastModified": 1756991914, + "narHash": "sha256-4ve/3ah5H/SpL2m3qmZ9GU+VinQYp2MN1G7GamimTds=", "owner": "nix-community", "repo": "home-manager", - "rev": "60e4624302d956fe94d3f7d96a560d14d70591b9", + "rev": "b08f8737776f10920c330657bee8b95834b7a70f", "type": "github" }, "original": { @@ -142,13 +260,76 @@ "type": "github" } }, + "import-tree": { + "locked": { + "lastModified": 1752730890, + "narHash": "sha256-GES8fapSLGz36MMPRVNkSUWXUTtqvGQNXHjRmRLfJUY=", + "owner": "vic", + "repo": "import-tree", + "rev": "6ebb8cb87987b20264c09296166543fd3761d274", + "type": "github" + }, + "original": { + "owner": "vic", + "repo": "import-tree", + "type": "github" + } + }, + "ixx": { + "inputs": { + "flake-utils": [ + "nixvim", + "nuschtosSearch", + "flake-utils" + ], + "nixpkgs": [ + "nixvim", + "nuschtosSearch", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1754860581, + "narHash": "sha256-EM0IE63OHxXCOpDHXaTyHIOk2cNvMCGPqLt/IdtVxgk=", + "owner": "NuschtOS", + "repo": "ixx", + "rev": "babfe85a876162c4acc9ab6fb4483df88fa1f281", + "type": "github" + }, + "original": { + "owner": "NuschtOS", + "ref": "v0.1.1", + "repo": "ixx", + "type": "github" + } + }, + "nix-index-database": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1756612744, + "narHash": "sha256-/glV6VAq8Va3ghIbmhET3S1dzkbZqicsk5h+FtvwiPE=", + "owner": "nix-community", + "repo": "nix-index-database", + "rev": "3fe768e1f058961095b4a0d7a2ba15dc9736bdc6", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-index-database", + "type": "github" + } + }, "nixos-hardware": { "locked": { - "lastModified": 1748634340, - "narHash": "sha256-pZH4bqbOd8S+si6UcfjHovWDiWKiIGRNRMpmRWaDIms=", + "lastModified": 1756925795, + "narHash": "sha256-kUb5hehaikfUvoJDEc7ngiieX88TwWX/bBRX9Ar6Tac=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "daa628a725ab4948e0e2b795e8fb6f4c3e289a7a", + "rev": "ba6fab29768007e9f2657014a6e134637100c57d", "type": "github" }, "original": { @@ -158,49 +339,44 @@ "type": "github" } }, - "nixos-wsl": { - "inputs": { - "flake-compat": "flake-compat", - "nixpkgs": "nixpkgs_2" - }, + "nixpkgs": { "locked": { - "lastModified": 1746453552, - "narHash": "sha256-r66UGha+7KVHkI7ksrcMjnw/mm9Sg4l5bQlylxHwdGU=", - "owner": "nix-community", - "repo": "NixOS-WSL", - "rev": "be618645aa0adf461f778500172b6896d5ab2d01", + "lastModified": 1756787288, + "narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1", "type": "github" }, "original": { - "owner": "nix-community", - "ref": "main", - "repo": "NixOS-WSL", + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", "type": "github" } }, - "nixpkgs": { + "nixpkgs-lib": { "locked": { - "lastModified": 1745391562, - "narHash": "sha256-sPwcCYuiEopaafePqlG826tBhctuJsLx/mhKKM5Fmjo=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "8a2f738d9d1f1d986b5a4cd2fd2061a7127237d7", + "lastModified": 1754788789, + "narHash": "sha256-x2rJ+Ovzq0sCMpgfgGaaqgBSwY+LST+WbZ6TytnT9Rk=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "a73b9c743612e4244d865a2fdee11865283c04e6", "type": "github" }, "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", + "owner": "nix-community", + "repo": "nixpkgs.lib", "type": "github" } }, "nixpkgs-stable": { "locked": { - "lastModified": 1748421225, - "narHash": "sha256-XXILOc80tvlvEQgYpYFnze8MkQQmp3eQxFbTzb3m/R0=", + "lastModified": 1751274312, + "narHash": "sha256-/bVBlRpECLVzjV19t5KMdMFWSwKLtb5RyXdjz3LJT+g=", "owner": "nixos", "repo": "nixpkgs", - "rev": "78add7b7abb61689e34fc23070a8f55e1d26185b", + "rev": "50ab793786d9de88ee30ec4e4c24fb4236fc2674", "type": "github" }, "original": { @@ -210,66 +386,44 @@ "type": "github" } }, - "nixpkgs_2": { + "nixvim": { + "inputs": { + "flake-parts": [ + "flake-parts" + ], + "nixpkgs": [ + "nixpkgs" + ], + "nuschtosSearch": "nuschtosSearch", + "systems": "systems_3" + }, "locked": { - "lastModified": 1742937945, - "narHash": "sha256-lWc+79eZRyvHp/SqMhHTMzZVhpxkRvthsP1Qx6UCq0E=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "d02d88f8de5b882ccdde0465d8fa2db3aa1169f7", + "lastModified": 1756946299, + "narHash": "sha256-N4PjGA0rittpNZGscKPel+mr/dMcKF73j0yr4rbG3T0=", + "owner": "nix-community", + "repo": "nixvim", + "rev": "63496f00c681b3e200bd17878a43ec68b7139a66", "type": "github" }, "original": { - "owner": "NixOS", - "ref": "nixos-24.11", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1748460289, - "narHash": "sha256-7doLyJBzCllvqX4gszYtmZUToxKvMUrg45EUWaUYmBg=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "96ec055edbe5ee227f28cdbc3f1ddf1df5965102", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_4": { - "locked": { - "lastModified": 1748460289, - "narHash": "sha256-7doLyJBzCllvqX4gszYtmZUToxKvMUrg45EUWaUYmBg=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "96ec055edbe5ee227f28cdbc3f1ddf1df5965102", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", + "owner": "nix-community", + "repo": "nixvim", "type": "github" } }, "nur": { "inputs": { - "flake-parts": "flake-parts", - "nixpkgs": "nixpkgs_4", - "treefmt-nix": "treefmt-nix" + "flake-parts": "flake-parts_2", + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1748713526, - "narHash": "sha256-5qHi1bHmX3YSi7ieSEtkbTPporGWhQ6MDnUafjLJuJM=", + "lastModified": 1757050467, + "narHash": "sha256-Rps0Ga0g/TdY49rR2ZRBsdBYybSzPccEsaI9IvwuE98=", "owner": "nix-community", "repo": "NUR", - "rev": "6a2e7077963107352464a379f76c5f534bdd1f16", + "rev": "985abf0197c75dd64c24691a7e5e0acf308d7f20", "type": "github" }, "original": { @@ -278,16 +432,84 @@ "type": "github" } }, + "nuschtosSearch": { + "inputs": { + "flake-utils": "flake-utils", + "ixx": "ixx", + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1755555503, + "narHash": "sha256-WiOO7GUOsJ4/DoMy2IC5InnqRDSo2U11la48vCCIjjY=", + "owner": "NuschtOS", + "repo": "search", + "rev": "6f3efef888b92e6520f10eae15b86ff537e1d2ea", + "type": "github" + }, + "original": { + "owner": "NuschtOS", + "repo": "search", + "type": "github" + } + }, "root": { "inputs": { "agenix": "agenix", + "bop-scripts": "bop-scripts", + "conf-vim": "conf-vim", "disko": "disko", + "edit-alternate-vim": "edit-alternate-vim", + "flake-parts": "flake-parts", + "git-repo-updater": "git-repo-updater", "home-manager": "home-manager_2", + "import-tree": "import-tree", + "nix-index-database": "nix-index-database", "nixos-hardware": "nixos-hardware", - "nixos-wsl": "nixos-wsl", - "nixpkgs": "nixpkgs_3", + "nixpkgs": "nixpkgs", "nixpkgs-stable": "nixpkgs-stable", - "nur": "nur" + "nixvim": "nixvim", + "nur": "nur", + "rwxrob-dot": "rwxrob-dot", + "standard-vim": "standard-vim", + "vim-heritage": "vim-heritage", + "vim-textobj-xmlattr": "vim-textobj-xmlattr", + "voidrice": "voidrice", + "zet": "zet" + } + }, + "rwxrob-dot": { + "flake": false, + "locked": { + "lastModified": 1751898094, + "narHash": "sha256-kGpHL2l9p/yOtmG+AZvOb0Y5mH1d+Zoh2dd5N3Xjizc=", + "owner": "rwxrob", + "repo": "dot", + "rev": "90794c77061f270078e847af45c376610768c6e2", + "type": "github" + }, + "original": { + "owner": "rwxrob", + "repo": "dot", + "type": "github" + } + }, + "standard-vim": { + "flake": false, + "locked": { + "lastModified": 1539613748, + "narHash": "sha256-9VwkvV1Dv6cE4uDkPp36DozjWJOclDR883yDMYw000E=", + "owner": "tjdevries", + "repo": "standard.vim", + "rev": "b333ef9a9cf6cf66536deda017a542843613fa75", + "type": "github" + }, + "original": { + "owner": "tjdevries", + "repo": "standard.vim", + "type": "github" } }, "systems": { @@ -305,26 +527,99 @@ "type": "github" } }, - "treefmt-nix": { - "inputs": { - "nixpkgs": [ - "nur", - "nixpkgs" - ] - }, + "systems_2": { "locked": { - "lastModified": 1733222881, - "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", - "owner": "numtide", - "repo": "treefmt-nix", - "rev": "49717b5af6f80172275d47a418c9719a31a78b53", + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", "type": "github" }, "original": { - "owner": "numtide", - "repo": "treefmt-nix", + "owner": "nix-systems", + "repo": "default", "type": "github" } + }, + "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "vim-heritage": { + "flake": false, + "locked": { + "lastModified": 1716350150, + "narHash": "sha256-YzqP2+Go8bW3heFyzzcS/91LrMkwjpZ89+ptrjjBKrM=", + "owner": "jessarcher", + "repo": "vim-heritage", + "rev": "574baeb0679681a710adce5110a0d8b2ae1c2637", + "type": "github" + }, + "original": { + "owner": "jessarcher", + "repo": "vim-heritage", + "type": "github" + } + }, + "vim-textobj-xmlattr": { + "flake": false, + "locked": { + "lastModified": 1464940962, + "narHash": "sha256-+91FVP95oh00flINdltqx6qJuijYo56tHIh3J098G2Q=", + "owner": "whatyouhide", + "repo": "vim-textobj-xmlattr", + "rev": "694a297f1d75fd527e87da9769f3c6519a87ebb1", + "type": "github" + }, + "original": { + "owner": "whatyouhide", + "repo": "vim-textobj-xmlattr", + "type": "github" + } + }, + "voidrice": { + "flake": false, + "locked": { + "lastModified": 1744355318, + "narHash": "sha256-9U1Do0w2oT5E6uZxSKoHAzbGbSLQRQlT65KcPGzwhW8=", + "owner": "lukesmithxyz", + "repo": "voidrice", + "rev": "f853f1884a8f0c244765192dc6f5a910a7e2b8e5", + "type": "github" + }, + "original": { + "owner": "lukesmithxyz", + "repo": "voidrice", + "type": "github" + } + }, + "zet": { + "flake": false, + "locked": { + "lastModified": 1758576585, + "narHash": "sha256-hWQE45nFaSN8agYMP8xt5kaUMfBXVj5k9zInZNs/xAI=", + "ref": "refs/heads/main", + "rev": "23505f6c31c7cc903e63621b52b5f92eea1facc5", + "revCount": 35, + "type": "git", + "url": "https://code.oliverdavies.uk/opdavies/zet" + }, + "original": { + "type": "git", + "url": "https://code.oliverdavies.uk/opdavies/zet" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index f45828db..25b1bf65 100644 --- a/flake.nix +++ b/flake.nix @@ -1,156 +1,106 @@ { inputs = { - agenix.url = "github:ryantm/agenix"; + agenix = { + inputs.nixpkgs.follows = "nixpkgs"; + url = "github:ryantm/agenix"; + }; + + bop-scripts = { + flake = false; + url = "github:breadonpenguins/scripts"; + }; + + conf-vim = { + flake = false; + url = "github:tjdevries/conf.vim"; + }; disko = { inputs.nixpkgs.follows = "nixpkgs"; url = "github:nix-community/disko"; }; + edit-alternate-vim = { + flake = false; + url = "github:tjdevries/edit_alternate.vim"; + }; + + flake-parts.url = "github:hercules-ci/flake-parts"; + + git-repo-updater = { + inputs.flake-parts.follows = "flake-parts"; + inputs.import-tree.follows = "import-tree"; + inputs.nixpkgs.follows = "nixpkgs"; + url = "git+https://code.oliverdavies.uk/opdavies/git-repo-updater"; + }; + home-manager = { inputs.nixpkgs.follows = "nixpkgs"; url = "github:nix-community/home-manager/master"; }; + import-tree.url = "github:vic/import-tree"; + + nix-index-database = { + inputs.nixpkgs.follows = "nixpkgs"; + url = "github:nix-community/nix-index-database"; + }; + nixos-hardware.url = "github:NixOS/nixos-hardware/master"; - nixos-wsl.url = "github:nix-community/NixOS-WSL/main"; + nixvim = { + inputs.flake-parts.follows = "flake-parts"; + inputs.nixpkgs.follows = "nixpkgs"; + url = "github:nix-community/nixvim"; + }; nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - nur.url = "github:nix-community/NUR"; + nur = { + inputs.nixpkgs.follows = "nixpkgs"; + url = "github:nix-community/NUR"; + }; + + rwxrob-dot = { + flake = false; + url = "github:rwxrob/dot"; + }; + + standard-vim = { + flake = false; + url = "github:tjdevries/standard.vim"; + }; + + vim-heritage = { + flake = false; + url = "github:jessarcher/vim-heritage"; + }; + + vim-textobj-xmlattr = { + flake = false; + url = "github:whatyouhide/vim-textobj-xmlattr"; + }; + + voidrice = { + flake = false; + url = "github:lukesmithxyz/voidrice"; + }; + + zet = { + flake = false; + url = "git+https://code.oliverdavies.uk/opdavies/zet"; + }; }; outputs = - { - agenix, - disko, - nixos-hardware, - nixpkgs, - self, - ... - }@inputs: - let - inherit (self) outputs; - - system = "x86_64-linux"; - pkgs = import nixpkgs { inherit system; }; - - username = "opdavies"; - - specialArgs = { - inherit - inputs - outputs - self - system - username - ; + inputs@{ flake-parts, ... }: + flake-parts.lib.mkFlake { inherit inputs; } { + flake = { + overlays = import ./overlays { inherit inputs; }; }; - inherit (pkgs) mkShell; - in - { - devShells.${system}.default = pkgs.mkShell { - packages = with pkgs; [ - just - lua-language-server - lua54Packages.luacheck - nixd - ]; - }; - - packages.${system} = { - default = mkShell { buildInputs = with pkgs; [ just ]; }; - }; - - formatter.${system} = pkgs.nixfmt-rfc-style; - - overlays = import ./overlays { inherit inputs; }; - - homeManagerModules.default = import ./modules/home-manager; - - nixosModules.default = import ./modules/nixos; - - nixosConfigurations = { - lemp11 = nixpkgs.lib.nixosSystem { - specialArgs = specialArgs // { - hostname = "lemp11"; - stateVersion = "22.11"; - }; - - modules = [ - agenix.nixosModules.default - nixos-hardware.nixosModules.common-cpu-intel - nixos-hardware.nixosModules.common-gpu-intel - nixos-hardware.nixosModules.common-pc-laptop - nixos-hardware.nixosModules.common-pc-laptop-hdd - nixos-hardware.nixosModules.system76 - - ./hosts/lemp11/configuration.nix - ]; - }; - - nixedo = nixpkgs.lib.nixosSystem { - specialArgs = specialArgs // { - hostname = "nixedo"; - stateVersion = "24.11"; - }; - - modules = [ - agenix.nixosModules.default - - ./hosts/nixedo/configuration.nix - ]; - }; - - t480 = nixpkgs.lib.nixosSystem { - specialArgs = specialArgs // { - hostname = "t480"; - stateVersion = "22.11"; - }; - - modules = [ - agenix.nixosModules.default - nixos-hardware.nixosModules.common-gpu-intel - nixos-hardware.nixosModules.lenovo-thinkpad-t480 - - ./hosts/t480/configuration.nix - ]; - }; - - t490 = nixpkgs.lib.nixosSystem { - specialArgs = specialArgs // { - hostname = "t490"; - stateVersion = "22.11"; - }; - - modules = [ - agenix.nixosModules.default - nixos-hardware.nixosModules.common-gpu-intel - nixos-hardware.nixosModules.lenovo-thinkpad-t490 - - ./hosts/t490/configuration.nix - ]; - }; - - PW05CH3L = nixpkgs.lib.nixosSystem { - inherit system; - - specialArgs = specialArgs // { - hostname = "PW05CH3L"; - stateVersion = "22.11"; - }; - - modules = [ - agenix.nixosModules.default - disko.nixosModules.disko - inputs.nixos-wsl.nixosModules.default - - ./hosts/PW05CH3L/configuration.nix - ]; - }; - }; + imports = [ (inputs.import-tree ./modules) ]; }; } diff --git a/home-manager/opdavies/nixedo.nix b/home-manager/opdavies/nixedo.nix new file mode 100644 index 00000000..902a9bfc --- /dev/null +++ b/home-manager/opdavies/nixedo.nix @@ -0,0 +1,13 @@ +{ pkgs, ... }: + +{ + imports = [ + ./nixedo/email-filters.nix + ]; + + home.packages = with pkgs; [ + import-to-jellyfin + vic + yt-dlp + ]; +} diff --git a/home/opdavies/nixedo/modules/email-filters.nix b/home-manager/opdavies/nixedo/email-filters.nix similarity index 89% rename from home/opdavies/nixedo/modules/email-filters.nix rename to home-manager/opdavies/nixedo/email-filters.nix index 4786c6c5..4cdcb162 100644 --- a/home/opdavies/nixedo/modules/email-filters.nix +++ b/home-manager/opdavies/nixedo/email-filters.nix @@ -12,7 +12,7 @@ in { options.nixedo.${name} = { configFile = lib.mkOption { - default = "${config.home.homeDirectory}/Code/${name}/config.lua"; + default = "${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/${name}/config.lua"; internal = true; }; }; diff --git a/home-manager/opdavies/t480.nix b/home-manager/opdavies/t480.nix new file mode 100644 index 00000000..b4826a3c --- /dev/null +++ b/home-manager/opdavies/t480.nix @@ -0,0 +1,37 @@ +{ config, pkgs, ... }: + +{ + programs = { + zsh.shellAliases = + let + inherit (config.xdg.userDirs) documents; + in + { + "wiki-push" = + "rsync -avzP ${documents}/wiki nixedo.oliverdavies.uk:${documents} --delete --delete-after"; + }; + }; + + home.packages = with pkgs; [ + backup-websites + build-glove80 + count-tags + create-script + get-tags + qrencode + mounter + move-firefox-screenshots + set-background + tag-release + time-until + timer + unmounter + update-all-git-repos + vic + ]; + + xdg.configFile."pam-gnupg".text = '' + 098EE055DAD2B9CB68154C6759DD38292D2273B6 + 1E21B58D69FFEFAD077F152A50FEA938A3413F50 + ''; +} diff --git a/home/common/default.nix b/home/common/default.nix deleted file mode 100644 index 76b2a760..00000000 --- a/home/common/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ outputs, ... }: - -{ - imports = [ - outputs.homeManagerModules.default - ]; -} diff --git a/home/opdavies/PW05CH3L.nix b/home/opdavies/PW05CH3L.nix deleted file mode 100644 index b8ce7248..00000000 --- a/home/opdavies/PW05CH3L.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ config, options, ... }: - -{ - imports = [ ../common ]; - - cli = { - bookmarkthis.enable = true; - direnv.enable = true; - fzf.enable = true; - - git = { - enable = true; - - user.emailAddress = "oliver.davies@tfw.wales"; - }; - - node.enable = true; - notes.enable = true; - ranger.enable = true; - starship.enable = true; - tmux.enable = true; - - tmux-sessionizer = { - enable = true; - - directories = - let - inherit (config.xdg.userDirs) documents extraConfig; - - repos = extraConfig.XDG_REPOS_DIR; - in - options.cli.tmux-sessionizer.directories.default - ++ [ - repos - "${repos}/*" - documents - ]; - }; - - todos.enable = true; - zsh.enable = true; - }; - - coding = { - neovim.enable = true; - phpactor.enable = true; - }; - - xdg.configFile."pam-gnupg".text = '' - C0D940F9A390F286FCAAE8439D501171E39D0A47 - ''; -} diff --git a/home/opdavies/lemp11.nix b/home/opdavies/lemp11.nix deleted file mode 100644 index 925d863d..00000000 --- a/home/opdavies/lemp11.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - imports = [ ../common ]; - - cli.zsh.enable = true; - - desktop.media = { - handbrake.enable = true; - makemkv.enable = true; - mpv.enable = true; - }; -} diff --git a/home/opdavies/nixedo.nix b/home/opdavies/nixedo.nix deleted file mode 100644 index e6c8bebd..00000000 --- a/home/opdavies/nixedo.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ - imports = [ - ../common - - ./nixedo/modules/email-filters.nix - ]; - - cli = { - fzf.enable = true; - starship.enable = true; - zsh.enable = true; - }; -} diff --git a/home/opdavies/t480.nix b/home/opdavies/t480.nix deleted file mode 100644 index d550aa4b..00000000 --- a/home/opdavies/t480.nix +++ /dev/null @@ -1,113 +0,0 @@ -{ config, ... }: - -{ - imports = [ ../common ]; - - cli = { - bluetuith.enable = true; - bookmarkthis.enable = true; - direnv.enable = true; - fzf.enable = true; - - git = { - enable = true; - - user.emailAddress = "oliver@oliverdavies.uk"; - }; - - node.enable = true; - - notes = { - enable = true; - - directory = "${config.xdg.userDirs.documents}/wiki/notes"; - }; - - ranger.enable = true; - sxhkd.enable = true; - starship.enable = true; - tmux.enable = true; - - tmux-sessionizer = { - enable = true; - enableDmenuIntegration = true; - - directories = - let - inherit (config.xdg.userDirs) documents extraConfig; - - repos = extraConfig.XDG_REPOS_DIR; - in - [ - repos - "${repos}/*" - documents - ]; - }; - - todos.enable = true; - zsh.enable = true; - }; - - coding = { - neovim.enable = true; - phpactor.enable = true; - }; - - desktop = { - browsers = { - firefox = { - enable = true; - - homepageUrl = "https://nixedo.oliverdavies.uk"; - }; - - qutebrowser.enable = true; - }; - - flameshot.enable = true; - gtk.enable = true; - - media = { - handbrake.enable = true; - makemkv.enable = true; - mpv.enable = true; - }; - }; - - programs = { - dev-commit = { - enable = true; - - repoPaths = - let - personal = "${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/personal"; - in - [ - "${personal}/email-filters" - "${personal}/nix-config" - "${personal}/oliverdavies.uk-tome" - "${personal}/opentofu-dns" - ]; - - schedule = { - enable = true; - time = "daily"; - }; - }; - - zsh.shellAliases = - let - inherit (config.xdg.userDirs) documents; - in - { - "wiki-push" = - "rsync -avzP ${documents}/wiki nixedo.oliverdavies.uk:${documents} --delete --delete-after"; - }; - }; - - xdg.configFile."pam-gnupg".text = '' - 098EE055DAD2B9CB68154C6759DD38292D2273B6 - 1E21B58D69FFEFAD077F152A50FEA938A3413F50 - ''; -} diff --git a/home/opdavies/t490.nix b/home/opdavies/t490.nix deleted file mode 100644 index 2a89c647..00000000 --- a/home/opdavies/t490.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - imports = [ ../common ]; -} diff --git a/hosts/PW05CH3L/configuration.nix b/hosts/PW05CH3L/configuration.nix deleted file mode 100644 index 45b8f8e1..00000000 --- a/hosts/PW05CH3L/configuration.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ pkgs, ... }: - -{ - imports = [ - ../common - - ../../users/opdavies.nix - ]; - - cli = { - docker.enable = true; - - password-store = { - enable = true; - - extensions = with pkgs.passExtensions; [ - pass-otp - ]; - }; - }; - - wsl = { - enable = true; - defaultUser = "opdavies"; - }; - - home-manager.users.opdavies.home.sessionVariables.WAYLAND_DISPLAY = ""; -} diff --git a/hosts/common/default.nix b/hosts/common/default.nix index 36a5f420..0421aa39 100644 --- a/hosts/common/default.nix +++ b/hosts/common/default.nix @@ -15,8 +15,6 @@ ./users inputs.home-manager.nixosModules.home-manager - - outputs.nixosModules.default ]; nix = { @@ -64,21 +62,13 @@ users."${username}" = import ./home.nix; }; - nixpkgs = { - config = { - allowUnfree = true; + nixpkgs.overlays = [ + inputs.nur.overlays.default - permittedInsecurePackages = [ "electron-27.3.11" ]; - }; - - overlays = [ - inputs.nur.overlays.default - - outputs.overlays.additions - outputs.overlays.modifications - outputs.overlays.stable-packages - ]; - }; + outputs.overlays.additions + outputs.overlays.modifications + outputs.overlays.stable-packages + ]; nix.extraOptions = '' trusted-users = root ${username} diff --git a/hosts/common/home.nix b/hosts/common/home.nix index c2073f9b..1f67d1e1 100644 --- a/hosts/common/home.nix +++ b/hosts/common/home.nix @@ -9,8 +9,6 @@ let pkgs = import inputs.nixpkgs { inherit system; - config.allowUnfree = true; - overlays = [ outputs.overlays.additions outputs.overlays.stable-packages @@ -27,10 +25,6 @@ let ; in { - imports = [ - outputs.homeManagerModules.default - ]; - home.username = "opdavies"; home.homeDirectory = "/home/${config.home.username}"; diff --git a/hosts/common/users/opdavies.nix b/hosts/common/users/opdavies.nix index 556baaca..3842a813 100644 --- a/hosts/common/users/opdavies.nix +++ b/hosts/common/users/opdavies.nix @@ -1,7 +1,7 @@ -{ config, ... }: +{ config, self, ... }: { users.users.opdavies = { }; - home-manager.users.opdavies = import ../../../home/opdavies/${config.networking.hostName}.nix; + home-manager.users.opdavies = import "${self}/home-manager/opdavies/${config.networking.hostName}.nix"; } diff --git a/hosts/lemp11/configuration.nix b/hosts/lemp11/configuration.nix deleted file mode 100644 index 3b3ac5ce..00000000 --- a/hosts/lemp11/configuration.nix +++ /dev/null @@ -1,58 +0,0 @@ -{ pkgs, ... }: - -{ - imports = [ - ../common - ./hardware-configuration.nix - ./programs.nix - ./services.nix - - ../../users/opdavies.nix - ../../users/eric.nix - ]; - - core = { - bluetooth.enable = true; - zram.enable = true; - }; - - desktop.media.makemkv.enable = true; - - nixpad.enable = true; - - # Bootloader. - boot = { - loader = { - systemd-boot = { - enable = true; - configurationLimit = 25; - }; - - efi = { - canTouchEfiVariables = true; - efiSysMountPoint = "/boot/efi"; - }; - }; - }; - - systemd.extraConfig = '' - DefaultTimeoutStopSec=10s - ''; - - networking.networkmanager.enable = true; - - security = { - polkit.enable = true; - rtkit.enable = true; - }; - - users.users.eric.packages = with pkgs; [ - git - vscodium - ]; - - environment.systemPackages = with pkgs; [ - fastfetch - htop - ]; -} diff --git a/hosts/lemp11/hardware-configuration.nix b/hosts/lemp11/hardware-configuration.nix deleted file mode 100644 index 9cb083b7..00000000 --- a/hosts/lemp11/hardware-configuration.nix +++ /dev/null @@ -1,50 +0,0 @@ -# Do not modify this file! It was generated by ‘nixos-generate-config’ -# and may be overwritten by future invocations. Please make changes -# to /etc/nixos/configuration.nix instead. -{ - config, - lib, - modulesPath, - ... -}: - -{ - imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; - - boot.initrd.availableKernelModules = [ - "xhci_pci" - "thunderbolt" - "nvme" - "usb_storage" - "usbhid" - "sd_mod" - "sdhci_pci" - ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = { - device = "/dev/disk/by-uuid/e577c869-18a1-4830-9e00-124fcabdab89"; - fsType = "ext4"; - }; - - fileSystems."/boot/efi" = { - device = "/dev/disk/by-uuid/48FE-D346"; - fsType = "vfat"; - }; - - swapDevices = [ { device = "/dev/disk/by-uuid/2dce327b-f18d-4727-a9a2-e79d2b5161f9"; } ]; - - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking - # (the default) this is the recommended approach. When using systemd-networkd it's - # still possible to use this option, but it's recommended to use it in conjunction - # with explicit per-interface declarations with `networking.interfaces..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp0s13f0u1u2u4.useDHCP = lib.mkDefault true; - # networking.interfaces.wlp0s20f3.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/hosts/lemp11/programs.nix b/hosts/lemp11/programs.nix deleted file mode 100644 index 4da8fd00..00000000 --- a/hosts/lemp11/programs.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ - programs = { - firefox = { - enable = true; - - languagePacks = [ "en-GB" ]; - preferences = { - "intl.accept_languages" = "en-GB, en"; - "intl.regional_prefs.use_os_locales" = true; - }; - }; - }; -} diff --git a/hosts/lemp11/services.nix b/hosts/lemp11/services.nix deleted file mode 100644 index a096651f..00000000 --- a/hosts/lemp11/services.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ - services = { - auto-cpufreq.enable = true; - gvfs.enable = true; - openssh.enable = true; - power-profiles-daemon.enable = false; - thermald.enable = true; - - pipewire = { - enable = true; - - alsa = { - enable = true; - support32Bit = true; - }; - - pulse.enable = true; - }; - - printing.enable = true; - pulseaudio.enable = false; - - xserver = { - enable = true; - - xkb = { - layout = "gb"; - variant = ""; - }; - }; - }; -} diff --git a/hosts/nixedo/configuration.nix b/hosts/nixedo/configuration.nix index c548733f..88d3920c 100644 --- a/hosts/nixedo/configuration.nix +++ b/hosts/nixedo/configuration.nix @@ -2,10 +2,12 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ pkgs, ... }: +{ inputs, pkgs, ... }: { imports = [ + inputs.agenix.nixosModules.default + ../common ./hardware-configuration.nix ./homelab.nix @@ -17,10 +19,6 @@ ../../users/opdavies.nix ]; - core.openssh.enable = true; - cli.podman.enable = true; - desktop.dconf.enable = true; - # TODO: why didn't it work when adding this to jitsi.nix? nixpkgs.config.permittedInsecurePackages = [ "jitsi-meet-1.0.8043" @@ -29,10 +27,7 @@ services.logind.lidSwitchExternalPower = "ignore"; boot.loader = { - efi = { - canTouchEfiVariables = true; - }; - + efi.canTouchEfiVariables = true; systemd-boot.enable = true; }; diff --git a/hosts/nixedo/hardware-configuration.nix b/hosts/nixedo/hardware-configuration.nix index 2164da42..c2508935 100644 --- a/hosts/nixedo/hardware-configuration.nix +++ b/hosts/nixedo/hardware-configuration.nix @@ -1,28 +1,43 @@ # Do not modify this file! It was generated by ‘nixos-generate-config’ # and may be overwritten by future invocations. Please make changes # to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, modulesPath, ... }: +{ + config, + lib, + pkgs, + modulesPath, + ... +}: { - imports = - [ (modulesPath + "/installer/scan/not-detected.nix") - ]; + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; - boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod" ]; + boot.initrd.availableKernelModules = [ + "xhci_pci" + "thunderbolt" + "nvme" + "usb_storage" + "sd_mod" + ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-intel" ]; boot.extraModulePackages = [ ]; - fileSystems."/" = - { device = "/dev/disk/by-uuid/40649879-4ee6-4668-8257-fe81a7773024"; - fsType = "ext4"; - }; + fileSystems."/" = { + device = "/dev/disk/by-uuid/40649879-4ee6-4668-8257-fe81a7773024"; + fsType = "ext4"; + }; - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/24B1-88CB"; - fsType = "vfat"; - options = [ "fmask=0077" "dmask=0077" ]; - }; + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/24B1-88CB"; + fsType = "vfat"; + options = [ + "fmask=0077" + "dmask=0077" + ]; + }; swapDevices = [ ]; diff --git a/hosts/nixedo/homelab.nix b/hosts/nixedo/homelab.nix index f6004863..5e747cc9 100644 --- a/hosts/nixedo/homelab.nix +++ b/hosts/nixedo/homelab.nix @@ -8,18 +8,14 @@ services = { audiobookshelf.enable = true; - forgejo.enable = true; - gitea-actions-runner.enable = true; home-assistant.enable = true; homepage-dashboard.enable = true; - immich.enable = true; - jellyfin.enable = true; jitsi.enable = true; paperless.enable = true; peertube.enable = true; tubearchivist.enable = true; uptime-kuma.enable = true; - vaultwarden.enable = true; + vaultwarden.enable = false; }; }; } diff --git a/hosts/nixedo/modules/acme.nix b/hosts/nixedo/modules/acme.nix index cb6aaac9..33979e9c 100644 --- a/hosts/nixedo/modules/acme.nix +++ b/hosts/nixedo/modules/acme.nix @@ -29,6 +29,7 @@ "home" "jellyfin" "luke" + "mealie" "nixedo" "paperless" "photos" @@ -39,7 +40,6 @@ "rebuilding-symfony" "tailwindcss-demo" "talking-drupal-tailwindcss" - "tome" "tubearchivist" "uptime" "vaultwarden" diff --git a/hosts/nixedo/modules/forgejo.nix b/hosts/nixedo/modules/forgejo.nix index 83eeb2fd..91a228d6 100644 --- a/hosts/nixedo/modules/forgejo.nix +++ b/hosts/nixedo/modules/forgejo.nix @@ -1,61 +1,26 @@ -{ config, lib, ... }: +{ config, ... }: -with lib; - -let - cfg = homelab.services.${service}; - homelab = config.homelab; - service = "forgejo"; -in { - options.homelab.services.${service} = { - enable = mkEnableOption "Enable ${service}"; + services.forgejo = { + enable = true; + stateDir = "/var/www/forgejo"; - url = mkOption { - default = "code.${homelab.domain}"; - type = types.str; - }; + settings = { + server = { + DOMAIN = "code.oliverdavies.uk"; + LANDING_PAGE = "explore"; + ROOT_URL = "https://${config.services.forgejo.settings.server.DOMAIN}"; + SSH_DOMAIN = "ssh.oliverdavies.uk"; + }; - homepage.name = mkOption { - default = "Forgejo"; - type = types.str; - }; + service.DISABLE_REGISTRATION = true; - homepage.description = mkOption { - default = "Beyond coding. We forge."; - type = types.str; - }; - - homepage.icon = mkOption { - default = "forgejo"; - type = types.str; - }; - - homepage.category = mkOption { - default = "Services"; - type = types.str; + ui.DEFAULT_THEME = "forgejo-auto"; }; }; - config = mkIf cfg.enable { - services = { - ${service} = { - enable = true; - stateDir = "/var/www/${service}"; - - settings = { - server = { - DOMAIN = cfg.url; - ROOT_URL = "https://${cfg.url}"; - }; - - service.DISABLE_REGISTRATION = true; - }; - }; - - cloudflared.tunnels.${homelab.cloudflared.tunnelId}.ingress = { - ${cfg.url} = "http://localhost:${toString config.services.${service}.settings.server.HTTP_PORT}"; - }; - }; + services.cloudflared.tunnels.${config.homelab.cloudflared.tunnelId}.ingress = { + "${config.services.forgejo.settings.server.DOMAIN}" = + "http://localhost:${toString config.services.forgejo.settings.server.HTTP_PORT}"; }; } diff --git a/hosts/nixedo/modules/immich.nix b/hosts/nixedo/modules/immich.nix index 51a7a472..24328d1b 100644 --- a/hosts/nixedo/modules/immich.nix +++ b/hosts/nixedo/modules/immich.nix @@ -1,70 +1,25 @@ +{ config, pkgs, ... }: + { - config, - lib, - pkgs, - ... -}: + services.immich = { + enable = true; + group = "media"; + mediaLocation = "/mnt/media/immich"; + }; -with lib; + services.nginx.virtualHosts."photos.oliverdavies.uk" = { + forceSSL = true; + useACMEHost = "oliverdavies.uk"; -let - cfg = homelab.services.${service}; - homelab = config.homelab; - service = "immich"; -in -{ - options.homelab.services.${service} = { - enable = mkEnableOption "Enable ${service}"; - - url = mkOption { - default = "photos.${homelab.domain}"; - type = types.str; - }; - - homepage.name = mkOption { - default = "Immich"; - type = types.str; - }; - - homepage.description = mkOption { - default = "Self-hosted photo and video management solution"; - type = types.str; - }; - - homepage.icon = mkOption { - default = "immich"; - type = types.str; - }; - - homepage.category = mkOption { - default = "Media"; - type = types.str; + locations."/" = { + proxyPass = "http://localhost:${toString config.services.immich.port}"; + proxyWebsockets = true; + recommendedProxySettings = true; }; }; - config = mkIf cfg.enable { - services = { - ${service} = { - enable = true; - group = "media"; - mediaLocation = "/mnt/media/${service}"; - }; - - nginx.virtualHosts."${cfg.url}" = { - forceSSL = true; - useACMEHost = homelab.domain; - - locations."/" = { - proxyPass = "http://localhost:${toString config.services.immich.port}"; - proxyWebsockets = true; - recommendedProxySettings = true; - }; - }; - }; - - environment.systemPackages = with pkgs; [ - immich-cli - immich-go - ]; - }; + environment.systemPackages = with pkgs; [ + immich-cli + immich-go + ]; } diff --git a/hosts/nixedo/modules/jellyfin.nix b/hosts/nixedo/modules/jellyfin.nix index 1d08c62a..430fac28 100644 --- a/hosts/nixedo/modules/jellyfin.nix +++ b/hosts/nixedo/modules/jellyfin.nix @@ -1,65 +1,23 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = homelab.services.${service}; - homelab = config.homelab; - service = "jellyfin"; -in { - options.homelab.services.${service} = { - enable = mkEnableOption "Enable ${service}"; + services.jellyfin = { + enable = true; - url = mkOption { - default = "${service}.${homelab.domain}"; - type = types.str; - }; - - homepage.name = mkOption { - default = "Jellyfin"; - type = types.str; - }; - - homepage.description = mkOption { - default = "The Free Software Media System"; - type = types.str; - }; - - homepage.icon = mkOption { - default = "jellyfin"; - type = types.str; - }; - - homepage.category = mkOption { - default = "Media"; - type = types.str; - }; + configDir = "/mnt/media/jellyfin"; + group = "media"; + openFirewall = true; }; - config = mkIf cfg.enable { - services = { - ${service} = { - enable = true; + services.nginx.virtualHosts."jellyfin.oliverdavies.uk" = { + forceSSL = true; + useACMEHost = "oliverdavies.uk"; - configDir = "/mnt/media/${service}"; - group = "media"; - openFirewall = true; - }; + locations."/" = { + proxyPass = "http://localhost:8096"; + recommendedProxySettings = true; - nginx.virtualHosts."${cfg.url}" = { - forceSSL = true; - useACMEHost = homelab.domain; - - locations."/" = { - proxyPass = "http://localhost:8096"; - recommendedProxySettings = true; - - extraConfig = '' - proxy_buffering off; - ''; - }; - }; + extraConfig = '' + proxy_buffering off; + ''; }; }; } diff --git a/hosts/nixedo/modules/nginx/sites.nix b/hosts/nixedo/modules/nginx/sites.nix index b5841173..3d682ec7 100644 --- a/hosts/nixedo/modules/nginx/sites.nix +++ b/hosts/nixedo/modules/nginx/sites.nix @@ -11,6 +11,8 @@ let { inherit port root url; } // overrides; sites = [ + (mkSite "books" {}) + (mkSite "eric" { rootSuffix = "/public"; @@ -19,11 +21,31 @@ let ''; }) - (mkSite "luke" { - extraConfig = '' - add_header X-Robots-Tag "noindex, nofollow"; - ''; - }) - ]; + (mkSite "examples" {}) + ] + ++ + map + ( + domain: + mkSite domain { + extraConfig = '' + add_header X-Robots-Tag "noindex, nofollow"; + ''; + } + ) + [ + "bootstrap-with-tailwind" + "florida-drupalcamp-tailwind-css" + "luke" + "phpsw-sculpin-demo" + "rebuilding-acquia" + "rebuilding-bartik" + "rebuilding-bristol-js" + "rebuilding-symfony" + "tailwindcss-demo" + "talking-drupal-tailwindcss" + "wp-tailwind" + "zet" + ]; in sites diff --git a/hosts/nixedo/modules/nginx/www.oliverdavies.uk/default.nix b/hosts/nixedo/modules/nginx/www.oliverdavies.uk/default.nix index 1a1171f1..cfae1427 100644 --- a/hosts/nixedo/modules/nginx/www.oliverdavies.uk/default.nix +++ b/hosts/nixedo/modules/nginx/www.oliverdavies.uk/default.nix @@ -13,15 +13,17 @@ let paths = [ "archive" + "automated-testing" "core" "daily/.+" "examples" "homelab" "podcast" + "rss/bb.xml" "rss/daily.xml" "sites/default/files" + "testing" "themes/custom/opdavies" - "tome-test" ]; port = ports.nginx-website-tome; @@ -77,36 +79,11 @@ in globalRedirect = "www.oliverdavies.uk"; useACMEHost = "oliverdavies.uk"; }; - - "tome.oliverdavies.uk" = { - listen = [ - { - addr = "localhost"; - port = tome.port; - } - ]; - - locations."/".tryFiles = "$uri $uri.html $uri/index.html =404"; - - root = tome.root; - - extraConfig = '' - add_header X-Robots-Tag "noindex, nofollow"; - - port_in_redirect off; - - # Remove trailing slashes. - rewrite ^/(.*)/$ /$1 permanent; - ''; - }; }; - cloudflared.tunnels."e1514105-327f-4984-974e-e2fbaca76466" = { - ingress = { - "oliverdavies.uk" = "http://localhost:${toString port}"; - "tome.oliverdavies.uk" = "http://localhost:${toString tome.port}"; - "www.oliverdavies.uk" = "http://localhost:${toString port}"; - }; + cloudflared.tunnels."e1514105-327f-4984-974e-e2fbaca76466".ingress = { + "oliverdavies.uk" = "http://localhost:${toString port}"; + "www.oliverdavies.uk" = "http://localhost:${toString port}"; }; }; } diff --git a/hosts/nixedo/modules/nginx/www.oliverdavies.uk/redirects.nix b/hosts/nixedo/modules/nginx/www.oliverdavies.uk/redirects.nix index 7d546067..56bc82e9 100644 --- a/hosts/nixedo/modules/nginx/www.oliverdavies.uk/redirects.nix +++ b/hosts/nixedo/modules/nginx/www.oliverdavies.uk/redirects.nix @@ -131,6 +131,10 @@ from = "/ansistrano-slides"; to = "/talks/deploying-php-ansible-ansistrano"; } + { + from = "/archive"; + to = "/blog"; + } { from = "/archive/2022-08-28/how-started-programming"; to = "/daily/2022-08-28/how-started-programming"; @@ -2419,6 +2423,10 @@ from = "/d7"; to = "/drupal7"; } + { + from = "/daily"; + to = "/blog"; + } { from = "/dcbristol-cfp"; to = "https://www.papercall.io/drupalcamp-bristol-2019"; diff --git a/hosts/nixedo/modules/paperless.nix b/hosts/nixedo/modules/paperless.nix index 8735b560..ca58fc15 100644 --- a/hosts/nixedo/modules/paperless.nix +++ b/hosts/nixedo/modules/paperless.nix @@ -43,10 +43,7 @@ in enable = true; dataDir = "/mnt/media/${service}"; - - settings = { - PAPERLESS_URL = "https://${cfg.url}"; - }; + domain = "https://${cfg.url}"; }; nginx.virtualHosts."${cfg.url}" = { diff --git a/hosts/nixedo/ports.nix b/hosts/nixedo/ports.nix index 26811b8f..e3ceba08 100644 --- a/hosts/nixedo/ports.nix +++ b/hosts/nixedo/ports.nix @@ -11,6 +11,7 @@ in config.homelab.ports = { homepage-dashboard = 8097; + mealie = 9001; pihole = 8082; tubearchivist = 8099; vaultwarden = 8022; @@ -18,8 +19,10 @@ in nginx-website-sculpin = 8095; nginx-website-tome = 8098; + nginx-books = 9002; nginx-bootstrap-with-tailwind = 8081; nginx-eric = 8084; + nginx-examples = 9003; nginx-florida-drupalcamp-tailwind-css = 8083; nginx-luke = 8094; nginx-phpsw-sculpin-demo = 8085; diff --git a/hosts/nixedo/services/default.nix b/hosts/nixedo/services/default.nix index 344570f9..b5a19f88 100644 --- a/hosts/nixedo/services/default.nix +++ b/hosts/nixedo/services/default.nix @@ -9,6 +9,7 @@ imports = [ ./homepage ./mastodon.nix + ./mealie.nix ./samba.nix ./uptime-kuma.nix ./vaultwarden.nix @@ -16,7 +17,6 @@ services = { postgresqlBackup.enable = true; - tailscale.enable = true; }; services.gitea-actions-runner.instances.default = { @@ -29,6 +29,7 @@ gawk gitMinimal gnused + jq nix nodejs wget diff --git a/hosts/nixedo/services/mealie.nix b/hosts/nixedo/services/mealie.nix new file mode 100644 index 00000000..ceb4516f --- /dev/null +++ b/hosts/nixedo/services/mealie.nix @@ -0,0 +1,27 @@ +{ config, pkgs, ... }: + +let + ports = config.homelab.ports; +in +{ + services.mealie = { + enable = true; + package = pkgs.stable.mealie; + + database.createLocally = true; + + port = ports.mealie; + + settings.ALLOW_SIGNUP = "false"; + }; + + services.nginx.virtualHosts."mealie.oliverdavies.uk" = { + forceSSL = true; + useACMEHost = "oliverdavies.uk"; + + locations."/" = { + proxyPass = "http://localhost:${toString config.services.mealie.port}"; + recommendedProxySettings = true; + }; + }; +} diff --git a/hosts/nixedo/services/vaultwarden.nix b/hosts/nixedo/services/vaultwarden.nix index 1928cdc4..b3f697a3 100644 --- a/hosts/nixedo/services/vaultwarden.nix +++ b/hosts/nixedo/services/vaultwarden.nix @@ -1,7 +1,7 @@ { config, + inputs, lib, - options, ... }: @@ -20,26 +20,6 @@ in default = "${service}.${homelab.domain}"; type = types.str; }; - - homepage.name = mkOption { - default = "Vaultwarden"; - type = types.str; - }; - - homepage.description = mkOption { - default = "Unofficial Bitwarden compatible server written in Rust"; - type = types.str; - }; - - homepage.icon = mkOption { - default = "bitwarden"; - type = types.str; - }; - - homepage.category = mkOption { - default = "Services"; - type = types.str; - }; }; config = mkIf cfg.enable { @@ -47,6 +27,8 @@ in ${service} = { enable = true; + environmentFile = config.age.secrets.vaultwarden-env.path; + config = { DOMAIN = "https://${cfg.url}"; ROCKET_ADDRESS = "127.0.0.1"; @@ -55,11 +37,17 @@ in }; }; - cloudflared.tunnels.${homelab.cloudflared.tunnelId}.ingress = { - "${cfg.url}" = "http://${config.services.${service}.config.ROCKET_ADDRESS}:${ - toString config.services.${service}.config.ROCKET_PORT - }"; + nginx.virtualHosts.${cfg.url} = { + forceSSL = true; + useACMEHost = homelab.domain; + + locations."/" = { + proxyPass = "http://localhost:${toString config.services.${service}.config.ROCKET_PORT}"; + recommendedProxySettings = true; + }; }; }; + + age.secrets.vaultwarden-env.file = "${inputs.self}/secrets/vaultwarden-env.age"; }; } diff --git a/hosts/t480/configuration.nix b/hosts/t480/configuration.nix index 45c98364..6609ecc7 100644 --- a/hosts/t480/configuration.nix +++ b/hosts/t480/configuration.nix @@ -1,73 +1,62 @@ -{ pkgs, ... }: +{ inputs, pkgs, ... }: { imports = [ + inputs.agenix.nixosModules.default + inputs.nixos-hardware.nixosModules.common-gpu-intel + inputs.nixos-hardware.nixosModules.lenovo-thinkpad-t480 + ../common ./hardware-configuration.nix - ./modules + ./cron.nix + ./neomutt.nix + ./newsboat ./secrets.nix - ./services + ./xserver.nix ../../users/opdavies.nix ]; - cli = { - kanata = { - enable = true; - - devices = [ - "/dev/input/by-path/platform-i8042-serio-0-event-kbd" - ]; - }; - - password-store = { - enable = true; - - extensions = with pkgs.passExtensions; [ - pass-audit - pass-otp - pass-update - ]; - }; - }; - - core = { - bluetooth.enable = true; - openssh.enable = true; - pipewire.enable = true; - xbanish.enable = true; - zram.enable = true; - }; - - desktop = { - dconf.enable = true; - dwm.enable = true; - fonts.enable = true; - media.makemkv.enable = true; - st.enable = true; - thunar.enable = true; + services = { + auto-cpufreq.enable = true; + geoclue2.enable = true; + gvfs.enable = true; + power-profiles-daemon.enable = false; + printing.enable = true; + pulseaudio.enable = false; + thermald.enable = true; + throttled.enable = true; + upower.enable = true; }; boot = { loader = { - systemd-boot = { - enable = true; - configurationLimit = 10; - }; + systemd-boot.enable = true; + systemd-boot.configurationLimit = 10; - efi = { - canTouchEfiVariables = true; - }; + efi.canTouchEfiVariables = true; }; }; - systemd.extraConfig = '' - DefaultTimeoutStopSec=10s - ''; + systemd.settings.Manager = { + DefaultTimeoutStopSec = "10s"; + }; networking.networkmanager.enable = true; + networking.hosts = { + "192.168.1.116" = [ + "home.oliverdavies.uk" + "jellyfin.oliverdavies.uk" + "nixedo.oliverdavies.uk" + "paperless.oliverdavies.uk" + "photos.oliverdavies.uk" + "ssh.oliverdavies.uk" + "tubearchivist.oliverdavies.uk" + ]; + }; + security = { polkit.enable = true; rtkit.enable = true; @@ -77,17 +66,13 @@ abook acpi arandr - backup-websites brightnessctl - build-glove80 cdrkit cpufrequtils - displayselect dvdbackup dvdplusrwtools ffmpegthumbnailer - gimp - gscan2pdf + gimp3 gtypist hunspellDicts.en-gb-large isync @@ -103,15 +88,11 @@ peek pmutils shotwell - slack + stable.gscan2pdf sxiv - tailscale ttyper - upload-to-files xcape xsel yt-dlp - zeroad - zoom-us ]; } diff --git a/hosts/t480/modules/cron.nix b/hosts/t480/cron.nix similarity index 100% rename from hosts/t480/modules/cron.nix rename to hosts/t480/cron.nix diff --git a/hosts/t480/modules/default.nix b/hosts/t480/modules/default.nix deleted file mode 100644 index c5f2ed09..00000000 --- a/hosts/t480/modules/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ - imports = [ - ./cron.nix - ./neomutt.nix - ./newsboat - ./ollama.nix - ]; -} diff --git a/hosts/t480/modules/ollama.nix b/hosts/t480/modules/ollama.nix deleted file mode 100644 index 0b37ce99..00000000 --- a/hosts/t480/modules/ollama.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ - services = { - ollama = { - enable = true; - acceleration = "rocm"; - }; - - open-webui.enable = true; - }; -} diff --git a/hosts/t480/modules/neomutt.nix b/hosts/t480/neomutt.nix similarity index 100% rename from hosts/t480/modules/neomutt.nix rename to hosts/t480/neomutt.nix diff --git a/hosts/t480/modules/newsboat/default.nix b/hosts/t480/newsboat/default.nix similarity index 100% rename from hosts/t480/modules/newsboat/default.nix rename to hosts/t480/newsboat/default.nix diff --git a/hosts/t480/modules/newsboat/urls.nix b/hosts/t480/newsboat/urls.nix similarity index 100% rename from hosts/t480/modules/newsboat/urls.nix rename to hosts/t480/newsboat/urls.nix diff --git a/hosts/t480/services/default.nix b/hosts/t480/services/default.nix deleted file mode 100644 index 68c40e89..00000000 --- a/hosts/t480/services/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - imports = [ - ./xserver.nix - ]; - - services = { - auto-cpufreq.enable = true; - gvfs.enable = true; - power-profiles-daemon.enable = false; - printing.enable = true; - pulseaudio.enable = false; - tailscale.enable = true; - throttled.enable = true; - thermald.enable = true; - upower.enable = true; - }; -} diff --git a/hosts/t480/services/xserver.nix b/hosts/t480/services/xserver.nix deleted file mode 100644 index db23bd82..00000000 --- a/hosts/t480/services/xserver.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - services.xserver = { - enable = true; - - displayManager.sessionCommands = '' - setbg & - ''; - - displayManager.startx.enable = true; - - xkb = { - layout = "gb"; - variant = ""; - }; - }; - - services.displayManager.ly.enable = true; -} diff --git a/hosts/t490/services/xserver.nix b/hosts/t480/xserver.nix similarity index 72% rename from hosts/t490/services/xserver.nix rename to hosts/t480/xserver.nix index 4120a2cf..ab1cfb91 100644 --- a/hosts/t490/services/xserver.nix +++ b/hosts/t480/xserver.nix @@ -2,6 +2,8 @@ services.xserver = { enable = true; + displayManager.startx.enable = true; + xkb = { layout = "gb"; variant = ""; diff --git a/hosts/t490/configuration.nix b/hosts/t490/configuration.nix deleted file mode 100644 index 0a8ff092..00000000 --- a/hosts/t490/configuration.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ - imports = [ - ../common - - ./hardware-configuration.nix - ./hardware.nix - ./services - - ../../users/luke.nix - ../../users/opdavies.nix - ]; - - core = { - bluetooth.enable = true; - zram.enable = true; - }; - - desktop.dconf.enable = true; - - nixpad.enable = true; - - boot = { - loader = { - systemd-boot = { - enable = true; - configurationLimit = 10; - }; - - efi = { - canTouchEfiVariables = true; - }; - }; - }; - - systemd.extraConfig = '' - DefaultTimeoutStopSec=10s - ''; - - networking.networkmanager.enable = true; -} diff --git a/hosts/t490/hardware-configuration.nix b/hosts/t490/hardware-configuration.nix deleted file mode 100644 index 944633ab..00000000 --- a/hosts/t490/hardware-configuration.nix +++ /dev/null @@ -1,54 +0,0 @@ -# Do not modify this file! It was generated by ‘nixos-generate-config’ -# and may be overwritten by future invocations. Please make changes -# to /etc/nixos/configuration.nix instead. -{ - config, - lib, - pkgs, - modulesPath, - ... -}: - -{ - imports = [ - (modulesPath + "/installer/scan/not-detected.nix") - ]; - - boot.initrd.availableKernelModules = [ - "xhci_pci" - "nvme" - "usb_storage" - "sd_mod" - "rtsx_pci_sdmmc" - ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = { - device = "/dev/disk/by-uuid/001febe7-57e8-4c9a-bbaf-52c3d8305b63"; - fsType = "ext4"; - }; - - fileSystems."/boot" = { - device = "/dev/disk/by-uuid/5F0A-3374"; - fsType = "vfat"; - options = [ - "fmask=0077" - "dmask=0077" - ]; - }; - - swapDevices = [ ]; - - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking - # (the default) this is the recommended approach. When using systemd-networkd it's - # still possible to use this option, but it's recommended to use it in conjunction - # with explicit per-interface declarations with `networking.interfaces..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp0s31f6.useDHCP = lib.mkDefault true; - # networking.interfaces.wlp0s20f3.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/hosts/t490/hardware.nix b/hosts/t490/hardware.nix deleted file mode 100644 index 3798ca48..00000000 --- a/hosts/t490/hardware.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - hardware = { - bluetooth.enable = true; - }; -} diff --git a/hosts/t490/services/cron.nix b/hosts/t490/services/cron.nix deleted file mode 100644 index a8872af2..00000000 --- a/hosts/t490/services/cron.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ pkgs, ... }: - -{ - services.cron = { - enable = true; - - systemCronJobs = [ - "0 8,20 * * * opdavies ${pkgs.isync}/bin/mbsync -a" - ]; - }; -} diff --git a/hosts/t490/services/default.nix b/hosts/t490/services/default.nix deleted file mode 100644 index ce7ea823..00000000 --- a/hosts/t490/services/default.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ - imports = [ - ./cron.nix - ./interception-tools.nix - ./sound.nix - ./udev.nix - ./xserver.nix - ]; - - services = { - auto-cpufreq.enable = true; - - avahi = { - enable = true; - nssmdns4 = true; - openFirewall = true; - }; - - blueman.enable = true; - - gvfs.enable = true; - openssh.enable = true; - power-profiles-daemon.enable = false; - printing.enable = true; - pulseaudio.enable = false; - throttled.enable = true; - thermald.enable = true; - upower.enable = true; - }; -} diff --git a/hosts/t490/services/interception-tools.nix b/hosts/t490/services/interception-tools.nix deleted file mode 100644 index 96e43b85..00000000 --- a/hosts/t490/services/interception-tools.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ pkgs, ... }: - -{ - # Make Caps lock work as an Escape key on press and Ctrl on hold. - services.interception-tools = - let - dfkConfig = pkgs.writeText "dual-function-keys.yaml" '' - MAPPINGS: - - KEY: KEY_CAPSLOCK - TAP: KEY_ESC - HOLD: KEY_LEFTCTRL - ''; - in - { - enable = true; - plugins = pkgs.lib.mkForce [ pkgs.interception-tools-plugins.dual-function-keys ]; - udevmonConfig = '' - - JOB: "${pkgs.interception-tools}/bin/intercept -g $DEVNODE | ${pkgs.interception-tools-plugins.dual-function-keys}/bin/dual-function-keys -c ${dfkConfig} | ${pkgs.interception-tools}/bin/uinput -d $DEVNODE" - DEVICE: - NAME: "AT Translated Set 2 keyboard" - EVENTS: - EV_KEY: [[KEY_CAPSLOCK, KEY_ESC, KEY_LEFTCTRL]] - ''; - }; -} diff --git a/hosts/t490/services/redshift.nix b/hosts/t490/services/redshift.nix deleted file mode 100644 index f7e3bc71..00000000 --- a/hosts/t490/services/redshift.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.redshift; -in -{ - options.redshift.enable = mkEnableOption "Enable redshift"; - - config = mkIf cfg.enable { - location = { - latitude = 51.48; - longitude = -3.17; - }; - - services.redshift = { - enable = true; - - brightness = { - day = "1"; - night = "1"; - }; - - temperature = { - day = 5500; - night = 3700; - }; - }; - }; -} diff --git a/hosts/t490/services/sound.nix b/hosts/t490/services/sound.nix deleted file mode 100644 index 03ff2376..00000000 --- a/hosts/t490/services/sound.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ - services.pipewire = { - enable = true; - - alsa = { - enable = true; - support32Bit = true; - }; - - pulse.enable = true; - }; -} diff --git a/hosts/t490/services/udev.nix b/hosts/t490/services/udev.nix deleted file mode 100644 index 732ca1d6..00000000 --- a/hosts/t490/services/udev.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - services.udev = { - enable = true; - - extraRules = '' - KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0660", GROUP="users", TAG+="uaccess", TAG+="udev-acl" - ''; - }; -} diff --git a/justfile b/justfile index a5e93ac4..660bf9dc 100644 --- a/justfile +++ b/justfile @@ -13,8 +13,7 @@ check: nix flake check clean: - nix store optimise --verbose - nix store gc --verbose + nh clean all collect-garbage: nix-collect-garbage -d @@ -30,7 +29,7 @@ test *args: @just _nixos test {{ args }} update: - nix flake update + nix flake update --commit-lock-file _nixos command *args: - sudo nixos-rebuild {{ command }} --flake . {{ args }} + nh os {{ command }} . {{ args }} diff --git a/hosts/nixedo/modules/nginx/ports.nix b/modules/.keep similarity index 100% rename from hosts/nixedo/modules/nginx/ports.nix rename to modules/.keep diff --git a/modules/nixos/core/avahi.nix b/modules/avahi.nix similarity index 76% rename from modules/nixos/core/avahi.nix rename to modules/avahi.nix index 471b7ca6..1d5b631e 100644 --- a/modules/nixos/core/avahi.nix +++ b/modules/avahi.nix @@ -1,5 +1,5 @@ { - services.avahi = { + flake.modules.nixos.pc.services.avahi = { enable = true; nssmdns4 = true; openFirewall = true; diff --git a/modules/bluetooth.nix b/modules/bluetooth.nix new file mode 100644 index 00000000..7fff70cc --- /dev/null +++ b/modules/bluetooth.nix @@ -0,0 +1,7 @@ +{ + flake.modules.nixos.desktop = { + hardware.bluetooth.enable = true; + + services.blueman.enable = true; + }; +} diff --git a/modules/bluetuith.nix b/modules/bluetuith.nix new file mode 100644 index 00000000..a3ff23db --- /dev/null +++ b/modules/bluetuith.nix @@ -0,0 +1,29 @@ +{ + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + pkgs.bluetuith + ]; + + xdg.configFile."bluetuith/bluetuith.conf" = { + text = '' + { + adapter: "" + adapter-states: "" + connect-bdaddr: "" + gsm-apn: "" + gsm-number: "" + + keybindings: { + NavigateDown: j + NavigateUp: k + } + + receive-dir: "" + theme: {} + } + ''; + }; + }; +} diff --git a/modules/bookmarkthis.nix b/modules/bookmarkthis.nix new file mode 100644 index 00000000..96c7a4eb --- /dev/null +++ b/modules/bookmarkthis.nix @@ -0,0 +1,57 @@ +{ lib, ... }: + +{ + flake.modules.homeManager.gui = + { config, pkgs, ... }: + { + options.programs.bookmarkthis.snippetsFile = lib.mkOption { + default = "${config.xdg.dataHome}/snippets.txt"; + type = lib.types.str; + }; + + config = { + home = { + packages = [ + (pkgs.writeShellApplication { + name = "bookmarkthis"; + + text = '' + message() { + if command -v ${lib.getExe pkgs.libnotify} > /dev/null; then + ${lib.getExe pkgs.libnotify} "$1" "$2" + else + echo "$2" + fi + } + + main() { + bookmark="$(xclip -o)" + file="$SNIPPETS_FILE" + + if grep -q "^$bookmark$" "$file"; then + message "Oops." "Already bookmarked." >&2 + + exit 2 + fi + + echo "$bookmark" >> "$file" + + message "Bookmark added!" "$bookmark is now saved to the file." + } + + main + ''; + }) + ]; + + sessionVariables = { + SNIPPETS_FILE = config.programs.bookmarkthis.snippetsFile; + }; + }; + + programs.zsh.zsh-abbr.abbreviations = lib.optionalAttrs (config.programs.zsh.enable) { + "sn" = "${config.home.sessionVariables.EDITOR} $SNIPPETS_FILE"; + }; + }; + }; +} diff --git a/modules/browsers/chromium.nix b/modules/browsers/chromium.nix new file mode 100644 index 00000000..3a8e7c87 --- /dev/null +++ b/modules/browsers/chromium.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.gui.programs.chromium.enable = true; +} diff --git a/modules/browsers/librewolf/enable.nix b/modules/browsers/librewolf/enable.nix new file mode 100644 index 00000000..3a77d1f0 --- /dev/null +++ b/modules/browsers/librewolf/enable.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.gui.programs.librewolf.enable = true; +} diff --git a/modules/browsers/librewolf/extensions.nix b/modules/browsers/librewolf/extensions.nix new file mode 100644 index 00000000..43e0fb83 --- /dev/null +++ b/modules/browsers/librewolf/extensions.nix @@ -0,0 +1,17 @@ +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + programs.librewolf.profiles.default.extensions.packages = + with pkgs.nur.repos.rycee.firefox-addons; [ + awesome-rss + bitwarden + darkreader + tree-style-tab + ublock-origin + videospeed + vimium + web-developer + ]; + }; +} diff --git a/modules/browsers/librewolf/languages.nix b/modules/browsers/librewolf/languages.nix new file mode 100644 index 00000000..b84500e2 --- /dev/null +++ b/modules/browsers/librewolf/languages.nix @@ -0,0 +1,5 @@ +{ + flake.modules.homeManager.gui.programs.librewolf.languagePacks = [ + "en-GB" + ]; +} diff --git a/modules/browsers/librewolf/policies.nix b/modules/browsers/librewolf/policies.nix new file mode 100644 index 00000000..4b613855 --- /dev/null +++ b/modules/browsers/librewolf/policies.nix @@ -0,0 +1,70 @@ +{ + flake.modules.homeManager.gui.programs.librewolf.policies = { + CaptivePortal = false; + DisableFirefoxAccounts = true; + DisableFirefoxStudies = true; + DisablePocket = true; + DisableTelemetry = true; + + EnableTrackingProtection = { + Cryptomining = true; + Fingerprinting = true; + Value = true; + }; + + ExtensionSettings = { + "jid1-ZAdIEUB7XOzOJw@jetpack" = { + install_url = "https://addons.mozilla.org/firefox/downloads/latest/duckduckgo-for-firefox/latest.xpi"; + installation_mode = "force_installed"; + }; + + "uBlock0@raymondhill.net" = { + install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"; + installation_mode = "force_installed"; + }; + }; + + FirefoxHome = { + Highlights = false; + Pocket = false; + Search = true; + Snippets = false; + SponsoredPocket = false; + SponsoredTopSites = false; + TopSites = true; + }; + + FirefoxSuggest = { + ImproveSuggest = false; + SponsoredSuggestions = false; + WebSuggestions = false; + }; + + NoDefaultBookmarks = true; + OfferToSaveLogins = false; + OfferToSaveLoginsDefault = false; + PasswordManagerEnabled = false; + + Preferences = { + "browser.newtabpage.enabled" = false; + "cookiebanners.service.mode" = 2; # Block cookie banners + "cookiebanners.service.mode.privateBrowsing" = 2; # Block cookie banners in private browsing + "privacy.donottrackheader.enabled" = true; + "privacy.fingerprintingProtection" = true; + "privacy.resistFingerprinting" = true; + "privacy.trackingprotection.emailtracking.enabled" = true; + "privacy.trackingprotection.enabled" = true; + "privacy.trackingprotection.fingerprinting.enabled" = true; + "privacy.trackingprotection.socialtracking.enabled" = true; + }; + + HardwareAcceleration = true; + TranslateEnabled = true; + + UserMessaging = { + ExtensionRecommendations = false; + UrlbarInterventions = false; + SkipOnboarding = true; + }; + }; +} diff --git a/modules/browsers/librewolf/search-engines.nix b/modules/browsers/librewolf/search-engines.nix new file mode 100644 index 00000000..e943506b --- /dev/null +++ b/modules/browsers/librewolf/search-engines.nix @@ -0,0 +1,19 @@ +{ + flake.modules.homeManager.gui.programs.librewolf.profiles.default.search.engines = { + # TODO: Drupal.org users. + # TODO: Mastodon. + # TODO: GitHub. + # TODO: Forgejo. + drupal_projects = { + name = "Drupal.org projects"; + urls = [ { template = "https://www.drupal.org/project/{searchTerms}"; } ]; + definedAliases = [ "@dp" ]; + }; + + nixvim = { + name = "Nixvim options search"; + urls = [ { template = "https://nix-community.github.io/nixvim/search/?query={searchTerms}"; } ]; + definedAliases = [ "@nxv" ]; + }; + }; +} diff --git a/modules/browsers/librewolf/search.nix b/modules/browsers/librewolf/search.nix new file mode 100644 index 00000000..35dbbba8 --- /dev/null +++ b/modules/browsers/librewolf/search.nix @@ -0,0 +1,7 @@ +{ + flake.modules.homeManager.gui.programs.librewolf.profiles.default.search = { + default = "ddg"; + force = true; + privateDefault = "ddg"; + }; +} diff --git a/modules/browsers/librewolf/settings.nix b/modules/browsers/librewolf/settings.nix new file mode 100644 index 00000000..a7c5f5dd --- /dev/null +++ b/modules/browsers/librewolf/settings.nix @@ -0,0 +1,10 @@ +{ + flake.modules.homeManager.gui.programs.librewolf.profiles.default.settings = { + "browser.search.isUS" = false; + "browser.search.region" = "GB"; + "distribution.searchplugins.defaultLocale" = "en-GB"; + "general.useragent.locale" = "en-GB"; + "intl.accept_languages" = "en-GB, en"; + "intl.regional_prefs.use_os_locales" = true; + }; +} diff --git a/modules/browsers/qutebrowser/enable.nix b/modules/browsers/qutebrowser/enable.nix new file mode 100644 index 00000000..a36898ab --- /dev/null +++ b/modules/browsers/qutebrowser/enable.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.gui.programs.qutebrowser.enable = true; +} diff --git a/modules/browsers/qutebrowser/key-bindings.nix b/modules/browsers/qutebrowser/key-bindings.nix new file mode 100644 index 00000000..f825b833 --- /dev/null +++ b/modules/browsers/qutebrowser/key-bindings.nix @@ -0,0 +1,14 @@ +{ lib, ... }: + +{ + flake.modules.homeManager.gui.programs.qutebrowser.keyBindings.normal = { + "" = "config-cycle colors.webpage.darkmode.enabled true false"; + + "xb" = "config-cycle statusbar.show always never"; + "xt" = "config-cycle tabs.show always never"; + "xx" = lib.mkMerge [ + "config-cycle statusbar.show always never" + "config-cycle tabs.show always never" + ]; + }; +} diff --git a/modules/browsers/qutebrowser/package.nix b/modules/browsers/qutebrowser/package.nix new file mode 100644 index 00000000..c44f8487 --- /dev/null +++ b/modules/browsers/qutebrowser/package.nix @@ -0,0 +1,7 @@ +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + programs.qutebrowser.package = pkgs.stable.qutebrowser; + }; +} diff --git a/modules/browsers/qutebrowser/search-engines.nix b/modules/browsers/qutebrowser/search-engines.nix new file mode 100644 index 00000000..5b15d91b --- /dev/null +++ b/modules/browsers/qutebrowser/search-engines.nix @@ -0,0 +1,10 @@ +{ + flake.modules.homeManager.gui.programs.qutebrowser.searchEngines = { + dp = "https://www.drupal.org/project/{}"; + du = "https://www.drupal.org/u/{}"; + gh = "https://github.com/search?q={}"; + mn = "https://mynixos.com/search?q={}"; + nx = "https://search.nixos.org/packages?query={}"; + yt = "https://www.youtube.com/results?search_query={}"; + }; +} diff --git a/modules/browsers/qutebrowser/settings.nix b/modules/browsers/qutebrowser/settings.nix new file mode 100644 index 00000000..f14cf732 --- /dev/null +++ b/modules/browsers/qutebrowser/settings.nix @@ -0,0 +1,5 @@ +{ + flake.modules.homeManager.gui.programs.qutebrowser.settings = { + colors.webpage.darkmode.enabled = true; + }; +} diff --git a/modules/calculator.nix b/modules/calculator.nix new file mode 100644 index 00000000..41ebe819 --- /dev/null +++ b/modules/calculator.nix @@ -0,0 +1,7 @@ +{ + flake.modules.nixos.pc = + { pkgs, ... }: + { + environment.systemPackages = [ pkgs.bc ]; + }; +} diff --git a/modules/dconf.nix b/modules/dconf.nix new file mode 100644 index 00000000..2c56e04c --- /dev/null +++ b/modules/dconf.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixos.pc.programs.dconf.enable = true; +} diff --git a/modules/desktop.nix b/modules/desktop.nix new file mode 100644 index 00000000..eaad4d8e --- /dev/null +++ b/modules/desktop.nix @@ -0,0 +1,7 @@ +{ config, ... }: + +{ + flake.modules.nixos.desktop.imports = with config.flake.modules.nixos; [ + pc + ]; +} diff --git a/modules/dev-commit.nix b/modules/dev-commit.nix new file mode 100644 index 00000000..352a01ad --- /dev/null +++ b/modules/dev-commit.nix @@ -0,0 +1,83 @@ +{ lib, ... }: + +{ + flake.modules.homeManager.base = + { config, pkgs, ... }: + { + options.programs.dev-commit = { + enable = lib.mkEnableOption "Enable dev-commit"; + + repoPaths = lib.mkOption { + default = [ ]; + description = "A list of repository paths that should have automated commits"; + type = lib.types.listOf lib.types.path; + }; + + schedule = lib.mkOption { + type = lib.types.submodule { + options = { + enable = lib.mkEnableOption "Enable automated dev commits with systemd"; + + time = lib.mkOption { + description = '' + Time expression for when to run the dev-commit job. + + This uses systemd's `OnCalendar` syntax. + + Examples: + - "hourly" (once every hour) + - "daily" (once per day at midnight) + - "Mon *-*-01 12:00:00" (every Monday at 12:00 PM) + + See `man systemd.time` for full syntax reference. + ''; + default = "hourly"; + type = lib.types.str; + }; + }; + }; + + default = { + enable = false; + time = "hourly"; + }; + }; + }; + + config = + let + cfg = config.programs.dev-commit; + repoPaths = lib.concatStringsSep ":" cfg.repoPaths; + in + { + home = lib.mkIf cfg.enable { + packages = [ pkgs.dev-commit ]; + + sessionVariables.DEV_COMMIT_PATHS = repoPaths; + }; + + systemd.user = lib.mkIf cfg.schedule.enable { + services.dev-commit = { + Service = { + Environment = [ "DEV_COMMIT_PATHS=${repoPaths}" ]; + ExecStart = "${lib.getExe pkgs.dev-commit}"; + Type = "oneshot"; + }; + + Unit.Description = "dev-commit"; + }; + + timers.dev-commit = { + Install.WantedBy = [ "timers.target" ]; + + Timer = { + OnCalendar = cfg.schedule.time; + Unit = "dev-commit.service"; + }; + + Unit.Description = "Runs automated development commits in select project repositories."; + }; + }; + }; + }; +} diff --git a/modules/direnv/enable.nix b/modules/direnv/enable.nix new file mode 100644 index 00000000..b758eec4 --- /dev/null +++ b/modules/direnv/enable.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.base.programs.direnv.enable = true; +} diff --git a/modules/direnv/nix-direnv.nix b/modules/direnv/nix-direnv.nix new file mode 100644 index 00000000..f3848d08 --- /dev/null +++ b/modules/direnv/nix-direnv.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.base.programs.direnv.nix-direnv.enable = true; +} diff --git a/modules/direnv/silent.nix b/modules/direnv/silent.nix new file mode 100644 index 00000000..302a19b1 --- /dev/null +++ b/modules/direnv/silent.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.base.programs.direnv.silent = true; +} diff --git a/modules/direnv/zsh.nix b/modules/direnv/zsh.nix new file mode 100644 index 00000000..ca306692 --- /dev/null +++ b/modules/direnv/zsh.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.base.programs.direnv.enableZshIntegration = true; +} diff --git a/modules/displayselect/default.nix b/modules/displayselect/default.nix new file mode 100644 index 00000000..b8b6ad92 --- /dev/null +++ b/modules/displayselect/default.nix @@ -0,0 +1,35 @@ +{ inputs, ... }: + +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + home.packages = [ + (pkgs.stdenv.mkDerivation { + pname = "displayselect"; + version = "unstable"; + + src = inputs.voidrice; + + dontUnpack = true; + + buildInputs = with pkgs; [ + bash + xorg.xrandr + ]; + + prePatch = '' + cp "$src/.local/bin/displayselect" displayselect + ''; + + patches = [ ./scaling.patch ]; + + installPhase = '' + mkdir -p $out/bin + cp displayselect $out/bin + chmod +x $out/bin/displayselect + ''; + }) + ]; + }; +} diff --git a/pkgs/displayselect/scaling.patch b/modules/displayselect/scaling.patch similarity index 100% rename from pkgs/displayselect/scaling.patch rename to modules/displayselect/scaling.patch diff --git a/modules/dmenu-sys.nix b/modules/dmenu-sys.nix new file mode 100644 index 00000000..2ccab6e7 --- /dev/null +++ b/modules/dmenu-sys.nix @@ -0,0 +1,26 @@ +{ inputs, ... }: + +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + home.packages = [ + (pkgs.stdenv.mkDerivation rec { + pname = "dmenu_sys"; + version = "unstable"; + + src = inputs.bop-scripts; + + dontUnpack = true; + + buildInputs = with pkgs; [ dmenu ]; + + installPhase = '' + mkdir -p $out/bin + cp $src/${pname} $out/bin + chmod +x $out/bin/${pname} + ''; + }) + ]; + }; +} diff --git a/modules/dmenu-timer.nix b/modules/dmenu-timer.nix new file mode 100644 index 00000000..7a829d27 --- /dev/null +++ b/modules/dmenu-timer.nix @@ -0,0 +1,26 @@ +{ inputs, ... }: + +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + home.packages = [ + (pkgs.stdenv.mkDerivation rec { + pname = "dmenu_timer"; + version = "unstable"; + + src = inputs.bop-scripts; + + dontUnpack = true; + + buildInputs = with pkgs; [ dmenu ]; + + installPhase = '' + mkdir -p $out/bin + cp $src/${pname} $out/bin + chmod +x $out/bin/${pname} + ''; + }) + ]; + }; +} diff --git a/modules/docker.nix b/modules/docker.nix new file mode 100644 index 00000000..e909e693 --- /dev/null +++ b/modules/docker.nix @@ -0,0 +1,24 @@ +{ config, lib, ... }: + +{ + flake.modules.nixos.pc = args: { + options.docker.enable = lib.mkEnableOption "Enable Docker"; + + config = lib.mkIf args.config.docker.enable { + virtualisation = { + oci-containers.backend = "docker"; + + docker = { + enable = true; + + autoPrune = { + enable = true; + dates = "weekly"; + }; + }; + }; + + users.users.${config.flake.meta.owner.username}.extraGroups = [ "docker" ]; + }; + }; +} diff --git a/modules/dwm/config.nix b/modules/dwm/config.nix new file mode 100644 index 00000000..99fd7d0e --- /dev/null +++ b/modules/dwm/config.nix @@ -0,0 +1,11 @@ +{ + flake.modules.homeManager.gui = + { config, ... }: + { + home = { + file."${config.home.sessionVariables.XINITRC}".source = ./xinitrc; + + sessionVariables.XINITRC = "${config.xdg.configHome}/X11/xinitrc"; + }; + }; +} diff --git a/modules/dwm/dmenu-center-noop.patch b/modules/dwm/dmenu-center-noop.patch new file mode 100644 index 00000000..9773ce73 --- /dev/null +++ b/modules/dwm/dmenu-center-noop.patch @@ -0,0 +1,14 @@ +diff --git a/dmenu.c b/dmenu.c + +index fd49549..e9e2648 100644 +--- a/dmenu.c ++++ b/dmenu.c +@@ -757,6 +757,8 @@ main(int argc, char *argv[]) + colors[SchemeSel][ColFg] = argv[++i]; + else if (!strcmp(argv[i], "-w")) /* embedding window id */ + embed = argv[++i]; ++ else if (!strcmp(argv[i], "-c")) ++ continue; + else + usage(); + diff --git a/modules/dwm/packages.nix b/modules/dwm/packages.nix new file mode 100644 index 00000000..0bc07182 --- /dev/null +++ b/modules/dwm/packages.nix @@ -0,0 +1,21 @@ +{ + flake.modules.nixos.pc = + { pkgs, ... }: + { + environment.systemPackages = with pkgs; [ + (dmenu.override { + patches = [ + ./dmenu-center-noop.patch + ]; + }) + + dmenu-bluetooth + dunst + networkmanager_dmenu + poweralertd + slock + xdotool + xwallpaper + ]; + }; +} diff --git a/modules/nixos/desktop/dwm/xinitrc b/modules/dwm/xinitrc similarity index 82% rename from modules/nixos/desktop/dwm/xinitrc rename to modules/dwm/xinitrc index 5f8cc351..ba020660 100644 --- a/modules/nixos/desktop/dwm/xinitrc +++ b/modules/dwm/xinitrc @@ -1,7 +1,8 @@ systemctl --user import-environment DISPLAY poweralertd -s & -setbg & -systemctl --user start dwm-status & +set-background & +dwmblocks & +gammastep & sxhkd & diff --git a/modules/firmware.nix b/modules/firmware.nix new file mode 100644 index 00000000..cad66d99 --- /dev/null +++ b/modules/firmware.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixos.desktop.services.fwupd.enable = true; +} diff --git a/modules/flameshot/enable.nix b/modules/flameshot/enable.nix new file mode 100644 index 00000000..721b375e --- /dev/null +++ b/modules/flameshot/enable.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.gui.services.flameshot.enable = true; +} diff --git a/modules/flameshot/settings.nix b/modules/flameshot/settings.nix new file mode 100644 index 00000000..86629d57 --- /dev/null +++ b/modules/flameshot/settings.nix @@ -0,0 +1,13 @@ +{ + flake.modules.homeManager.gui = + { config, ... }: + { + services.flameshot.settings.General = { + disabledTrayIcon = false; + saveAfterCopy = true; + savePath = "${config.xdg.userDirs.pictures}/Screenshots"; + showHelp = false; + uiColor = "#60a5fa"; + }; + }; +} diff --git a/modules/fonts.nix b/modules/fonts.nix new file mode 100644 index 00000000..728ba62f --- /dev/null +++ b/modules/fonts.nix @@ -0,0 +1,16 @@ +{ + flake.modules.nixos.desktop = + { pkgs, ... }: + { + fonts = { + fontconfig.enable = true; + + packages = with pkgs; [ + nerd-fonts.jetbrains-mono + nerd-fonts.meslo-lg + terminus_font + terminus_font_ttf + ]; + }; + }; +} diff --git a/modules/fzf/enable.nix b/modules/fzf/enable.nix new file mode 100644 index 00000000..512d9727 --- /dev/null +++ b/modules/fzf/enable.nix @@ -0,0 +1,6 @@ +{ + flake.modules.homeManager.base.programs.fzf = { + enable = true; + enableZshIntegration = true; + }; +} diff --git a/modules/fzf/session-variables.nix b/modules/fzf/session-variables.nix new file mode 100644 index 00000000..cb3e2433 --- /dev/null +++ b/modules/fzf/session-variables.nix @@ -0,0 +1,5 @@ +{ + flake.modules.homeManager.base.home.sessionVariables = { + FZF_DEFAULT_OPTS = "--reverse"; + }; +} diff --git a/modules/games/steam.nix b/modules/games/steam.nix new file mode 100644 index 00000000..faafa311 --- /dev/null +++ b/modules/games/steam.nix @@ -0,0 +1,8 @@ +{ + nixpkgs.allowedUnfreePackages = [ + "steam" + "steam-unwrapped" + ]; + + flake.modules.nixos.desktop.programs.steam.enable = true; +} diff --git a/modules/games/zeroad.nix b/modules/games/zeroad.nix new file mode 100644 index 00000000..c7d5cf6e --- /dev/null +++ b/modules/games/zeroad.nix @@ -0,0 +1,7 @@ +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + home.packages = with pkgs; [ zeroad ]; + }; +} diff --git a/modules/gammastep/enable.nix b/modules/gammastep/enable.nix new file mode 100644 index 00000000..c8b70f14 --- /dev/null +++ b/modules/gammastep/enable.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homManager.gui.services.gammastep.enable = true; +} diff --git a/modules/gammastep/provider.nix b/modules/gammastep/provider.nix new file mode 100644 index 00000000..e31c1826 --- /dev/null +++ b/modules/gammastep/provider.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homManager.gui.services.gammastep.provider = "geoclue2"; +} diff --git a/modules/git-repo-updater.nix b/modules/git-repo-updater.nix new file mode 100644 index 00000000..e4857610 --- /dev/null +++ b/modules/git-repo-updater.nix @@ -0,0 +1,11 @@ +{ inputs, ... }: + +{ + flake.modules.nixos.pc = + { system, ... }: + { + environment.systemPackages = [ + inputs.git-repo-updater.packages.${system}.default + ]; + }; +} diff --git a/modules/git/aliases.nix b/modules/git/aliases.nix new file mode 100644 index 00000000..ad52e1b7 --- /dev/null +++ b/modules/git/aliases.nix @@ -0,0 +1,50 @@ +{ + flake.modules.homeManager.base.programs.git.aliases = { + aa = "add --all"; + assume = "update-index --assume-unchanged"; + assumed = "!git ls-files -v | grep '^[hsmrck?]' | cut -c 3-"; + b = "branch"; + blame = "blame -w -C -C -C"; + browse = "!gh repo view --web"; + ca = "commit --amend --verbose"; + car = "commit --amend --no-edit"; + cl = "!hub clone"; + co = "checkout"; + compare = "!hub compare"; + current-branch = "rev-parse --abbrev-ref HEAD"; + dc = "diff --color --word-diff --cached"; + df = "diff --color --word-diff"; + dup = "!git checkout develop && git fetch origin && echo && git sl develop..origin/develop && echo && git pull --quiet && git checkout -"; + fixup = "commit --fixup"; + issues = "!gh issue list --web"; + mup = "!git master-to-main-wrapper checkout %BRANCH% && git fetch origin && echo && git sl %BRANCH%..origin/%BRANCH% && echo && git pull --quiet && git checkout -"; + no-ff = "merge --no-ff"; + pl = "pull"; + prune = "remote prune origin"; + ps = "push"; + pulls = "!gh pr list --web"; + rbc = "rebase --continue"; + rdup = "!git dup && git rebase develop"; + remotes = "remote -v"; + repush = "!git pull --rebase && git push"; + ri = "rebase --interactive"; + rid = "!git rebase -i $(git merge-base develop HEAD)"; + rim = "!git rebase -i $(git master-to-main-wrapper merge-base %BRANCH% HEAD)"; + rip = "!git rebase -i $(git merge-base production HEAD)"; + ris = "!git rebase -i $(git merge-base staging HEAD)"; + riu = "!git rebase -i $(git rev-parse --abbrev-ref --symbolic-full-name @{u})"; + rmup = "!git mup && git master-to-main-wrapper rebase %BRANCH%"; + sl = "log --oneline --decorate -20"; + sla = "log --oneline --decorate --graph --all -20"; + slap = "log --oneline --decorate --graph --all"; + slp = "log --oneline --decorate"; + stash = "stash --included-untracked"; + unassume = "update-index --no-assume-unchanged"; + uncommit = "reset --soft HEAD^"; + unstage = "reset"; + update = "!git fetch --all --jobs=4 --prune --progress && git rebase --autostash --stat"; + upstream = "rev-parse --abbrev-ref --symbolic-full-name @{u}"; + ureset = "!git reset --hard $(git upstream)"; + worktrees = "worktree list"; + }; +} diff --git a/modules/git/default-commit-message.nix b/modules/git/default-commit-message.nix new file mode 100644 index 00000000..dfd1fe90 --- /dev/null +++ b/modules/git/default-commit-message.nix @@ -0,0 +1,25 @@ +{ + flake.modules.homeManager.base = + { config, ... }: + { + home.file."${config.xdg.configHome}/git/message".text = '' + + + # Description + # + # - Why is this change necessary? + # - How does it address the issue? + # - What side effects does this change have? + # + # For breaking changes, uncomment the following line and describe the change: + # + # BREAKING CHANGE: + # + # + # Add any issue IDs or commit SHAs that this commit references: + # + # Refs: + + ''; + }; +} diff --git a/modules/git/defaults.nix b/modules/git/defaults.nix new file mode 100644 index 00000000..02b8978c --- /dev/null +++ b/modules/git/defaults.nix @@ -0,0 +1,54 @@ +{ + flake.modules.homeManager.base = + { config, ... }: + { + programs.git.extraConfig = { + branch = { + autosetupmerge = true; + autosetuprebase = "always"; + sort = "-committerdate"; + }; + + checkout.defaultRemote = "origin"; + color.ui = true; + column.ui = "auto"; + commit.template = "${config.xdg.configHome}/git/message"; + + core = { + editor = "nvim"; + excludesFile = "${config.xdg.configHome}/git/ignore"; + }; + + diff.tool = "vimdiff"; + fetch.prune = true; + gpg.format = "ssh"; + grep.lineNumber = true; + help.autocorrect = "1"; + init.defaultBranch = "main"; + + maintenance = { + auto = false; + strategy = "incremental"; + }; + + merge.ff = "only"; + + push = { + autoSetupRemote = true; + default = "upstream"; + }; + + pull = { + ff = "only"; + rebase = true; + }; + + rebase = { + autosquash = true; + autostash = true; + }; + + user.signingkey = "~/.ssh/id_rsa.pub"; + }; + }; +} diff --git a/modules/git/enable.nix b/modules/git/enable.nix new file mode 100644 index 00000000..da8cc9f0 --- /dev/null +++ b/modules/git/enable.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.base.programs.git.enable = true; +} diff --git a/modules/git/extra-packages.nix b/modules/git/extra-packages.nix new file mode 100644 index 00000000..6c610608 --- /dev/null +++ b/modules/git/extra-packages.nix @@ -0,0 +1,13 @@ +{ + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = with pkgs; [ + git-exclude + git-extras + git-graph + git-trim + stable.git-instafix + ]; + }; +} diff --git a/modules/git/ignores.nix b/modules/git/ignores.nix new file mode 100644 index 00000000..00b04ffc --- /dev/null +++ b/modules/git/ignores.nix @@ -0,0 +1,11 @@ +{ + flake.modules.homeManager.base.programs.git.ignores = [ + "/.ddev/providers/" + "/.direnv/" + "/.ignored/" + "/.issue-id" + "/.phpactor.json" + "/notes" + "/todo" + ]; +} diff --git a/modules/git/user.nix b/modules/git/user.nix new file mode 100644 index 00000000..bc3f214f --- /dev/null +++ b/modules/git/user.nix @@ -0,0 +1,8 @@ +{ config, ... }: + +{ + flake.modules.homeManager.base.programs.git = { + userName = config.flake.meta.owner.name; + userEmail = config.flake.meta.owner.email; + }; +} diff --git a/modules/git/variables.nix b/modules/git/variables.nix new file mode 100644 index 00000000..e47ccb5f --- /dev/null +++ b/modules/git/variables.nix @@ -0,0 +1,5 @@ +{ + flake.modules.homeManager.base.home.sessionVariables = { + GIT_INSTAFIX_UPSTREAM = "origin/main"; + }; +} diff --git a/modules/gnupg.nix b/modules/gnupg.nix new file mode 100644 index 00000000..da3edb80 --- /dev/null +++ b/modules/gnupg.nix @@ -0,0 +1,23 @@ +{ + flake.modules = { + nixos.pc = + { pkgs, ... }: + { + security.pam.services.login.gnupg.enable = true; + + programs.gnupg.agent = { + enable = true; + enableSSHSupport = true; + + pinentryPackage = pkgs.pinentry-qt; + }; + }; + + homeManager.base.home.file.".gnupg/gpg-agent.conf".text = '' + allow-preset-passphrase + default-cache-ttl 600 + max-cache-ttl 7200 + enable-ssh-support + ''; + }; +} diff --git a/modules/gtk/animations.nix b/modules/gtk/animations.nix new file mode 100644 index 00000000..45d5edac --- /dev/null +++ b/modules/gtk/animations.nix @@ -0,0 +1,6 @@ +{ + flake.modules.homeManager.gui.gtk = { + gtk3.extraConfig.gtk-enable-animations = false; + gtk4.extraConfig.gtk-enable-animations = false; + }; +} diff --git a/modules/gtk/enable.nix b/modules/gtk/enable.nix new file mode 100644 index 00000000..ceed16d3 --- /dev/null +++ b/modules/gtk/enable.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.gui.gtk.enable = true; +} diff --git a/modules/gtk/icon-theme.nix b/modules/gtk/icon-theme.nix new file mode 100644 index 00000000..aed95ddf --- /dev/null +++ b/modules/gtk/icon-theme.nix @@ -0,0 +1,10 @@ +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + gtk.iconTheme = { + name = "Arc"; + package = pkgs.arc-icon-theme; + }; + }; +} diff --git a/modules/gtk/theme.nix b/modules/gtk/theme.nix new file mode 100644 index 00000000..44e42980 --- /dev/null +++ b/modules/gtk/theme.nix @@ -0,0 +1,10 @@ +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + gtk.theme = { + name = "Arc-Dark"; + package = pkgs.arc-theme; + }; + }; +} diff --git a/modules/handbrake.nix b/modules/handbrake.nix new file mode 100644 index 00000000..8a8532a9 --- /dev/null +++ b/modules/handbrake.nix @@ -0,0 +1,7 @@ +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + home.packages = [ pkgs.handbrake ]; + }; +} diff --git a/modules/home-manager/base.nix b/modules/home-manager/base.nix new file mode 100644 index 00000000..bbd936b3 --- /dev/null +++ b/modules/home-manager/base.nix @@ -0,0 +1,14 @@ +{ config, ... }: + +{ + flake.modules.homeManager.base = args: { + home = { + homeDirectory = "/home/${config.flake.meta.owner.username}"; + username = config.flake.meta.owner.username; + }; + + programs.home-manager.enable = true; + + systemd.user.startServices = "sd-switch"; + }; +} diff --git a/modules/home-manager/cli/bluetuith.nix b/modules/home-manager/cli/bluetuith.nix deleted file mode 100644 index b699183f..00000000 --- a/modules/home-manager/cli/bluetuith.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -with lib; - -let - cfg = config.cli.bluetuith; -in -{ - options.cli.bluetuith.enable = mkEnableOption "Enable bluetuith"; - - config = mkIf cfg.enable { - home.packages = with pkgs; [ - bluetuith - ]; - - xdg.configFile."bluetuith/bluetuith.conf" = { - text = '' - { - adapter: "" - adapter-states: "" - connect-bdaddr: "" - gsm-apn: "" - gsm-number: "" - - keybindings: { - NavigateDown: j - NavigateUp: k - } - - receive-dir: "" - theme: {} - } - ''; - }; - }; -} diff --git a/modules/home-manager/cli/bookmarkthis.nix b/modules/home-manager/cli/bookmarkthis.nix deleted file mode 100644 index f312198e..00000000 --- a/modules/home-manager/cli/bookmarkthis.nix +++ /dev/null @@ -1,68 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -let - inherit (lib) mkEnableOption mkOption; - - cfg = config.cli.${name}; - name = "bookmarkthis"; -in -{ - options.cli.${name} = { - enable = mkEnableOption "Enable ${name}"; - - snippetsFile = mkOption { - default = "${config.xdg.dataHome}/snippets.txt"; - type = lib.types.str; - }; - }; - - config = lib.mkIf cfg.enable { - home = { - packages = with pkgs; [ - (pkgs.writeShellApplication { - name = "bookmarkthis"; - - text = '' - message() { - if command -v ${lib.getExe libnotify} > /dev/null; then - ${lib.getExe libnotify} "$1" "$2" - else - echo "$2" - fi - } - - main() { - bookmark="$(xclip -o)" - file="$SNIPPETS_FILE" - - if grep -q "^$bookmark$" "$file"; then - message "Oops." "Already bookmarked." >&2 - - exit 2 - fi - - echo "$bookmark" >> "$file" - - message "Bookmark added!" "$bookmark is now saved to the file." - } - - main - ''; - }) - ]; - - sessionVariables = { - SNIPPETS_FILE = cfg.snippetsFile; - }; - }; - - programs.zsh.zsh-abbr.abbreviations = lib.optionalAttrs (config.programs.zsh.enable) { - "sn" = "${config.home.sessionVariables.EDITOR} $SNIPPETS_FILE"; - }; - }; -} diff --git a/modules/home-manager/cli/default.nix b/modules/home-manager/cli/default.nix deleted file mode 100644 index 710b0faa..00000000 --- a/modules/home-manager/cli/default.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ - imports = [ - ./bluetuith.nix - ./bookmarkthis.nix - ./dev-commit.nix - ./direnv.nix - ./fzf.nix - ./git.nix - ./node.nix - ./notes.nix - ./ranger.nix - ./scripts - ./starship.nix - ./sxhkd.nix - ./todos.nix - ./tmux.nix - ./tmux-sessionizer.nix - ./zsh - ]; -} diff --git a/modules/home-manager/cli/dev-commit.nix b/modules/home-manager/cli/dev-commit.nix deleted file mode 100644 index 823420ed..00000000 --- a/modules/home-manager/cli/dev-commit.nix +++ /dev/null @@ -1,93 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -with lib; - -let - cfg = config.programs.dev-commit; - repoPaths = concatStringsSep ":" cfg.repoPaths; -in -{ - options.programs.dev-commit = { - enable = mkEnableOption "Enable dev-commit"; - - repoPaths = mkOption { - default = [ ]; - description = "A list of repository paths that should have automated commits"; - type = types.listOf types.path; - }; - - schedule = mkOption { - type = types.submodule { - options = { - enable = mkEnableOption "Enable automated dev commits with systemd"; - - time = mkOption { - description = '' - Time expression for when to run the dev-commit job. - - This uses systemd's `OnCalendar` syntax. - - Examples: - - "hourly" (once every hour) - - "daily" (once per day at midnight) - - "Mon *-*-01 12:00:00" (every Monday at 12:00 PM) - - See `man systemd.time` for full syntax reference. - ''; - default = "hourly"; - type = types.str; - }; - }; - }; - - default = { - enable = false; - time = "hourly"; - }; - }; - }; - - config = mkIf cfg.enable { - home = { - packages = [ - pkgs.dev-commit - ]; - - sessionVariables.DEV_COMMIT_PATHS = repoPaths; - }; - - systemd.user = mkIf cfg.schedule.enable { - services.dev-commit = { - Install.WantedBy = [ "default.target" ]; - - Service = { - Environment = [ - "DEV_COMMIT_PATHS=${repoPaths}" - ]; - - ExecStart = "${lib.getExe pkgs.dev-commit}"; - - Type = "oneshot"; - }; - - Unit.Description = "dev-commit"; - }; - - timers.dev-commit = { - Install.WantedBy = [ "timers.target" ]; - - Timer = { - OnCalendar = cfg.schedule.time; - Unit = "dev-commit.service"; - }; - - Unit.Description = "Runs automated development commits in select project repositories."; - }; - }; - }; -} diff --git a/modules/home-manager/cli/direnv.nix b/modules/home-manager/cli/direnv.nix deleted file mode 100644 index 875e27c3..00000000 --- a/modules/home-manager/cli/direnv.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.cli.direnv; -in -{ - options.cli.direnv.enable = mkEnableOption "Enable direnv"; - - config = mkIf cfg.enable { - programs.direnv = { - enable = true; - enableZshIntegration = true; - - nix-direnv.enable = true; - - silent = true; - }; - }; -} diff --git a/modules/home-manager/cli/fzf.nix b/modules/home-manager/cli/fzf.nix deleted file mode 100644 index 2abbe2a1..00000000 --- a/modules/home-manager/cli/fzf.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.cli.fzf; -in -{ - options.cli.fzf.enable = mkEnableOption "Enable fzf"; - - config = mkIf cfg.enable { - programs.fzf = { - enable = true; - enableZshIntegration = true; - }; - - home.sessionVariables = { - FZF_DEFAULT_OPTS = "--reverse"; - }; - }; -} diff --git a/modules/home-manager/cli/git.nix b/modules/home-manager/cli/git.nix deleted file mode 100644 index b49097ff..00000000 --- a/modules/home-manager/cli/git.nix +++ /dev/null @@ -1,178 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -with lib; - -let - cfg = config.cli.git; -in -{ - options.cli.git = { - enable = mkEnableOption "Enable git"; - - user = mkOption { - type = types.submodule { - options = { - emailAddress = mkOption { - description = "User email address."; - type = types.str; - apply = - x: - assert builtins.match "^[^@]+@[^@]+\\.[^@]+$" x != null; - x; - }; - }; - }; - }; - }; - - config = mkIf cfg.enable { - home.file."${config.xdg.configHome}/git/message".text = '' - - - # Description - # - # - Why is this change necessary? - # - How does it address the issue? - # - What side effects does this change have? - # - # For breaking changes, uncomment the following line and describe the change: - # - # BREAKING CHANGE: - # - # - # Add any issue IDs or commit SHAs that this commit references: - # - # Refs: - - ''; - - programs = { - git = { - enable = true; - userName = "Oliver Davies"; - userEmail = cfg.user.emailAddress; - - aliases = { - aa = "add --all"; - assume = "update-index --assume-unchanged"; - assumed = "!git ls-files -v | grep '^[hsmrck?]' | cut -c 3-"; - b = "branch"; - blame = "blame -w -C -C -C"; - browse = "!gh repo view --web"; - ca = "commit --amend --verbose"; - car = "commit --amend --no-edit"; - cl = "!hub clone"; - co = "checkout"; - compare = "!hub compare"; - current-branch = "rev-parse --abbrev-ref HEAD"; - dc = "diff --color --word-diff --cached"; - df = "diff --color --word-diff"; - dup = "!git checkout develop && git fetch origin && echo && git sl develop..origin/develop && echo && git pull --quiet && git checkout -"; - fixup = "commit --fixup"; - issues = "!gh issue list --web"; - mup = "!git master-to-main-wrapper checkout %BRANCH% && git fetch origin && echo && git sl %BRANCH%..origin/%BRANCH% && echo && git pull --quiet && git checkout -"; - no-ff = "merge --no-ff"; - pl = "pull"; - prune = "remote prune origin"; - ps = "push"; - pulls = "!gh pr list --web"; - rbc = "rebase --continue"; - rdup = "!git dup && git rebase develop"; - remotes = "remote -v"; - repush = "!git pull --rebase && git push"; - ri = "rebase --interactive"; - rid = "!git rebase -i $(git merge-base develop HEAD)"; - rim = "!git rebase -i $(git master-to-main-wrapper merge-base %BRANCH% HEAD)"; - rip = "!git rebase -i $(git merge-base production HEAD)"; - ris = "!git rebase -i $(git merge-base staging HEAD)"; - riu = "!git rebase -i $(git rev-parse --abbrev-ref --symbolic-full-name @{u})"; - rmup = "!git mup && git master-to-main-wrapper rebase %BRANCH%"; - sl = "log --oneline --decorate -20"; - sla = "log --oneline --decorate --graph --all -20"; - slap = "log --oneline --decorate --graph --all"; - slp = "log --oneline --decorate"; - stash = "stash --included-untracked"; - unassume = "update-index --no-assume-unchanged"; - uncommit = "reset --soft HEAD^"; - unstage = "reset"; - update = "!git fetch --all --jobs=4 --prune --progress && git rebase --autostash --stat"; - upstream = "rev-parse --abbrev-ref --symbolic-full-name @{u}"; - ureset = "!git reset --hard $(git upstream)"; - worktrees = "worktree list"; - }; - - ignores = [ - "/.ddev/providers/" - "/.direnv/" - "/.ignored/" - "/.issue-id" - "/.phpactor.json" - "/notes" - "/todo" - ]; - - extraConfig = { - branch = { - autosetupmerge = true; - autosetuprebase = "always"; - sort = "-committerdate"; - }; - - checkout.defaultRemote = "origin"; - color.ui = true; - column.ui = "auto"; - commit.template = "${config.xdg.configHome}/git/message"; - - core = { - editor = "nvim"; - excludesFile = "~/.config/git/ignore"; - }; - - diff.tool = "vimdiff"; - fetch.prune = true; - gpg.format = "ssh"; - grep.lineNumber = true; - help.autocorrect = "1"; - init.defaultBranch = "main"; - - maintenance = { - auto = false; - strategy = "incremental"; - }; - - merge.ff = "only"; - - push = { - autoSetupRemote = true; - default = "upstream"; - }; - - pull = { - ff = "only"; - rebase = true; - }; - - rebase = { - autosquash = true; - autostash = true; - }; - - user.signingkey = "~/.ssh/id_rsa.pub"; - }; - }; - }; - - home = { - packages = with pkgs; [ stable.git-instafix ]; - - sessionVariables = { - GIT_INSTAFIX_UPSTREAM = "origin/main"; - }; - }; - }; -} diff --git a/modules/home-manager/cli/node.nix b/modules/home-manager/cli/node.nix deleted file mode 100644 index b0db6874..00000000 --- a/modules/home-manager/cli/node.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.cli.node; - - inherit (config.xdg) configHome dataHome stateHome; -in -{ - options.cli.node.enable = mkEnableOption "Enable node"; - - config = mkIf cfg.enable { - xdg.configFile."${config.home.sessionVariables.NPM_CONFIG_USERCONFIG}".text = '' - cache=${configHome}/npm - init-module=${configHome}/npm/config/npm-init.js - logs-dir=${stateHome}/npm/logs - prefix=${dataHome}/npm - ''; - - home.sessionVariables = { - NPM_CONFIG_USERCONFIG = "${configHome}/npm/npmrc"; - }; - }; -} diff --git a/modules/home-manager/cli/notes.nix b/modules/home-manager/cli/notes.nix deleted file mode 100644 index 2b2d7b8e..00000000 --- a/modules/home-manager/cli/notes.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -with lib; - -let - cfg = config.cli.notes; -in -{ - options.cli.notes = { - enable = mkEnableOption "Enable notes"; - - directory = mkOption { - default = "${config.xdg.userDirs.documents}/notes"; - type = types.str; - }; - }; - - config = mkIf cfg.enable { - xdg = { - enable = true; - userDirs.enable = true; - }; - - home = { - packages = with pkgs; [ notes ]; - - sessionVariables = { - NOTES_DIRECTORY = cfg.directory; - }; - }; - }; -} diff --git a/modules/home-manager/cli/ranger.nix b/modules/home-manager/cli/ranger.nix deleted file mode 100644 index 7a05fd57..00000000 --- a/modules/home-manager/cli/ranger.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.cli.ranger; -in -{ - options.cli.ranger.enable = mkEnableOption "Enable ranger"; - - config = mkIf cfg.enable { - programs.ranger.enable = true; - }; -} diff --git a/modules/home-manager/cli/scripts/default.nix b/modules/home-manager/cli/scripts/default.nix deleted file mode 100644 index 2da9de18..00000000 --- a/modules/home-manager/cli/scripts/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ - home = { - sessionPath = [ "$HOME/.local/bin" ]; - - file.".local/bin" = { - source = ./scripts; - recursive = true; - }; - }; -} diff --git a/modules/home-manager/cli/scripts/scripts/create-script b/modules/home-manager/cli/scripts/scripts/create-script deleted file mode 100755 index 6d830971..00000000 --- a/modules/home-manager/cli/scripts/scripts/create-script +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -if [[ "$1" == "" ]]; then - echo "Usage: ${0##*/} "; exit 2 -fi - -set -o errexit -set -o nounset -set -o pipefail - -cat > "$1" << EOF -#!/usr/bin/env bash - -set -o errexit -set -o nounset -set -o pipefail - - -EOF - -chmod +x "$1" - -$EDITOR "$1"; diff --git a/modules/home-manager/cli/scripts/scripts/git-abort b/modules/home-manager/cli/scripts/scripts/git-abort deleted file mode 100755 index cd7e067c..00000000 --- a/modules/home-manager/cli/scripts/scripts/git-abort +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -# Abort a rebase, merge, `am`, a cherry-pick or a revert, depending on the situation. - -if [[ -e .git/CHERRY_PICK_HEAD ]] ; then - exec git cherry-pick --abort "$@" -elif [[ -e .git/REVERT_HEAD ]] ; then - exec git revert --abort "$@" -elif [[ -e .git/rebase-apply/applying ]] ; then - exec git am --abort "$@" -elif [[ -e .git/rebase-apply ]] ; then - exec git rebase --abort "$@" -elif [[ -e .git/rebase-merge ]] ; then - exec git rebase --abort "$@" -elif [[ -e .git/MERGE_MODE ]] ; then - exec git merge --abort "$@" -else - echo git-abort: unknown state - exit 1 -fi diff --git a/modules/home-manager/cli/scripts/scripts/git-bare-clone b/modules/home-manager/cli/scripts/scripts/git-bare-clone deleted file mode 100755 index 4db9eaba..00000000 --- a/modules/home-manager/cli/scripts/scripts/git-bare-clone +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash - -# Creates a new bare clone of a repository with the bare files within a `.bare` -# directory. It also sets the origin URL so push and pull work as expected. - -if [[ "$1" == "" ]]; then - echo "Usage: ${0##*/} []" - exit 2 -fi - -set -euo pipefail - -repository_url="${1}" -directory="${2:-}" -location=".bare" - -# If no destination directory is specified, get it from the repository URL - the same as "git clone". -if [ -z "${directory}" ]; then - directory="$(basename -s .git "${repository_url}")" -fi - -# Create the parent directory if needed. -mkdir -pv "${directory}" -cd "${directory}" - -git clone --bare "${repository_url}" "${location}" - -# Adjust origin fetch locations. -cd "${location}" -git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" - -# Set .git file contents. -cd .. -echo "gitdir: ./${location}" > .git diff --git a/modules/home-manager/cli/scripts/scripts/git-continue b/modules/home-manager/cli/scripts/scripts/git-continue deleted file mode 100755 index 9649ec95..00000000 --- a/modules/home-manager/cli/scripts/scripts/git-continue +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -# Continue a rebase or cherry-pick in the event of conflicts. - -if [[ -e .git/CHERRY_PICK_HEAD ]] ; then - exec git cherry-pick --continue "$@" -elif [[ -e .git/rebase-apply/applying ]] ; then - exec git rebase --continue "$@" -elif [[ -e .git/rebase-apply ]] ; then - exec git rebase --continue "$@" -elif [[ -e .git/rebase-merge ]] ; then - exec git rebase --continue "$@" -else - echo git-abort: unknown state - exit 1 -fi diff --git a/modules/home-manager/cli/scripts/scripts/git-sync b/modules/home-manager/cli/scripts/scripts/git-sync deleted file mode 100755 index ff3775c5..00000000 --- a/modules/home-manager/cli/scripts/scripts/git-sync +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -git fetch --all -git stash -git pull --rebase -git stash pop diff --git a/modules/home-manager/cli/scripts/scripts/git-up b/modules/home-manager/cli/scripts/scripts/git-up deleted file mode 100755 index 79f36293..00000000 --- a/modules/home-manager/cli/scripts/scripts/git-up +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash - -# Usage: git up {branch} {remote} - -set -e - -if [[ $# < 1 ]]; then - echo "You must specify a branch name to update" - exit 1 -fi - -BRANCH=$1 -REMOTE=${2:-origin} - -git checkout ${BRANCH} && \ - git fetch ${REMOTE} && \ - echo && \ - git sl ${BRANCH}..${REMOTE}/${BRANCH} && \ - echo && \ - git pull --quiet && \ - git checkout - diff --git a/modules/home-manager/cli/scripts/scripts/import-gzip-database b/modules/home-manager/cli/scripts/scripts/import-gzip-database deleted file mode 100755 index 9a6cf7ef..00000000 --- a/modules/home-manager/cli/scripts/scripts/import-gzip-database +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -if [[ "$1" == "" ]]; then - echo "Usage: ${0##*/} "; exit 2 -fi - -set -euo pipefail - -filename="${1}" -shift 1 - -pv "${filename}" \ - | zcat \ - | docker compose exec -T "${SERVICE_NAME:-database}" mysql \ - -p"${DB_PASSWORD:-app}" \ - -u"${DB_USER:-app}" \ - "${DB_NAME:-app}" diff --git a/modules/home-manager/cli/scripts/scripts/main-or-master-branch b/modules/home-manager/cli/scripts/scripts/main-or-master-branch deleted file mode 100755 index ed9ffbd3..00000000 --- a/modules/home-manager/cli/scripts/scripts/main-or-master-branch +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/zsh - -# Check if we should use the `main` or `master` branch for this repo. -# Prefer `main` to `master`. - -if git show-ref --quiet origin/main || git rev-parse main &>/dev/null; then - echo main -else - echo master -fi \ No newline at end of file diff --git a/modules/home-manager/cli/scripts/scripts/mounter b/modules/home-manager/cli/scripts/scripts/mounter deleted file mode 100755 index 60b828eb..00000000 --- a/modules/home-manager/cli/scripts/scripts/mounter +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash - -set -o errexit -set -o nounset -set -o pipefail - -lsblk_output="$(lsblk -rpo "uuid,name,type,size,label,mountpoint,mountpoints,fstype" | grep "part" | grep -Ev "/(boot|nix/store)")" -partition_names="$(echo "$lsblk_output" | awk '{ printf "%s (%s)\n", $2, $4 }' )"; - -selected=$(echo "$partition_names" | dmenu -p "Select drive:" | awk '{ print $1 }') -test -n "$selected" -mount_device="$selected" - -if sudo cryptsetup isLuks "$selected"; then - luks_name="usb" - - ${TERMINAL:-st} -n floatterm -g 60x1 -e sudo cryptsetup open "$selected" "$luks_name" - - mount_device="/dev/mapper/$luks_name" - - test -b "/dev/mapper/$luks_name" -fi - -mount_point=$(echo -e "/mnt\n/media\n/run/media/$USER" | dmenu -p "Select mount point:") -test -n "$mount_point" - -sudo mkdir -p "$mount_point" - -if sudo mount "$mount_device" "$mount_point"; then - notify-send "Device mounted" "Mounted $selected at $mount_point." -else - notify-send "Mount failed" "Failed to mount $selected." - - exit 1 -fi - diff --git a/modules/home-manager/cli/scripts/scripts/move-firefox-screenshots b/modules/home-manager/cli/scripts/scripts/move-firefox-screenshots deleted file mode 100755 index d47e522d..00000000 --- a/modules/home-manager/cli/scripts/scripts/move-firefox-screenshots +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -set -o errexit -set -o nounset -set -o pipefail - -original_directory="${HOME}/Downloads" -new_directory="${HOME}/Pictures/Screenshots" - -find "${original_directory}" -mindepth 1 -maxdepth 1 -type f -name "Screenshot *" \ - -exec mv {} "${new_directory}" \; diff --git a/modules/home-manager/cli/scripts/scripts/new-drupal-module b/modules/home-manager/cli/scripts/scripts/new-drupal-module deleted file mode 100755 index 7eeca36b..00000000 --- a/modules/home-manager/cli/scripts/scripts/new-drupal-module +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -if [[ "$1" == "" || "$2" == "" ]]; then - echo "Usage: ${0##*/} "; exit 2 -fi - -set -euo pipefail - -machine_name=$1 -module_name=$2 - -git clone https://github.com/opdavies/drupal-module-template \ - --depth=1 \ - "${machine_name}" - -pushd "${machine_name}" -just rename "${module_name}" -rm -fr .git .github justfile phpcs.xml.dist -popd diff --git a/modules/home-manager/cli/scripts/scripts/setbg b/modules/home-manager/cli/scripts/scripts/setbg deleted file mode 100755 index 9882de53..00000000 --- a/modules/home-manager/cli/scripts/scripts/setbg +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -xwallpaper --zoom ${XDG_REPOS_DIR}/personal/nix-config/wallpaper/wallpaper.jpg diff --git a/modules/home-manager/cli/scripts/scripts/start-traefik b/modules/home-manager/cli/scripts/scripts/start-traefik deleted file mode 100755 index 6bbdb9d9..00000000 --- a/modules/home-manager/cli/scripts/scripts/start-traefik +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -set -o errexit -set -o nounset - -cd "${XDG_REPOS_DIR}/traefik-development" - -docker compose up --detach -docker container ps diff --git a/modules/home-manager/cli/scripts/scripts/stop-all-docker-containers b/modules/home-manager/cli/scripts/scripts/stop-all-docker-containers deleted file mode 100755 index 69e59a42..00000000 --- a/modules/home-manager/cli/scripts/scripts/stop-all-docker-containers +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -# Stops all running Docker containers except for the global Traefik proxy. - -set -euo pipefail - -# Show the running containers. -docker container ps - -echo "" - -# Stop the running containers and show any that are still running. -docker container ls | - tail -n +2 | - grep -v traefik-development-reverse-proxy-1 | - awk '{print $1}' | - xargs docker container stop -echo "" -docker container ps diff --git a/modules/home-manager/cli/scripts/scripts/stop-traefik b/modules/home-manager/cli/scripts/scripts/stop-traefik deleted file mode 100755 index 813e3c2c..00000000 --- a/modules/home-manager/cli/scripts/scripts/stop-traefik +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -set -o errexit -set -o nounset - -docker container stop traefik-development-reverse-proxy-1 -docker container ps diff --git a/modules/home-manager/cli/scripts/scripts/tag-release b/modules/home-manager/cli/scripts/scripts/tag-release deleted file mode 100755 index ad112170..00000000 --- a/modules/home-manager/cli/scripts/scripts/tag-release +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -commit_sha="${1:-HEAD}" -tag="$(date '+%Y-%m-%d-%H.%M.%S')" - -echo "Tagging commit $(git rev-parse "${commit_sha}") as ${tag}." -echo "" - -# Tag the appropriate commit and push to the remote. -git tag "${tag}" "${commit_sha}" -git push origin "refs/tags/${tag}" --no-verify diff --git a/modules/home-manager/cli/scripts/scripts/unmounter b/modules/home-manager/cli/scripts/scripts/unmounter deleted file mode 100755 index cc3d5d8b..00000000 --- a/modules/home-manager/cli/scripts/scripts/unmounter +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash - -set -o errexit -set -o nounset -set -o pipefail - -lsblk_output="$(lsblk -nrpo "name,type,size,mountpoint")" -mounted_drives="$(echo "$lsblk_output" | awk '($2=="part"||$2="crypt")&&$4!~/\/boot|\/home$|SWAP/&&length($4)>1{printf "%s (%s)\n",$4,$3}')" - -all_unmountable="$(echo "$mounted_drives" | sed "/^$/d;s/ *$//")" -test -n "$all_unmountable" - -selected="$(echo "$all_unmountable" | dmenu -i -p "Unmount which drive?")" -selected="${selected%% *}" -test -n "$selected" - -sudo -A umount -l "/${selected#*/}" -notify-send "Device unmounted" "$selected has been unmounted." - -# Close the selected drive if decrypted. -cryptid="$(echo "$lsblk_output" | grep "/${selected#*/}$")" -cryptid="${cryptid%% *}" -test -b /dev/mapper/"${cryptid##*/}" -sudo -A cryptsetup close "$cryptid" - -notify-send "Device dencryption closed" "Drive is now securely locked again." diff --git a/modules/home-manager/cli/scripts/scripts/update-all-git-repos b/modules/home-manager/cli/scripts/scripts/update-all-git-repos deleted file mode 100755 index b3c4bcd5..00000000 --- a/modules/home-manager/cli/scripts/scripts/update-all-git-repos +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash - -# Update all top-level Git repository clones within my Code directories to their -# latest version. - -set -o errexit -set -o nounset - -dirs=$(find "$XDG_REPOS_DIR" -mindepth 1 -maxdepth 2 -type d -name .git -not -path '*/*.old/*') - -for dir in $dirs; do - repo_path="${dir%/.git}" - - cd "${repo_path}" - - # If the repo is a bare clone, the commands need to be run within the - # worktree directory. - [[ -f .bare/worktrees/main/gitdir && -d main && -f main/.git ]] && cd main - - echo "Updating $(pwd)" - - # Update the repository. - git fetch --all --jobs=4 --progress --prune || true - git pull --rebase || true -done diff --git a/modules/home-manager/cli/starship.nix b/modules/home-manager/cli/starship.nix deleted file mode 100644 index a3673af6..00000000 --- a/modules/home-manager/cli/starship.nix +++ /dev/null @@ -1,187 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.cli.starship; -in -{ - options.cli.starship.enable = mkEnableOption "Enable starship"; - - config = mkIf cfg.enable { - programs.starship = - let - inherit (builtins) concatStringsSep; - in - { - enable = true; - enableZshIntegration = true; - - settings = { - add_newline = false; - - # https://starship.rs/config/#prompt - format = concatStringsSep "" [ - "\n" - "$username" - "$hostname" - "$directory" - "$vcsh" - "$git_branch" - "$git_status" - "$git_metrics" - "$docker_context" - "$nodejs" - "$php" - "$terraform" - "$nix_shell" - "$direnv" - "\${custom.mob}" - "$memory_usage" - "$cmd_duration" - "$lua" - "$status" - "$character" - ]; - - cmd_duration.disabled = true; - direnv.disabled = false; - directory.format = "[$path]($style) "; - git_status.disabled = true; - nix_shell.disabled = true; - nodejs.disabled = true; - php.disabled = true; - username.disabled = true; - - custom = { - mob = { - command = "echo $MOB_TIMER_ROOM"; - format = "[($output)]($style) "; - when = "[[ -v MOB_TIMER_ROOM ]]"; - }; - }; - - # https://starship.rs/presets/plain-text - aws.symbol = "aws "; - azure.symbol = "az "; - bun.symbol = "bun "; - c.symbol = "C "; - character = { - success_symbol = "[>](bold green)"; - error_symbol = "[x](bold red)"; - vimcmd_symbol = "[<](bold green)"; - }; - cobol.symbol = "cobol "; - conda.symbol = "conda "; - crystal.symbol = "cr "; - cmake.symbol = "cmake "; - daml.symbol = "daml "; - dart.symbol = "dart "; - deno.symbol = "deno "; - dotnet.symbol = ".NET "; - directory.read_only = " ro"; - docker_context.symbol = "docker "; - elixir.symbol = "exs "; - elm.symbol = "elm "; - fennel.symbol = "fnl "; - fossil_branch.symbol = "fossil "; - gcloud.symbol = "gcp "; - git_branch.symbol = "git "; - git_commit.tag_symbol = " tag "; - git_status = { - ahead = ">"; - behind = "<"; - diverged = "<>"; - renamed = "r"; - deleted = "x"; - }; - gleam.symbol = "gleam "; - golang.symbol = "go "; - gradle.symbol = "gradle "; - guix_shell.symbol = "guix "; - hg_branch.symbol = "hg "; - java.symbol = "java "; - julia.symbol = "jl "; - kotlin.symbol = "kt "; - lua.symbol = "lua "; - nodejs.symbol = "nodejs "; - memory_usage.symbol = "memory "; - meson.symbol = "meson "; - nats.symbol = "nats "; - nim.symbol = "nim "; - nix_shell.symbol = "nix "; - ocaml.symbol = "ml "; - opa.symbol = "opa "; - os.symbols = { - AIX = "aix "; - Alpaquita = "alq "; - AlmaLinux = "alma "; - Alpine = "alp "; - Amazon = "amz "; - Android = "andr "; - Arch = "rch "; - Artix = "atx "; - CentOS = "cent "; - Debian = "deb "; - DragonFly = "dfbsd "; - Emscripten = "emsc "; - EndeavourOS = "ndev "; - Fedora = "fed "; - FreeBSD = "fbsd "; - Garuda = "garu "; - Gentoo = "gent "; - HardenedBSD = "hbsd "; - Illumos = "lum "; - Kali = "kali "; - Linux = "lnx "; - Mabox = "mbox "; - Macos = "mac "; - Manjaro = "mjo "; - Mariner = "mrn "; - MidnightBSD = "mid "; - Mint = "mint "; - NetBSD = "nbsd "; - NixOS = "nix "; - OpenBSD = "obsd "; - OpenCloudOS = "ocos "; - openEuler = "oeul "; - openSUSE = "osuse "; - OracleLinux = "orac "; - Pop = "pop "; - Raspbian = "rasp "; - Redhat = "rhl "; - RedHatEnterprise = "rhel "; - RockyLinux = "rky "; - Redox = "redox "; - Solus = "sol "; - SUSE = "suse "; - Ubuntu = "ubnt "; - Ultramarine = "ultm "; - Unknown = "unk "; - Void = "void "; - Windows = "win "; - }; - package.symbol = "pkg "; - perl.symbol = "pl "; - php.symbol = "php "; - pijul_channel.symbol = "pijul "; - pulumi.symbol = "pulumi "; - purescript.symbol = "purs "; - python.symbol = "py "; - quarto.symbol = "quarto "; - raku.symbol = "raku "; - ruby.symbol = "rb "; - rust.symbol = "rs "; - scala.symbol = "scala "; - spack.symbol = "spack "; - solidity.symbol = "solidity "; - status.symbol = "[x](bold red) "; - sudo.symbol = "sudo "; - swift.symbol = "swift "; - typst.symbol = "typst "; - terraform.symbol = "terraform "; - zig.symbol = "zig "; - }; - }; - }; -} diff --git a/modules/home-manager/cli/sxhkd.nix b/modules/home-manager/cli/sxhkd.nix deleted file mode 100644 index a70a7285..00000000 --- a/modules/home-manager/cli/sxhkd.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ config, lib, pkgs, ... }: - -let - cfg = config.cli.${service}; - service = "sxhkd"; - - inherit (lib) getExe mkIf mkEnableOption; -in -{ - options.cli.${service} = { - enable = mkEnableOption "Enable ${service}"; - }; - - config = mkIf cfg.enable { - xsession.enable = true; - - services.${service} = { - enable = true; - - keybindings = { - "{_, shift +, super +}XF86MonBrightness{Down,Up}" = "${getExe pkgs.brightnessctl} set {5%-,10%-,10%,+5%,+10%,100%} --quiet"; - "super + x; {1, 2, 3, 4}" = "st {notes, newsboat, nmtui, bluetuith}"; - "super + shift + b" = "/etc/profiles/per-user/opdavies/bin/bookmarkthis"; - "super + shift + i" = "${pkgs.xdotool}/bin/xdotool type $(cat ~/.local/share/snippets.txt | grep -v '^#' | grep -v '^$' | sort | dmenu -i -l 50 | cut -d' ' -f1)"; - "super + shift + p" = "${getExe pkgs.passmenu-otp} -i"; - "@F3" = "${getExe pkgs.displayselect}"; - "@F9" = "/home/opdavies/.local/bin/mounter"; - "@F10" = "/home/opdavies/.local/bin/unmounter"; - }; - }; - }; -} diff --git a/modules/home-manager/cli/tmux-sessionizer.nix b/modules/home-manager/cli/tmux-sessionizer.nix deleted file mode 100644 index 97ca9086..00000000 --- a/modules/home-manager/cli/tmux-sessionizer.nix +++ /dev/null @@ -1,70 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -with lib; - -let - cfg = config.cli.tmux-sessionizer; -in -{ - options.cli.tmux-sessionizer = { - enable = mkEnableOption "Enable tmux-sessionizer"; - enableDmenuIntegration = mkEnableOption "Enable dmenu integration"; - - directories = mkOption { - default = [ config.home.homeDirectory ]; - type = types.listOf types.str; - description = "List of directories for tmux-sessionizer to use."; - }; - }; - - config = mkIf cfg.enable { - home.packages = with pkgs; [ - tmux-sessionizer - ] ++ (optional cfg.enableDmenuIntegration ( - pkgs.writeShellApplication { - name = "tmux-sessionizer-dmenu"; - - text = '' - # shellcheck disable=SC2046 - selected=$(find $(eval echo "$(xargs < "$XDG_CONFIG_HOME/tmux-sessionizer/directories")") -mindepth 1 -maxdepth 1 -type d | dmenu -i -l 20) - - ${pkgs.coreutils}/bin/nohup st -e tmux-sessionizer "$selected" >/dev/null 2>&1 & - ''; - } - )); - - xdg.configFile = { - "tmux-sessionizer/default".source = "${ - pkgs.writeShellApplication { - name = ".tmux-sessionizer"; - - runtimeInputs = with pkgs; [ - tmux - ]; - - text = '' - set +o errexit - set +o nounset - - if [[ "$PWD" == "${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/os" || "$PWD" == "${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/personal" || "$PWD" == "${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/work" ]]; then - clear - - return - fi - - tmux new-window -d -n scratch - nvim . - clear - ''; - } - }/bin/.tmux-sessionizer"; - - "tmux-sessionizer/directories".text = builtins.concatStringsSep "\n" cfg.directories; - }; - }; -} diff --git a/modules/home-manager/cli/tmux.nix b/modules/home-manager/cli/tmux.nix deleted file mode 100644 index fb12514b..00000000 --- a/modules/home-manager/cli/tmux.nix +++ /dev/null @@ -1,97 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -with lib; - -let - cfg = config.cli.tmux; -in -{ - options.cli.tmux.enable = mkEnableOption "Enable tmux"; - - config = mkIf cfg.enable { - programs.tmux = { - enable = true; - - terminal = "tmux-256color"; - - extraConfig = '' - set-option -g status-keys "vi" - set-option -sa terminal-features "''${TERM}:RGB" - - bind -n S-Left resize-pane -L 2 - bind -n S-Right resize-pane -R 2 - bind -n S-Down resize-pane -D 1 - bind -n S-Up resize-pane -U 1 - - bind -n C-Left resize-pane -L 10 - bind -n C-Right resize-pane -R 10 - bind -n C-Down resize-pane -D 5 - bind -n C-Up resize-pane -U 5 - - # Status line customisation - set-option -g status-left "" - set-option -g status-right " #{session_name}" - set-option -g status-right-length 100 - set-option -g status-style "fg=#7C7D83 bg=default" - set-option -g window-status-activity-style none - set-option -g window-status-current-style "fg=#E9E9EA" - - bind c new-window -c "#{pane_current_path}" - - set -g base-index 1 - set -g pane-base-index 1 - set -g renumber-windows on - - # Break a pane into a new window. - bind-key b break-pane -d - bind-key J command-prompt -p "join pane from: " "join-pane -h -s '%%'" - - bind-key C-j choose-tree - - set-window-option -g mode-keys vi - bind -T copy-mode-vi v send-keys -X begin-selection - bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard' - - bind C-j split-window -v "tmux list-sessions | sed -E 's/:.*$//' | grep -v \"^$(tmux display-message -p '#S')\$\" | fzf --reverse | xargs tmux switch-client -t" - - bind-key K run-shell 'tmux switch-client -n \; kill-session -t "$(tmux display-message -p "#S")" || tmux kill-session' - - # Allow clearing screen with ctrl-l by using C-l - bind C-l send-keys "C-l" - bind C-k send-keys "C-k" - - # Enable mouse support. - setw -g mouse on - - # Remove delay when switching Vim modes. - set -sg escape-time 0 - - set-option -g pane-active-border-style "fg=#1f2335" - set-option -g pane-border-style "fg=#1f2335" - - # Vim-like pane navigation. - bind ^ last-window - bind h select-pane -L - bind j select-pane -D - bind k select-pane -U - bind l select-pane -R - - bind-key -r f run-shell "tmux new-window tmux-sessionizer" - - bind-key -r D new-window -c "#{pane_current_path}" "[[ -e TODO.md ]] && nvim TODO.md || nvim ~/Documents/wiki/todo.txt" - bind-key -r N new-window "notes" - bind-key -r W split-window -h -c ~/Documents/wiki "nvim '+Telescope find_files'" - ''; - - plugins = with pkgs.tmuxPlugins; [ - vim-tmux-navigator - yank - ]; - }; - }; -} diff --git a/modules/home-manager/cli/todos.nix b/modules/home-manager/cli/todos.nix deleted file mode 100644 index e55c7456..00000000 --- a/modules/home-manager/cli/todos.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -let - name = "todos"; - cfg = config.cli.${name}; - - inherit (lib) mkOption types; -in -{ - options.cli.${name} = { - enable = lib.mkEnableOption "Enable ${name}"; - - directory = mkOption { - default = "${config.xdg.userDirs.documents}/todos"; - type = types.str; - }; - }; - - config = lib.mkIf cfg.enable { - home = { - packages = with pkgs; [ - todos-add - todos-edit - ]; - - sessionVariables = { - TODOS_DIRECTORY = cfg.directory; - }; - }; - }; -} diff --git a/modules/home-manager/cli/zsh/abbreviations.nix b/modules/home-manager/cli/zsh/abbreviations.nix deleted file mode 100644 index 568add15..00000000 --- a/modules/home-manager/cli/zsh/abbreviations.nix +++ /dev/null @@ -1,164 +0,0 @@ -{ - cl = "clear"; - cs = "create-script"; - daily = "run create-daily next"; - rst = "rst2pdf"; - st = "source .tmux"; - sz = "source ~/.config/zsh/.zshrc"; - ti = "timer"; - uagr = "update-all-git-repos"; - v = "nvim"; - yt = "yt-dlp"; - - evl = "export-video-list"; - vv = "cat ~/Documents/videos.json"; - - f = "find ."; - fd = "find . -type d"; - fdn = "find . -type d -name"; - ff = "find . -type f"; - ffn = "find . -type f -name"; - - g = "git"; - ga = "git add"; - gan = "git add -N"; - gap = "git add -p"; - gb = "git branch"; - gbl = "git blame"; - gc = "git commit"; - gca = "git commit --amend"; - gcan = "git commit --amend --no-edit"; - gcl = "git clone"; - gcm = "git commit -m"; - gco = "git checkout"; - gcob = "git checkout -b"; - gd = "git diff"; - gds = "git diff --staged"; - gf = "git fetch"; - gfa = "git fetch --all"; - gl = "git log"; - glg = "git log --grep"; - glo = "git log --oneline"; - glog = "git log --oneline --grep"; - glos = "git log --oneline -S"; - gls = "git log -S"; - gm = "git merge"; - gmf = "git merge --ff"; - gmnf = "git merge --no-ff"; - gp = "git push"; - gpa = "git push acquia"; - gpam = "git push acquia main"; - gpap = "git push acquia HEAD:production"; - gpf = "git push --force-with-lease"; - gpfo = "git push --force-with-lease origin"; - gpl = "git pull"; - gplr = "git pull --rebase"; - gpo = "git push origin"; - gpom = "git push origin main"; - gpt = "git push --tags"; - gr = "git rebase"; - gra = "git rebase --abort"; - grc = "git rebase --continue"; - gri = "git rebase -i"; - gs = "git status"; - gsh = "git show"; - gst = "git stash"; - gstp = "git stash pop"; - gt = "git tag"; - - j = "just"; - jb = "just build"; - jt = "just test"; - js = "just switch"; - - # tmux - ta = "tmux attach"; - tl = "tmux list-sessions"; - tk = "tmux kill-session"; - - # Docker and Docker Compose. - dk = "docker"; - dkp = "docker ps"; - dkpa = "docker ps -a"; - dkpaq = "docker ps -a -q"; - dkb = "docker build -t"; - dks = "docker start"; - dkt = "docker stop"; - dkrm = "docker rm"; - dkri = "docker rmi"; - dke = "docker exec -ti"; - dkl = "docker logs -f"; - dki = "docker images"; - dkpu = "docker pull"; - dkph = "docker push"; - dkbnc = "docker build --no-cache -t"; - dkr = "docker run --rm"; - dkrti = "docker run --rm -ti"; - dkc = "docker compose"; - dkcb = "docker compose build"; - dkcu = "docker compose up"; - dkclean = "docker ps -q -a -f status=exited | xargs -r docker rm && docker images -q -f dangling=true | xargs -r docker rmi"; - - # Nix and direnv. - dea = "direnv allow"; - dee = "direnv edit"; - nxf = "nix flake"; - nxfc = "nix flake check"; - nxfs = "nix flake show"; - nxfu = "nix flake update"; - nxr = "nix run nixpkgs#%"; - nxs = "nix shell nixpkgs#%"; - - # run scripts. - r = "run"; - rc = "run composer"; - rcda = "run composer dump-autoload"; - rci = "run composer install"; - rcr = "run composer require"; - rcu = "run composer update"; - rd = "run drush"; - rdce = "run drush config:export -y"; - rdci = "run drush config:import -y"; - rdcr = "run drush cache:rebuild"; - rdscr = "run drush php:script"; - rduli = "run drush uli"; - rdup = "run drush updatedb -y"; - rpub = "run publish"; - rt = "run test"; - - nah = "git reset --hard; git clean -fd"; - wip = "git commit -m wip"; - - dv = "devenv"; - dvi = "devenv info"; - dvp = "devenv processes"; - dvs = "devenv shell"; - dvt = "devenv tasks"; - dvu = "devenv up"; - - c = "composer"; - ci = "composer install"; - cr = "composer require"; - crd = "composer require drupal/%"; - cu = "composer update"; - cul = "composer update --lock"; - cw = "composer why"; - cwn = "composer why-not"; - - d = "drush"; - dce = "drush config:export -y"; - dci = "drush config:import -y"; - dcr = "drush cache:rebuild"; - den = "drush pm:enable -y"; - deu = "drush pm:uninstall"; - dscr = "drush php:script"; - duli = "drush uli"; - dup = "drush updatedb -y"; - - sg = "vendor/bin/sculpin generate"; - sge = "vendor/bin/sculpin generate --env"; - sgs = "vendor/bin/sculpin generate --server"; - sgsp = "vendor/bin/sculpin generate --server --port"; - sgsw = "vendor/bin/sculpin generate --server --watch"; - sgswp = "vendor/bin/sculpin generate --server --watch --port"; -} diff --git a/modules/home-manager/cli/zsh/aliases.nix b/modules/home-manager/cli/zsh/aliases.nix deleted file mode 100644 index 304d4b3f..00000000 --- a/modules/home-manager/cli/zsh/aliases.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ config, ... }: - -{ - "$" = ""; - "-" = "cd -"; - ".." = "cd .."; - "..." = "cd ../.."; - "...." = "cd ../../.."; - "....." = "cd ../../../.."; - run = "./run"; - tag = "tag-release"; - vss = "LC_ALL=C sort --unique ${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/nixos-config/modules/home-manager/cli/neovim/config/spell/en.utf-8.adddotfiles/nvim/spell/en.utf-8.add --output ${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/nixos-config/modules/home-manager/cli/neovim/config/spell/en.utf-8.add"; - wt = "git worktree"; -} diff --git a/modules/home-manager/cli/zsh/global-abbreviations.nix b/modules/home-manager/cli/zsh/global-abbreviations.nix deleted file mode 100644 index 9faa7408..00000000 --- a/modules/home-manager/cli/zsh/global-abbreviations.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ - A1 = "| awk '{print $1}'"; - C = "| xclip -sel clip"; - Fj = "| jq ."; - Fy = "| yq ."; - G = "| grep"; - GH = "| grep HTTP"; - Gi = "| grep -i"; - H2 = "| head -n 20"; - H = "| head"; - L = "| less"; - V = "| nvim -"; - X = "| xargs -I1"; -} diff --git a/modules/home-manager/coding/default.nix b/modules/home-manager/coding/default.nix deleted file mode 100644 index a8d773c7..00000000 --- a/modules/home-manager/coding/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - imports = [ - ./neovim - ./phpactor - ]; -} diff --git a/modules/home-manager/coding/neovim/config/.gitignore b/modules/home-manager/coding/neovim/config/.gitignore deleted file mode 100644 index f67ce914..00000000 --- a/modules/home-manager/coding/neovim/config/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/spell/*.spl diff --git a/modules/home-manager/coding/neovim/config/after/ftplugin/gitcommit.lua b/modules/home-manager/coding/neovim/config/after/ftplugin/gitcommit.lua deleted file mode 100644 index f1aaed51..00000000 --- a/modules/home-manager/coding/neovim/config/after/ftplugin/gitcommit.lua +++ /dev/null @@ -1,8 +0,0 @@ -vim.opt_local.colorcolumn = "50,72" -vim.opt_local.spell = true -vim.opt_local.textwidth = 72 - --- autocmd FileType gitcommit highlight ColorColumn ctermbg=8 --- filetype indent on --- filetype on --- filetype plugin on diff --git a/modules/home-manager/coding/neovim/config/after/ftplugin/markdown.lua b/modules/home-manager/coding/neovim/config/after/ftplugin/markdown.lua deleted file mode 100644 index feb36522..00000000 --- a/modules/home-manager/coding/neovim/config/after/ftplugin/markdown.lua +++ /dev/null @@ -1,9 +0,0 @@ --- TODO: Interim fix for https://github.com/nvim-treesitter/nvim-treesitter-context/issues/431. -vim.opt_local.spell = true -vim.opt_local.wrap = true - -vim.keymap.set("n", "su", "Bi{{site.url}}/") - --- Convert lines into a markdown list. -vim.keymap.set("n", "l", "vip:norm I- ") -vim.keymap.set("v", "l", ":norm I- ") diff --git a/modules/home-manager/coding/neovim/config/after/ftplugin/php.lua b/modules/home-manager/coding/neovim/config/after/ftplugin/php.lua deleted file mode 100644 index 8d33bf16..00000000 --- a/modules/home-manager/coding/neovim/config/after/ftplugin/php.lua +++ /dev/null @@ -1,3 +0,0 @@ -vim.keymap.set("v", "dd", "yodd(['pA', pA]);") -vim.keymap.set("v", "du", "yodump(['pA', pA]);") -vim.keymap.set("v", "vd", "yovar_dump(['pA', pA]);") diff --git a/modules/home-manager/coding/neovim/config/after/ftplugin/rst.lua b/modules/home-manager/coding/neovim/config/after/ftplugin/rst.lua deleted file mode 100644 index 9ea59d91..00000000 --- a/modules/home-manager/coding/neovim/config/after/ftplugin/rst.lua +++ /dev/null @@ -1,20 +0,0 @@ -local opt = vim.opt_local - -opt.spell = true -opt.wrap = true - -local cmp = require "cmp" -local sources = cmp.get_config().sources - --- TODO: confirm these aren't aleady in the list of sources to avoid duplicate suggestions. -table.insert(sources, { name = "buffer" }) -table.insert(sources, { name = "path" }) - -cmp.setup.buffer { sources = sources } - --- Convert lines into a list. -vim.keymap.set("n", "l", "vip:norm I* ") -vim.keymap.set("v", "l", ":norm I* ") - -vim.keymap.set("n", "ta", '_iTextAnnotation "A"j') -vim.keymap.set("v", "ta", ':norm ITextAnnotation "gv:norm A"') diff --git a/modules/home-manager/coding/neovim/config/after/ftplugin/term.vim b/modules/home-manager/coding/neovim/config/after/ftplugin/term.vim deleted file mode 100644 index 16bbc95e..00000000 --- a/modules/home-manager/coding/neovim/config/after/ftplugin/term.vim +++ /dev/null @@ -1,4 +0,0 @@ -setlocal norelativenumber -setlocal nonumber - -setlocal scrolloff=0 diff --git a/modules/home-manager/coding/neovim/config/after/ftplugin/text.lua b/modules/home-manager/coding/neovim/config/after/ftplugin/text.lua deleted file mode 100644 index b18b0770..00000000 --- a/modules/home-manager/coding/neovim/config/after/ftplugin/text.lua +++ /dev/null @@ -1,21 +0,0 @@ -local opt = vim.opt_local - -opt.number = false -opt.relativenumber = false -opt.spell = true -opt.wrap = true - -vim.api.nvim_create_autocmd("BufWritePre", { - buffer = 0, - callback = function() - local last_line = vim.api.nvim_buf_get_lines(0, -2, -1, false)[1] - - if last_line ~= "" then - vim.api.nvim_buf_set_lines(0, -1, -1, false, { "" }) - end - end, -}) - --- Convert lines into a markdown list. -vim.keymap.set("n", "l", "vip:norm I- ") -vim.keymap.set("v", "l", ":norm I- ") diff --git a/modules/home-manager/coding/neovim/config/autoload/opdavies.vim b/modules/home-manager/coding/neovim/config/autoload/opdavies.vim deleted file mode 100644 index 449666bf..00000000 --- a/modules/home-manager/coding/neovim/config/autoload/opdavies.vim +++ /dev/null @@ -1,12 +0,0 @@ -if !exists('*opdavies#save_and_exec') - function! opdavies#save_and_exec() abort - if &filetype == 'vim' - :silent! write - :source % - elseif &filetype == 'lua' - :silent! write - :luafile % - endif - return - endfunction -endif diff --git a/modules/home-manager/coding/neovim/config/init.lua b/modules/home-manager/coding/neovim/config/init.lua deleted file mode 100644 index 0437de40..00000000 --- a/modules/home-manager/coding/neovim/config/init.lua +++ /dev/null @@ -1 +0,0 @@ -require "opdavies" diff --git a/modules/home-manager/coding/neovim/config/lua/opdavies/globals.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/globals.lua deleted file mode 100644 index d6fd70c6..00000000 --- a/modules/home-manager/coding/neovim/config/lua/opdavies/globals.lua +++ /dev/null @@ -1,13 +0,0 @@ -P = function(v) - print(vim.inspect(v)) - return v -end - -RELOAD = function(...) - return require("plenary.reload").reload_module(...) -end - -R = function(name) - RELOAD(name) - return require(name) -end diff --git a/modules/home-manager/coding/neovim/config/lua/opdavies/init.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/init.lua deleted file mode 100644 index 0c5c7570..00000000 --- a/modules/home-manager/coding/neovim/config/lua/opdavies/init.lua +++ /dev/null @@ -1,4 +0,0 @@ -require "opdavies.globals" -require "opdavies.options" -require "opdavies.keymaps" -require "opdavies.lsp" diff --git a/modules/home-manager/coding/neovim/config/lua/opdavies/keymaps.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/keymaps.lua deleted file mode 100644 index 09f67f9d..00000000 --- a/modules/home-manager/coding/neovim/config/lua/opdavies/keymaps.lua +++ /dev/null @@ -1,121 +0,0 @@ -local set = vim.keymap.set - -set("n", "", "silent !tmux new-window tmux-sessionizer") - --- Execute Lua in the current file, line or range. -set("n", "x", "source %") -set("n", "x", ":.lua") -set("v", "x", ":lua") - --- Yank from the current column to the end of the line -set("n", "Y", "yg$") - --- Keep things centred -set("n", "n", "nzzzv") -set("n", "N", "Nzzzv") - --- Disable up and down arrow keys. -set("v", "", "") -set("v", "", "") - -set("n", "", "gT") -set("n", "", "gt") - --- Easily switch back to visual mode. -set("i", "jj", "") -set("i", "jk", "") - --- Easy insertion of a trailing ; or , from insert mode -set("i", ",,", "A,") -set("i", ";;", "A;") - --- Automatically resize buffers. -set("n", "=", ":wincmd =", { noremap = true, silent = true }) - --- Move line(s) up and down. -local opts = { noremap = true, silent = true } -set("i", "", ":m .+1==gi", opts) -set("i", "", ":m .-2==gi", opts) -set("n", "", ":m .+1==", opts) -set("n", "", ":m .-2==", opts) -set("v", "", ":m '>+1gv=gv", opts) -set("v", "", ":m '<-2gv=gv", opts) - --- Re-centre when navigating. -set("n", "#", "#zz", opts) -set("n", "%", "%zz", opts) -set("n", "*", "*zz", opts) -set("n", "", "zz", opts) -set("n", "", "zz", opts) -set("n", "", "zz", opts) -set("n", "", "zz", opts) -set("n", "G", "Gzz", opts) -set("n", "N", "Nzz", opts) -set("n", "gg", "ggzz", opts) -set("n", "n", "Nzz", opts) -set("n", "{", "{zz", opts) -set("n", "}", "}zz", opts) - --- Clears hlsearch after doing a search, otherwise just does normal stuff -vim.cmd [[ nnoremap {-> v:hlsearch ? ":nohl\" : "\"}() ]] - --- Quicker macro playback. -set("n", "Q", "@qj") -set("x", "Q", ":norm @q") - -set("v", "Q", "") - -set("v", "J", ":m '>+1gvrgv") -set("v", "K", ":m '<-2gv=gv") - -set("n", "J", "mzJ`z") -set("n", "", "zz") -set("n", "", "zz") -set("n", "n", "nzzzv") -set("n", "N", "Nzzzv") - -set("n", "ec", ":edit composer.json") -set("n", "ef", ":edit flake.nix") -set("n", "ej", ":edit justfile") -set("n", "en", ":edit notes.txt") -set("n", "er", ":edit run") -set("n", "et", function() vim.cmd.tabnew("todo.txt") end) - -set({ "n", "v" }, "y", [["+y]]) -set("n", "Y", [["+Y]]) - --- Re-add functionality to open the URL under the cursor. --- This is overridden by mini.operators to exchange text regions. -vim.keymap.set("n", "gx", function() - local url = vim.fn.expand "" - vim.fn["netrw#BrowseX"](url, 0) -end, { desc = "Open URL under cursor" }) - -set("n", "f", vim.lsp.buf.format); - -local notes_directory = os.getenv("NOTES_DIRECTORY") -local wiki_directory = os.getenv("XDG_DOCUMENTS_DIR") .. "/wiki" - -set("n", "gn", function() - require("telescope.builtin").live_grep({ - cwd = notes_directory, - }) -end) - -set("n", "n", function() - local filepath = string.format("%s/%s.txt", notes_directory, os.date("%Y-%m-%d")) - - vim.cmd.tabnew(vim.fn.fnameescape(filepath)) -end) - -set("n", "fw", function() - require("telescope.builtin").find_files({ - cwd = wiki_directory, - }) -end) - -set("n", "gw", function() - require("telescope.builtin").live_grep({ - cwd = wiki_directory, - }) -end) diff --git a/modules/home-manager/coding/neovim/config/lua/opdavies/lsp/handlers.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/lsp/handlers.lua deleted file mode 100644 index bf0be545..00000000 --- a/modules/home-manager/coding/neovim/config/lua/opdavies/lsp/handlers.lua +++ /dev/null @@ -1,73 +0,0 @@ -local M = {} - -local function should_remove_diagnostic(messages_to_filter, message) - for _, filter_message in ipairs(messages_to_filter) do - if message:match(filter_message) then - return true - end - end - - return false -end - -M.definition = function() - local params = vim.lsp.util.make_position_params() - - vim.lsp.buf_request(0, "textDocument/definition", params, function(err, result, ctx, config) - local bufnr = ctx.bufnr - local ft = vim.api.nvim_buf_get_option(bufnr, "filetype") - - local new_result = vim.tbl_filter(function(v) - -- Remove any definitions within the nix store via the .direnv directory. - if string.find(v.targetUri, ".direnv") then - return false - end - - -- Remove definitions within vendor-bin directory for PHP files. - if ft == "php" then - if string.find(v.targetUri, "vendor%-bin") then - return false - end - end - - return true - end, result) - - if #new_result > 0 then - result = new_result - end - - vim.lsp.handlers["textDocument/definition"](err, result, ctx, config) - vim.cmd [[normal! zz]] - end) -end - -M.on_publish_diagnostics = function(_, result, ctx, config) - local client = vim.lsp.get_client_by_id(ctx.client_id) - - if client.name == "cssls" then - local filtered_diagnostics = {} - - local messages_to_filter = { - "Unknown at rule @apply", - "Unknown at rule @plugin", - "Unknown at rule @tailwind", - "Unknown at rule @theme", - } - - -- For each diagnostic, ensure its mesages doesn't match one I want to - -- ignore before adding it to the result. If it matches, don't add it to the - -- result and it won't be shown. - for _, diagnostic in ipairs(result.diagnostics) do - if not should_remove_diagnostic(messages_to_filter, diagnostic.message) then - table.insert(filtered_diagnostics, diagnostic) - end - end - - result.diagnostics = filtered_diagnostics - end - - vim.lsp.diagnostic.on_publish_diagnostics(_, result, ctx, config) -end - -return M diff --git a/modules/home-manager/coding/neovim/config/lua/opdavies/lsp/init.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/lsp/init.lua deleted file mode 100644 index 9fa94ff6..00000000 --- a/modules/home-manager/coding/neovim/config/lua/opdavies/lsp/init.lua +++ /dev/null @@ -1,24 +0,0 @@ -vim.diagnostic.config { - float = { source = true }, - signs = true, - underline = false, - update_in_insert = false, - virtual_text = { spacing = 2 }, -} - -vim.api.nvim_create_autocmd("LspAttach", { - callback = function() - local builtin = require "telescope.builtin" - - vim.keymap.set("n", "gd", builtin.lsp_definitions, { buffer = 0 }) - vim.keymap.set("n", "gr", builtin.lsp_references, { buffer = 0 }) - vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { buffer = 0 }) - vim.keymap.set("n", "gT", vim.lsp.buf.type_definition, { buffer = 0 }) - vim.keymap.set("n", "K", vim.lsp.buf.hover, { buffer = 0 }) - - vim.keymap.set("n", "ca", vim.lsp.buf.code_action, { buffer = 0 }) - vim.keymap.set("n", "cr", vim.lsp.buf.rename, { buffer = 0 }) - - vim.keymap.set("n", "dl", vim.diagnostic.setqflist, { buffer = 0 }) - end, -}) diff --git a/modules/home-manager/coding/neovim/config/lua/opdavies/options.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/options.lua deleted file mode 100644 index 745bd8f7..00000000 --- a/modules/home-manager/coding/neovim/config/lua/opdavies/options.lua +++ /dev/null @@ -1,53 +0,0 @@ -vim.g.mapleader = " " -vim.g.snippets = "luasnip" - -local settings = { - autoindent = true, - backup = false, - breakindent = true, - expandtab = true, - exrc = true, - foldlevel = 1, - foldlevelstart = 99, - foldmethod = "indent", - formatoptions = "clqjp", - hidden = false, - hlsearch = false, - inccommand = "split", - laststatus = 3, - linebreak = true, - list = true, - mouse = "a", - number = true, - pumblend = 10, - pumheight = 10, - relativenumber = true, - scrolloff = 5, - shiftwidth = 2, - showmode = false, - signcolumn = "yes:1", - smartindent = true, - softtabstop = 2, - spellfile = "/home/opdavies/Code/personal/nixos-config/modules/home-manager/cli/neovim/config/spell/en.utf-8.add", - splitbelow = true, - splitright = true, - swapfile = false, - syntax = "on", - tabstop = 2, - termguicolors = true, - textwidth = 0, - undodir = os.getenv "XDG_STATE_HOME" .. "/nvim/undodir", - undofile = true, - updatetime = 1000, - wrap = false, -} - -for key, value in pairs(settings) do - vim.o[key] = value -end - -vim.opt.backupdir:remove "." -- keep backups out of the current directory -vim.opt.completeopt = { "menu", "menuone", "noinsert", "noselect" } -vim.opt.listchars:append { - trail = "·", -} diff --git a/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/javascript.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/javascript.lua deleted file mode 100644 index c5af9696..00000000 --- a/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/javascript.lua +++ /dev/null @@ -1,12 +0,0 @@ -require("luasnip.session.snippet_collection").clear_snippets "javascript" - -local ls = require "luasnip" - -local i = ls.insert_node -local s = ls.snippet - -local fmta = require("luasnip.extras.fmt").fmta - -ls.add_snippets("javascript", { - s("log", fmta("console.log(<>);", { i(1, "value") })), -}) diff --git a/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/lua.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/lua.lua deleted file mode 100644 index e7eb8cd1..00000000 --- a/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/lua.lua +++ /dev/null @@ -1,23 +0,0 @@ -require("luasnip.session.snippet_collection").clear_snippets "lua" - -local ls = require "luasnip" - -local f = ls.function_node -local i = ls.insert_node -local s = ls.snippet - -local fmt = require("luasnip.extras.fmt").fmt - -ls.add_snippets("lua", { - s( - "req", - fmt([[local {} = require "{}"]], { - f(function(import_name) - local parts = vim.split(import_name[1][1], ".", true) - - return parts[#parts] or "" - end, { 1 }), - i(1), - }) - ), -}) diff --git a/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/scss.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/scss.lua deleted file mode 100644 index 35520859..00000000 --- a/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/scss.lua +++ /dev/null @@ -1,12 +0,0 @@ -require("luasnip.session.snippet_collection").clear_snippets "scss" - -local ls = require "luasnip" - -local i = ls.insert_node -local s = ls.snippet - -local fmta = require("luasnip.extras.fmt").fmta - -ls.add_snippets("scss", { - s("bp", fmta("@include breakpoint(<>) {\n <>\n}", { i(1), i(0) })), -}) diff --git a/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/yaml.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/yaml.lua deleted file mode 100644 index 399a3072..00000000 --- a/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/yaml.lua +++ /dev/null @@ -1,47 +0,0 @@ -require("luasnip.session.snippet_collection").clear_snippets "yaml" - -local ls = require "luasnip" - -local c = ls.choice_node -local i = ls.insert_node -local s = ls.snippet -local t = ls.text_node - -local fmta = require("luasnip.extras.fmt").fmta -local rep = require("luasnip.extras").rep - -ls.add_snippets("yaml", { - s( - "drupal_info", - fmta( - [[ - name: - description: - core_version_requirement: ^10 || ^11 - type: - package: - ]], - { module_name = i(1), description = i(2), type = c(3, { t "module", t "theme" }), package = i(0) } - ) - ), - - s( - "drupal_route", - fmta( - [[ - .: - path: / - defaults: - _controller: Drupal\\Controller\ - # _form: - # _title: - # _title_callback: - methods: [GET] - requirements: - _permission: access content - # _access: TRUE - ]], - { module = i(1), route = i(2), path = i(3), module_same = rep(1), class = i(4), finish = i(0) } - ) - ), -}) diff --git a/modules/home-manager/coding/neovim/config/lua/opdavies/telescope/multigrep.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/telescope/multigrep.lua deleted file mode 100644 index d4418c5d..00000000 --- a/modules/home-manager/coding/neovim/config/lua/opdavies/telescope/multigrep.lua +++ /dev/null @@ -1,57 +0,0 @@ -local conf = require("telescope.config").values -local finders = require "telescope.finders" -local make_entry = require "telescope.make_entry" -local pickers = require "telescope.pickers" - -local M = {} - -local live_multigrep = function(opts) - opts = opts or {} - opts.cwd = opts.cwd or vim.uv.cwd() - - local finder = finders.new_async_job { - command_generator = function(prompt) - if not prompt or prompt == "" then - return nil - end - - local pieces = vim.split(prompt, " ") - local args = { "rg" } - - if pieces[1] then - table.insert(args, "-e") - table.insert(args, pieces[1]) - end - - if pieces[2] then - table.insert(args, "-g") - table.insert(args, pieces[2]) - end - - ---@diagnostic disable-next-line: deprecated - return vim.tbl_flatten { - args, - { "--color=never", "--no-heading", "--with-filename", "--line-number", "--column", "--smart-case" }, - } - end, - - cwd = opts.cwd, - entry_maker = make_entry.gen_from_vimgrep(opts), - } - - pickers - .new(opts, { - debounce = 100, - finder = finder, - previewer = conf.grep_previewer(opts), - prompt_title = "Multi Grep", - sorter = require("telescope.sorters").empty(), - }) - :find() -end - -M.setup = function() - vim.keymap.set("n", "fg", live_multigrep) -end - -return M diff --git a/modules/home-manager/coding/neovim/config/plugin/autocommands.lua b/modules/home-manager/coding/neovim/config/plugin/autocommands.lua deleted file mode 100644 index c4641b1c..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/autocommands.lua +++ /dev/null @@ -1,7 +0,0 @@ -vim.api.nvim_create_autocmd("TextYankPost", { - desc = "Highlight when yanking (copying) text", - group = vim.api.nvim_create_augroup("kickstart-highlight-yank", { clear = true }), - callback = function() - vim.highlight.on_yank() - end, -}) diff --git a/modules/home-manager/coding/neovim/config/plugin/colorscheme.lua b/modules/home-manager/coding/neovim/config/plugin/colorscheme.lua deleted file mode 100644 index d949f5fd..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/colorscheme.lua +++ /dev/null @@ -1,25 +0,0 @@ -local status_ok, catppuccin = pcall(require, "catppuccin") -if not status_ok then - return -end - -catppuccin.setup { - flavour = "macchiato", - integrations = { - cmp = true, - gitsigns = true, - mini = { - enabled = true, - indentscope_color = "", - }, - native_lsp = { - enabled = true, - }, - telescope = true, - treesitter = true, - }, - term_colors = true, - transparent_background = true, -} - -vim.cmd.colorscheme "catppuccin" diff --git a/modules/home-manager/coding/neovim/config/plugin/comment.lua b/modules/home-manager/coding/neovim/config/plugin/comment.lua deleted file mode 100644 index eb350eb9..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/comment.lua +++ /dev/null @@ -1,19 +0,0 @@ -local status_ok, comment = pcall(require, "Comment") -if not status_ok then - return -end - -comment.setup { - padding = true, - - opleader = { - line = "gc", - block = "gb", - }, - - mappings = { - basic = true, - extra = true, - extended = false, - }, -} diff --git a/modules/home-manager/coding/neovim/config/plugin/completion.lua b/modules/home-manager/coding/neovim/config/plugin/completion.lua deleted file mode 100644 index d1a8a111..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/completion.lua +++ /dev/null @@ -1,76 +0,0 @@ -local cmp = require "cmp" -local ls = require "luasnip" - -vim.opt.shortmess:append "c" - -cmp.setup { - snippet = { - expand = function(args) - ls.lsp_expand(args.body) - end, - }, - - mapping = cmp.mapping.preset.insert { - [""] = cmp.mapping.close(), - - [""] = cmp.mapping(function() - if ls.locally_jumpable(-1) then - ls.jump(-1) - end - end, { "i", "s" }), - - [""] = cmp.mapping(function() - if ls.expand_or_locally_jumpable() then - ls.expand_or_jump() - end - end, { "i", "s" }), - - [""] = cmp.mapping.confirm { select = true }, - [""] = cmp.config.disable, - }, - - sources = { - { name = "nvim_lsp" }, - { name = "nvim_lua" }, - { name = "luasnip" }, - { name = "buffer" }, - { name = "calc" }, - }, - - sorting = { - comparators = { - cmp.config.compare.offset, - cmp.config.compare.exact, - cmp.config.compare.score, - cmp.config.compare.kind, - cmp.config.compare.sort_text, - cmp.config.compare.length, - cmp.config.compare.order, - }, - }, - - formatting = { - format = require("lspkind").cmp_format { - with_text = true, - menu = { - buffer = "[buf]", - cmp_tabnine = "[tn]", - luasnip = "[snip]", - nvim_lsp = "[lsp]", - nvim_lua = "[lua]", - path = "[path]", - }, - }, - }, - - experimental = { - native_menu = false, - }, -} - -cmp.setup.filetype({ "mysql", "sql" }, { - sources = { - { name = "vim-dadbod-completion" }, - { name = "buffer" }, - }, -}) diff --git a/modules/home-manager/coding/neovim/config/plugin/conform.lua b/modules/home-manager/coding/neovim/config/plugin/conform.lua deleted file mode 100644 index 733eaca4..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/conform.lua +++ /dev/null @@ -1,5 +0,0 @@ -local conform = require "conform" - -conform.setup { - formatters_by_ft = {} -} diff --git a/modules/home-manager/coding/neovim/config/plugin/dap.lua b/modules/home-manager/coding/neovim/config/plugin/dap.lua deleted file mode 100644 index f9c1f3ce..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/dap.lua +++ /dev/null @@ -1,69 +0,0 @@ -local dap = require "dap" -local ui = require "dapui" - -dap.adapters.php = { - type = "executable", - command = "node", - args = { os.getenv "HOME" .. "/build/vscode-php-debug/out/phpDebug.js" }, -} - -dap.configurations.php = { - { - type = "php", - request = "launch", - name = "Listen for Xdebug", - port = 9003, - pathMappings = { - ["/app"] = "${workspaceFolder}", - ["/var/www/html"] = "${workspaceFolder}", - }, - }, -} - -dap.listeners.after.event_initialized["ui_config"] = function() - ui.open() -end - -dap.listeners.before.event_terminated["ui_config"] = function() - ui.close() -end - -dap.listeners.before.event_exited["ui_config"] = function() - ui.close() -end - -ui.setup { - layouts = { - { - elements = { - { id = "scopes", size = 0.25 }, - "breakpoints", - "stacks", - "watches", - }, - size = 40, -- 40 columns - position = "right", - }, - { - elements = { - "repl", - "console", - }, - size = 0.25, -- 25% of total lines - position = "bottom", - }, - }, -} - -require("nvim-dap-virtual-text").setup { - commented = true, -} - -vim.keymap.set("n", "b", dap.toggle_breakpoint) -vim.keymap.set("n", "gb", dap.run_to_cursor) - -vim.keymap.set("n", "", dap.continue) -vim.keymap.set("n", "", dap.step_into) -vim.keymap.set("n", "", dap.step_over) -vim.keymap.set("n", "", dap.step_out) -vim.keymap.set("n", "", dap.step_back) diff --git a/modules/home-manager/coding/neovim/config/plugin/filetype.lua b/modules/home-manager/coding/neovim/config/plugin/filetype.lua deleted file mode 100644 index cf0ab512..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/filetype.lua +++ /dev/null @@ -1,15 +0,0 @@ -vim.filetype.add { - extension = { - inc = "php", - install = "php", - module = "php", - neon = "yaml", - pcss = "scss", - theme = "php", - }, - - filename = { - ["composer.lock"] = "json", - ["phpstan.neon.dist"] = "yaml", - }, -} diff --git a/modules/home-manager/coding/neovim/config/plugin/fugitive.lua b/modules/home-manager/coding/neovim/config/plugin/fugitive.lua deleted file mode 100644 index 4aded48c..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/fugitive.lua +++ /dev/null @@ -1,25 +0,0 @@ -vim.keymap.set("n", "gc", "Git commitK") - --- Open the ":Git" window in its own buffer, not a split. -vim.keymap.set("n", "gs", "0Git") - -vim.api.nvim_create_autocmd("BufWinEnter", { - pattern = "*", - - callback = function() - if vim.bo.ft ~= "fugitive" then - return - end - - local bufnr = vim.api.nvim_get_current_buf() - local opts = { buffer = bufnr, remap = false } - - vim.keymap.set("n", "p", function() - vim.cmd.Git "push" - end, opts) - - vim.keymap.set("n", "P", function() - vim.cmd.Git { "pull", "--rebase" } - end, opts) - end, -}) diff --git a/modules/home-manager/coding/neovim/config/plugin/gitsigns.lua b/modules/home-manager/coding/neovim/config/plugin/gitsigns.lua deleted file mode 100644 index 16b2f800..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/gitsigns.lua +++ /dev/null @@ -1,30 +0,0 @@ -local gitsigns = require "gitsigns" - -gitsigns.setup { - linehl = false, - numhl = true, -} - -local set = vim.keymap.set - -set("n", "[h", "Gitsigns prev_hunk") -set("n", "]h", "Gitsigns next_hunk") - -set("n", "hR", gitsigns.reset_buffer) -set("n", "hS", gitsigns.stage_buffer) -set("n", "hb", gitsigns.blame_line) -set("n", "hp", gitsigns.preview_hunk) -set("n", "hr", gitsigns.reset_hunk) -set("n", "hs", gitsigns.stage_hunk) -set("n", "hu", gitsigns.undo_stage_hunk) - -set("v", "hr", function() - gitsigns.reset_hunk { vim.fn.line ".", vim.fn.line "v" } -end) - -set("v", "hs", function() - gitsigns.stage_hunk { vim.fn.line ".", vim.fn.line "v" } -end) - --- Text object. -set({ "o", "x" }, "ih", ":Gitsigns select_hunk") diff --git a/modules/home-manager/coding/neovim/config/plugin/harpoon.lua b/modules/home-manager/coding/neovim/config/plugin/harpoon.lua deleted file mode 100644 index 738ca9cc..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/harpoon.lua +++ /dev/null @@ -1,34 +0,0 @@ -local harpoon = require "harpoon" - -harpoon:setup() - -vim.keymap.set("n", "a", function() - harpoon:list():add() -end) - -vim.keymap.set("n", "", function() - harpoon.ui:toggle_quick_menu(harpoon:list()) -end) - -vim.keymap.set("n", "", function() - harpoon:list():select(1) -end) - -vim.keymap.set("n", "", function() - harpoon:list():select(2) -end) - -vim.keymap.set("n", "", function() - harpoon:list():select(3) -end) - -vim.keymap.set("n", "", function() - harpoon:list():select(4) -end) - --- Set 1..5 be my shortcuts to moving to the files -for _, idx in ipairs { 1, 2, 3, 4, 5 } do - vim.keymap.set("n", string.format("%d", idx), function() - harpoon:list():select(idx) - end) -end diff --git a/modules/home-manager/coding/neovim/config/plugin/lint.lua b/modules/home-manager/coding/neovim/config/plugin/lint.lua deleted file mode 100644 index 249cf0f8..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/lint.lua +++ /dev/null @@ -1,12 +0,0 @@ -local lint = require "lint" - -lint.linters_by_ft = {}; - -local lint_augroup = vim.api.nvim_create_augroup("lint", { clear = true }) - -vim.api.nvim_create_autocmd({ "BufEnter", "BufWritePost", "InsertLeave" }, { - group = lint_augroup, - callback = function() - lint.try_lint() - end, -}) diff --git a/modules/home-manager/coding/neovim/config/plugin/mini.lua b/modules/home-manager/coding/neovim/config/plugin/mini.lua deleted file mode 100644 index 933bb1e9..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/mini.lua +++ /dev/null @@ -1,13 +0,0 @@ -require("mini.ai").setup { n_lines = 500 } - -require("mini.align").setup {} - -require("mini.bracketed").setup {} - -require("mini.move").setup {} - -require("mini.operators").setup {} - -require("mini.splitjoin").setup {} - -require("mini.surround").setup {} diff --git a/modules/home-manager/coding/neovim/config/plugin/oil.lua b/modules/home-manager/coding/neovim/config/plugin/oil.lua deleted file mode 100644 index d6b3cfd0..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/oil.lua +++ /dev/null @@ -1,16 +0,0 @@ -require("oil").setup { - columns = {}, - - keymaps = { - [""] = false, - [""] = "actions.select_split", - }, - - skip_confirm_for_simple_edits = true, - - view_options = { - show_hidden = true, - }, -} - -vim.keymap.set("n", "-", "Oil", { desc = "Open parent directory" }) diff --git a/modules/home-manager/coding/neovim/config/plugin/phpactor.lua b/modules/home-manager/coding/neovim/config/plugin/phpactor.lua deleted file mode 100644 index 873d853c..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/phpactor.lua +++ /dev/null @@ -1,2 +0,0 @@ -vim.keymap.set("n", "pm", "PhpactorContextMenu") -vim.keymap.set("n", "pn", "PhpactorClassNew") diff --git a/modules/home-manager/coding/neovim/config/plugin/refactoring.lua b/modules/home-manager/coding/neovim/config/plugin/refactoring.lua deleted file mode 100644 index a23a0bb2..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/refactoring.lua +++ /dev/null @@ -1,12 +0,0 @@ -local refactoring = require "refactoring" - --- TODO: add keymaps - https://github.com/ThePrimeagen/refactoring.nvim#configuration-for-refactoring-operations -refactoring.setup {} - -local opts = { silent = true } - -vim.keymap.set("n", "ri", "lua require 'refactoring'.refactor 'Inline Variable'", opts) - -vim.keymap.set("v", "re", "lua require 'refactoring'.refactor 'Extract Function'", opts) -vim.keymap.set("v", "ri", "lua require 'refactoring'.refactor 'Inline Variable'", opts) -vim.keymap.set("v", "rv", "lua require 'refactoring'.refactor 'Extract Variable'", opts) diff --git a/modules/home-manager/coding/neovim/config/plugin/snippets.lua b/modules/home-manager/coding/neovim/config/plugin/snippets.lua deleted file mode 100644 index c483d35a..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/snippets.lua +++ /dev/null @@ -1,32 +0,0 @@ -local ls = require "luasnip" - -ls.config.set_config { - enable_autosnippets = true, - history = true, - updateevents = "TextChanged,TextChangedI", -} - -for _, ft_path in ipairs(vim.api.nvim_get_runtime_file("lua/opdavies/snippets/*.lua", true)) do - loadfile(ft_path)() -end - --- Expand the current item or just to the next item within the snippet. -vim.keymap.set({ "i", "s" }, "", function() - if ls.expand_or_jumpable() then - ls.expand_or_jump() - end -end, { silent = true }) - --- Jump backwards. -vim.keymap.set({ "i", "s" }, "", function() - if ls.jumpable(-1) then - ls.jump(-1) - end -end, { silent = true }) - --- Select within a list of options. -vim.keymap.set("i", "", function() - if ls.choice_active() then - ls.change_choice(1) - end -end) diff --git a/modules/home-manager/coding/neovim/config/plugin/telescope.lua b/modules/home-manager/coding/neovim/config/plugin/telescope.lua deleted file mode 100644 index 81e58eef..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/telescope.lua +++ /dev/null @@ -1,64 +0,0 @@ -local telescope = require "telescope" - -telescope.setup { - defaults = { - layout_config = { prompt_position = "top" }, - path_display = { truncate = 1 }, - prompt_prefix = "$ ", - sorting_strategy = "ascending", - }, - - pickers = { - lsp_references = { - previewer = false, - }, - }, - - extensions = { - ["ui-select"] = { - require("telescope.themes").get_dropdown {}, - }, - }, -} - -telescope.load_extension "fzf" -telescope.load_extension "refactoring" -telescope.load_extension "ui-select" - -local builtin = require "telescope.builtin" - -local M = {} - -M.grep_bluecheese = function() - builtin.live_grep { cwd = "web/sites/default/themes/bluecheese" } -end - -M.grep_drupalorg_theme = function() - builtin.live_grep { cwd = "web/themes/contrib/drupalorg_theme" } -end - -M.search_all_files = function() - builtin.find_files { - find_command = { "rg", "--no-ignore", "--files" }, - } -end - -vim.keymap.set("n", "/", builtin.current_buffer_fuzzy_find) -vim.keymap.set("n", "fb", builtin.buffers) -vim.keymap.set("n", "fd", builtin.find_files) -vim.keymap.set("n", "fh", builtin.help_tags) -vim.keymap.set("n", "fi", M.search_all_files) -vim.keymap.set("n", "fk", builtin.keymaps) -vim.keymap.set("n", "fr", builtin.lsp_references) -vim.keymap.set("n", "ft", builtin.git_files) - -vim.keymap.set("n", "ds", builtin.lsp_document_symbols) - -vim.keymap.set("n", "gw", builtin.grep_string) - -vim.keymap.set("n", "dgb", M.grep_bluecheese) -vim.keymap.set("n", "dgd", M.grep_drupalorg_theme) - -vim.keymap.set({ "n", "v" }, "gw", builtin.grep_string) - -require("opdavies.telescope.multigrep").setup {} diff --git a/modules/home-manager/coding/neovim/config/plugin/treesitter.lua b/modules/home-manager/coding/neovim/config/plugin/treesitter.lua deleted file mode 100644 index 88e08991..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/treesitter.lua +++ /dev/null @@ -1,133 +0,0 @@ -local configs = require "nvim-treesitter.configs" -local ts_repeat_move = require "nvim-treesitter.textobjects.repeatable_move" - -configs.setup { - autotag = { - enable = true, - }, - - context_commenting = { - enable = true, - }, - - highlight = { - enable = true, - }, - - indent = { - disable = { "yaml" }, - enable = true, - }, - - matchup = { - enable = true, - }, - - textobjects = { - select = { - enable = true, - lookahead = true, - - keymaps = { - ["a="] = { query = "@assignment.outer", desc = "Select outer part of an assignment" }, - ["i="] = { query = "@assignment.inner", desc = "Select inner part of an assignment" }, - ["l="] = { query = "@assignment.lhs", desc = "Select left hand side of an assignment" }, - ["r="] = { query = "@assignment.rhs", desc = "Select right hand side of an assignment" }, - - ["a:"] = { query = "@property.outer", desc = "Select outer part of an object property" }, - ["i:"] = { query = "@property.inner", desc = "Select inner part of an object property" }, - ["l:"] = { query = "@property.lhs", desc = "Select left part of an object property" }, - ["r:"] = { query = "@property.rhs", desc = "Select right part of an object property" }, - - ["aa"] = { query = "@parameter.outer", desc = "Select outer part of a parameter/argument" }, - ["ia"] = { query = "@parameter.inner", desc = "Select inner part of a parameter/argument" }, - - ["ac"] = { query = "@class.outer", desc = "Select outer part of a class" }, - ["ic"] = { query = "@class.inner", desc = "Select inner part of a class" }, - - ["af"] = { query = "@call.outer", desc = "Select outer part of a function call" }, - ["if"] = { query = "@call.inner", desc = "Select inner part of a function call" }, - - ["ai"] = { query = "@conditional.outer", desc = "Select outer part of a conditional" }, - ["ii"] = { query = "@conditional.inner", desc = "Select inner part of a conditional" }, - - ["al"] = { query = "@loop.outer", desc = "Select outer part of a loop" }, - ["il"] = { query = "@loop.inner", desc = "Select inner part of a loop" }, - - ["am"] = { query = "@function.outer", desc = "Select outer part of a method/function definition" }, - ["im"] = { query = "@function.inner", desc = "Select inner part of a method/function definition" }, - }, - }, - }, - - swap = { - enable = true, - - swap_next = { - ["na"] = "@parameter.inner", -- swap parameters/argument with next - ["n:"] = "@property.outer", -- swap object property with next - ["nm"] = "@function.outer", -- swap function with next - }, - - swap_previous = { - ["pa"] = "@parameter.inner", -- swap parameters/argument with prev - ["p:"] = "@property.outer", -- swap object property with prev - ["pm"] = "@function.outer", -- swap function with previous - }, - }, - - move = { - enable = true, - set_jumps = true, -- whether to set jumps in the jumplist - - goto_next_start = { - ["]f"] = { query = "@call.outer", desc = "Next function call start" }, - ["]m"] = { query = "@function.outer", desc = "Next method/function def start" }, - ["]c"] = { query = "@class.outer", desc = "Next class start" }, - ["]i"] = { query = "@conditional.outer", desc = "Next conditional start" }, - ["]l"] = { query = "@loop.outer", desc = "Next loop start" }, - - ["]s"] = { query = "@scope", query_group = "locals", desc = "Next scope" }, - ["]z"] = { query = "@fold", query_group = "folds", desc = "Next fold" }, - }, - - goto_next_end = { - ["]F"] = { query = "@call.outer", desc = "Next function call end" }, - ["]M"] = { query = "@function.outer", desc = "Next method/function def end" }, - ["]C"] = { query = "@class.outer", desc = "Next class end" }, - ["]I"] = { query = "@conditional.outer", desc = "Next conditional end" }, - ["]L"] = { query = "@loop.outer", desc = "Next loop end" }, - }, - - goto_previous_start = { - ["[f"] = { query = "@call.outer", desc = "Prev function call start" }, - ["[m"] = { query = "@function.outer", desc = "Prev method/function def start" }, - ["[c"] = { query = "@class.outer", desc = "Prev class start" }, - ["[i"] = { query = "@conditional.outer", desc = "Prev conditional start" }, - ["[l"] = { query = "@loop.outer", desc = "Prev loop start" }, - }, - - goto_previous_end = { - ["[F"] = { query = "@call.outer", desc = "Prev function call end" }, - ["[M"] = { query = "@function.outer", desc = "Prev method/function def end" }, - ["[C"] = { query = "@class.outer", desc = "Prev class end" }, - ["[I"] = { query = "@conditional.outer", desc = "Prev conditional end" }, - ["[L"] = { query = "@loop.outer", desc = "Prev loop end" }, - }, - }, -} - -local set = vim.keymap.set - -set("n", "th", "TSHighlightCapturesUnderCursor") -set("n", "tp", "TSPlaygroundToggle") - --- vim way: ; goes to the direction you were moving. -set({ "n", "o", "x" }, ";", ts_repeat_move.repeat_last_move) -set({ "n", "o", "x" }, ",", ts_repeat_move.repeat_last_move_opposite) - --- Optionally, make builtin f, F, t, T also repeatable with ; and , -set({ "n", "o", "x" }, "f", ts_repeat_move.builtin_f) -set({ "n", "o", "x" }, "F", ts_repeat_move.builtin_F) -set({ "n", "o", "x" }, "t", ts_repeat_move.builtin_t) -set({ "n", "o", "x" }, "T", ts_repeat_move.builtin_T) diff --git a/modules/home-manager/coding/neovim/config/plugin/undotree.lua b/modules/home-manager/coding/neovim/config/plugin/undotree.lua deleted file mode 100644 index b6b9276a..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/undotree.lua +++ /dev/null @@ -1 +0,0 @@ -vim.keymap.set("n", "u", vim.cmd.UndotreeToggle) diff --git a/modules/home-manager/coding/neovim/config/plugin/vim-test.lua b/modules/home-manager/coding/neovim/config/plugin/vim-test.lua deleted file mode 100644 index 26aaf70f..00000000 --- a/modules/home-manager/coding/neovim/config/plugin/vim-test.lua +++ /dev/null @@ -1,16 +0,0 @@ -local set = vim.keymap.set - -local options = { - silent = true, -} - -set("n", "tf", ":TestFile", options) -set("n", "tg", ":TestVisit", options) -set("n", "tl", ":TestLast", options) -set("n", "tn", ":TestNearest", options) -set("n", "ts", ":TestSuite", options) - -vim.cmd [[ - let test#php#phpunit#options = '--colors=always --testdox' - let g:test#strategy = 'vimux' -]] diff --git a/modules/home-manager/coding/neovim/config/stylua.toml b/modules/home-manager/coding/neovim/config/stylua.toml deleted file mode 100644 index 2c7fb8a9..00000000 --- a/modules/home-manager/coding/neovim/config/stylua.toml +++ /dev/null @@ -1,8 +0,0 @@ -indent_type = "Spaces" -indent_width = 2 -line_endings = "Unix" -no_call_parentheses = true -quote_style = "AutoPreferDouble" - -[sort_requires] -enabled = true diff --git a/modules/home-manager/coding/neovim/default.nix b/modules/home-manager/coding/neovim/default.nix deleted file mode 100644 index eb4e5551..00000000 --- a/modules/home-manager/coding/neovim/default.nix +++ /dev/null @@ -1,144 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -with lib; - -let - cfg = config.coding.neovim; -in -{ - options.coding.neovim.enable = mkEnableOption "Enable neovim"; - - config = mkIf cfg.enable { - programs.neovim = - let - php = pkgs.php82; - in - { - enable = true; - - plugins = with pkgs.vimPlugins; [ - comment-nvim - gitsigns-nvim - harpoon2 - mini-nvim - nvim-web-devicons - oil-nvim - phpactor - refactoring-nvim - undotree - vim-nix - - # Testing - vim-test - vimux - - # Git - vim-fugitive - - # Debugging - nvim-dap - nvim-dap-ui - nvim-dap-virtual-text - - # Treesitter - (pkgs.vimPlugins.nvim-treesitter.withPlugins ( - plugins: with plugins; [ - bash - comment - css - csv - dockerfile - gitattributes - gitignore - go - html - javascript - json - kdl - lua - luadoc - make - markdown - markdown_inline - nix - php - phpdoc - query - rst - scss - sql - terraform - twig - typescript - vim - vimdoc - vue - xml - yaml - ] - )) - nvim-treesitter-textobjects - - # LSP, linting and formatting - conform-nvim - lsp-status-nvim - nvim-lint - nvim-lspconfig - - # Completion - cmp-buffer - cmp-calc - cmp-cmdline - cmp-nvim-lsp - cmp-path - cmp-treesitter - cmp_luasnip - lspkind-nvim - nvim-cmp - - # Snippets - luasnip - - # Telescope - plenary-nvim - popup-nvim - telescope-frecency-nvim - telescope-fzf-native-nvim - telescope-live-grep-args-nvim - telescope-nvim - telescope-ui-select-nvim - - # Databases - vim-dadbod - vim-dadbod-ui - vim-dadbod-completion - - # Themes - catppuccin-nvim - ]; - - extraPackages = with pkgs; [ - ripgrep - ]; - }; - - xdg.configFile.nvim = { - source = ./config; - recursive = true; - }; - - home.file.".markdownlint.yaml".text = '' - default: true - - line-length: false - - no-duplicate-heading: - siblings_only: true - ''; - }; -} diff --git a/modules/home-manager/coding/phpactor/default.nix b/modules/home-manager/coding/phpactor/default.nix deleted file mode 100644 index 83c229be..00000000 --- a/modules/home-manager/coding/phpactor/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.coding.phpactor; -in -{ - options.coding.phpactor.enable = mkEnableOption "Enable phpactor"; - - config = mkIf cfg.enable { - xdg.configFile.phpactor = { - source = ./config; - recursive = true; - }; - }; -} diff --git a/modules/home-manager/core/default.nix b/modules/home-manager/core/default.nix deleted file mode 100644 index e885317f..00000000 --- a/modules/home-manager/core/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - imports = [ - ./gnupg.nix - ]; -} diff --git a/modules/home-manager/core/gnupg.nix b/modules/home-manager/core/gnupg.nix deleted file mode 100644 index 84735d28..00000000 --- a/modules/home-manager/core/gnupg.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ - home.file.".gnupg/gpg-agent.conf".text = '' - allow-preset-passphrase - default-cache-ttl 600 - max-cache-ttl 7200 - enable-ssh-support - ''; -} diff --git a/modules/home-manager/default.nix b/modules/home-manager/default.nix deleted file mode 100644 index 523b8156..00000000 --- a/modules/home-manager/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ - imports = [ - ./cli - ./coding - ./core - ./desktop - ]; -} diff --git a/modules/home-manager/desktop/browsers/default.nix b/modules/home-manager/desktop/browsers/default.nix deleted file mode 100644 index 4a57a609..00000000 --- a/modules/home-manager/desktop/browsers/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - imports = [ - ./firefox.nix - ./qutebrowser.nix - ]; -} diff --git a/modules/home-manager/desktop/browsers/firefox.nix b/modules/home-manager/desktop/browsers/firefox.nix deleted file mode 100644 index 4b2b7418..00000000 --- a/modules/home-manager/desktop/browsers/firefox.nix +++ /dev/null @@ -1,133 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -with lib; - -let - cfg = config.desktop.browsers.firefox; -in -{ - options.desktop.browsers.firefox = { - enable = mkEnableOption "Enable firefox"; - - homepageUrl = mkOption { - description = "The homepage URL."; - type = types.nullOr types.str; - }; - }; - - config = mkIf cfg.enable { - programs.firefox.enable = false; - - programs.librewolf = { - enable = true; - - languagePacks = [ "en-GB" ]; - - policies = { - CaptivePortal = false; - DisableFirefoxAccounts = true; - DisableFirefoxStudies = true; - DisablePocket = true; - DisableTelemetry = true; - - EnableTrackingProtection = { - Cryptomining = true; - Fingerprinting = true; - Value = true; - }; - - ExtensionSettings = { - "jid1-ZAdIEUB7XOzOJw@jetpack" = { - install_url = "https://addons.mozilla.org/firefox/downloads/latest/duckduckgo-for-firefox/latest.xpi"; - installation_mode = "force_installed"; - }; - - "uBlock0@raymondhill.net" = { - install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"; - installation_mode = "force_installed"; - }; - }; - - FirefoxHome = { - Highlights = false; - Pocket = false; - Search = true; - Snippets = false; - SponsoredPocket = false; - SponsoredTopSites = false; - TopSites = true; - }; - - FirefoxSuggest = { - ImproveSuggest = false; - SponsoredSuggestions = false; - WebSuggestions = false; - }; - - NoDefaultBookmarks = true; - OfferToSaveLogins = false; - OfferToSaveLoginsDefault = false; - PasswordManagerEnabled = false; - - Preferences = { - "browser.newtabpage.enabled" = false; - "browser.startup.homepage" = cfg.homepageUrl; - "cookiebanners.service.mode" = 2; # Block cookie banners - "cookiebanners.service.mode.privateBrowsing" = 2; # Block cookie banners in private browsing - "privacy.donottrackheader.enabled" = true; - "privacy.fingerprintingProtection" = true; - "privacy.resistFingerprinting" = true; - "privacy.trackingprotection.emailtracking.enabled" = true; - "privacy.trackingprotection.enabled" = true; - "privacy.trackingprotection.fingerprinting.enabled" = true; - "privacy.trackingprotection.socialtracking.enabled" = true; - }; - - HardwareAcceleration = true; - TranslateEnabled = true; - - UserMessaging = { - ExtensionRecommendations = false; - UrlbarInterventions = false; - SkipOnboarding = true; - }; - }; - - profiles = { - default = { - extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [ - awesome-rss - bitwarden - darkreader - onetab - tree-style-tab - ublock-origin - videospeed - vimium - web-developer - ]; - - search = { - default = "ddg"; - force = true; - privateDefault = "ddg"; - }; - - settings = { - "browser.search.isUS" = false; - "browser.search.region" = "GB"; - "distribution.searchplugins.defaultLocale" = "en-GB"; - "general.useragent.locale" = "en-GB"; - "intl.accept_languages" = "en-GB, en"; - "intl.regional_prefs.use_os_locales" = true; - }; - }; - }; - }; - }; -} diff --git a/modules/home-manager/desktop/browsers/qutebrowser.nix b/modules/home-manager/desktop/browsers/qutebrowser.nix deleted file mode 100644 index ec90d979..00000000 --- a/modules/home-manager/desktop/browsers/qutebrowser.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.desktop.browsers.qutebrowser; -in -{ - options.desktop.browsers.qutebrowser.enable = - mkEnableOption "Enable qutebrowser"; - - config = mkIf cfg.enable { - programs.qutebrowser = { - enable = true; - - searchEngines = { - dp = "https://www.drupal.org/project/{}"; - du = "https://www.drupal.org/u/{}"; - gh = "https://github.com/search?q={}"; - mn = "https://mynixos.com/search?q={}"; - nx = "https://search.nixos.org/packages?query={}"; - }; - - settings = { - colors.webpage.darkmode.enabled = true; - }; - - keyBindings = { - normal = { - "" = "config-cycle colors.webpage.darkmode.enabled true false"; - - "xb" = "config-cycle statusbar.show always never"; - "xt" = "config-cycle tabs.show always never"; - "xx" = mkMerge [ - "config-cycle statusbar.show always never" - "config-cycle tabs.show always never" - ]; - }; - }; - }; - }; -} diff --git a/modules/home-manager/desktop/default.nix b/modules/home-manager/desktop/default.nix deleted file mode 100644 index 6cabdeb9..00000000 --- a/modules/home-manager/desktop/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - imports = [ - ./browsers - ./flameshot.nix - ./gtk.nix - ./media - ./screenkey.nix - ]; -} diff --git a/modules/home-manager/desktop/flameshot.nix b/modules/home-manager/desktop/flameshot.nix deleted file mode 100644 index f8d51be9..00000000 --- a/modules/home-manager/desktop/flameshot.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.desktop.flameshot; -in -{ - options.desktop.flameshot.enable = mkEnableOption "Enable flameshot"; - - config = mkIf cfg.enable { - services.flameshot = { - enable = true; - - settings = { - General = { - disabledTrayIcon = false; - saveAfterCopy = true; - savePath = "${config.xdg.userDirs.pictures}/Screenshots"; - showHelp = false; - uiColor = "#60a5fa"; - }; - }; - }; - }; -} diff --git a/modules/home-manager/desktop/gtk.nix b/modules/home-manager/desktop/gtk.nix deleted file mode 100644 index 84b2fefc..00000000 --- a/modules/home-manager/desktop/gtk.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -with lib; - -let - cfg = config.desktop.gtk; -in -{ - options.desktop.gtk.enable = mkEnableOption "Enable gtk"; - - config = mkIf cfg.enable { - gtk = with pkgs; { - enable = true; - - theme = { - name = "Arc-Dark"; - package = arc-theme; - }; - - iconTheme = { - name = "Arc"; - package = arc-icon-theme; - }; - - gtk3.extraConfig.gtk-enable-animations = false; - gtk4.extraConfig.gtk-enable-animations = false; - }; - }; -} diff --git a/modules/home-manager/desktop/media/default.nix b/modules/home-manager/desktop/media/default.nix deleted file mode 100644 index 0f1a7643..00000000 --- a/modules/home-manager/desktop/media/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ - imports = [ - ./handbrake.nix - ./makemkv.nix - ./mpv.nix - ]; -} diff --git a/modules/home-manager/desktop/media/handbrake.nix b/modules/home-manager/desktop/media/handbrake.nix deleted file mode 100644 index 5da7514e..00000000 --- a/modules/home-manager/desktop/media/handbrake.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -with lib; - -let - cfg = config.desktop.media.handbrake; -in -{ - options.desktop.media.handbrake.enable = mkEnableOption "Enable handbrake"; - - config = mkIf cfg.enable { - home.packages = with pkgs; [ - handbrake - ]; - }; -} diff --git a/modules/home-manager/desktop/media/makemkv.nix b/modules/home-manager/desktop/media/makemkv.nix deleted file mode 100644 index 5cfa207c..00000000 --- a/modules/home-manager/desktop/media/makemkv.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -with lib; - -let - cfg = config.desktop.media.makemkv; -in -{ - options.desktop.media.makemkv.enable = mkEnableOption "Enable makemkv"; - - config = mkIf cfg.enable { - home.packages = with pkgs; [ - makemkv - ]; - }; -} diff --git a/modules/home-manager/desktop/media/mpv.nix b/modules/home-manager/desktop/media/mpv.nix deleted file mode 100644 index 1a59cbda..00000000 --- a/modules/home-manager/desktop/media/mpv.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.desktop.media.mpv; -in -{ - options.desktop.media.mpv.enable = mkEnableOption "Enable mpv"; - - config = mkIf cfg.enable { - programs.mpv = { - enable = true; - - # https://github.com/mpv-player/mpv/blob/master/etc/input.conf - bindings = { - "DOWN" = "add volume -5"; - "UP" = "add volume 5"; - }; - }; - }; -} diff --git a/modules/home-manager/desktop/screenkey.nix b/modules/home-manager/desktop/screenkey.nix deleted file mode 100644 index ba06a66d..00000000 --- a/modules/home-manager/desktop/screenkey.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ pkgs, ... }: - -{ - home.packages = with pkgs; [ screenkey ]; - - xdg.configFile."screenkey.json".text = builtins.toJSON { - key_mode = "composed"; - mods_mode = "emacs"; - persist = true; - size = "small"; - timeout = 0.25; - }; -} diff --git a/modules/home-manager/nixos.nix b/modules/home-manager/nixos.nix new file mode 100644 index 00000000..f3a55dc4 --- /dev/null +++ b/modules/home-manager/nixos.nix @@ -0,0 +1,38 @@ +{ + config, + inputs, + lib, + ... +}: + +{ + flake.modules.nixos = { + base = { + imports = [ inputs.home-manager.nixosModules.home-manager ]; + + home-manager = { + extraSpecialArgs.hasGlobalPkgs = true; + useGlobalPkgs = true; + + # https://github.com/nix-community/home-manager/issues/6770 + # useUserPackages = true; + + users.${config.flake.meta.owner.username}.imports = [ + ( + { osConfig, ... }: + + { + home.stateVersion = lib.mkForce osConfig.system.stateVersion; + } + ) + + config.flake.modules.homeManager.base + ]; + }; + }; + + desktop.home-manager.users.${config.flake.meta.owner.username}.imports = [ + config.flake.modules.homeManager.gui + ]; + }; +} diff --git a/modules/hosts/nixedo/gitea-actions-runner.nix b/modules/hosts/nixedo/gitea-actions-runner.nix new file mode 100644 index 00000000..1c794ee4 --- /dev/null +++ b/modules/hosts/nixedo/gitea-actions-runner.nix @@ -0,0 +1,31 @@ +{ inputs, ... }: + +{ + flake.modules.nixos."nixosConfigurations/nixedo" = + { config, pkgs, ... }: + { + services.gitea-actions-runner.instances.default = { + enable = true; + + hostPackages = with pkgs; [ + bash + coreutils + curl + gawk + gitMinimal + gnused + nix + nodejs + wget + ]; + + labels = [ "nixos:host" ]; + + name = config.networking.hostName; + tokenFile = config.age.secrets.forgejo-runner-token.path; + url = config.services.forgejo.settings.server.ROOT_URL; + }; + + age.secrets.forgejo-runner-token.file = "${inputs.self}/secrets/forgejo-runner-token.age"; + }; +} diff --git a/modules/hosts/nixedo/imports.nix b/modules/hosts/nixedo/imports.nix new file mode 100644 index 00000000..e22a75c4 --- /dev/null +++ b/modules/hosts/nixedo/imports.nix @@ -0,0 +1,7 @@ +{ config, ... }: + +{ + flake.modules.nixos."nixosConfigurations/nixedo".imports = with config.flake.modules.nixos; [ + pc + ]; +} diff --git a/modules/hosts/t480/dev-commit.nix b/modules/hosts/t480/dev-commit.nix new file mode 100644 index 00000000..cb6114a4 --- /dev/null +++ b/modules/hosts/t480/dev-commit.nix @@ -0,0 +1,23 @@ +{ config, ... }: + +{ + flake.modules.nixos."nixosConfigurations/t480".home-manager.users.${config.flake.meta.owner.username} = + hmArgs: { + programs.dev-commit.enable = true; + + programs.dev-commit.schedule.enable = true; + programs.dev-commit.schedule.time = "daily"; + + programs.dev-commit.repoPaths = + let + repos = "${hmArgs.config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/forgejo/opdavies"; + in + map (name: "${repos}/${name}") [ + "email-filters" + "git-repo-updater" + "nix-config" + "oliverdavies.uk" + "opentofu-dns" + ]; + }; +} diff --git a/modules/hosts/t480/dwm/dwm.nix b/modules/hosts/t480/dwm/dwm.nix new file mode 100644 index 00000000..b6f219f6 --- /dev/null +++ b/modules/hosts/t480/dwm/dwm.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixos.pc.services.xserver.windowManager.dwm.enable = true; +} diff --git a/modules/hosts/t480/dwm/dwmblocks/audio.nix b/modules/hosts/t480/dwm/dwmblocks/audio.nix new file mode 100644 index 00000000..ddefba39 --- /dev/null +++ b/modules/hosts/t480/dwm/dwmblocks/audio.nix @@ -0,0 +1,21 @@ +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + home.packages = [ + (pkgs.writeShellApplication { + name = "status-audio"; + + runtimeInputs = with pkgs; [ pulseaudio ]; + + text = '' + device="$(pactl list sinks | grep -A2 "$(pactl get-default-sink)" | grep "Description:" | awk '{print $2}')" + + test "$device" == "Dummy" && exit 0 + + echo "$device"; + ''; + }) + ]; + }; +} diff --git a/modules/hosts/t480/dwm/dwmblocks/battery.nix b/modules/hosts/t480/dwm/dwmblocks/battery.nix new file mode 100644 index 00000000..5abd5630 --- /dev/null +++ b/modules/hosts/t480/dwm/dwmblocks/battery.nix @@ -0,0 +1,23 @@ +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + home.packages = [ + (pkgs.writeShellApplication { + name = "status-battery"; + + runtimeInputs = with pkgs; [ gawk ]; + + text = '' + percentage=$(battery | grep "percentage:" | awk '{print $2}') + + test "$percentage" == "100%" && exit 0 + + state=$(battery | grep "state:" | awk '{print $2}') + + echo "$percentage ($state)"; + ''; + }) + ]; + }; +} diff --git a/modules/hosts/t480/dwm/dwmblocks/cpu.nix b/modules/hosts/t480/dwm/dwmblocks/cpu.nix new file mode 100644 index 00000000..9e4f03fa --- /dev/null +++ b/modules/hosts/t480/dwm/dwmblocks/cpu.nix @@ -0,0 +1,17 @@ +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + home.packages = [ + (pkgs.writeShellApplication { + name = "status-cpu"; + + runtimeInputs = with pkgs; [ sysstat ]; + + text = '' + mpstat | grep -A 5 "%idle" | tail -n 1 | awk -F " " '{printf "%s%% CPU", 100 - $ 12}' + ''; + }) + ]; + }; +} diff --git a/modules/hosts/t480/dwm/dwmblocks/default.nix b/modules/hosts/t480/dwm/dwmblocks/default.nix new file mode 100644 index 00000000..67827dd1 --- /dev/null +++ b/modules/hosts/t480/dwm/dwmblocks/default.nix @@ -0,0 +1,30 @@ +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + home.packages = [ + (pkgs.dwmblocks.override { + conf = '' + static const Block blocks[] = { + {"", "status-audio", 10, 0}, + + {"", "status-network", 10, 0}, + + {"", "status-battery", 60, 0}, + + {"", "free -h | awk '/^Mem/ { printf \"%s/%s RAM\\n\", $3, $2 }' | sed 's/i//g'", 30, 0}, + + {"", "status-cpu", 10, 0}, + + {"", "status-weather", 600, 0}, + + {"", "date '+%a %d %b %Y %H:%M %Z'", 30, 0}, + }; + + static char delim[] = " | "; + static unsigned int delimLen = 5; + ''; + }) + ]; + }; +} diff --git a/modules/hosts/t480/dwm/dwmblocks/network.nix b/modules/hosts/t480/dwm/dwmblocks/network.nix new file mode 100644 index 00000000..bbe262bf --- /dev/null +++ b/modules/hosts/t480/dwm/dwmblocks/network.nix @@ -0,0 +1,24 @@ +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + home.packages = [ + (pkgs.writeShellApplication { + name = "status-network"; + + runtimeInputs = with pkgs; [ networkmanager ]; + + text = '' + connected_to="$(nmcli | grep "connected to")" + + network_name="$(echo "$connected_to" | awk '{print $NF}')" + connected_device="$(echo "$connected_to" | cut -d ':' -f 1)" + + ip_address="$(ip a | grep "$connected_device" | grep inet | awk '{print $2}'| cut -d '/' -f 1)" + + echo "$network_name $ip_address" + ''; + }) + ]; + }; +} diff --git a/modules/hosts/t480/dwm/dwmblocks/weather.nix b/modules/hosts/t480/dwm/dwmblocks/weather.nix new file mode 100644 index 00000000..84d3aee3 --- /dev/null +++ b/modules/hosts/t480/dwm/dwmblocks/weather.nix @@ -0,0 +1,21 @@ +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + home.packages = [ + (pkgs.writeShellApplication { + name = "status-weather"; + + runtimeInputs = with pkgs; [ curl ]; + + text = '' + out="$(curl -s https://wttr.in/Caerleon?format=%t)" + + [[ "$out" == *"Unknown location"* ]] && exit 1 + + echo "$out" + ''; + }) + ]; + }; +} diff --git a/modules/hosts/t480/fixapost.nix b/modules/hosts/t480/fixapost.nix new file mode 100644 index 00000000..23cb55fb --- /dev/null +++ b/modules/hosts/t480/fixapost.nix @@ -0,0 +1,17 @@ +{ inputs, ... }: + +{ + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (pkgs.writeShellApplication rec { + name = "fixapost"; + + runtimeInputs = [ pkgs.coreutils ]; + + text = builtins.readFile "${inputs.rwxrob-dot}/scripts/${name}"; + }) + ]; + }; +} diff --git a/modules/hosts/t480/heightwidth.nix b/modules/hosts/t480/heightwidth.nix new file mode 100644 index 00000000..9eb627e1 --- /dev/null +++ b/modules/hosts/t480/heightwidth.nix @@ -0,0 +1,17 @@ +{ inputs, ... }: + +{ + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (pkgs.writeShellApplication rec { + name = "heightwidth"; + + runtimeInputs = [ pkgs.ffmpeg ]; + + text = builtins.readFile "${inputs.rwxrob-dot}/scripts/${name}"; + }) + ]; + }; +} diff --git a/modules/hosts/t480/imports.nix b/modules/hosts/t480/imports.nix new file mode 100644 index 00000000..38ca7da8 --- /dev/null +++ b/modules/hosts/t480/imports.nix @@ -0,0 +1,7 @@ +{ config, ... }: + +{ + flake.modules.nixos."nixosConfigurations/t480".imports = with config.flake.modules.nixos; [ + desktop + ]; +} diff --git a/modules/hosts/t480/kanata/devices.nix b/modules/hosts/t480/kanata/devices.nix new file mode 100644 index 00000000..635656a2 --- /dev/null +++ b/modules/hosts/t480/kanata/devices.nix @@ -0,0 +1,5 @@ +{ + flake.modules.nixos.pc.services.kanata.devices = [ + "/dev/input/by-path/platform-i8042-serio-0-event-kbd" + ]; +} diff --git a/modules/hosts/t480/kanata/enable.nix b/modules/hosts/t480/kanata/enable.nix new file mode 100644 index 00000000..6bb8c1e5 --- /dev/null +++ b/modules/hosts/t480/kanata/enable.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixos.pc.services.kanata.enable = true; +} diff --git a/modules/hosts/t480/ollama.nix b/modules/hosts/t480/ollama.nix new file mode 100644 index 00000000..4ec6407a --- /dev/null +++ b/modules/hosts/t480/ollama.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixos.desktop.services.ollama.enable = false; +} diff --git a/modules/hosts/t480/open-webui.nix b/modules/hosts/t480/open-webui.nix new file mode 100644 index 00000000..ae6421f8 --- /dev/null +++ b/modules/hosts/t480/open-webui.nix @@ -0,0 +1,5 @@ +{ + nixpkgs.allowedUnfreePackages = [ "open-webui" ]; + + flake.modules.nixos.desktop.services.open-webui.enable = false; +} diff --git a/modules/hosts/t480/password-store.nix b/modules/hosts/t480/password-store.nix new file mode 100644 index 00000000..e40d892b --- /dev/null +++ b/modules/hosts/t480/password-store.nix @@ -0,0 +1,11 @@ +{ + flake.modules.homeManager.base = + { pkgs, ... }: + { + programs.password-store.extensions = with pkgs.passExtensions; [ + pass-audit + pass-otp + pass-update + ]; + }; +} diff --git a/modules/hosts/t480/slack.nix b/modules/hosts/t480/slack.nix new file mode 100644 index 00000000..97286f66 --- /dev/null +++ b/modules/hosts/t480/slack.nix @@ -0,0 +1,11 @@ +{ config, ... }: + +{ + nixpkgs.allowedUnfreePackages = [ "slack" ]; + + flake.modules.nixos."nixosConfigurations/t480" = + { pkgs, ... }: + { + users.users."${config.flake.meta.owner.username}".packages = [ pkgs.slack ]; + }; +} diff --git a/modules/hosts/t480/zoom.nix b/modules/hosts/t480/zoom.nix new file mode 100644 index 00000000..6e8251c2 --- /dev/null +++ b/modules/hosts/t480/zoom.nix @@ -0,0 +1,11 @@ +{ config, ... }: + +{ + nixpkgs.allowedUnfreePackages = [ "zoom" ]; + + flake.modules.nixos."nixosConfigurations/t480" = + { pkgs, ... }: + { + users.users."${config.flake.meta.owner.username}".packages = [ pkgs.zoom-us ]; + }; +} diff --git a/modules/kanata/config.nix b/modules/kanata/config.nix new file mode 100644 index 00000000..bc73ab3e --- /dev/null +++ b/modules/kanata/config.nix @@ -0,0 +1,29 @@ +{ + flake.modules.nixos.pc.services.kanata.keyboards.default.config = '' + (defsrc + caps a s d f j k l ; + ) + + (defvar + tap-time 150 + hold-time 200 + hold-time-slow 300 + ) + + (defalias + escctrl (tap-hold 100 100 esc lctl) + a (tap-hold $tap-time $hold-time-slow a lmet) + s (tap-hold $tap-time $hold-time-slow s lalt) + d (tap-hold $tap-time $hold-time d lsft) + f (tap-hold $tap-time $hold-time f lctl) + j (tap-hold $tap-time $hold-time j rctl) + k (tap-hold $tap-time $hold-time k rsft) + l (tap-hold $tap-time $hold-time-slow l ralt) + ; (tap-hold $tap-time $hold-time-slow ; rmet) + ) + + (deflayer base + @escctrl @a @s @d @f @j @k @l @; + ) + ''; +} diff --git a/modules/kanata/devices.nix b/modules/kanata/devices.nix new file mode 100644 index 00000000..42864248 --- /dev/null +++ b/modules/kanata/devices.nix @@ -0,0 +1,14 @@ +{ lib, ... }: + +{ + flake.modules.nixos.pc = + { config, ... }: + { + options.services.kanata.devices = lib.mkOption { + default = [ ]; + type = lib.types.listOf lib.types.str; + }; + + config.services.kanata.keyboards.default.devices = config.services.kanata.devices; + }; +} diff --git a/modules/kanata/extra-config.nix b/modules/kanata/extra-config.nix new file mode 100644 index 00000000..b41028a0 --- /dev/null +++ b/modules/kanata/extra-config.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixos.pc.services.kanata.keyboards.default.extraDefCfg = "process-unmapped-keys yes"; +} diff --git a/modules/lynx.nix b/modules/lynx.nix new file mode 100644 index 00000000..2187eb6c --- /dev/null +++ b/modules/lynx.nix @@ -0,0 +1,9 @@ +{ + flake.modules.nixos.base = + { pkgs, ... }: + { + environment.systemPackages = with pkgs; [ + lynx + ]; + }; +} diff --git a/modules/makemkv.nix b/modules/makemkv.nix new file mode 100644 index 00000000..a395220c --- /dev/null +++ b/modules/makemkv.nix @@ -0,0 +1,15 @@ +{ config, ... }: + +{ + nixpkgs.allowedUnfreePackages = [ "makemkv" ]; + + flake.modules.nixos.desktop = + { pkgs, ... }: + { + boot.kernelModules = [ "sg" ]; + + environment.systemPackages = with pkgs; [ makemkv ]; + + users.users.${config.flake.meta.owner.username}.extraGroups = [ "cdrom" ]; + }; +} diff --git a/modules/meta/dev-shell.nix b/modules/meta/dev-shell.nix new file mode 100644 index 00000000..89037018 --- /dev/null +++ b/modules/meta/dev-shell.nix @@ -0,0 +1,14 @@ +{ + perSystem = + { pkgs, ... }: + { + devShells.default = pkgs.mkShell { + packages = with pkgs; [ + just + lua-language-server + lua54Packages.luacheck + nixd + ]; + }; + }; +} diff --git a/modules/meta/flake-parts.nix b/modules/meta/flake-parts.nix new file mode 100644 index 00000000..1a92203d --- /dev/null +++ b/modules/meta/flake-parts.nix @@ -0,0 +1,7 @@ +{ inputs, ... }: + +{ + imports = [ + inputs.flake-parts.flakeModules.modules + ]; +} diff --git a/modules/meta/formatting.nix b/modules/meta/formatting.nix new file mode 100644 index 00000000..3c962b13 --- /dev/null +++ b/modules/meta/formatting.nix @@ -0,0 +1,7 @@ +{ + perSystem = + { pkgs, ... }: + { + formatter = pkgs.nixfmt-rfc-style; + }; +} diff --git a/modules/meta/meta-output.nix b/modules/meta/meta-output.nix new file mode 100644 index 00000000..dbf69e5d --- /dev/null +++ b/modules/meta/meta-output.nix @@ -0,0 +1,7 @@ +{ lib, ... }: + +{ + options.flake.meta = lib.mkOption { + type = lib.types.anything; + }; +} diff --git a/modules/meta/systems.nix b/modules/meta/systems.nix new file mode 100644 index 00000000..ce708c68 --- /dev/null +++ b/modules/meta/systems.nix @@ -0,0 +1,3 @@ +{ + systems = [ "x86_64-linux" ]; +} diff --git a/modules/mpv/bindings.nix b/modules/mpv/bindings.nix new file mode 100644 index 00000000..314514f4 --- /dev/null +++ b/modules/mpv/bindings.nix @@ -0,0 +1,7 @@ +{ + # https://github.com/mpv-player/mpv/blob/master/etc/input.conf + flake.modules.homeManager.gui.programs.mpv.bindings = { + "DOWN" = "add volume -5"; + "UP" = "add volume 5"; + }; +} diff --git a/modules/mpv/enable.nix b/modules/mpv/enable.nix new file mode 100644 index 00000000..6985bfee --- /dev/null +++ b/modules/mpv/enable.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.gui.programs.mpv.enable = true; +} diff --git a/modules/nix-index.nix b/modules/nix-index.nix new file mode 100644 index 00000000..b1fcf010 --- /dev/null +++ b/modules/nix-index.nix @@ -0,0 +1,12 @@ +{ inputs, ... }: + +{ + flake.modules.homeManager.base = { + imports = [ inputs.nix-index-database.homeModules.nix-index ]; + + programs = { + nix-index.enable = true; + nix-index-database.comma.enable = true; + }; + }; +} diff --git a/modules/nix/utils.nix b/modules/nix/utils.nix new file mode 100644 index 00000000..9793b4b8 --- /dev/null +++ b/modules/nix/utils.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.base.programs.nh.enable = true; +} diff --git a/modules/nixos-configurations.nix b/modules/nixos-configurations.nix new file mode 100644 index 00000000..7d091988 --- /dev/null +++ b/modules/nixos-configurations.nix @@ -0,0 +1,55 @@ +{ + config, + inputs, + self, + ... +}: + +{ + flake = + let + inherit (self) outputs; + + specialArgs = { + inherit inputs outputs self; + + system = "x86_64-linux"; + username = "opdavies"; + }; + + mkNixosConfiguration = + { + hostname, + modules ? [ ], + stateVersion ? "22.11", + system ? "x86_64-linux", + }: + inputs.nixpkgs.lib.nixosSystem { + inherit system; + + modules = modules ++ [ + "${self}/hosts/${hostname}/configuration.nix" + ]; + + specialArgs = specialArgs // { + inherit hostname stateVersion system; + }; + }; + in + { + nixosConfigurations = { + nixedo = mkNixosConfiguration rec { + hostname = "nixedo"; + stateVersion = "24.11"; + + modules = [ config.flake.modules.nixos."nixosConfigurations/${hostname}" ]; + }; + + t480 = mkNixosConfiguration rec { + hostname = "t480"; + + modules = [ config.flake.modules.nixos."nixosConfigurations/${hostname}" ]; + }; + }; + }; +} diff --git a/modules/nixos/cli/default.nix b/modules/nixos/cli/default.nix deleted file mode 100644 index 1814980f..00000000 --- a/modules/nixos/cli/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ - imports = [ - ./docker.nix - ./kanata.nix - ./podman.nix - ./password-store.nix - ]; -} diff --git a/modules/nixos/cli/docker.nix b/modules/nixos/cli/docker.nix deleted file mode 100644 index fc27bcbe..00000000 --- a/modules/nixos/cli/docker.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.cli.docker; -in -{ - options.cli.docker.enable = mkEnableOption "Enable docker"; - - config = mkIf cfg.enable { - virtualisation = { - oci-containers.backend = "docker"; - - docker = { - enable = true; - - autoPrune = { - enable = true; - dates = "weekly"; - }; - }; - }; - }; -} diff --git a/modules/nixos/cli/kanata.nix b/modules/nixos/cli/kanata.nix deleted file mode 100644 index d3e06008..00000000 --- a/modules/nixos/cli/kanata.nix +++ /dev/null @@ -1,60 +0,0 @@ -{ config, lib, ... }: - -let - cfg = config.cli.${service}; - service = "kanata"; - - inherit (lib) mkEnableOption mkIf mkOption types; -in -{ - options.cli.${service} = { - enable = mkEnableOption "Enable ${service}"; - - devices = mkOption { - default = []; - type = types.listOf types.str; - }; - }; - - config = mkIf cfg.enable { - services.kanata = { - enable = true; - - keyboards = { - default = { - devices = cfg.devices; - - extraDefCfg = "process-unmapped-keys yes"; - - config = '' - (defsrc - caps a s d f j k l ; - ) - - (defvar - tap-time 150 - hold-time 200 - hold-time-slow 300 - ) - - (defalias - escctrl (tap-hold 100 100 esc lctl) - a (tap-hold $tap-time $hold-time-slow a lmet) - s (tap-hold $tap-time $hold-time-slow s lalt) - d (tap-hold $tap-time $hold-time d lsft) - f (tap-hold $tap-time $hold-time f lctl) - j (tap-hold $tap-time $hold-time j rctl) - k (tap-hold $tap-time $hold-time k rsft) - l (tap-hold $tap-time $hold-time-slow l ralt) - ; (tap-hold $tap-time $hold-time-slow ; rmet) - ) - - (deflayer base - @escctrl @a @s @d @f @j @k @l @; - ) - ''; - }; - }; - }; - }; -} diff --git a/modules/nixos/cli/password-store.nix b/modules/nixos/cli/password-store.nix deleted file mode 100644 index 362cc7dd..00000000 --- a/modules/nixos/cli/password-store.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -with lib; - -let - cfg = config.cli.password-store; -in -{ - options.cli.password-store = { - enable = mkEnableOption "Enable pass"; - - extensions = mkOption { - default = [ ]; - type = types.listOf types.package; - description = "pass extensions to install."; - }; - }; - - config = mkIf cfg.enable { - environment.systemPackages = with pkgs; [ - (pass.withExtensions (e: with e; cfg.extensions)) - ]; - }; -} diff --git a/modules/nixos/cli/podman.nix b/modules/nixos/cli/podman.nix deleted file mode 100644 index 5375ded5..00000000 --- a/modules/nixos/cli/podman.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.cli.podman; -in -{ - options.cli.podman.enable = mkEnableOption "Enable podman"; - - config = mkIf cfg.enable { - virtualisation = { - oci-containers.backend = "podman"; - - podman = { - enable = true; - - autoPrune = { - enable = true; - dates = "weekly"; - }; - }; - }; - }; -} diff --git a/modules/nixos/core/bluetooth.nix b/modules/nixos/core/bluetooth.nix deleted file mode 100644 index 4a2bfad7..00000000 --- a/modules/nixos/core/bluetooth.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.core.bluetooth; -in -{ - options.core.bluetooth.enable = mkEnableOption "Enable bluetooth"; - - config = mkIf cfg.enable { - hardware.bluetooth.enable = true; - - services.blueman.enable = true; - }; -} diff --git a/modules/nixos/core/default.nix b/modules/nixos/core/default.nix deleted file mode 100644 index 560f1b75..00000000 --- a/modules/nixos/core/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - imports = [ - ./avahi.nix - ./bluetooth.nix - ./gnupg.nix - ./openssh.nix - ./pipewire.nix - ./xbanish.nix - ./zram.nix - ]; -} diff --git a/modules/nixos/core/gnupg.nix b/modules/nixos/core/gnupg.nix deleted file mode 100644 index 6e918951..00000000 --- a/modules/nixos/core/gnupg.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ pkgs, ... }: - -{ - security.pam.services.login.gnupg.enable = true; - - programs = { - gnupg.agent = { - enable = true; - enableSSHSupport = true; - - pinentryPackage = pkgs.pinentry-qt; - }; - }; -} diff --git a/modules/nixos/core/openssh.nix b/modules/nixos/core/openssh.nix deleted file mode 100644 index b248ab34..00000000 --- a/modules/nixos/core/openssh.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.core.openssh; -in -{ - options.core.openssh.enable = mkEnableOption "Enable openssh"; - - config = mkIf cfg.enable { - services.openssh = { - enable = true; - - openFirewall = lib.mkForce true; - - settings = { - PasswordAuthentication = false; - PermitRootLogin = lib.mkForce "no"; - }; - }; - }; -} diff --git a/modules/nixos/core/pipewire.nix b/modules/nixos/core/pipewire.nix deleted file mode 100644 index 26e8014b..00000000 --- a/modules/nixos/core/pipewire.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.core.pipewire; -in -{ - options.core.pipewire.enable = mkEnableOption "Enable pipewire"; - - config = mkIf cfg.enable { - services.pipewire = { - enable = true; - - alsa = { - enable = true; - support32Bit = true; - }; - - pulse.enable = true; - }; - }; -} diff --git a/modules/nixos/core/xbanish.nix b/modules/nixos/core/xbanish.nix deleted file mode 100644 index 41142461..00000000 --- a/modules/nixos/core/xbanish.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.core.xbanish; -in -{ - options.core.xbanish.enable = mkEnableOption "Enable xbanish"; - - config = mkIf cfg.enable { - services.xbanish.enable = true; - }; -} diff --git a/modules/nixos/core/zram.nix b/modules/nixos/core/zram.nix deleted file mode 100644 index fe980915..00000000 --- a/modules/nixos/core/zram.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.core.zram; -in -{ - options.core.zram.enable = mkEnableOption "Enable zram"; - - config = mkIf cfg.enable { - zramSwap = { - enable = true; - algorithm = "zstd"; - memoryPercent = 90; - }; - }; -} diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix deleted file mode 100644 index e75d5dfd..00000000 --- a/modules/nixos/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - imports = [ - ./cli - ./core - ./desktop - ./homelab - ./nixpad - ]; -} diff --git a/modules/nixos/desktop/dconf.nix b/modules/nixos/desktop/dconf.nix deleted file mode 100644 index ee0c51e7..00000000 --- a/modules/nixos/desktop/dconf.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.desktop.dconf; -in -{ - options.desktop.dconf.enable = mkEnableOption "Enable dconf"; - - config = mkIf cfg.enable { - programs.dconf.enable = true; - }; -} diff --git a/modules/nixos/desktop/default.nix b/modules/nixos/desktop/default.nix deleted file mode 100644 index d031fbb2..00000000 --- a/modules/nixos/desktop/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ - imports = [ - ./dconf.nix - ./dwm - ./fonts.nix - ./media - ./st.nix - ./thunar.nix - ]; -} diff --git a/modules/nixos/desktop/dwm/default.nix b/modules/nixos/desktop/dwm/default.nix deleted file mode 100644 index 31c1c999..00000000 --- a/modules/nixos/desktop/dwm/default.nix +++ /dev/null @@ -1,57 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -with lib; - -let - cfg = config.desktop.dwm; -in -{ - options.desktop.dwm.enable = mkEnableOption "Enable dwm"; - - config = mkIf cfg.enable { - services = { - dwm-status = { - enable = true; - - order = [ - "audio" - "battery" - "network" - "time" - ]; - }; - - xserver.windowManager.dwm.enable = true; - }; - - systemd.user.services.dwm-status.serviceConfig.Restart = "on-failure"; - - environment.systemPackages = with pkgs; [ - dmenu - dmenu-bluetooth - dunst - networkmanager_dmenu - poweralertd - slock - xdotool - xwallpaper - ]; - - home-manager.users.opdavies = - { config, ... }: - { - home = { - file."${config.home.sessionVariables.XINITRC}".source = ./xinitrc; - - sessionVariables = { - XINITRC = "${config.xdg.configHome}/X11/xinitrc"; - }; - }; - }; - }; -} diff --git a/modules/nixos/desktop/fonts.nix b/modules/nixos/desktop/fonts.nix deleted file mode 100644 index 8c49a2f6..00000000 --- a/modules/nixos/desktop/fonts.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -with lib; - -let - cfg = config.desktop.fonts; -in -{ - options.desktop.fonts.enable = mkEnableOption "Enable fonts"; - - config = mkIf cfg.enable { - fonts = { - fontconfig = { - enable = true; - }; - - packages = with pkgs; [ - nerd-fonts.jetbrains-mono - nerd-fonts.meslo-lg - terminus_font - terminus_font_ttf - ]; - }; - }; -} diff --git a/modules/nixos/desktop/media/default.nix b/modules/nixos/desktop/media/default.nix deleted file mode 100644 index 2efff1fb..00000000 --- a/modules/nixos/desktop/media/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - imports = [ - ./makemkv.nix - ]; -} diff --git a/modules/nixos/desktop/media/makemkv.nix b/modules/nixos/desktop/media/makemkv.nix deleted file mode 100644 index 2d30d7ea..00000000 --- a/modules/nixos/desktop/media/makemkv.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.desktop.media.makemkv; -in -{ - options.desktop.media.makemkv.enable = mkEnableOption "Enable makemkv"; - - config = mkIf cfg.enable { - boot.kernelModules = [ "sg" ]; - - users.users.opdavies.extraGroups = [ "cdrom" ]; - }; -} diff --git a/modules/nixos/desktop/st.nix b/modules/nixos/desktop/st.nix deleted file mode 100644 index 17422966..00000000 --- a/modules/nixos/desktop/st.nix +++ /dev/null @@ -1,375 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -with lib; - -let - cfg = config.desktop.st; -in -{ - options.desktop.st.enable = mkEnableOption "Enable st"; - - config = mkIf cfg.enable { - environment.systemPackages = with pkgs; [ - (st.override { - conf = '' - static char *font = "MesloLGSNerdFontMono:pixelsize=16:antialias=true:autohint=true"; - - int disablebold = 1; - int disableitalic = 1; - int disableroman = 1; - - static int borderpx = 2; - - static char *shell = "/bin/sh"; - char *utmp = NULL; - char *scroll = NULL; - char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400"; - - char *vtiden = "\033[?6c"; - - static float cwscale = 1.0; - static float chscale = 1.0; - - wchar_t *worddelimiters = L" "; - - static unsigned int doubleclicktimeout = 300; - static unsigned int tripleclicktimeout = 600; - - int allowaltscreen = 1; - - int allowwindowops = 0; - - static double minlatency = 2; - static double maxlatency = 33; - - static unsigned int blinktimeout = 800; - - static unsigned int cursorthickness = 2; - - static int bellvolume = 0; - - char *termname = "st-256color"; - - unsigned int tabspaces = 8; - - static const char *colorname[] = { - "black", - "red3", - "green3", - "yellow3", - "blue2", - "magenta3", - "cyan3", - "gray90", - - "gray50", - "red", - "green", - "yellow", - "#5c5cff", - "magenta", - "cyan", - "white", - - [255] = 0, - - "#cccccc", - "#555555", - "gray90", - "black", - }; - - unsigned int defaultfg = 258; - unsigned int defaultbg = 259; - unsigned int defaultcs = 256; - static unsigned int defaultrcs = 257; - - static unsigned int cursorshape = 2; - - static unsigned int cols = 80; - static unsigned int rows = 24; - - static unsigned int mouseshape = XC_xterm; - static unsigned int mousefg = 7; - static unsigned int mousebg = 0; - - static unsigned int defaultattr = 11; - - static uint forcemousemod = ShiftMask; - - static MouseShortcut mshortcuts[] = { - { XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 }, - { ShiftMask, Button4, ttysend, {.s = "\033[5;2~"} }, - { XK_ANY_MOD, Button4, ttysend, {.s = "\031"} }, - { ShiftMask, Button5, ttysend, {.s = "\033[6;2~"} }, - { XK_ANY_MOD, Button5, ttysend, {.s = "\005"} }, - }; - - #define MODKEY Mod1Mask - #define TERMMOD (ControlMask|ShiftMask) - - static Shortcut shortcuts[] = { - { XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} }, - { ControlMask, XK_Print, toggleprinter, {.i = 0} }, - { ShiftMask, XK_Print, printscreen, {.i = 0} }, - { XK_ANY_MOD, XK_Print, printsel, {.i = 0} }, - { TERMMOD, XK_Prior, zoom, {.f = +1} }, - { TERMMOD, XK_Next, zoom, {.f = -1} }, - { TERMMOD, XK_Home, zoomreset, {.f = 0} }, - { TERMMOD, XK_C, clipcopy, {.i = 0} }, - { TERMMOD, XK_D, zoom, {.f = -2} }, - { TERMMOD, XK_J, zoom, {.f = -1} }, - { TERMMOD, XK_K, zoom, {.f = +1} }, - { TERMMOD, XK_U, zoom, {.f = +2} }, - { TERMMOD, XK_V, clippaste, {.i = 0} }, - { TERMMOD, XK_Y, selpaste, {.i = 0} }, - { ShiftMask, XK_Insert, selpaste, {.i = 0} }, - { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, - }; - - static KeySym mappedkeys[] = { -1 }; - - static uint ignoremod = Mod2Mask|XK_SWITCH_MOD; - - static Key key[] = { - { XK_KP_Home, ShiftMask, "\033[2J", 0, -1}, - { XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1}, - { XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1}, - { XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1}, - { XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0}, - { XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1}, - { XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1}, - { XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0}, - { XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1}, - { XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1}, - { XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0}, - { XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1}, - { XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1}, - { XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0}, - { XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1}, - { XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1}, - { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0}, - { XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, - { XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0}, - { XK_KP_End, ControlMask, "\033[J", -1, 0}, - { XK_KP_End, ControlMask, "\033[1;5F", +1, 0}, - { XK_KP_End, ShiftMask, "\033[K", -1, 0}, - { XK_KP_End, ShiftMask, "\033[1;2F", +1, 0}, - { XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0}, - { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0}, - { XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0}, - { XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0}, - { XK_KP_Insert, ShiftMask, "\033[4l", -1, 0}, - { XK_KP_Insert, ControlMask, "\033[L", -1, 0}, - { XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0}, - { XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, - { XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, - { XK_KP_Delete, ControlMask, "\033[M", -1, 0}, - { XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0}, - { XK_KP_Delete, ShiftMask, "\033[2K", -1, 0}, - { XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0}, - { XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0}, - { XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, - { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0}, - { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0}, - { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0}, - { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0}, - { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0}, - { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0}, - { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0}, - { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0}, - { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0}, - { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0}, - { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0}, - { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0}, - { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0}, - { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0}, - { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0}, - { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0}, - { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0}, - { XK_Up, ShiftMask, "\033[1;2A", 0, 0}, - { XK_Up, Mod1Mask, "\033[1;3A", 0, 0}, - { XK_Up, ShiftMask|Mod1Mask, "\033[1;4A", 0, 0}, - { XK_Up, ControlMask, "\033[1;5A", 0, 0}, - { XK_Up, ShiftMask|ControlMask, "\033[1;6A", 0, 0}, - { XK_Up, ControlMask|Mod1Mask, "\033[1;7A", 0, 0}, - { XK_Up, ShiftMask|ControlMask|Mod1Mask, "\033[1;8A", 0, 0}, - { XK_Up, XK_ANY_MOD, "\033[A", 0, -1}, - { XK_Up, XK_ANY_MOD, "\033OA", 0, +1}, - { XK_Down, ShiftMask, "\033[1;2B", 0, 0}, - { XK_Down, Mod1Mask, "\033[1;3B", 0, 0}, - { XK_Down, ShiftMask|Mod1Mask, "\033[1;4B", 0, 0}, - { XK_Down, ControlMask, "\033[1;5B", 0, 0}, - { XK_Down, ShiftMask|ControlMask, "\033[1;6B", 0, 0}, - { XK_Down, ControlMask|Mod1Mask, "\033[1;7B", 0, 0}, - { XK_Down, ShiftMask|ControlMask|Mod1Mask, "\033[1;8B", 0, 0}, - { XK_Down, XK_ANY_MOD, "\033[B", 0, -1}, - { XK_Down, XK_ANY_MOD, "\033OB", 0, +1}, - { XK_Left, ShiftMask, "\033[1;2D", 0, 0}, - { XK_Left, Mod1Mask, "\033[1;3D", 0, 0}, - { XK_Left, ShiftMask|Mod1Mask, "\033[1;4D", 0, 0}, - { XK_Left, ControlMask, "\033[1;5D", 0, 0}, - { XK_Left, ShiftMask|ControlMask, "\033[1;6D", 0, 0}, - { XK_Left, ControlMask|Mod1Mask, "\033[1;7D", 0, 0}, - { XK_Left, ShiftMask|ControlMask|Mod1Mask, "\033[1;8D", 0, 0}, - { XK_Left, XK_ANY_MOD, "\033[D", 0, -1}, - { XK_Left, XK_ANY_MOD, "\033OD", 0, +1}, - { XK_Right, ShiftMask, "\033[1;2C", 0, 0}, - { XK_Right, Mod1Mask, "\033[1;3C", 0, 0}, - { XK_Right, ShiftMask|Mod1Mask, "\033[1;4C", 0, 0}, - { XK_Right, ControlMask, "\033[1;5C", 0, 0}, - { XK_Right, ShiftMask|ControlMask, "\033[1;6C", 0, 0}, - { XK_Right, ControlMask|Mod1Mask, "\033[1;7C", 0, 0}, - { XK_Right, ShiftMask|ControlMask|Mod1Mask, "\033[1;8C", 0, 0}, - { XK_Right, XK_ANY_MOD, "\033[C", 0, -1}, - { XK_Right, XK_ANY_MOD, "\033OC", 0, +1}, - { XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0}, - { XK_Return, Mod1Mask, "\033\r", 0, 0}, - { XK_Return, XK_ANY_MOD, "\r", 0, 0}, - { XK_Insert, ShiftMask, "\033[4l", -1, 0}, - { XK_Insert, ShiftMask, "\033[2;2~", +1, 0}, - { XK_Insert, ControlMask, "\033[L", -1, 0}, - { XK_Insert, ControlMask, "\033[2;5~", +1, 0}, - { XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, - { XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, - { XK_Delete, ControlMask, "\033[M", -1, 0}, - { XK_Delete, ControlMask, "\033[3;5~", +1, 0}, - { XK_Delete, ShiftMask, "\033[2K", -1, 0}, - { XK_Delete, ShiftMask, "\033[3;2~", +1, 0}, - { XK_Delete, XK_ANY_MOD, "\033[P", -1, 0}, - { XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, - { XK_BackSpace, XK_NO_MOD, "\177", 0, 0}, - { XK_BackSpace, Mod1Mask, "\033\177", 0, 0}, - { XK_Home, ShiftMask, "\033[2J", 0, -1}, - { XK_Home, ShiftMask, "\033[1;2H", 0, +1}, - { XK_Home, XK_ANY_MOD, "\033[H", 0, -1}, - { XK_Home, XK_ANY_MOD, "\033[1~", 0, +1}, - { XK_End, ControlMask, "\033[J", -1, 0}, - { XK_End, ControlMask, "\033[1;5F", +1, 0}, - { XK_End, ShiftMask, "\033[K", -1, 0}, - { XK_End, ShiftMask, "\033[1;2F", +1, 0}, - { XK_End, XK_ANY_MOD, "\033[4~", 0, 0}, - { XK_Prior, ControlMask, "\033[5;5~", 0, 0}, - { XK_Prior, ShiftMask, "\033[5;2~", 0, 0}, - { XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, - { XK_Next, ControlMask, "\033[6;5~", 0, 0}, - { XK_Next, ShiftMask, "\033[6;2~", 0, 0}, - { XK_Next, XK_ANY_MOD, "\033[6~", 0, 0}, - { XK_F1, XK_NO_MOD, "\033OP" , 0, 0}, - { XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0}, - { XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0}, - { XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0}, - { XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0}, - { XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0}, - { XK_F2, XK_NO_MOD, "\033OQ" , 0, 0}, - { XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0}, - { XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0}, - { XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0}, - { XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0}, - { XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0}, - { XK_F3, XK_NO_MOD, "\033OR" , 0, 0}, - { XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0}, - { XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0}, - { XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0}, - { XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0}, - { XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0}, - { XK_F4, XK_NO_MOD, "\033OS" , 0, 0}, - { XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0}, - { XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0}, - { XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0}, - { XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0}, - { XK_F5, XK_NO_MOD, "\033[15~", 0, 0}, - { XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0}, - { XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0}, - { XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0}, - { XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0}, - { XK_F6, XK_NO_MOD, "\033[17~", 0, 0}, - { XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0}, - { XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0}, - { XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0}, - { XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0}, - { XK_F7, XK_NO_MOD, "\033[18~", 0, 0}, - { XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0}, - { XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0}, - { XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0}, - { XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0}, - { XK_F8, XK_NO_MOD, "\033[19~", 0, 0}, - { XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0}, - { XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0}, - { XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0}, - { XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0}, - { XK_F9, XK_NO_MOD, "\033[20~", 0, 0}, - { XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0}, - { XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0}, - { XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0}, - { XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0}, - { XK_F10, XK_NO_MOD, "\033[21~", 0, 0}, - { XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0}, - { XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0}, - { XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0}, - { XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0}, - { XK_F11, XK_NO_MOD, "\033[23~", 0, 0}, - { XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0}, - { XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0}, - { XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0}, - { XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0}, - { XK_F12, XK_NO_MOD, "\033[24~", 0, 0}, - { XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0}, - { XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0}, - { XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0}, - { XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0}, - { XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0}, - { XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0}, - { XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0}, - { XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0}, - { XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0}, - { XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0}, - { XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0}, - { XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0}, - { XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0}, - { XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0}, - { XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0}, - { XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0}, - { XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0}, - { XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0}, - { XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0}, - { XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0}, - { XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0}, - { XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0}, - { XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0}, - { XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0}, - { XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0}, - { XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0}, - { XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0}, - }; - - static uint selmasks[] = { - [SEL_RECTANGULAR] = Mod1Mask, - }; - - static char ascii_printable[] = - " !\"#$%&'()*+,-./0123456789:;<=>?" - "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" - "`abcdefghijklmnopqrstuvwxyz{|}~"; - ''; - - patches = [ - (fetchpatch { - url = "https://st.suckless.org/patches/disable_bold_italic_fonts/st-disable-bold-italic-fonts-0.8.2.diff"; - sha256 = "PG96QMqbX3Fr0EvDmF4lm/J3gj18eyBfm1bJ3M7plvQ="; - }) - - (fetchpatch { - url = "https://st.suckless.org/patches/anysize/st-anysize-20220718-baa9357.diff"; - sha256 = "yx9VSwmPACx3EN3CAdQkxeoJKJxQ6ziC9tpBcoWuWHc="; - }) - ]; - }) - ]; - }; -} diff --git a/modules/nixos/desktop/thunar.nix b/modules/nixos/desktop/thunar.nix deleted file mode 100644 index b6b08214..00000000 --- a/modules/nixos/desktop/thunar.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -with lib; - -let - cfg = config.desktop.thunar; -in -{ - options.desktop.thunar.enable = mkEnableOption "Enable thunar"; - - config = mkIf cfg.enable { - programs.thunar = { - enable = true; - - plugins = with pkgs.xfce; [ - thunar-archive-plugin - ]; - }; - - environment.systemPackages = with pkgs; [ xfce.tumbler ]; - }; -} diff --git a/modules/nixos/homelab/default.nix b/modules/nixos/homelab/default.nix deleted file mode 100644 index fe3a7066..00000000 --- a/modules/nixos/homelab/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - imports = [ - ./gitea-actions-runner.nix - ]; -} diff --git a/modules/nixos/homelab/gitea-actions-runner.nix b/modules/nixos/homelab/gitea-actions-runner.nix deleted file mode 100644 index 9318e22e..00000000 --- a/modules/nixos/homelab/gitea-actions-runner.nix +++ /dev/null @@ -1,50 +0,0 @@ -{ - config, - inputs, - lib, - pkgs, - ... -}: - -with lib; - -let - cfg = homelab.services.${service}; - homelab = config.homelab; - service = "gitea-actions-runner"; -in -{ - options.homelab.services.${service} = { - enable = mkEnableOption "Enable ${service}"; - }; - - config = mkIf cfg.enable { - services.${service}.instances.default = { - enable = true; - - hostPackages = with pkgs; [ - bash - coreutils - curl - gawk - gitMinimal - gnused - nix - nodejs - wget - ]; - - labels = [ - "nixos:host" - ]; - - name = config.networking.hostName; - tokenFile = config.age.secrets.forgejo-runner-token.path; - url = config.services.forgejo.settings.server.ROOT_URL; - }; - - age.secrets = { - forgejo-runner-token.file = "${inputs.self}/secrets/forgejo-runner-token.age"; - }; - }; -} diff --git a/modules/nixos/nixpad/default.nix b/modules/nixos/nixpad/default.nix deleted file mode 100644 index ace3213c..00000000 --- a/modules/nixos/nixpad/default.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -let - cfg = config.nixpad; -in -{ - options.nixpad = { - enable = lib.mkEnableOption "Enable nixpad configuration"; - }; - - config = lib.mkIf cfg.enable { - services.xserver = { - enable = true; - - desktopManager.cinnamon.enable = true; - displayManager.lightdm.enable = true; - }; - - programs = { - firefox.enable = true; - git.enable = true; - }; - - environment.systemPackages = with pkgs; [ - libreoffice - ]; - - nix.gc = { - automatic = true; - dates = "Mon 4:00"; - options = "--delete-older-than 30d"; - }; - }; -} diff --git a/modules/nixvim/aliases.nix b/modules/nixvim/aliases.nix new file mode 100644 index 00000000..e8f6a389 --- /dev/null +++ b/modules/nixvim/aliases.nix @@ -0,0 +1,6 @@ +{ + flake.modules.nixvim.custom = { + viAlias = true; + vimAlias = true; + }; +} diff --git a/modules/nixvim/auto-save.nix b/modules/nixvim/auto-save.nix new file mode 100644 index 00000000..0844ec58 --- /dev/null +++ b/modules/nixvim/auto-save.nix @@ -0,0 +1,24 @@ +{ + flake.modules.nixvim.custom.plugins.auto-save = { + enable = true; + + settings.condition = '' + function(buf) + local excluded_filetypes = { + "harpoon", + "oil", + } + + local excluded_filenames = {} + + if vim.tbl_contains(excluded_filetypes, vim.fn.getbufvar(buf, "&filetype")) + or vim.tbl_contains(excluded_filenames, vim.fn.expand("%:t")) + then + return false + end + + return true + end + ''; + }; +} diff --git a/modules/nixvim/colorscheme.nix b/modules/nixvim/colorscheme.nix new file mode 100644 index 00000000..28e04bc8 --- /dev/null +++ b/modules/nixvim/colorscheme.nix @@ -0,0 +1,6 @@ +{ + flake.modules.nixvim.custom.colorschemes.catppuccin = { + enable = true; + settings.flavour = "mocha"; + }; +} diff --git a/modules/nixvim/completion/cmp.nix b/modules/nixvim/completion/cmp.nix new file mode 100644 index 00000000..c6d96b43 --- /dev/null +++ b/modules/nixvim/completion/cmp.nix @@ -0,0 +1,57 @@ +{ + flake.modules.nixvim.custom.plugins.cmp = { + enable = true; + + autoEnableSources = true; + + settings = { + mapping = { + "" = "cmp.mapping.close()"; + + "" = '' + cmp.mapping(function() + if ls.locally_jumpable(-1) then + ls.jump(-1) + end + end) + ''; + + "" = '' + cmp.mapping(function() + if ls.expand_or_locally_jumpable() then + ls.expand_or_jump() + end + end) + ''; + + "" = "cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Select })"; + "" = "cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Select })"; + + "" = "cmp.mapping.confirm({ select = true })"; + + "" = "nil"; + "" = "nil"; + "" = "nil"; + }; + + snippet.expand = '' + function(args) + require('luasnip').lsp_expand(args.body) + end + ''; + + sources = [ + { name = "nvim_lsp"; } + { name = "nvim_lua"; } + { + name = "luasnip"; + keyword_length = 2; + } + { + name = "buffer"; + keyword_length = 3; + } + ]; + }; + }; +} diff --git a/modules/nixvim/completion/luasnip.nix b/modules/nixvim/completion/luasnip.nix new file mode 100644 index 00000000..5b91c029 --- /dev/null +++ b/modules/nixvim/completion/luasnip.nix @@ -0,0 +1,16 @@ +{ + flake.modules.nixvim.custom.plugins = { + cmp_luasnip.enable = true; + + luasnip = { + enable = true; + + fromLua = [ + { + lazyLoad = true; + paths = ./snippets; + } + ]; + }; + }; +} diff --git a/modules/nixvim/completion/snippets/asciidoc.lua b/modules/nixvim/completion/snippets/asciidoc.lua new file mode 100644 index 00000000..58b94986 --- /dev/null +++ b/modules/nixvim/completion/snippets/asciidoc.lua @@ -0,0 +1,10 @@ +return { + s("dev", t("__Under development...__")), + + s("source", fmta([[ + [source] + ---- + + ---- + ]], { finish = i(0), options = i(1) })), +} diff --git a/modules/nixvim/completion/snippets/javascript.lua b/modules/nixvim/completion/snippets/javascript.lua new file mode 100644 index 00000000..4cfb491e --- /dev/null +++ b/modules/nixvim/completion/snippets/javascript.lua @@ -0,0 +1,3 @@ +return { + s("log", fmta("console.log(<>);", { i(1, "value") })), +} diff --git a/modules/nixvim/completion/snippets/lua.lua b/modules/nixvim/completion/snippets/lua.lua new file mode 100644 index 00000000..31406fe7 --- /dev/null +++ b/modules/nixvim/completion/snippets/lua.lua @@ -0,0 +1,13 @@ +return { + s( + "req", + fmt([[local {} = require "{}"]], { + f(function(import_name) + local parts = vim.split(import_name[1][1], ".", true) + + return parts[#parts] or "" + end, { 1 }), + i(1), + }) + ) +} diff --git a/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/nix.lua b/modules/nixvim/completion/snippets/nix.lua similarity index 90% rename from modules/home-manager/coding/neovim/config/lua/opdavies/snippets/nix.lua rename to modules/nixvim/completion/snippets/nix.lua index 1ccc6ada..8e454963 100644 --- a/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/nix.lua +++ b/modules/nixvim/completion/snippets/nix.lua @@ -1,13 +1,4 @@ -require("luasnip.session.snippet_collection").clear_snippets "nix" - -local ls = require "luasnip" - -local i = ls.insert_node -local s = ls.snippet - -local fmta = require("luasnip.extras.fmt").fmta - -ls.add_snippets("nix", { +return { s("home_packages", fmta("home.packages = with pkgs; [ <> ];", i(0))), s( @@ -117,4 +108,4 @@ ls.add_snippets("nix", { ), s("system_packages", fmta("environment.systemPackages = with pkgs; [<>];", i(0))), -}) +} diff --git a/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/php.lua b/modules/nixvim/completion/snippets/php.lua similarity index 75% rename from modules/home-manager/coding/neovim/config/lua/opdavies/snippets/php.lua rename to modules/nixvim/completion/snippets/php.lua index f7b5bc0b..eeb9f5d9 100644 --- a/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/php.lua +++ b/modules/nixvim/completion/snippets/php.lua @@ -1,15 +1,4 @@ -require("luasnip.session.snippet_collection").clear_snippets "php" - -local ls = require "luasnip" - -local c = ls.choice_node -local i = ls.insert_node -local s = ls.snippet -local t = ls.text_node - -local fmta = require("luasnip.extras.fmt").fmta - -ls.add_snippets("php", { +return { s("func", fmta("function <>(<>)<> {\n <>\n}<>", { i(1), i(2), i(3), i(4), i(0) })), s( @@ -62,5 +51,5 @@ ls.add_snippets("php", { ]], { i(1), i(2), i(0) } ) - ), -}) + ) +} diff --git a/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/rst.lua b/modules/nixvim/completion/snippets/rst.lua similarity index 80% rename from modules/home-manager/coding/neovim/config/lua/opdavies/snippets/rst.lua rename to modules/nixvim/completion/snippets/rst.lua index 954dfc8f..7964a542 100644 --- a/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/rst.lua +++ b/modules/nixvim/completion/snippets/rst.lua @@ -1,12 +1,3 @@ -require("luasnip.session.snippet_collection").clear_snippets "rst" - -local ls = require "luasnip" - -local i = ls.insert_node -local f = ls.function_node -local s = ls.snippet -local t = ls.text_node - local fmta = require("luasnip.extras.fmt").fmta local fill_line = function(char) @@ -17,7 +8,7 @@ local fill_line = function(char) end end -ls.add_snippets("rst", { +return { s("class", t(".. class:: ", i(1))), s("footer", t(".. footer:: ", i(1))), @@ -60,4 +51,4 @@ ls.add_snippets("rst", { { i(0) } ) ), -}) +} diff --git a/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/twig.lua b/modules/nixvim/completion/snippets/twig.lua similarity index 62% rename from modules/home-manager/coding/neovim/config/lua/opdavies/snippets/twig.lua rename to modules/nixvim/completion/snippets/twig.lua index 628e1e25..a787a544 100644 --- a/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/twig.lua +++ b/modules/nixvim/completion/snippets/twig.lua @@ -1,13 +1,4 @@ -require("luasnip.session.snippet_collection").clear_snippets "twig" - -local ls = require "luasnip" - -local s = ls.snippet -local i = ls.insert_node - -local fmta = require("luasnip.extras.fmt").fmta - -ls.add_snippets("twig", { +return { s("do", fmta("{% <> %}<>", { i(1), i(0) })), s("dump", fmta("{{ dump(<>) }}<>", { i(1), i(0) })), s("echo", fmta("{{ <> }}<>", { i(1), i(0) })), @@ -25,4 +16,4 @@ ls.add_snippets("twig", { ), s("if", fmta("{% if <> %}<>{% endif %}<>", { i(1), i(2), i(0) })), -}) +} diff --git a/modules/nixvim/conform.nix b/modules/nixvim/conform.nix new file mode 100644 index 00000000..8e7e5c8d --- /dev/null +++ b/modules/nixvim/conform.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixvim.custom.plugins.conform-nvim.enable = true; +} diff --git a/modules/nixvim/diagnostics.nix b/modules/nixvim/diagnostics.nix new file mode 100644 index 00000000..a3758ade --- /dev/null +++ b/modules/nixvim/diagnostics.nix @@ -0,0 +1,12 @@ +{ + flake.modules.nixvim.custom.diagnostic.settings = { + signs = true; + underline = false; + update_in_insert = false; + + virtual_text = { + enable = true; + spacing = 2; + }; + }; +} diff --git a/modules/nixvim/edit-alternate/config.nix b/modules/nixvim/edit-alternate/config.nix new file mode 100644 index 00000000..7adefaa0 --- /dev/null +++ b/modules/nixvim/edit-alternate/config.nix @@ -0,0 +1,71 @@ +{ + flake.modules.nixvim.custom.extraConfigLua = '' + local add_rule = function(ft, fn) + vim.fn["edit_alternate#rule#add"](ft, fn) + end + + add_rule("go", function(filename) + return filename:find "_test%.go$" + and filename:gsub("_test%.go$", ".go") + or filename:gsub("%.go$", "_test.go") + end) + + add_rule("php", function(filename) + if filename:find "Test.php$" then + filename = filename:gsub("Test.php$", ".php") + + return filename:find "tests/src/" + and filename:gsub("tests/src/(.-)/", "src/") + or filename:gsub("tests/", "src/") + else + local test_filename = filename:gsub("%.php$", "Test.php") + + if test_filename:find "modules/custom" then + local test_types = { "Functional", "FunctionalJavaScript", "Kernel", "Unit" } + + for _, test_type in ipairs(test_types) do + local candidate = test_filename:gsub("src/", string.format("tests/src/%s/", test_type)) + + if vim.fn.filereadable(candidate) == 1 then + return candidate + end + end + end + + return test_filename + end + end) + + add_rule("ts", function(filename) + return filename:gsub("%.stories.ts$", ".tsx") + end) + + add_rule("tsx", function(filename) + if filename:find("%.stories.tsx$") then + return filename:gsub("%.stories.tsx$", ".tsx") + end + + return filename:gsub("%.tsx$", ".stories.tsx") + end) + + if vim.fn.filereadable "composer.json" == 1 then + add_rule("json", function(filename) + return filename:find "composer.json" and filename:gsub("%.json$", ".lock") or nil + end) + + add_rule("lock", function(filename) + return filename:find "composer.lock" and filename:gsub("%.lock$", ".json") or nil + end) + end + + if vim.fn.filereadable "fractal.config.js" == 1 then + add_rule("twig", function(filename) + return filename:gsub("%.twig$", ".config.yml") + end) + + add_rule("yml", function(filename) + return filename:gsub("%.config.yml$", ".twig") + end) + end + ''; +} diff --git a/modules/nixvim/edit-alternate/extra-plugins.nix b/modules/nixvim/edit-alternate/extra-plugins.nix new file mode 100644 index 00000000..ca795f18 --- /dev/null +++ b/modules/nixvim/edit-alternate/extra-plugins.nix @@ -0,0 +1,31 @@ +{ inputs, ... }: + +{ + flake.modules.nixvim.custom = + { pkgs, ... }: + { + extraPlugins = + let + inherit (pkgs.vimUtils) buildVimPlugin; + in + [ + (buildVimPlugin { + pname = "conf-vim"; + src = inputs.conf-vim; + version = "unstable"; + }) + + (buildVimPlugin { + pname = "edit-alternate-vim"; + src = inputs.edit-alternate-vim; + version = "unstable"; + }) + + (buildVimPlugin { + pname = "standard-vim"; + src = inputs.standard-vim; + version = "unstable"; + }) + ]; + }; +} diff --git a/modules/nixvim/edit-alternate/keymaps.nix b/modules/nixvim/edit-alternate/keymaps.nix new file mode 100644 index 00000000..fa375bab --- /dev/null +++ b/modules/nixvim/edit-alternate/keymaps.nix @@ -0,0 +1,9 @@ +{ + flake.modules.nixvim.custom.keymaps = [ + { + action = "EditAlternate"; + key = "ea"; + mode = "n"; + } + ]; +} diff --git a/modules/nixvim/extra-packages.nix b/modules/nixvim/extra-packages.nix new file mode 100644 index 00000000..33f7d8f1 --- /dev/null +++ b/modules/nixvim/extra-packages.nix @@ -0,0 +1,10 @@ +{ + flake.modules.nixvim.custom = + { pkgs, ... }: + { + extraPackages = with pkgs; [ + nixfmt-rfc-style + stylua + ]; + }; +} diff --git a/modules/nixvim/fidget.nix b/modules/nixvim/fidget.nix new file mode 100644 index 00000000..05124ce7 --- /dev/null +++ b/modules/nixvim/fidget.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixvim.custom.plugins.fidget.enable = true; +} diff --git a/modules/nixvim/filetypes.nix b/modules/nixvim/filetypes.nix new file mode 100644 index 00000000..bfdc4ca9 --- /dev/null +++ b/modules/nixvim/filetypes.nix @@ -0,0 +1,17 @@ +{ + flake.modules.nixvim.custom.filetype = { + extension = { + "neon.dist" = "yaml"; + inc = "php"; + install = "php"; + module = "php"; + neon = "yaml"; + pcss = "scss"; + theme = "php"; + }; + + filename = { + "composer.lock" = "json"; + }; + }; +} diff --git a/modules/nixvim/flake-outputs.nix b/modules/nixvim/flake-outputs.nix new file mode 100644 index 00000000..2705d5c8 --- /dev/null +++ b/modules/nixvim/flake-outputs.nix @@ -0,0 +1,13 @@ +{ config, ... }: + +{ + perSystem = + { inputs', pkgs, ... }: + { + packages.neovim = inputs'.nixvim.legacyPackages.makeNixvimWithModule { + inherit pkgs; + + module = config.flake.modules.nixvim.custom; + }; + }; +} diff --git a/modules/nixvim/ftplugin/asciidoc.nix b/modules/nixvim/ftplugin/asciidoc.nix new file mode 100644 index 00000000..33a44bc6 --- /dev/null +++ b/modules/nixvim/ftplugin/asciidoc.nix @@ -0,0 +1,17 @@ +{ lib, ... }: + +{ + flake.modules.nixvim.custom = + { pkgs, ... }: + { + extraFiles."after/ftplugin/asciidoc.lua".text = '' + vim.opt_local.linebreak = true + vim.opt_local.makeprg = "${lib.getExe pkgs.asciidoctor} %" + vim.opt_local.spell = true + + -- Convert lines into a list. + vim.keymap.set("n", "l", "vip:norm I* ") + vim.keymap.set("v", "l", ":norm I* ") + ''; + }; +} diff --git a/modules/nixvim/ftplugin/gitcommit.nix b/modules/nixvim/ftplugin/gitcommit.nix new file mode 100644 index 00000000..9475a398 --- /dev/null +++ b/modules/nixvim/ftplugin/gitcommit.nix @@ -0,0 +1,9 @@ +{ + flake.modules.nixvim.custom.extraFiles."after/ftplugin/gitcommit.lua".text = + # lua + '' + vim.opt_local.colorcolumn = "50,72" + vim.opt_local.spell = true + vim.opt_local.textwidth = 72 + ''; +} diff --git a/modules/nixvim/ftplugin/go.nix b/modules/nixvim/ftplugin/go.nix new file mode 100644 index 00000000..21abe049 --- /dev/null +++ b/modules/nixvim/ftplugin/go.nix @@ -0,0 +1,9 @@ +{ + flake.modules.nixvim.custom = { + extraFiles."after/ftplugin/go.lua".text = + # lua + '' + vim.opt.makeprg = "go run %" + ''; + }; +} diff --git a/modules/nixvim/ftplugin/just.nix b/modules/nixvim/ftplugin/just.nix new file mode 100644 index 00000000..c9c4517c --- /dev/null +++ b/modules/nixvim/ftplugin/just.nix @@ -0,0 +1,11 @@ +{ + flake.modules.nixvim.custom = { + extraFiles."after/ftplugin/just.lua".text = + # lua + '' + local opt = vim.opt_local + + opt.shiftwidth = 4 + ''; + }; +} diff --git a/modules/nixvim/ftplugin/markdown.nix b/modules/nixvim/ftplugin/markdown.nix new file mode 100644 index 00000000..9cd1f1ed --- /dev/null +++ b/modules/nixvim/ftplugin/markdown.nix @@ -0,0 +1,22 @@ +{ + flake.modules.nixvim.custom = { + plugins.cmp-path.enable = true; + + extraFiles."after/ftplugin/markdown.lua".text = + # lua + '' + local opt = vim.opt_local + + opt.spell = true + opt.wrap = true + + local cmp = require "cmp" + local sources = cmp.get_config().sources + + -- TODO: confirm these aren't aleady in the list of sources to avoid duplicate suggestions. + table.insert(sources, { name = "path" }) + + cmp.setup.buffer { sources = sources } + ''; + }; +} diff --git a/modules/nixvim/ftplugin/php.nix b/modules/nixvim/ftplugin/php.nix new file mode 100644 index 00000000..e531157e --- /dev/null +++ b/modules/nixvim/ftplugin/php.nix @@ -0,0 +1,9 @@ +{ + flake.modules.nixvim.custom = { + extraFiles."after/ftplugin/php.lua".text = + # lua + '' + vim.opt_local.makeprg = "php %"; + ''; + }; +} diff --git a/modules/nixvim/fugitive.nix b/modules/nixvim/fugitive.nix new file mode 100644 index 00000000..ac800972 --- /dev/null +++ b/modules/nixvim/fugitive.nix @@ -0,0 +1,18 @@ +{ + flake.modules.nixvim.custom = { + plugins.fugitive.enable = true; + + keymaps = [ + { + key = "gc"; + action = "Git commitK"; + } + + { + # Open the ":Git" window in its own buffer, not a split. + key = "gs"; + action = "0Git"; + } + ]; + }; +} diff --git a/modules/nixvim/gitsigns.nix b/modules/nixvim/gitsigns.nix new file mode 100644 index 00000000..60609c35 --- /dev/null +++ b/modules/nixvim/gitsigns.nix @@ -0,0 +1,48 @@ +{ + flake.modules.nixvim.custom = { + plugins.gitsigns.enable = true; + + keymaps = [ + { + action = "Gitsigns prev_hunk"; + key = "[h"; + } + + { + action = "Gitsigns next_hunk"; + key = "]h"; + } + + { + action = "Gitsigns reset_hunk"; + key = "hr"; + } + + { + action = "Gitsigns reset_buffer"; + key = "hR"; + } + + { + action = "Gitsigns stage_hunk"; + key = "hs"; + mode = [ + "n" + "v" + ]; + } + + { + action = "Gitsigns stage_buffer"; + key = "hS"; + mode = "n"; + } + + { + action = "Gitsigns undo_stage_hunk"; + key = "hu"; + mode = "x"; + } + ]; + }; +} diff --git a/modules/nixvim/harpoon.nix b/modules/nixvim/harpoon.nix new file mode 100644 index 00000000..830b1f42 --- /dev/null +++ b/modules/nixvim/harpoon.nix @@ -0,0 +1,45 @@ +let + leaderBinding = key: command: { + key = "${key}"; + action = "${command}"; + options.silent = true; + }; +in +{ + flake.modules.nixvim.custom = { + plugins.harpoon = { + enable = true; + enableTelescope = true; + }; + + keymaps = [ + { + key = "a"; + action.__raw = "function() require'harpoon':list():add() end"; + } + + { + key = ""; + action.__raw = '' + function() + require 'harpoon'.ui:toggle_quick_menu(require'harpoon':list()) + end + ''; + } + ] + ++ (map + (num: leaderBinding "${toString num}" "lua require(\"harpoon\"):list():select(${toString num})") + [ + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + ] + ); + }; +} diff --git a/modules/nixvim/keymaps.nix b/modules/nixvim/keymaps.nix new file mode 100644 index 00000000..dc13def0 --- /dev/null +++ b/modules/nixvim/keymaps.nix @@ -0,0 +1,86 @@ +{ + flake.modules.nixvim.custom.keymaps = [ + { + action = "A,"; + key = ",,"; + mode = "i"; + } + + { + action = "A;"; + key = ";;"; + mode = "i"; + } + + { + action = "!drush cache-rebuild"; + key = "dcr"; + } + + { + action = ":edit todo.txt"; + key = "et"; + } + + { + action = "lua vim.lsp.buf.format()"; + key = "f"; + options.silent = true; + } + + { + action = "\"+y"; + key = "y"; + mode = [ + "n" + "x" + ]; + } + + { + action = "@q"; + key = "Q"; + } + + { + action = "silent !tmux new-window tmux-sessionizer"; + key = ""; + options.silent = true; + } + + { + action = ":w"; + key = ""; + mode = [ + "i" + "n" + ]; + } + + { + action = "tabnew"; + key = ""; + } + + { + action = "!composer install"; + key = "ci"; + } + + { + action = "edit composer.json"; + key = "ec"; + } + + { + action = "edit flake.nix"; + key = "ef"; + } + + { + action = ""; + key = "jk"; + mode = "i"; + } + ]; +} diff --git a/modules/nixvim/leader.nix b/modules/nixvim/leader.nix new file mode 100644 index 00000000..36b9eff9 --- /dev/null +++ b/modules/nixvim/leader.nix @@ -0,0 +1,6 @@ +{ + flake.modules.nixvim.custom.globals = { + mapleader = " "; + maplocalleader = " "; + }; +} diff --git a/modules/nixvim/lint.nix b/modules/nixvim/lint.nix new file mode 100644 index 00000000..60b766e6 --- /dev/null +++ b/modules/nixvim/lint.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixvim.custom.plugins.lint.enable = true; +} diff --git a/modules/nixvim/lsp.nix b/modules/nixvim/lsp.nix new file mode 100644 index 00000000..efd9d4d1 --- /dev/null +++ b/modules/nixvim/lsp.nix @@ -0,0 +1,23 @@ +{ + flake.modules.nixvim.custom.plugins.lsp = { + enable = true; + + keymaps = { + diagnostic = { + "dl" = "setqflist"; + }; + + lspBuf = { + "ca" = "code_action"; + "cr" = "rename"; + K = "hover"; + gD = "declaration"; + gT = "type_definition"; + gd = "definition"; + gr = "references"; + }; + }; + + servers.phpactor.enable = true; + }; +} diff --git a/modules/nixvim/lsp/bash.nix b/modules/nixvim/lsp/bash.nix new file mode 100644 index 00000000..5b4fe0d7 --- /dev/null +++ b/modules/nixvim/lsp/bash.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixvim.custom.lsp.servers.bashls.enable = true; +} diff --git a/modules/nixvim/lsp/css.nix b/modules/nixvim/lsp/css.nix new file mode 100644 index 00000000..df60f599 --- /dev/null +++ b/modules/nixvim/lsp/css.nix @@ -0,0 +1,6 @@ +{ + flake.modules.nixvim.custom.lsp.servers = { + cssls.enable = true; + tailwindcss.enable = true; + }; +} diff --git a/modules/nixvim/lsp/go.nix b/modules/nixvim/lsp/go.nix new file mode 100644 index 00000000..56dd395b --- /dev/null +++ b/modules/nixvim/lsp/go.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixvim.custom.lsp.servers.gopls.enable = true; +} diff --git a/modules/nixvim/lsp/html.nix b/modules/nixvim/lsp/html.nix new file mode 100644 index 00000000..6cc1f44e --- /dev/null +++ b/modules/nixvim/lsp/html.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixvim.custom.lsp.servers.html.enable = true; +} diff --git a/modules/nixvim/lsp/javascript.nix b/modules/nixvim/lsp/javascript.nix new file mode 100644 index 00000000..148adb94 --- /dev/null +++ b/modules/nixvim/lsp/javascript.nix @@ -0,0 +1,6 @@ +{ + flake.modules.nixvim.custom.plugins = { + lsp.servers.eslint.enable = true; + typescript-tools.enable = true; + }; +} diff --git a/modules/nixvim/lsp/lua.nix b/modules/nixvim/lsp/lua.nix new file mode 100644 index 00000000..7fb31f17 --- /dev/null +++ b/modules/nixvim/lsp/lua.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixvim.custom.lsp.servers.lua_ls.enable = true; +} diff --git a/modules/nixvim/lsp/nix.nix b/modules/nixvim/lsp/nix.nix new file mode 100644 index 00000000..a3e698cd --- /dev/null +++ b/modules/nixvim/lsp/nix.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixvim.custom.lsp.servers.nixd.enable = true; +} diff --git a/modules/nixvim/lsp/php.nix b/modules/nixvim/lsp/php.nix new file mode 100644 index 00000000..6a22484a --- /dev/null +++ b/modules/nixvim/lsp/php.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixvim.custom.lsp.servers.phpactor.enable = true; +} diff --git a/modules/nixvim/make.nix b/modules/nixvim/make.nix new file mode 100644 index 00000000..1a533b9a --- /dev/null +++ b/modules/nixvim/make.nix @@ -0,0 +1,14 @@ +{ + flake.modules.nixvim.custom = + { pkgs, ... }: + { + extraPackages = with pkgs; [ gnumake ]; + + keymaps = [ + { + action = "make"; + key = "r"; + } + ]; + }; +} diff --git a/modules/nixvim/mini.nix b/modules/nixvim/mini.nix new file mode 100644 index 00000000..e9b66a30 --- /dev/null +++ b/modules/nixvim/mini.nix @@ -0,0 +1,15 @@ +{ + flake.modules.nixvim.custom.plugins.mini = { + enable = true; + + modules = { + ai = { }; + align = { }; + bracketed = { }; + move = { }; + operators = { }; + splitjoin = { }; + surround = { }; + }; + }; +} diff --git a/modules/nixvim/oil.nix b/modules/nixvim/oil.nix new file mode 100644 index 00000000..2a022eea --- /dev/null +++ b/modules/nixvim/oil.nix @@ -0,0 +1,23 @@ +{ + flake.modules.nixvim.custom = { + plugins.oil = { + enable = true; + + settings = { + delete_to_trash = true; + + keymaps."-" = "actions.parent"; + + skip_confirm_for_simple_edits = true; + view_options.show_hidden = true; + }; + }; + + keymaps = [ + { + action = "Oil"; + key = "-"; + } + ]; + }; +} diff --git a/modules/nixvim/options.nix b/modules/nixvim/options.nix new file mode 100644 index 00000000..adfacce9 --- /dev/null +++ b/modules/nixvim/options.nix @@ -0,0 +1,28 @@ +{ + flake.modules.nixvim.custom.opts = { + cmdheight = 0; + expandtab = true; + exrc = true; + foldlevel = 1; + foldlevelstart = 99; + foldmethod = "indent"; + inccommand = "split"; + laststatus = 3; + list = true; + number = true; + relativenumber = true; + scrolloff = 5; + shiftwidth = 2; + signcolumn = "yes:1"; + smartindent = true; + softtabstop = 2; + splitbelow = true; + splitright = true; + swapfile = false; + syntax = "on"; + tabstop = 2; + termguicolors = true; + updatetime = 1000; + wrap = false; + }; +} diff --git a/modules/nixvim/phpactor.nix b/modules/nixvim/phpactor.nix new file mode 100644 index 00000000..d40f8a1f --- /dev/null +++ b/modules/nixvim/phpactor.nix @@ -0,0 +1,19 @@ +{ + flake.modules.nixvim.custom = + { pkgs, ... }: + { + extraPlugins = with pkgs.vimPlugins; [ phpactor ]; + + keymaps = [ + { + key = "pm"; + action = "PhpactorContextMenu"; + } + + { + key = "pn"; + action = "PhpactorClassNew"; + } + ]; + }; +} diff --git a/modules/nixvim/refactoring.nix b/modules/nixvim/refactoring.nix new file mode 100644 index 00000000..f59f9a9c --- /dev/null +++ b/modules/nixvim/refactoring.nix @@ -0,0 +1,54 @@ +{ config, lib, ... }: + +{ + flake.modules.nixvim.custom = { + plugins.refactoring = { + enable = true; + enableTelescope = true; + }; + + keymaps = [ + { + key = "ri"; + action = "Refactor inline_var"; + mode = "n"; + } + + { + key = "re"; + action = "Refactor extract"; + mode = "x"; + } + + { + key = "ri"; + action = "Refactor inline_var"; + mode = "x"; + } + + { + key = "rv"; + action = "Refactor extract_var"; + mode = "x"; + } + ]; + # ++ + # lib.optionals + # ( + # config.flake.modules.nixvim.custom.plugins.refactoring.enable + # && config.flake.modules.nixvim.custom.plugins.refactoring.enableTelescope + # ) + # [ + # { + # mode = "n"; + # key = "rR"; + # action.__raw = '' + # function() + # require('telescope').extensions.refactoring.refactors() + # end + # ''; + # options.silent = true; + # } + # ]; + }; +} diff --git a/modules/home-manager/coding/neovim/config/spell/en.utf-8.add b/modules/nixvim/spell/en.utf-8.add similarity index 100% rename from modules/home-manager/coding/neovim/config/spell/en.utf-8.add rename to modules/nixvim/spell/en.utf-8.add diff --git a/modules/nixvim/telescope.nix b/modules/nixvim/telescope.nix new file mode 100644 index 00000000..ee59725e --- /dev/null +++ b/modules/nixvim/telescope.nix @@ -0,0 +1,31 @@ +{ + flake.modules.nixvim.custom.plugins.telescope = { + enable = true; + + extensions = { + live-grep-args.enable = true; + fzf-native.enable = true; + ui-select.enable = true; + }; + + keymaps = { + "/" = "current_buffer_fuzzy_find"; + "fb" = "buffers"; + "fd" = "find_files"; + "fg" = "live_grep"; + + "gw" = { + action = "grep_string"; + mode = [ + "n" + "v" + ]; + }; + }; + + settings.defaults.layout_config.prompt_position = "top"; + settings.defaults.sorting_strategy = "ascending"; + + settings.pickers.find_files.hidden = true; + }; +} diff --git a/modules/nixvim/templates/default.nix b/modules/nixvim/templates/default.nix new file mode 100644 index 00000000..753b600a --- /dev/null +++ b/modules/nixvim/templates/default.nix @@ -0,0 +1,9 @@ +{ + flake.modules.nixvim.custom.autoCmd = [ + { + event = "BufNewFile"; + pattern = [ "*.php" ]; + command = "0r ${./php}"; + } + ]; +} diff --git a/modules/nixvim/templates/php b/modules/nixvim/templates/php new file mode 100644 index 00000000..174d7fd7 --- /dev/null +++ b/modules/nixvim/templates/php @@ -0,0 +1,3 @@ +UndotreeToggle"; + key = "u"; + } + ]; + }; +} diff --git a/modules/nixvim/use-in-home.nix b/modules/nixvim/use-in-home.nix new file mode 100644 index 00000000..991fca81 --- /dev/null +++ b/modules/nixvim/use-in-home.nix @@ -0,0 +1,24 @@ +{ config, inputs, lib, ... }: + +{ + flake.modules.homeManager.base = + hmArgs@{ pkgs, ... }: + let + # Ideally: + # nixvim = self.packages.${pkgs.system}.nixvim; + # but https://github.com/danth/stylix/pull/415#issuecomment-2832398958 + neovim = inputs.nixvim.legacyPackages.${pkgs.system}.makeNixvimWithModule { + inherit pkgs; + + extraSpecialArgs.homeConfig = hmArgs.config; + + module = config.flake.modules.nixvim.custom; + }; + in + { + home = { + packages = [ neovim ]; + sessionVariables.EDITOR = lib.mkForce (lib.getExe neovim); + }; + }; +} diff --git a/modules/nixvim/vim-cool.nix b/modules/nixvim/vim-cool.nix new file mode 100644 index 00000000..1a02189e --- /dev/null +++ b/modules/nixvim/vim-cool.nix @@ -0,0 +1,7 @@ +{ + flake.modules.nixvim.custom = + { pkgs, ... }: + { + extraPlugins = [ pkgs.vimPlugins.vim-cool ]; + }; +} diff --git a/modules/nixvim/vim-dadbod.nix b/modules/nixvim/vim-dadbod.nix new file mode 100644 index 00000000..1ef2050d --- /dev/null +++ b/modules/nixvim/vim-dadbod.nix @@ -0,0 +1,7 @@ +{ + flake.modules.nixvim.custom.plugins = { + vim-dadbod.enable = true; + vim-dadbod-completion.enable = true; + vim-dadbod-ui.enable = true; + }; +} diff --git a/modules/nixvim/vim-heritage.nix b/modules/nixvim/vim-heritage.nix new file mode 100644 index 00000000..2ff64c26 --- /dev/null +++ b/modules/nixvim/vim-heritage.nix @@ -0,0 +1,25 @@ +{ inputs, ... }: + +{ + flake.modules.nixvim.custom = + { pkgs, ... }: + { + extraPlugins = [ + (pkgs.vimUtils.buildVimPlugin { + src = inputs.vim-heritage; + pname = "vim-heritage"; + version = "unstable"; + }) + ]; + + keymaps = [ + # https://github.com/jessarcher/vim-heritage/blob/574baeb0679681a710adce5110a0d8b2ae1c2637/README.md#L28-L33 + { + action = ":edit %:h/"; + key = "gf"; + mode = "n"; + options.silent = true; + } + ]; + }; +} diff --git a/modules/nixvim/vim-highlightedyank.nix b/modules/nixvim/vim-highlightedyank.nix new file mode 100644 index 00000000..ee937da9 --- /dev/null +++ b/modules/nixvim/vim-highlightedyank.nix @@ -0,0 +1,11 @@ +{ + flake.modules.nixvim.custom = + { pkgs, ... }: + { + extraPlugins = [ pkgs.vimPlugins.vim-highlightedyank ]; + + extraConfigVim = '' + let g:highlightedyank_highlight_duration = 100 + ''; + }; +} diff --git a/modules/nixvim/vim-test.nix b/modules/nixvim/vim-test.nix new file mode 100644 index 00000000..5ec7a29c --- /dev/null +++ b/modules/nixvim/vim-test.nix @@ -0,0 +1,20 @@ +{ + flake.modules.nixvim.custom = { + plugins.vim-test.enable = true; + + keymaps = [ + { + key = "tf"; + action = "TestFile"; + } + { + key = "tl"; + action = "TestLast"; + } + { + key = "tn"; + action = "TestNearest"; + } + ]; + }; +} diff --git a/modules/nixvim/vim-textobj-xmlattr.nix b/modules/nixvim/vim-textobj-xmlattr.nix new file mode 100644 index 00000000..6cdd4812 --- /dev/null +++ b/modules/nixvim/vim-textobj-xmlattr.nix @@ -0,0 +1,17 @@ +{ inputs, ... }: + +{ + flake.modules.nixvim.custom = + { pkgs, ... }: + { + extraPlugins = with pkgs.vimPlugins; [ + vim-textobj-user + + (pkgs.vimUtils.buildVimPlugin { + src = inputs.vim-textobj-xmlattr; + pname = "vim-textobj-xmlattr"; + version = "unstable"; + }) + ]; + }; +} diff --git a/modules/nixvim/web-devicons.nix b/modules/nixvim/web-devicons.nix new file mode 100644 index 00000000..56591499 --- /dev/null +++ b/modules/nixvim/web-devicons.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixvim.custom.plugins.web-devicons.enable = false; +} diff --git a/modules/node.nix b/modules/node.nix new file mode 100644 index 00000000..55ec9367 --- /dev/null +++ b/modules/node.nix @@ -0,0 +1,19 @@ +{ + flake.modules.homeManager.base = + { config, ... }: + let + inherit (config.xdg) configHome dataHome stateHome; + in + { + xdg.configFile."${config.home.sessionVariables.NPM_CONFIG_USERCONFIG}".text = '' + cache=${configHome}/npm + init-module=${configHome}/npm/config/npm-init.js + logs-dir=${stateHome}/npm/logs + prefix=${dataHome}/npm + ''; + + home.sessionVariables = { + NPM_CONFIG_USERCONFIG = "${configHome}/npm/npmrc"; + }; + }; +} diff --git a/modules/notes/xdg.nix b/modules/notes/xdg.nix new file mode 100644 index 00000000..f0daba22 --- /dev/null +++ b/modules/notes/xdg.nix @@ -0,0 +1,6 @@ +{ + flake.modules.homeManager.base.xdg = { + enable = true; + userDirs.enable = true; + }; +} diff --git a/modules/ollama/acceleration.nix b/modules/ollama/acceleration.nix new file mode 100644 index 00000000..f79fd202 --- /dev/null +++ b/modules/ollama/acceleration.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixos.desktop.services.ollama.acceleration = "rocm"; +} diff --git a/modules/ollama/models.nix b/modules/ollama/models.nix new file mode 100644 index 00000000..4df7a39a --- /dev/null +++ b/modules/ollama/models.nix @@ -0,0 +1,5 @@ +{ + flake.modules.nixos.desktop.services.ollama.loadModels = [ + "dimavz/whisper-tiny" + ]; +} diff --git a/modules/openssh/enable.nix b/modules/openssh/enable.nix new file mode 100644 index 00000000..278ab317 --- /dev/null +++ b/modules/openssh/enable.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixos.pc.services.openssh.enable = true; +} diff --git a/modules/openssh/firewall.nix b/modules/openssh/firewall.nix new file mode 100644 index 00000000..c8b4e8b5 --- /dev/null +++ b/modules/openssh/firewall.nix @@ -0,0 +1,5 @@ +{ lib, ... }: + +{ + flake.modules.nixos.pc.services.openssh.openFirewall = lib.mkForce true; +} diff --git a/modules/openssh/settings.nix b/modules/openssh/settings.nix new file mode 100644 index 00000000..d1a976f7 --- /dev/null +++ b/modules/openssh/settings.nix @@ -0,0 +1,8 @@ +{ lib, ... }: + +{ + flake.modules.nixos.pc.services.openssh.settings = { + PasswordAuthentication = false; + PermitRootLogin = lib.mkForce "no"; + }; +} diff --git a/modules/owner.nix b/modules/owner.nix new file mode 100644 index 00000000..5634a0c8 --- /dev/null +++ b/modules/owner.nix @@ -0,0 +1,23 @@ +{ config, lib, ... }: + +{ + flake = { + meta.owner = { + email = "oliver@oliverdavies.uk"; + name = "Oliver Davies"; + username = "opdavies"; + }; + + modules = { + nixos.base = { + users.users.${config.flake.meta.owner.username} = { + isNormalUser = true; + initialPassword = lib.mkForce ""; + extraGroups = [ "input" ]; + }; + + nix.settings.trusted-users = [ config.flake.meta.owner.username ]; + }; + }; + }; +} diff --git a/modules/password-store/enable.nix b/modules/password-store/enable.nix new file mode 100644 index 00000000..e5022dee --- /dev/null +++ b/modules/password-store/enable.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.base.programs.password-store.enable = true; +} diff --git a/modules/password-store/package.nix b/modules/password-store/package.nix new file mode 100644 index 00000000..781a0e5d --- /dev/null +++ b/modules/password-store/package.nix @@ -0,0 +1,17 @@ +{ lib, ... }: + +{ + flake.modules.homeManager.base = + { config, pkgs, ... }: + { + options.programs.password-store.extensions = lib.mkOption { + default = [ ]; + type = lib.types.listOf lib.types.package; + description = "pass extensions to install."; + }; + + config.programs.password-store.package = pkgs.pass.withExtensions ( + e: with e; config.programs.password-store.extensions + ); + }; +} diff --git a/modules/password-store/settings.nix b/modules/password-store/settings.nix new file mode 100644 index 00000000..e4dd4374 --- /dev/null +++ b/modules/password-store/settings.nix @@ -0,0 +1,7 @@ +{ + flake.modules.homeManager.base = + { config, ... }: + { + programs.password-store.settings.PASSWORD_STORE_DIR = "${config.xdg.dataHome}/pass"; + }; +} diff --git a/modules/pc.nix b/modules/pc.nix new file mode 100644 index 00000000..6df7746c --- /dev/null +++ b/modules/pc.nix @@ -0,0 +1,5 @@ +{ config, ... }: + +{ + flake.modules.nixos.pc.imports = with config.flake.modules.nixos; [ base ]; +} diff --git a/modules/home-manager/coding/phpactor/config/phpactor.yml b/modules/phpactor/config/phpactor.yml similarity index 100% rename from modules/home-manager/coding/phpactor/config/phpactor.yml rename to modules/phpactor/config/phpactor.yml diff --git a/modules/phpactor/config/templates/action/SourceCode.php.twig b/modules/phpactor/config/templates/action/SourceCode.php.twig new file mode 100644 index 00000000..eabd762e --- /dev/null +++ b/modules/phpactor/config/templates/action/SourceCode.php.twig @@ -0,0 +1,18 @@ +> "$XDG_DOCUMENTS_DIR/wiki/2-areas/health-fitness/weight.csv" + + weight + ''; + }; + }; + + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) + ]; + }; +} diff --git a/modules/scripts/battery.nix b/modules/scripts/battery.nix new file mode 100644 index 00000000..ac1eae3c --- /dev/null +++ b/modules/scripts/battery.nix @@ -0,0 +1,17 @@ +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + home.packages = [ + (pkgs.writeShellApplication { + name = "battery"; + + runtimeInputs = with pkgs; [ upower ]; + + text = '' + upower -i /org/freedesktop/UPower/devices/battery_BAT1 | grep -E 'state|to full|percentage' + ''; + }) + ]; + }; +} diff --git a/modules/scripts/build-adoc.nix b/modules/scripts/build-adoc.nix new file mode 100644 index 00000000..703adf51 --- /dev/null +++ b/modules/scripts/build-adoc.nix @@ -0,0 +1,62 @@ +{ + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (pkgs.writeShellApplication { + name = "build-adoc"; + + runtimeInputs = with pkgs; [ + asciidoctor-with-extensions + ]; + + excludeShellChecks = [ "SC2034" ]; + + text = '' + ls book + + echo "" + + date=$(date '+%Y-%m-%d %H:%M:%S') + + echo "The current date is $date." + + pwd=$(pwd) + parent=$(basename "$(dirname "$pwd")") + name=$(basename "$pwd") + + echo "The parent directory is $parent." + echo "The current directory is $name." + + echo "" + echo "Generating the HTML..." + asciidoctor \ + -D book \ + -a "date=$date" \ + -o index.html \ + ./book/index.adoc + + echo "" + echo "Generating the EPUB..." + asciidoctor-epub3 \ + -D book \ + -a "date=$date" \ + -o "$parent-$name.epub" \ + ./book/index.adoc + + echo "" + echo "Generating the PDF..." + asciidoctor-pdf \ + -D book \ + -a "date=$date" \ + -o "$parent-$name.pdf" \ + ./book/index.adoc + + echo "" + + ls book + ''; + }) + ]; + }; +} diff --git a/modules/scripts/build.nix b/modules/scripts/build.nix new file mode 100644 index 00000000..c04f4664 --- /dev/null +++ b/modules/scripts/build.nix @@ -0,0 +1,16 @@ +{ + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (pkgs.writeShellApplication { + name = "build"; + + text = '' + test -r book/index.adoc && exec build-adoc "$@" + test -x build && exec ./build "$@" + ''; + }) + ]; + }; +} diff --git a/modules/scripts/clone.nix b/modules/scripts/clone.nix new file mode 100644 index 00000000..36d1574d --- /dev/null +++ b/modules/scripts/clone.nix @@ -0,0 +1,53 @@ +{ withSystem, ... }: + +{ + perSystem = + psArgs@{ pkgs, ... }: + { + packages.clone = pkgs.writeShellApplication { + name = "clone"; + + runtimeInputs = with pkgs; [ + git + psArgs.config.packages.tmux-sessionizer + ]; + + text = '' + repo_url="$1" + repo_url="''${repo_url%.git}" + + if [[ "$repo_url" =~ ^(git@|https://|ssh://forgejo@)?([^:/]+)[:/](.*)/(.*)$ ]]; then + domain="''${BASH_REMATCH[2]}" + + if [[ "$domain" == "ssh.oliverdavies.uk" ]]; then + domain="code.oliverdavies.uk" + fi + + user="''${BASH_REMATCH[3]}" + name="''${BASH_REMATCH[4]}" + + user_path="$XDG_REPOS_DIR/$domain/$user" + repo_path="$user_path/$name" + + [[ -d "$repo_path" ]] && tmux-sessionizer "$repo_path" && exit 0 + + mkdir -pv "$repo_path" + + git clone "$repo_url" "$repo_path" + + tmux-sessionizer "$repo_path" + else + exit 1 + fi + ''; + }; + }; + + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (withSystem pkgs.system (psArgs: psArgs.config.packages.clone)) + ]; + }; +} diff --git a/modules/scripts/git-save.nix b/modules/scripts/git-save.nix new file mode 100644 index 00000000..423144b1 --- /dev/null +++ b/modules/scripts/git-save.nix @@ -0,0 +1,20 @@ +{ + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (pkgs.writeShellApplication { + name = "git-save"; + + runtimeInputs = with pkgs; [ git ]; + + text = '' + git status + git add . + git commit -s -m "Automated commit" + git push + ''; + }) + ]; + }; +} diff --git a/modules/scripts/hnow.nix b/modules/scripts/hnow.nix new file mode 100644 index 00000000..58650c03 --- /dev/null +++ b/modules/scripts/hnow.nix @@ -0,0 +1,35 @@ +{ lib, withSystem, ... }: + +let + name = "hnow"; +in +{ + perSystem = + psArgs@{ pkgs, ... }: + let + now = withSystem pkgs.system (psArgs: psArgs.config.packages.now); + in + { + packages.${name} = pkgs.writeShellApplication { + inherit name; + + runtimeInputs = [ + psArgs.config.packages.now + ]; + + text = '' + # Based on https://github.com/rwxrob/dot/blob/main/scripts/hnow. + + echo "== $(${lib.getExe now} "$*")" + ''; + }; + }; + + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) + ]; + }; +} diff --git a/modules/scripts/now.nix b/modules/scripts/now.nix new file mode 100644 index 00000000..94ad3d31 --- /dev/null +++ b/modules/scripts/now.nix @@ -0,0 +1,32 @@ +{ withSystem, ... }: + +let + name = "now"; +in +{ + perSystem = + { pkgs, ... }: + { + packages.${name} = pkgs.writeShellApplication { + inherit name; + + runtimeInputs = with pkgs; [ coreutils ]; + + text = '' + # Based on https://github.com/rwxrob/dot/blob/main/scripts/now. + + out=$(date "+%A, %B %e, %Y, %R %Z" "-d ''${*:-now}") + + echo "''${out// / }" + ''; + }; + }; + + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) + ]; + }; +} diff --git a/modules/scripts/open-repo-url.nix b/modules/scripts/open-repo-url.nix new file mode 100644 index 00000000..35e5b5f0 --- /dev/null +++ b/modules/scripts/open-repo-url.nix @@ -0,0 +1,32 @@ +{ withSystem, ... }: + +let + name = "open-repo-url"; +in +{ + perSystem = + { pkgs, ... }: + { + packages.${name} = pkgs.writeShellApplication { + inherit name; + + runtimeInputs = with pkgs; [ coreutils git ]; + + text = '' + repo_url=$(git remote get-url origin | sed -E 's#(git|forgejo)@([A-Za-z0-9.-]+):#https://\2/#;s#.git$##') + + repo_url="''${repo_url//ssh.oliverdavies.uk/code.oliverdavies.uk}" + + xdg-open "$repo_url" + ''; + }; + }; + + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) + ]; + }; +} diff --git a/modules/scripts/ppp.nix b/modules/scripts/ppp.nix new file mode 100644 index 00000000..17cba13a --- /dev/null +++ b/modules/scripts/ppp.nix @@ -0,0 +1,26 @@ +{ inputs, withSystem, ... }: + +let + name = "ppp"; +in +{ + perSystem = + { pkgs, ... }: + { + packages.${name} = pkgs.writeShellApplication { + inherit name; + + runtimeInputs = with pkgs; [ coreutils ]; + + text = builtins.readFile "${inputs.rwxrob-dot}/scripts/${name}"; + }; + }; + + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) + ]; + }; +} diff --git a/modules/scripts/preview.nix b/modules/scripts/preview.nix new file mode 100644 index 00000000..7a77187b --- /dev/null +++ b/modules/scripts/preview.nix @@ -0,0 +1,24 @@ +{ + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (pkgs.writeShellApplication { + name = "preview"; + + runtimeInputs = with pkgs.nodePackages; [ browser-sync ]; + + text = '' + # Based on https://github.com/rwxrob/dot/blob/main/scripts/preview. + + browser-sync start \ + --ignore '**/.*' \ + --no-notify \ + --no-open \ + --no-ui \ + -sw + ''; + }) + ]; + }; +} diff --git a/modules/scripts/tmux-sessionizer/default.nix b/modules/scripts/tmux-sessionizer/default.nix new file mode 100644 index 00000000..8f4513b5 --- /dev/null +++ b/modules/scripts/tmux-sessionizer/default.nix @@ -0,0 +1,30 @@ +{ + flake.modules.homeManager.base = + { config, pkgs, ... }: + { + home.file.".tmux-sessionizer".source = "${ + pkgs.writeShellApplication { + name = ".tmux-sessionizer"; + + runtimeInputs = with pkgs; [ + tmux + ]; + + text = '' + set +o errexit + set +o nounset + + if [[ "$PWD" == "${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/os" || "$PWD" == "${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/personal" || "$PWD" == "${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/work" ]]; then + clear + + return + fi + + tmux new-window -d -n scratch + nvim . + clear + ''; + } + }/bin/.tmux-sessionizer"; + }; +} diff --git a/modules/scripts/tmux-sessionizer/package.nix b/modules/scripts/tmux-sessionizer/package.nix new file mode 100644 index 00000000..7c0cfb9c --- /dev/null +++ b/modules/scripts/tmux-sessionizer/package.nix @@ -0,0 +1,89 @@ +{ withSystem, ... }: + +{ + perSystem = + { pkgs, ... }: + { + packages.tmux-sessionizer = pkgs.writeShellApplication { + name = "tmux-sessionizer"; + + runtimeInputs = with pkgs; [ + coreutils + fzf + tmux + ]; + + text = '' + set -euo pipefail + + # Based on https://github.com/jessarcher/dotfiles/blob/master/scripts/t + # and https://github.com/ThePrimeagen/tmux-sessionizer. + + has_session() { + tmux list-sessions | grep -q "^$1:" + } + + hydrate() { + if [ -f "$2/.tmux-sessionizer" ]; then + tmux send-keys -t "$1" "source $2/.tmux-sessionizer" c-M + elif [ -f "$HOME/.tmux-sessionizer" ]; then + tmux send-keys -t "$1" "source $HOME/.tmux-sessionizer" c-M + fi + } + + is_tmux_running() { + tmux_running=$(pgrep tmux) + + if [[ -z ''${TMUX:-} ]] && [[ -z $tmux_running ]]; then + return 1 + fi + + return 0 + } + + switch_to() { + tmux attach-session -t "$1" || tmux switch-client -t "$1" + } + + if [[ $# -eq 1 ]]; then + selected=$1 + else + items=$( + find "$HOME/Code" -maxdepth 3 -mindepth 1 -type d + find "$HOME/Documents" -maxdepth 1 -mindepth 1 -type d + find "$HOME/tmp" -maxdepth 1 -type d + ) + + selected=$(echo "$items" | sed "s|^$HOME/||" | sort | fzf) + [[ $selected ]] && selected="$HOME/$selected" + fi + + if [[ -z $selected ]]; then + exit 0 + fi + + selected_name=$(basename "$selected" | tr . _) + + if ! is_tmux_running; then + tmux new-session -ds "$selected_name" -c "$selected" + hydrate "$selected_name" "$selected" + fi + + if ! has_session "$selected_name"; then + tmux new-session -ds "$selected_name" -c "$selected" + hydrate "$selected_name" "$selected" + fi + + switch_to "$selected_name" + ''; + }; + }; + + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (withSystem pkgs.system (psArgs: psArgs.config.packages.tmux-sessionizer)) + ]; + }; +} diff --git a/modules/scripts/today.nix b/modules/scripts/today.nix new file mode 100644 index 00000000..1abbee1f --- /dev/null +++ b/modules/scripts/today.nix @@ -0,0 +1,26 @@ +{ withSystem, ... }: + +let + name = "today"; +in +{ + perSystem = + { pkgs, ... }: + { + packages.${name} = pkgs.writeShellApplication { + inherit name; + + runtimeInputs = with pkgs; [ coreutils ]; + + text = ''date "+%x"''; + }; + }; + + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) + ]; + }; +} diff --git a/modules/scripts/today2.nix b/modules/scripts/today2.nix new file mode 100644 index 00000000..90a76c59 --- /dev/null +++ b/modules/scripts/today2.nix @@ -0,0 +1,26 @@ +{ withSystem, ... }: + +let + name = "today2"; +in +{ + perSystem = + { pkgs, ... }: + { + packages.${name} = pkgs.writeShellApplication { + inherit name; + + runtimeInputs = with pkgs; [ coreutils ]; + + text = ''date "+%F"''; + }; + }; + + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) + ]; + }; +} diff --git a/modules/scripts/todo.nix b/modules/scripts/todo.nix new file mode 100644 index 00000000..22c4c0c4 --- /dev/null +++ b/modules/scripts/todo.nix @@ -0,0 +1,28 @@ +{ withSystem, ... }: + +let + name = "todo"; +in +{ + perSystem = + { pkgs, ... }: + { + packages.${name} = pkgs.writeShellApplication { + inherit name; + + runtimeInputs = with pkgs; [ coreutils ]; + + text = ''"$EDITOR" +3 "$TODO_FILE"''; + }; + }; + + flake.modules.homeManager.base = + { config, pkgs, ... }: + { + home.packages = [ + (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) + ]; + + home.sessionVariables.TODO_FILE = "${config.home.sessionVariables.WIKI_DIRECTORY}/todo.adoc"; + }; +} diff --git a/modules/scripts/weight.nix b/modules/scripts/weight.nix new file mode 100644 index 00000000..4c63f47c --- /dev/null +++ b/modules/scripts/weight.nix @@ -0,0 +1,28 @@ +{ withSystem, ... }: + +let + name = "weight"; +in +{ + perSystem = + { pkgs, ... }: + { + packages.${name} = pkgs.writeShellApplication { + inherit name; + + runtimeInputs = with pkgs; [ + coreutils + ]; + + text = ''tail "$XDG_DOCUMENTS_DIR/wiki/2-areas/health-fitness/weight.csv"''; + }; + }; + + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) + ]; + }; +} diff --git a/modules/scripts/zet.nix b/modules/scripts/zet.nix new file mode 100644 index 00000000..4630d2fb --- /dev/null +++ b/modules/scripts/zet.nix @@ -0,0 +1,37 @@ +{ inputs, withSystem, ... }: + +let + name = "zet"; +in +{ + perSystem = + { pkgs, ... }: + { + packages.${name} = pkgs.writeShellApplication { + inherit name; + + bashOptions = [ "pipefail" ]; + + runtimeInputs = with pkgs; [ + bashInteractive + coreutils + fzf + git + ]; + + text = builtins.readFile "${inputs.zet}/${name}"; + }; + }; + + flake.modules.homeManager.base = + { config, pkgs, ... }: + { + home.packages = [ + (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) + ]; + + home.sessionVariables = { + ZET_DIR = "${config.xdg.userDirs.documents}/zet"; + }; + }; +} diff --git a/modules/sound/pipewire/alsa.nix b/modules/sound/pipewire/alsa.nix new file mode 100644 index 00000000..929b07c4 --- /dev/null +++ b/modules/sound/pipewire/alsa.nix @@ -0,0 +1,6 @@ +{ + flake.modules.nixos.desktop.services.pipewire.alsa = { + enable = true; + support32Bit = true; + }; +} diff --git a/modules/sound/pipewire/enable.nix b/modules/sound/pipewire/enable.nix new file mode 100644 index 00000000..3160292b --- /dev/null +++ b/modules/sound/pipewire/enable.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixos.pc.services.pipewire.enable = true; +} diff --git a/modules/sound/pipewire/pulse.nix b/modules/sound/pipewire/pulse.nix new file mode 100644 index 00000000..c3ee1c25 --- /dev/null +++ b/modules/sound/pipewire/pulse.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixos.pc.services.pipewire.pulse.enable = true; +} diff --git a/modules/st.nix b/modules/st.nix new file mode 100644 index 00000000..09d393dd --- /dev/null +++ b/modules/st.nix @@ -0,0 +1,365 @@ +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + home.packages = with pkgs; [ + (st.override { + conf = '' + static char *font = "MesloLGSNerdFontMono:pixelsize=16:antialias=true:autohint=true"; + + int disablebold = 1; + int disableitalic = 1; + int disableroman = 1; + + static int borderpx = 2; + + static char *shell = "/bin/sh"; + char *utmp = NULL; + char *scroll = NULL; + char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400"; + + char *vtiden = "\033[?6c"; + + static float cwscale = 1.0; + static float chscale = 1.0; + + wchar_t *worddelimiters = L" "; + + static unsigned int doubleclicktimeout = 300; + static unsigned int tripleclicktimeout = 600; + + int allowaltscreen = 1; + + int allowwindowops = 0; + + static double minlatency = 2; + static double maxlatency = 33; + + static unsigned int blinktimeout = 800; + + static unsigned int cursorthickness = 2; + + static int bellvolume = 0; + + char *termname = "st-256color"; + + unsigned int tabspaces = 8; + + static const char *colorname[] = { + "black", + "red3", + "green3", + "yellow3", + "blue2", + "magenta3", + "cyan3", + "gray90", + + "gray50", + "red", + "green", + "yellow", + "#5c5cff", + "magenta", + "cyan", + "white", + + [255] = 0, + + "#cccccc", + "#555555", + "gray90", + "black", + }; + + unsigned int defaultfg = 258; + unsigned int defaultbg = 259; + unsigned int defaultcs = 256; + static unsigned int defaultrcs = 257; + + static unsigned int cursorshape = 2; + + static unsigned int cols = 80; + static unsigned int rows = 24; + + static unsigned int mouseshape = XC_xterm; + static unsigned int mousefg = 7; + static unsigned int mousebg = 0; + + static unsigned int defaultattr = 11; + + static uint forcemousemod = ShiftMask; + + static MouseShortcut mshortcuts[] = { + { XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 }, + { ShiftMask, Button4, ttysend, {.s = "\033[5;2~"} }, + { XK_ANY_MOD, Button4, ttysend, {.s = "\031"} }, + { ShiftMask, Button5, ttysend, {.s = "\033[6;2~"} }, + { XK_ANY_MOD, Button5, ttysend, {.s = "\005"} }, + }; + + #define MODKEY Mod1Mask + #define TERMMOD (ControlMask|ShiftMask) + + static Shortcut shortcuts[] = { + { XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} }, + { ControlMask, XK_Print, toggleprinter, {.i = 0} }, + { ShiftMask, XK_Print, printscreen, {.i = 0} }, + { XK_ANY_MOD, XK_Print, printsel, {.i = 0} }, + { TERMMOD, XK_Prior, zoom, {.f = +1} }, + { TERMMOD, XK_Next, zoom, {.f = -1} }, + { TERMMOD, XK_Home, zoomreset, {.f = 0} }, + { TERMMOD, XK_C, clipcopy, {.i = 0} }, + { TERMMOD, XK_D, zoom, {.f = -2} }, + { TERMMOD, XK_J, zoom, {.f = -1} }, + { TERMMOD, XK_K, zoom, {.f = +1} }, + { TERMMOD, XK_U, zoom, {.f = +2} }, + { TERMMOD, XK_V, clippaste, {.i = 0} }, + { TERMMOD, XK_Y, selpaste, {.i = 0} }, + { ShiftMask, XK_Insert, selpaste, {.i = 0} }, + { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, + }; + + static KeySym mappedkeys[] = { -1 }; + + static uint ignoremod = Mod2Mask|XK_SWITCH_MOD; + + static Key key[] = { + { XK_KP_Home, ShiftMask, "\033[2J", 0, -1}, + { XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1}, + { XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1}, + { XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1}, + { XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0}, + { XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1}, + { XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1}, + { XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0}, + { XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1}, + { XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1}, + { XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0}, + { XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1}, + { XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1}, + { XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0}, + { XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1}, + { XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1}, + { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0}, + { XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, + { XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0}, + { XK_KP_End, ControlMask, "\033[J", -1, 0}, + { XK_KP_End, ControlMask, "\033[1;5F", +1, 0}, + { XK_KP_End, ShiftMask, "\033[K", -1, 0}, + { XK_KP_End, ShiftMask, "\033[1;2F", +1, 0}, + { XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0}, + { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0}, + { XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0}, + { XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0}, + { XK_KP_Insert, ShiftMask, "\033[4l", -1, 0}, + { XK_KP_Insert, ControlMask, "\033[L", -1, 0}, + { XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0}, + { XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, + { XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, + { XK_KP_Delete, ControlMask, "\033[M", -1, 0}, + { XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0}, + { XK_KP_Delete, ShiftMask, "\033[2K", -1, 0}, + { XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0}, + { XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0}, + { XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, + { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0}, + { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0}, + { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0}, + { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0}, + { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0}, + { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0}, + { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0}, + { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0}, + { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0}, + { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0}, + { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0}, + { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0}, + { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0}, + { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0}, + { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0}, + { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0}, + { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0}, + { XK_Up, ShiftMask, "\033[1;2A", 0, 0}, + { XK_Up, Mod1Mask, "\033[1;3A", 0, 0}, + { XK_Up, ShiftMask|Mod1Mask, "\033[1;4A", 0, 0}, + { XK_Up, ControlMask, "\033[1;5A", 0, 0}, + { XK_Up, ShiftMask|ControlMask, "\033[1;6A", 0, 0}, + { XK_Up, ControlMask|Mod1Mask, "\033[1;7A", 0, 0}, + { XK_Up, ShiftMask|ControlMask|Mod1Mask, "\033[1;8A", 0, 0}, + { XK_Up, XK_ANY_MOD, "\033[A", 0, -1}, + { XK_Up, XK_ANY_MOD, "\033OA", 0, +1}, + { XK_Down, ShiftMask, "\033[1;2B", 0, 0}, + { XK_Down, Mod1Mask, "\033[1;3B", 0, 0}, + { XK_Down, ShiftMask|Mod1Mask, "\033[1;4B", 0, 0}, + { XK_Down, ControlMask, "\033[1;5B", 0, 0}, + { XK_Down, ShiftMask|ControlMask, "\033[1;6B", 0, 0}, + { XK_Down, ControlMask|Mod1Mask, "\033[1;7B", 0, 0}, + { XK_Down, ShiftMask|ControlMask|Mod1Mask, "\033[1;8B", 0, 0}, + { XK_Down, XK_ANY_MOD, "\033[B", 0, -1}, + { XK_Down, XK_ANY_MOD, "\033OB", 0, +1}, + { XK_Left, ShiftMask, "\033[1;2D", 0, 0}, + { XK_Left, Mod1Mask, "\033[1;3D", 0, 0}, + { XK_Left, ShiftMask|Mod1Mask, "\033[1;4D", 0, 0}, + { XK_Left, ControlMask, "\033[1;5D", 0, 0}, + { XK_Left, ShiftMask|ControlMask, "\033[1;6D", 0, 0}, + { XK_Left, ControlMask|Mod1Mask, "\033[1;7D", 0, 0}, + { XK_Left, ShiftMask|ControlMask|Mod1Mask, "\033[1;8D", 0, 0}, + { XK_Left, XK_ANY_MOD, "\033[D", 0, -1}, + { XK_Left, XK_ANY_MOD, "\033OD", 0, +1}, + { XK_Right, ShiftMask, "\033[1;2C", 0, 0}, + { XK_Right, Mod1Mask, "\033[1;3C", 0, 0}, + { XK_Right, ShiftMask|Mod1Mask, "\033[1;4C", 0, 0}, + { XK_Right, ControlMask, "\033[1;5C", 0, 0}, + { XK_Right, ShiftMask|ControlMask, "\033[1;6C", 0, 0}, + { XK_Right, ControlMask|Mod1Mask, "\033[1;7C", 0, 0}, + { XK_Right, ShiftMask|ControlMask|Mod1Mask, "\033[1;8C", 0, 0}, + { XK_Right, XK_ANY_MOD, "\033[C", 0, -1}, + { XK_Right, XK_ANY_MOD, "\033OC", 0, +1}, + { XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0}, + { XK_Return, Mod1Mask, "\033\r", 0, 0}, + { XK_Return, XK_ANY_MOD, "\r", 0, 0}, + { XK_Insert, ShiftMask, "\033[4l", -1, 0}, + { XK_Insert, ShiftMask, "\033[2;2~", +1, 0}, + { XK_Insert, ControlMask, "\033[L", -1, 0}, + { XK_Insert, ControlMask, "\033[2;5~", +1, 0}, + { XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, + { XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, + { XK_Delete, ControlMask, "\033[M", -1, 0}, + { XK_Delete, ControlMask, "\033[3;5~", +1, 0}, + { XK_Delete, ShiftMask, "\033[2K", -1, 0}, + { XK_Delete, ShiftMask, "\033[3;2~", +1, 0}, + { XK_Delete, XK_ANY_MOD, "\033[P", -1, 0}, + { XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, + { XK_BackSpace, XK_NO_MOD, "\177", 0, 0}, + { XK_BackSpace, Mod1Mask, "\033\177", 0, 0}, + { XK_Home, ShiftMask, "\033[2J", 0, -1}, + { XK_Home, ShiftMask, "\033[1;2H", 0, +1}, + { XK_Home, XK_ANY_MOD, "\033[H", 0, -1}, + { XK_Home, XK_ANY_MOD, "\033[1~", 0, +1}, + { XK_End, ControlMask, "\033[J", -1, 0}, + { XK_End, ControlMask, "\033[1;5F", +1, 0}, + { XK_End, ShiftMask, "\033[K", -1, 0}, + { XK_End, ShiftMask, "\033[1;2F", +1, 0}, + { XK_End, XK_ANY_MOD, "\033[4~", 0, 0}, + { XK_Prior, ControlMask, "\033[5;5~", 0, 0}, + { XK_Prior, ShiftMask, "\033[5;2~", 0, 0}, + { XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, + { XK_Next, ControlMask, "\033[6;5~", 0, 0}, + { XK_Next, ShiftMask, "\033[6;2~", 0, 0}, + { XK_Next, XK_ANY_MOD, "\033[6~", 0, 0}, + { XK_F1, XK_NO_MOD, "\033OP" , 0, 0}, + { XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0}, + { XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0}, + { XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0}, + { XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0}, + { XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0}, + { XK_F2, XK_NO_MOD, "\033OQ" , 0, 0}, + { XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0}, + { XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0}, + { XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0}, + { XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0}, + { XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0}, + { XK_F3, XK_NO_MOD, "\033OR" , 0, 0}, + { XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0}, + { XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0}, + { XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0}, + { XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0}, + { XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0}, + { XK_F4, XK_NO_MOD, "\033OS" , 0, 0}, + { XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0}, + { XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0}, + { XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0}, + { XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0}, + { XK_F5, XK_NO_MOD, "\033[15~", 0, 0}, + { XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0}, + { XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0}, + { XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0}, + { XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0}, + { XK_F6, XK_NO_MOD, "\033[17~", 0, 0}, + { XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0}, + { XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0}, + { XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0}, + { XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0}, + { XK_F7, XK_NO_MOD, "\033[18~", 0, 0}, + { XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0}, + { XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0}, + { XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0}, + { XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0}, + { XK_F8, XK_NO_MOD, "\033[19~", 0, 0}, + { XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0}, + { XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0}, + { XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0}, + { XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0}, + { XK_F9, XK_NO_MOD, "\033[20~", 0, 0}, + { XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0}, + { XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0}, + { XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0}, + { XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0}, + { XK_F10, XK_NO_MOD, "\033[21~", 0, 0}, + { XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0}, + { XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0}, + { XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0}, + { XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0}, + { XK_F11, XK_NO_MOD, "\033[23~", 0, 0}, + { XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0}, + { XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0}, + { XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0}, + { XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0}, + { XK_F12, XK_NO_MOD, "\033[24~", 0, 0}, + { XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0}, + { XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0}, + { XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0}, + { XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0}, + { XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0}, + { XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0}, + { XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0}, + { XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0}, + { XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0}, + { XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0}, + { XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0}, + { XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0}, + { XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0}, + { XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0}, + { XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0}, + { XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0}, + { XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0}, + { XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0}, + { XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0}, + { XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0}, + { XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0}, + { XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0}, + { XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0}, + { XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0}, + { XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0}, + { XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0}, + { XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0}, + }; + + static uint selmasks[] = { + [SEL_RECTANGULAR] = Mod1Mask, + }; + + static char ascii_printable[] = + " !\"#$%&'()*+,-./0123456789:;<=>?" + "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" + "`abcdefghijklmnopqrstuvwxyz{|}~"; + ''; + + patches = [ + (fetchpatch { + name = "disable_bold_italic_fonts"; + url = "https://st.suckless.org/patches/disable_bold_italic_fonts/st-disable-bold-italic-fonts-0.8.2.diff"; + sha256 = "PG96QMqbX3Fr0EvDmF4lm/J3gj18eyBfm1bJ3M7plvQ="; + }) + + (fetchpatch { + name = "anysize"; + url = "https://st.suckless.org/patches/anysize/st-anysize-20220718-baa9357.diff"; + sha256 = "yx9VSwmPACx3EN3CAdQkxeoJKJxQ6ziC9tpBcoWuWHc="; + }) + ]; + }) + ]; + }; +} diff --git a/modules/starship/format.nix b/modules/starship/format.nix new file mode 100644 index 00000000..eeed3818 --- /dev/null +++ b/modules/starship/format.nix @@ -0,0 +1,27 @@ +{ lib, ... }: + +{ + # https://starship.rs/config/#prompt + flake.modules.homeManager.base.programs.starship.settings.format = lib.concatStringsSep "" [ + "\n" + "$username" + "$hostname" + "$directory" + "$vcsh" + "$git_branch" + "$git_status" + "$git_metrics" + "$docker_context" + "$nodejs" + "$php" + "$terraform" + "$nix_shell" + "$direnv" + "\${custom.mob}" + "$memory_usage" + "$cmd_duration" + "$lua" + "$status" + "$character" + ]; +} diff --git a/modules/starship/mob.nix b/modules/starship/mob.nix new file mode 100644 index 00000000..fd59ab88 --- /dev/null +++ b/modules/starship/mob.nix @@ -0,0 +1,7 @@ +{ + flake.modules.homeManager.base.programs.starship.settings.custom.mob = { + command = "echo $MOB_TIMER_ROOM"; + format = "[($output)]($style) "; + when = "[[ -v MOB_TIMER_ROOM ]]"; + }; +} diff --git a/modules/starship/newline.nix b/modules/starship/newline.nix new file mode 100644 index 00000000..80920b5a --- /dev/null +++ b/modules/starship/newline.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.base.programs.starship.settings.add_newline = false; +} diff --git a/modules/starship/settings.nix b/modules/starship/settings.nix new file mode 100644 index 00000000..26b1efe7 --- /dev/null +++ b/modules/starship/settings.nix @@ -0,0 +1,133 @@ +{ + flake.modules.homeManager.base.programs.starship.settings = { + cmd_duration.disabled = true; + direnv.disabled = false; + directory.format = "[$path]($style) "; + git_status.disabled = true; + nix_shell.disabled = true; + nodejs.disabled = true; + php.disabled = true; + username.disabled = true; + + # https://starship.rs/presets/plain-text + aws.symbol = "aws "; + azure.symbol = "az "; + bun.symbol = "bun "; + c.symbol = "C "; + character = { + success_symbol = "[>](bold green)"; + error_symbol = "[x](bold red)"; + vimcmd_symbol = "[<](bold green)"; + }; + cobol.symbol = "cobol "; + conda.symbol = "conda "; + crystal.symbol = "cr "; + cmake.symbol = "cmake "; + daml.symbol = "daml "; + dart.symbol = "dart "; + deno.symbol = "deno "; + dotnet.symbol = ".NET "; + directory.read_only = " ro"; + docker_context.symbol = "docker "; + elixir.symbol = "exs "; + elm.symbol = "elm "; + fennel.symbol = "fnl "; + fossil_branch.symbol = "fossil "; + gcloud.symbol = "gcp "; + git_branch.symbol = "git "; + git_commit.tag_symbol = " tag "; + git_status = { + ahead = ">"; + behind = "<"; + diverged = "<>"; + renamed = "r"; + deleted = "x"; + }; + gleam.symbol = "gleam "; + golang.symbol = "go "; + gradle.symbol = "gradle "; + guix_shell.symbol = "guix "; + hg_branch.symbol = "hg "; + java.symbol = "java "; + julia.symbol = "jl "; + kotlin.symbol = "kt "; + lua.symbol = "lua "; + nodejs.symbol = "nodejs "; + memory_usage.symbol = "memory "; + meson.symbol = "meson "; + nats.symbol = "nats "; + nim.symbol = "nim "; + nix_shell.symbol = "nix "; + ocaml.symbol = "ml "; + opa.symbol = "opa "; + os.symbols = { + AIX = "aix "; + Alpaquita = "alq "; + AlmaLinux = "alma "; + Alpine = "alp "; + Amazon = "amz "; + Android = "andr "; + Arch = "rch "; + Artix = "atx "; + CentOS = "cent "; + Debian = "deb "; + DragonFly = "dfbsd "; + Emscripten = "emsc "; + EndeavourOS = "ndev "; + Fedora = "fed "; + FreeBSD = "fbsd "; + Garuda = "garu "; + Gentoo = "gent "; + HardenedBSD = "hbsd "; + Illumos = "lum "; + Kali = "kali "; + Linux = "lnx "; + Mabox = "mbox "; + Macos = "mac "; + Manjaro = "mjo "; + Mariner = "mrn "; + MidnightBSD = "mid "; + Mint = "mint "; + NetBSD = "nbsd "; + NixOS = "nix "; + OpenBSD = "obsd "; + OpenCloudOS = "ocos "; + openEuler = "oeul "; + openSUSE = "osuse "; + OracleLinux = "orac "; + Pop = "pop "; + Raspbian = "rasp "; + Redhat = "rhl "; + RedHatEnterprise = "rhel "; + RockyLinux = "rky "; + Redox = "redox "; + Solus = "sol "; + SUSE = "suse "; + Ubuntu = "ubnt "; + Ultramarine = "ultm "; + Unknown = "unk "; + Void = "void "; + Windows = "win "; + }; + package.symbol = "pkg "; + perl.symbol = "pl "; + php.symbol = "php "; + pijul_channel.symbol = "pijul "; + pulumi.symbol = "pulumi "; + purescript.symbol = "purs "; + python.symbol = "py "; + quarto.symbol = "quarto "; + raku.symbol = "raku "; + ruby.symbol = "rb "; + rust.symbol = "rs "; + scala.symbol = "scala "; + spack.symbol = "spack "; + solidity.symbol = "solidity "; + status.symbol = "[x](bold red) "; + sudo.symbol = "sudo "; + swift.symbol = "swift "; + typst.symbol = "typst "; + terraform.symbol = "terraform "; + zig.symbol = "zig "; + }; +} diff --git a/modules/starship/shlvl.nix b/modules/starship/shlvl.nix new file mode 100644 index 00000000..bceec83b --- /dev/null +++ b/modules/starship/shlvl.nix @@ -0,0 +1,8 @@ +{ + flake.modules.homeManager.base.programs.starship.settings.shlvl = { + disabled = false; + style = "bold red"; + symbol = ""; + threshold = 2; + }; +} diff --git a/modules/starship/starship.nix b/modules/starship/starship.nix new file mode 100644 index 00000000..5839e22c --- /dev/null +++ b/modules/starship/starship.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.base.programs.starship.enable = true; +} diff --git a/modules/starship/zsh.nix b/modules/starship/zsh.nix new file mode 100644 index 00000000..f9114042 --- /dev/null +++ b/modules/starship/zsh.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.base.programs.starship.enableZshIntegration = true; +} diff --git a/modules/sudo.nix b/modules/sudo.nix new file mode 100644 index 00000000..7f70c7c6 --- /dev/null +++ b/modules/sudo.nix @@ -0,0 +1,9 @@ +{ config, ... }: + +{ + flake.modules.nixos.pc = { + security.sudo-rs.enable = true; + + users.users.${config.flake.meta.owner.username}.extraGroups = [ "wheel" ]; + }; +} diff --git a/modules/sxhkd/enable.nix b/modules/sxhkd/enable.nix new file mode 100644 index 00000000..1712708b --- /dev/null +++ b/modules/sxhkd/enable.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.gui.services.sxhkd.enable = true; +} diff --git a/modules/sxhkd/keybindings.nix b/modules/sxhkd/keybindings.nix new file mode 100644 index 00000000..67338e12 --- /dev/null +++ b/modules/sxhkd/keybindings.nix @@ -0,0 +1,21 @@ +{ lib, ... }: + +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + services.sxhkd.keybindings = { + "@F10" = "/home/opdavies/.local/bin/unmounter"; + "@F3" = "displayselect"; + "@F9" = "/home/opdavies/.local/bin/mounter"; + "super + BackSpace" = "dmenu_sys"; + "super + shift + b" = "/etc/profiles/per-user/opdavies/bin/bookmarkthis"; + "super + shift + i" = + "${pkgs.xdotool}/bin/xdotool type $(cat ~/.local/share/snippets.txt | grep -v '^#' | grep -v '^$' | sort | dmenu -i -l 50 | cut -d' ' -f1)"; + "super + shift + p" = "${lib.getExe pkgs.passmenu-otp} -i"; + "super + x; {1, 2, 3, 4}" = "st {notes, newsboat, nmtui, bluetuith}"; + "{_, shift +, super +}XF86MonBrightness{Down,Up}" = + "${lib.getExe pkgs.brightnessctl} set {5%-,10%-,10%,+5%,+10%,100%} --quiet"; + }; + }; +} diff --git a/modules/tailscale.nix b/modules/tailscale.nix new file mode 100644 index 00000000..d239c83e --- /dev/null +++ b/modules/tailscale.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixos.pc.services.tailscale.enable = true; +} diff --git a/modules/thunar/enable.nix b/modules/thunar/enable.nix new file mode 100644 index 00000000..5ac63555 --- /dev/null +++ b/modules/thunar/enable.nix @@ -0,0 +1,3 @@ +{ + flake.modules.pc.nixos.programs.thunar.enable = true; +} diff --git a/modules/thunar/extra-packages.nix b/modules/thunar/extra-packages.nix new file mode 100644 index 00000000..036a7ff1 --- /dev/null +++ b/modules/thunar/extra-packages.nix @@ -0,0 +1,7 @@ +{ + flake.modules.pc.nixos = + { pkgs, ... }: + { + environment.systemPackages = with pkgs; [ xfce.tumbler ]; + }; +} diff --git a/modules/thunar/plugins.nix b/modules/thunar/plugins.nix new file mode 100644 index 00000000..5df3e2ab --- /dev/null +++ b/modules/thunar/plugins.nix @@ -0,0 +1,9 @@ +{ + flake.modules.pc.nixos = + { pkgs, ... }: + { + programs.thunar.plugins = with pkgs.xfce; [ + thunar-archive-plugin + ]; + }; +} diff --git a/modules/tmux/enable.nix b/modules/tmux/enable.nix new file mode 100644 index 00000000..a4a47b08 --- /dev/null +++ b/modules/tmux/enable.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.base.programs.tmux.enable = true; +} diff --git a/modules/tmux/extra-config.nix b/modules/tmux/extra-config.nix new file mode 100644 index 00000000..78f0d208 --- /dev/null +++ b/modules/tmux/extra-config.nix @@ -0,0 +1,69 @@ +{ + flake.modules.homeManager.base.programs.tmux.extraConfig = '' + set-option -g status-keys "vi" + set-option -sa terminal-features "''${TERM}:RGB" + + bind -n S-Left resize-pane -L 2 + bind -n S-Right resize-pane -R 2 + bind -n S-Down resize-pane -D 1 + bind -n S-Up resize-pane -U 1 + + bind -n C-Left resize-pane -L 10 + bind -n C-Right resize-pane -R 10 + bind -n C-Down resize-pane -D 5 + bind -n C-Up resize-pane -U 5 + + # Status line customisation + set-option -g status-position top + set-option -g status-left "" + set-option -g status-right " #{session_name}" + set-option -g status-right-length 100 + set-option -g status-style "fg=#7C7D83 bg=default" + set-option -g window-status-activity-style none + + bind c new-window -c "#{pane_current_path}" + + set -g base-index 1 + set -g pane-base-index 1 + set -g renumber-windows on + + # Break a pane into a new window. + bind-key b break-pane -d + bind-key J command-prompt -p "join pane from: " "join-pane -h -s '%%'" + + bind-key C-j choose-tree + + set-window-option -g mode-keys vi + bind -T copy-mode-vi v send-keys -X begin-selection + bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard' + + bind C-j split-window -v "tmux list-sessions | sed -E 's/:.*$//' | grep -v \"^$(tmux display-message -p '#S')\$\" | fzf --reverse | xargs tmux switch-client -t" + + bind-key K run-shell 'tmux switch-client -n \; kill-session -t "$(tmux display-message -p "#S")" || tmux kill-session' + + # Allow clearing screen with ctrl-l by using C-l + bind C-l send-keys "C-l" + bind C-k send-keys "C-k" + + # Enable mouse support. + setw -g mouse on + + # Remove delay when switching Vim modes. + set -sg escape-time 0 + + set-option -g pane-active-border-style "fg=#1f2335" + set-option -g pane-border-style "fg=#1f2335" + + # Vim-like pane navigation. + bind ^ last-window + bind h select-pane -L + bind j select-pane -D + bind k select-pane -U + bind l select-pane -R + + bind-key -r f run-shell "tmux new-window tmux-sessionizer" + + bind-key -r D new-window -c "#{pane_current_path}" "[[ -e TODO.md ]] && nvim TODO.md || nvim ~/Documents/wiki/todo.txt" + bind-key -r W split-window -h -c ~/Documents/wiki "nvim '+Telescope find_files'" + ''; +} diff --git a/modules/tmux/plugins.nix b/modules/tmux/plugins.nix new file mode 100644 index 00000000..3e7d723d --- /dev/null +++ b/modules/tmux/plugins.nix @@ -0,0 +1,7 @@ +{ + flake.modules.homeManager.base = + { pkgs, ... }: + { + programs.tmux.plugins = with pkgs.tmuxPlugins; [ yank ]; + }; +} diff --git a/modules/tmux/terminal.nix b/modules/tmux/terminal.nix new file mode 100644 index 00000000..0edf3248 --- /dev/null +++ b/modules/tmux/terminal.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.base.programs.tmux.terminal = "tmux-256color"; +} diff --git a/modules/unfree-packages.nix b/modules/unfree-packages.nix new file mode 100644 index 00000000..40f0f8a2 --- /dev/null +++ b/modules/unfree-packages.nix @@ -0,0 +1,26 @@ +{ config, lib, ... }: + +{ + options.nixpkgs.allowedUnfreePackages = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ ]; + }; + + config.flake = { + modules = + let + predicate = pkg: builtins.elem (lib.getName pkg) config.nixpkgs.allowedUnfreePackages; + in + { + nixos.base.nixpkgs.config.allowUnfreePredicate = predicate; + + homeManager.base = args: { + nixpkgs.config = lib.mkIf (!(args.hasGlobalPkgs or false)) { + allowUnfreePredicate = predicate; + }; + }; + }; + + meta.nixpkgs.allowedUnfreePackages = config.nixpkgs.allowedUnfreePackages; + }; +} diff --git a/modules/wiki.nix b/modules/wiki.nix new file mode 100644 index 00000000..b5276c2e --- /dev/null +++ b/modules/wiki.nix @@ -0,0 +1,7 @@ +{ + flake.modules.homeManager.base = + { config, ...}: + { + home.sessionVariables.WIKI_DIRECTORY = "${config.xdg.userDirs.documents}/wiki"; + }; +} diff --git a/modules/xbanish.nix b/modules/xbanish.nix new file mode 100644 index 00000000..5ebb30b0 --- /dev/null +++ b/modules/xbanish.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixos.pc.services.xbanish.enable = true; +} diff --git a/modules/xsession.nix b/modules/xsession.nix new file mode 100644 index 00000000..5fdf17bf --- /dev/null +++ b/modules/xsession.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.gui.xsession.enable = true; +} diff --git a/modules/zram.nix b/modules/zram.nix new file mode 100644 index 00000000..3ca702ff --- /dev/null +++ b/modules/zram.nix @@ -0,0 +1,7 @@ +{ + flake.modules.nixos.pc.zramSwap = { + enable = true; + algorithm = "zstd"; + memoryPercent = 90; + }; +} diff --git a/modules/zsh/abbreviations/abbreviations.nix b/modules/zsh/abbreviations/abbreviations.nix new file mode 100644 index 00000000..95022561 --- /dev/null +++ b/modules/zsh/abbreviations/abbreviations.nix @@ -0,0 +1,172 @@ +{ + nixpkgs.allowedUnfreePackages = [ + "zsh-abbr" + ]; + + flake.modules.homeManager.base.programs.zsh.zsh-abbr.abbreviations = { + cl = "clear"; + cs = "create-script"; + daily = "run create-daily next"; + gru = "git-repo-updater"; + rst = "rst2pdf"; + st = "source .tmux"; + sz = "source ~/.config/zsh/.zshrc"; + ti = "timer"; + uagr = "update-all-git-repos"; + v = "nvim"; + yt = "yt-dlp"; + + evl = "export-video-list"; + vv = "cat ~/Documents/videos.json"; + + f = "find ."; + fd = "find . -type d"; + fdn = "find . -type d -name"; + ff = "find . -type f"; + ffn = "find . -type f -name"; + + g = "git"; + ga = "git add"; + gan = "git add -N"; + gap = "git add -p"; + gb = "git branch"; + gba = "git branch --all"; + gbl = "git blame"; + gc = "git commit"; + gca = "git commit --amend"; + gcan = "git commit --amend --no-edit"; + gcl = "git clone"; + gcm = "git commit -m"; + gco = "git checkout"; + gcob = "git checkout -b"; + gd = "git diff"; + gds = "git diff --staged"; + gf = "git fetch"; + gfa = "git fetch --all"; + gl = "git log"; + glg = "git log --grep"; + glo = "git log --oneline"; + glog = "git log --oneline --grep"; + glos = "git log --oneline -S"; + gls = "git log -S"; + gm = "git merge"; + gmf = "git merge --ff"; + gmnf = "git merge --no-ff"; + gp = "git push"; + gpa = "git push acquia"; + gpam = "git push acquia main"; + gpap = "git push acquia HEAD:production"; + gpf = "git push --force-with-lease"; + gpfo = "git push --force-with-lease origin"; + gpl = "git pull"; + gplr = "git pull --rebase"; + gpo = "git push origin"; + gpom = "git push origin main"; + gpt = "git push --tags"; + gr = "git rebase"; + gra = "git rebase --abort"; + grc = "git rebase --continue"; + gri = "git rebase -i"; + gs = "git status"; + gsh = "git show"; + gst = "git stash"; + gstp = "git stash pop"; + gt = "git tag"; + + j = "just"; + jb = "just build"; + jt = "just test"; + js = "just switch"; + + # tmux + ta = "tmux attach"; + tl = "tmux list-sessions"; + tk = "tmux kill-session"; + + # Docker and Docker Compose. + dk = "docker"; + dkp = "docker ps"; + dkpa = "docker ps -a"; + dkpaq = "docker ps -a -q"; + dkb = "docker build -t"; + dks = "docker start"; + dkt = "docker stop"; + dkrm = "docker rm"; + dkri = "docker rmi"; + dke = "docker exec -ti"; + dkl = "docker logs -f"; + dki = "docker images"; + dkpu = "docker pull"; + dkph = "docker push"; + dkbnc = "docker build --no-cache -t"; + dkr = "docker run --rm"; + dkrti = "docker run --rm -ti"; + dkc = "docker compose"; + dkcb = "docker compose build"; + dkcu = "docker compose up"; + dkclean = "docker ps -q -a -f status=exited | xargs -r docker rm && docker images -q -f dangling=true | xargs -r docker rmi"; + + # Nix and direnv. + dea = "direnv allow"; + dee = "direnv edit"; + nxf = "nix flake"; + nxfc = "nix flake check"; + nxfs = "nix flake show"; + nxfu = "nix flake update"; + nxr = "nix run nixpkgs#%"; + nxs = "nix shell nixpkgs#%"; + + # run scripts. + r = "run"; + rc = "run composer"; + rcda = "run composer dump-autoload"; + rci = "run composer install"; + rcr = "run composer require"; + rcu = "run composer update"; + rd = "run drush"; + rdce = "run drush config:export -y"; + rdci = "run drush config:import -y"; + rdcr = "run drush cache:rebuild"; + rdscr = "run drush php:script"; + rduli = "run drush uli"; + rdup = "run drush updatedb -y"; + rpub = "run publish"; + rt = "run test"; + + nah = "git reset --hard; git clean -fd"; + wip = "git commit -m wip"; + + dv = "devenv"; + dvi = "devenv info"; + dvp = "devenv processes"; + dvs = "devenv shell"; + dvt = "devenv tasks"; + dvu = "devenv up"; + + c = "composer"; + ci = "composer install"; + cr = "composer require"; + crd = "composer require drupal/%"; + cu = "composer update"; + cul = "composer update --lock"; + cw = "composer why"; + cwn = "composer why-not"; + + d = "drush"; + dce = "drush config:export -y"; + dci = "drush config:import -y"; + dcr = "drush cache:rebuild"; + den = "drush pm:enable -y"; + deu = "drush pm:uninstall"; + dscr = "drush php:script"; + duli = "drush uli"; + dup = "drush updatedb -y"; + + sg = "vendor/bin/sculpin generate"; + sge = "vendor/bin/sculpin generate --env"; + sgs = "vendor/bin/sculpin generate --server"; + sgsp = "vendor/bin/sculpin generate --server --port"; + sgsw = "vendor/bin/sculpin generate --server --watch"; + sgswp = "vendor/bin/sculpin generate --server --watch --port"; + }; +} diff --git a/modules/zsh/abbreviations/enable.nix b/modules/zsh/abbreviations/enable.nix new file mode 100644 index 00000000..ae3da6f2 --- /dev/null +++ b/modules/zsh/abbreviations/enable.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.base.programs.zsh.zsh-abbr.enable = true; +} diff --git a/modules/zsh/abbreviations/global-abbreviations.nix b/modules/zsh/abbreviations/global-abbreviations.nix new file mode 100644 index 00000000..b416083a --- /dev/null +++ b/modules/zsh/abbreviations/global-abbreviations.nix @@ -0,0 +1,16 @@ +{ + flake.modules.homeManager.base.programs.zsh.zsh-abbr.globalAbbreviations = { + A1 = "| awk '{print $1}'"; + C = "| xclip -sel clip"; + Fj = "| jq ."; + Fy = "| yq ."; + G = "| grep"; + GH = "| grep HTTP"; + Gi = "| grep -i"; + H2 = "| head -n 20"; + H = "| head"; + L = "| less"; + V = "| nvim -"; + X = "| xargs -I1"; + }; +} diff --git a/modules/zsh/aliases.nix b/modules/zsh/aliases.nix new file mode 100644 index 00000000..e89f1515 --- /dev/null +++ b/modules/zsh/aliases.nix @@ -0,0 +1,19 @@ +{ + flake.modules.homeManager.base = + { config, ... }: + { + programs.zsh.shellAliases = { + "$" = ""; + "-" = "cd -"; + ".." = "cd .."; + "..." = "cd ../.."; + "...." = "cd ../../.."; + "....." = "cd ../../../.."; + chmox = "chmod +x"; + run = "./run"; + tag = "tag-release"; + vss = "LC_ALL=C sort --unique ${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/nixos-config/modules/home-manager/cli/neovim/config/spell/en.utf-8.adddotfiles/nvim/spell/en.utf-8.add --output ${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/nixos-config/modules/home-manager/cli/neovim/config/spell/en.utf-8.add"; + wt = "git worktree"; + }; + }; +} diff --git a/modules/zsh/completion.nix b/modules/zsh/completion.nix new file mode 100644 index 00000000..f9859c29 --- /dev/null +++ b/modules/zsh/completion.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.base.programs.zsh.enableCompletion = true; +} diff --git a/modules/zsh/dot-dir.nix b/modules/zsh/dot-dir.nix new file mode 100644 index 00000000..83e5f2e1 --- /dev/null +++ b/modules/zsh/dot-dir.nix @@ -0,0 +1,7 @@ +{ + flake.modules.homeManager.base = + { config, ... }: + { + programs.zsh.dotDir = "${config.xdg.configHome}/zsh"; + }; +} diff --git a/modules/zsh/enable.nix b/modules/zsh/enable.nix new file mode 100644 index 00000000..d9319f31 --- /dev/null +++ b/modules/zsh/enable.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.base.programs.zsh.enable = true; +} diff --git a/modules/home-manager/cli/zsh/default.nix b/modules/zsh/init.nix similarity index 51% rename from modules/home-manager/cli/zsh/default.nix rename to modules/zsh/init.nix index ff44e389..e147ffad 100644 --- a/modules/home-manager/cli/zsh/default.nix +++ b/modules/zsh/init.nix @@ -1,46 +1,8 @@ { - config, - lib, - pkgs, - ... -}: - -with lib; - -let - cfg = config.cli.zsh; -in -{ - options.cli.zsh.enable = mkEnableOption "Enable zsh"; - - config = mkIf cfg.enable { - programs.zsh = { - enable = true; - enableCompletion = true; - syntaxHighlighting.enable = true; - - zsh-abbr = { - enable = true; - - abbreviations = import ./abbreviations.nix; - globalAbbreviations = import ./global-abbreviations.nix; - }; - - dotDir = ".config/zsh"; - - shellAliases = (import ./aliases.nix { inherit config; }); - - localVariables = { - ABBR_SET_EXPANSION_CURSOR = 1; - }; - - profileExtra = '' - if [[ -z "$DISPLAY" ]] && [[ "$(tty)" == "/dev/tty1" ]]; then - exec startx &>/dev/null - fi - ''; - - initContent = '' + flake.modules.homeManager.base = + { config, pkgs, ... }: + { + programs.zsh.initContent = '' background() { for ((i=2;i<=$#;i++)); do ''${@[1]} ''${@[$i]} &> /dev/null & @@ -56,22 +18,6 @@ in git() { case "$1" in - clone) - shift - - local repo_url="$1" - local repo_path="''${2:-}" - - if [ -n "$TARGET_DIR" ]; then - command git clone "$repo_url" "$repo_path" - else - command git clone "$repo_url" - repo_path=$(basename "$repo_url" .git) - fi - - ${pkgs.tmux-sessionizer}/bin/tmux-sessionizer "$repo_path" - ;; - root) shift @@ -98,6 +44,10 @@ in command ${pkgs.ttyper}/bin/ttyper --language english1000 --words 50 "''${@}" } + weather() { + curl "https://wttr.in/''$1" + } + yt-dlp() { command yt-dlp --paths ~/Videos "$@" } @@ -111,5 +61,4 @@ in setopt pushdminus ''; }; - }; } diff --git a/modules/zsh/profile.nix b/modules/zsh/profile.nix new file mode 100644 index 00000000..318d562c --- /dev/null +++ b/modules/zsh/profile.nix @@ -0,0 +1,7 @@ +{ + flake.modules.homeManager.base.programs.zsh.profileExtra = '' + if [[ -z "$DISPLAY" ]] && [[ "$(tty)" == "/dev/tty1" ]]; then + exec startx &>/dev/null + fi + ''; +} diff --git a/modules/zsh/syntax-highlighting.nix b/modules/zsh/syntax-highlighting.nix new file mode 100644 index 00000000..0fa884df --- /dev/null +++ b/modules/zsh/syntax-highlighting.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.base.programs.zsh.syntaxHighlighting.enable = true; +} diff --git a/modules/zsh/variables.nix b/modules/zsh/variables.nix new file mode 100644 index 00000000..886b3ba2 --- /dev/null +++ b/modules/zsh/variables.nix @@ -0,0 +1,5 @@ +{ + flake.modules.homeManager.base.programs.zsh.localVariables = { + ABBR_SET_EXPANSION_CURSOR = 1; + }; +} diff --git a/modules/zsh/vi-mode.nix b/modules/zsh/vi-mode.nix new file mode 100644 index 00000000..79e609be --- /dev/null +++ b/modules/zsh/vi-mode.nix @@ -0,0 +1,3 @@ +{ + flake.modules.homeManager.base.programs.zsh.defaultKeymap = "viins"; +} diff --git a/notes.txt b/notes.txt new file mode 100644 index 00000000..e01d0f67 --- /dev/null +++ b/notes.txt @@ -0,0 +1,6 @@ +Running Neovim as a package: + +nix run .#neovim +nix run git+https://code.oliverdavies.uk/opdavies/nix-config#neovim + +nixos-rebuild --flake .#nixedo --target-host 192.168.1.116 --sudo test diff --git a/overlays/default.nix b/overlays/default.nix index 07f3a2ac..17308ce2 100644 --- a/overlays/default.nix +++ b/overlays/default.nix @@ -3,8 +3,8 @@ { additions = final: prev: - import ../pkgs { - inherit prev; + import ../packages { + inherit inputs prev; pkgs = final; }; diff --git a/overlays/mods/dwm/default.nix b/overlays/mods/dwm/default.nix index 9310897b..67b3117c 100644 --- a/overlays/mods/dwm/default.nix +++ b/overlays/mods/dwm/default.nix @@ -6,7 +6,7 @@ in prev.dwm.override { conf = '' #define BROWSER "${lib.getExe prev.librewolf}" - #define TERMINAL "/run/current-system/sw/bin/st" + #define TERMINAL "/etc/profiles/per-user/opdavies/bin/st" static const unsigned int borderpx = 1; static const unsigned int snap = 32; @@ -112,19 +112,20 @@ prev.dwm.override { ''; patches = with prev; [ - ./restartsig.patch - (fetchpatch { + name = "preserveonrestart"; url = "https://dwm.suckless.org/patches/preserveonrestart/dwm-preserveonrestart-6.3.diff"; sha256 = "zgwTCgD3YE+2K4BF6Em+qkM1Gax5vOZfeuWa6zXx8cE="; }) (fetchpatch { + name = "hide_vacant_tags"; url = "https://dwm.suckless.org/patches/hide_vacant_tags/dwm-hide_vacant_tags-6.4.diff"; sha256 = "GIbRW0Inwbp99rsKLfIDGvPwZ3pqihROMBp5vFlHx5Q="; }) (fetchpatch { + name = "pertag"; url = "https://dwm.suckless.org/patches/pertag/dwm-pertag-20200914-61bb8b2.diff"; sha256 = "wRZP/27V7xYOBnFAGxqeJFXdoDk4K1EQMA3bEoAXr/0="; }) diff --git a/overlays/mods/dwm/restartsig.patch b/overlays/mods/dwm/restartsig.patch deleted file mode 100644 index fe73b937..00000000 --- a/overlays/mods/dwm/restartsig.patch +++ /dev/null @@ -1,108 +0,0 @@ -diff --git a/config.def.h b/config.def.h -index 9efa774..3e9f854 100644 ---- a/config.def.h -+++ b/config.def.h -@@ -95,6 +95,7 @@ static const Key keys[] = { - TAGKEYS( XK_8, 7) - TAGKEYS( XK_9, 8) - { MODKEY|ShiftMask, XK_q, quit, {0} }, -+ { MODKEY|ControlMask|ShiftMask, XK_q, quit, {1} }, - }; - - /* button definitions */ -diff --git a/dwm.1 b/dwm.1 -index ddc8321..7b6cadb 100644 ---- a/dwm.1 -+++ b/dwm.1 -@@ -142,6 +142,9 @@ Add/remove all windows with nth tag to/from the view. - .TP - .B Mod1\-Shift\-q - Quit dwm. -+.TP -+.B Mod1\-Control\-Shift\-q -+Restart dwm. - .SS Mouse commands - .TP - .B Mod1\-Button1 -@@ -155,6 +158,13 @@ Resize focused window while dragging. Tiled windows will be toggled to the float - .SH CUSTOMIZATION - dwm is customized by creating a custom config.h and (re)compiling the source - code. This keeps it fast, secure and simple. -+.SH SIGNALS -+.TP -+.B SIGHUP - 1 -+Restart the dwm process. -+.TP -+.B SIGTERM - 15 -+Cleanly terminate the dwm process. - .SH SEE ALSO - .BR dmenu (1), - .BR st (1) -diff --git a/dwm.c b/dwm.c -index 1443802..d183e80 100644 ---- a/dwm.c -+++ b/dwm.c -@@ -204,6 +204,8 @@ static void setmfact(const Arg *arg); - static void setup(void); - static void seturgent(Client *c, int urg); - static void showhide(Client *c); -+static void sighup(int unused); -+static void sigterm(int unused); - static void spawn(const Arg *arg); - static void tag(const Arg *arg); - static void tagmon(const Arg *arg); -@@ -259,6 +261,7 @@ static void (*handler[LASTEvent]) (XEvent *) = { - [UnmapNotify] = unmapnotify - }; - static Atom wmatom[WMLast], netatom[NetLast]; -+static int restart = 0; - static int running = 1; - static Cur *cursor[CurLast]; - static Clr **scheme; -@@ -1257,6 +1260,7 @@ propertynotify(XEvent *e) - void - quit(const Arg *arg) - { -+ if(arg->i) restart = 1; - running = 0; - } - -@@ -1552,6 +1556,9 @@ setup(void) - /* clean up any zombies (inherited from .xinitrc etc) immediately */ - while (waitpid(-1, NULL, WNOHANG) > 0); - -+ signal(SIGHUP, sighup); -+ signal(SIGTERM, sigterm); -+ - /* init screen */ - screen = DefaultScreen(dpy); - sw = DisplayWidth(dpy, screen); -@@ -1643,6 +1650,20 @@ showhide(Client *c) - } - } - -+void -+sighup(int unused) -+{ -+ Arg a = {.i = 1}; -+ quit(&a); -+} -+ -+void -+sigterm(int unused) -+{ -+ Arg a = {.i = 0}; -+ quit(&a); -+} -+ - void - spawn(const Arg *arg) - { -@@ -2158,6 +2179,7 @@ main(int argc, char *argv[]) - #endif /* __OpenBSD__ */ - scan(); - run(); -+ if(restart) execvp(argv[0], argv); - cleanup(); - XCloseDisplay(dpy); - return EXIT_SUCCESS; diff --git a/packages/_timer.nix b/packages/_timer.nix new file mode 100644 index 00000000..6dd00e3b --- /dev/null +++ b/packages/_timer.nix @@ -0,0 +1,19 @@ +{ pkgs }: + +pkgs.writeShellApplication { + name = "_timer"; + + runtimeInputs = with pkgs; [ + coreutils + libnotify + ]; + + text = '' + mins=$1 + message=''${2:-Time out!} + + sleep $((mins * 60)) + + notify-send -t 0 "''${message}" "Your timer of $mins min is over" -u normal + ''; +} diff --git a/packages/backup-websites.nix b/packages/backup-websites.nix new file mode 100644 index 00000000..fd7828df --- /dev/null +++ b/packages/backup-websites.nix @@ -0,0 +1,15 @@ +{ pkgs, ... }: + +pkgs.writeShellApplication { + name = "backup-websites"; + + runtimeInputs = with pkgs; [ rsync ]; + + text = '' + backup_path="''$HOME/server-backup" + + mkdir -p "''$backup_path" + + rsync -avzP nixedo.oliverdavies.uk:/var/www/vhosts/ "''$backup_path" --delete-after + ''; +} diff --git a/pkgs/build-glove80.nix b/packages/build-glove80.nix similarity index 100% rename from pkgs/build-glove80.nix rename to packages/build-glove80.nix diff --git a/packages/count-tags.nix b/packages/count-tags.nix new file mode 100755 index 00000000..c5e046fa --- /dev/null +++ b/packages/count-tags.nix @@ -0,0 +1,14 @@ +{ pkgs }: + +pkgs.writeShellApplication { + name = "count-tags"; + + runtimeInputs = with pkgs; [ + coreutils + get-tags + ]; + + text = '' + get-tags "''${1:-}" | wc -l + ''; +} diff --git a/packages/create-script.nix b/packages/create-script.nix new file mode 100755 index 00000000..840018fd --- /dev/null +++ b/packages/create-script.nix @@ -0,0 +1,19 @@ +{ pkgs }: + +pkgs.writeShellApplication { + name = "create-script"; + + text = '' + cat > "$1" << EOF + #!/usr/bin/env bash + + set -euo pipefail + + + EOF + + chmod +x "$1" + + $EDITOR "$1"; + ''; +} diff --git a/packages/default.nix b/packages/default.nix new file mode 100644 index 00000000..418c1638 --- /dev/null +++ b/packages/default.nix @@ -0,0 +1,37 @@ +{ + inputs, + pkgs, + prev, + ... +}: + +let + inherit (pkgs) callPackage; + + vimPlugins = callPackage ./vim-plugins { }; +in +{ + _timer = callPackage ./_timer.nix { }; + backup-websites = callPackage ./backup-websites.nix { }; + build-glove80 = callPackage ./build-glove80.nix { }; + count-tags = callPackage ./count-tags.nix { }; + create-script = callPackage ./create-script.nix { }; + dev-commit = callPackage ./dev-commit.nix { }; + get-tags = callPackage ./get-tags.nix { }; + git-exclude = callPackage ./git-exclude.nix { }; + git-graph = callPackage ./git-graph.nix { }; + import-to-jellyfin = callPackage ./import-to-jellyfin.nix { }; + mounter = callPackage ./mounter.nix { }; + move-firefox-screenshots = callPackage ./move-firefox-screenshots.nix { }; + passmenu-otp = callPackage ./passmenu-otp.nix { }; + set-background = callPackage ./set-background.nix { }; + tag-release = callPackage ./tag-release.nix { }; + time-until = callPackage ./time-until.nix { }; + timer = callPackage ./timer.nix { }; + tmux-sessionizer = callPackage ./tmux-sessionizer { }; + unmounter = callPackage ./unmounter.nix { }; + update-all-git-repos = callPackage ./update-all-git-repos.nix { }; + vic = callPackage ./vic.nix { inherit inputs; }; + + vimPlugins = prev.vimPlugins // vimPlugins; +} diff --git a/packages/dev-commit.nix b/packages/dev-commit.nix new file mode 100644 index 00000000..e71aa095 --- /dev/null +++ b/packages/dev-commit.nix @@ -0,0 +1,48 @@ +{ pkgs, ... }: + +pkgs.writeShellApplication { + name = "dev-commit"; + + runtimeInputs = with pkgs; [ + coreutils + git + logger + openssh + ]; + + text = '' + IFS=':' read -ra repos <<< "$DEV_COMMIT_PATHS" + + for repo in "''${repos[@]}"; do + logger "Processing repository: $repo" + + pushd "$repo" > /dev/null 2>&1 + + if [[ -n $(git status --porcelain) ]]; then + logger "Changes detected in $repo" + + git status --short | while read -r line; do + logger "Changed file: $line" + done + + git add . + + if git commit -m "Automated dev commit"; then + logger "Commit successful in $repo" + + if git push; then + logger "Push successful in $repo" + else + logger "Push failed in $repo" + fi + else + logger "No changes to commit in $repo" + fi + else + logger "No changes in $repo" + fi + + popd > /dev/null 2>&1 + done + ''; +} diff --git a/packages/get-tags.nix b/packages/get-tags.nix new file mode 100755 index 00000000..ac27898d --- /dev/null +++ b/packages/get-tags.nix @@ -0,0 +1,16 @@ +{ pkgs }: + +pkgs.writeShellApplication { + name = "get-tags"; + + runtimeInputs = with pkgs; [ git ]; + + text = '' + if [[ "$#" -gt 0 ]]; then + git tag | grep "$*" + exit 0 + fi + + git tag + ''; +} diff --git a/packages/git-exclude.nix b/packages/git-exclude.nix new file mode 100644 index 00000000..45e3cbdb --- /dev/null +++ b/packages/git-exclude.nix @@ -0,0 +1,24 @@ +{ pkgs }: + +pkgs.writeShellApplication { + name = "git-exclude"; + + runtimeInputs = with pkgs; [ git ]; + + text = '' + # Based on https://github.com/jfly/snow/blob/fb727b39736666f54908f4dc7c83dd6284607c5a/machines/pattern/homies/bin/git-exclude. + + root=$(git rev-parse --show-toplevel) + rel=$(realpath --relative-to "$root" .) + + # For some reason, ignore rules like "./.envrc" don't seem to work, but + # "/.envrc" does. :shrug: + if [ "$rel" = "." ]; then + rel="" + fi + + for item in "$@"; do + echo "''${rel}/$item" >> "$root/.git/info/exclude" + done + ''; +} diff --git a/packages/git-graph.nix b/packages/git-graph.nix new file mode 100644 index 00000000..4e719bc5 --- /dev/null +++ b/packages/git-graph.nix @@ -0,0 +1,17 @@ +{ pkgs }: + +pkgs.writeShellApplication { + name = "git-graph"; + + runtimeInputs = with pkgs; [ git ]; + + text = '' + # Based on https://github.com/sdaschner/dotfiles/blob/master/bin/git-graph. + + git log \ + --abbrev-commit \ + --all \ + --graph \ + --pretty=format:"%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%ae>%Creset" + ''; +} diff --git a/packages/import-to-jellyfin.nix b/packages/import-to-jellyfin.nix new file mode 100644 index 00000000..11bcb7c0 --- /dev/null +++ b/packages/import-to-jellyfin.nix @@ -0,0 +1,27 @@ +{ pkgs }: + +pkgs.writeShellApplication { + name = "import-to-jellyfin"; + + runtimeInputs = with pkgs; [ coreutils ]; + + text = '' + source_path="/home/opdavies/import" + + mapfile -t files < <(find "$source_path" -type f -name "*.mp4") + + for filepath in "''${files[@]}"; do + echo "Moving $filepath..." + + filename="$(basename "$filepath")" + filename_without_extension="''${filename%.mp4}" + + destination_path="/mnt/media/jellyfin/Movies/$filename_without_extension" + mkdir -p "$destination_path" + + mv "$source_path/$filename" "$destination_path" + done + + chown -R jellyfin:media /mnt/media/jellyfin + ''; +} diff --git a/packages/mounter.nix b/packages/mounter.nix new file mode 100755 index 00000000..df0e0982 --- /dev/null +++ b/packages/mounter.nix @@ -0,0 +1,45 @@ +{ pkgs }: + +pkgs.writeShellApplication { + name = "mounter"; + + runtimeInputs = with pkgs; [ + cryptsetup + dmenu + gawk + libnotify + util-linux + ]; + + text = '' + lsblk_output="$(lsblk -rpo "uuid,name,type,size,label,mountpoint,mountpoints,fstype" | grep "part" | grep -Ev "/(boot|nix/store)")" + partition_names="$(echo "$lsblk_output" | awk '{ printf "%s (%s)\n", $2, $4 }' )"; + + selected=$(echo "$partition_names" | dmenu -p "Select drive:" | awk '{ print $1 }') + test -n "$selected" + mount_device="$selected" + + if sudo cryptsetup isLuks "$selected"; then + luks_name="usb" + + ${"TERMINAL:-st"} -n floatterm -g 60x1 -e sudo cryptsetup open "$selected" "$luks_name" + + mount_device="/dev/mapper/$luks_name" + + test -b "/dev/mapper/$luks_name" + fi + + mount_point=$(echo -e "/mnt\n/media\n/run/media/$USER" | dmenu -p "Select mount point:") + test -n "$mount_point" + + sudo mkdir -p "$mount_point" + + if sudo mount "$mount_device" "$mount_point"; then + notify-send "Device mounted" "Mounted $selected at $mount_point." + else + notify-send "Mount failed" "Failed to mount $selected." + + exit 1 + fi + ''; +} diff --git a/packages/move-firefox-screenshots.nix b/packages/move-firefox-screenshots.nix new file mode 100755 index 00000000..8f544f30 --- /dev/null +++ b/packages/move-firefox-screenshots.nix @@ -0,0 +1,15 @@ +{ pkgs }: + +pkgs.writeShellApplication { + name = "move-firefox-screenshots"; + + runtimeInputs = with pkgs; [ findutils ]; + + text = '' + original_directory="''${HOME}/Downloads" + new_directory="''${HOME}/Pictures/Screenshots" + + find "''${original_directory}" -mindepth 1 -maxdepth 1 -type f -name "Screenshot *" \ + -exec mv {} "''${new_directory}" \; + ''; +} diff --git a/pkgs/passmenu-otp.nix b/packages/passmenu-otp.nix similarity index 100% rename from pkgs/passmenu-otp.nix rename to packages/passmenu-otp.nix diff --git a/packages/set-background.nix b/packages/set-background.nix new file mode 100644 index 00000000..8bd581f8 --- /dev/null +++ b/packages/set-background.nix @@ -0,0 +1,11 @@ +{ pkgs, writeShellApplication }: + +writeShellApplication { + name = "set-background"; + + runtimeInputs = with pkgs; [ xwallpaper ]; + + text = '' + xwallpaper --zoom "''${XDG_REPOS_DIR}/personal/nix-config/wallpaper/wallpaper.jpg" + ''; +} diff --git a/packages/tag-release.nix b/packages/tag-release.nix new file mode 100644 index 00000000..0bd612b6 --- /dev/null +++ b/packages/tag-release.nix @@ -0,0 +1,17 @@ +{ git, writeShellApplication }: + +writeShellApplication { + name = "tag-release"; + + runtimeInputs = [ git ]; + + text = '' + commit_sha="''${1:-HEAD}" + tag="$(date '+%Y-%m-%d-%H.%M.%S')" + + echo "Tagging commit $(git rev-parse "''${commit_sha}") as ''${tag}." + echo "" + + git tag "''${tag}" "''${commit_sha}" + ''; +} diff --git a/packages/time-until.nix b/packages/time-until.nix new file mode 100644 index 00000000..82e1c821 --- /dev/null +++ b/packages/time-until.nix @@ -0,0 +1,27 @@ +{ pkgs }: + +pkgs.writeShellApplication { + name = "time-until"; + + runtimeInputs = with pkgs; [ bc ]; + + text = '' + # Based on https://github.com/sdaschner/dotfiles/blob/master/bin/time-until. + set +o nounset + + if [[ "$1" == "" ]]; then + echo "Usage: ''${0##*/} " + echo " Example: ''${0##*/} 'tomorrow 06:00'" + exit 2 + fi + + set -o nounset + + secsUntil=$(( $(date +%s -d "$*") - $( date +%s ) )) + minutesUntil=$(bc <<< "scale=1; $secsUntil/60") + hoursUntil=$(bc <<< "scale=2; $secsUntil/3600") + date=$(date -d "$*") + + echo "$hoursUntil hours (or $minutesUntil mins) until $date" + ''; +} diff --git a/packages/timer.nix b/packages/timer.nix new file mode 100644 index 00000000..8580c10c --- /dev/null +++ b/packages/timer.nix @@ -0,0 +1,21 @@ +{ pkgs }: + +pkgs.writeShellApplication { + name = "timer"; + + runtimeInputs = with pkgs; [ + _timer + coreutils + systemdMinimal + ]; + + text = '' + mins=$1 + message="''${2:-}" + + nohup _timer "$mins" "$message" &> /dev/null & + + echo "timer started for $mins min" + echo "timer started for $mins min, message: '$message'" | systemd-cat -t timer + ''; +} diff --git a/packages/unmounter.nix b/packages/unmounter.nix new file mode 100755 index 00000000..51e5d967 --- /dev/null +++ b/packages/unmounter.nix @@ -0,0 +1,36 @@ +{ pkgs }: + +pkgs.writeShellApplication { + name = "unmounter"; + + runtimeInputs = with pkgs; [ + cryptsetup + dmenu + gawk + libnotify + util-linux + ]; + + text = '' + lsblk_output="$(lsblk -nrpo "name,type,size,mountpoint")" + mounted_drives="$(echo "$lsblk_output" | awk '($2=="part"||$2="crypt")&&$4!~/\/boot|\/home$|SWAP/&&length($4)>1{printf "%s (%s)\n",$4,$3}')" + + all_unmountable="$(echo "$mounted_drives" | sed "/^$/d;s/ *$//")" + test -n "$all_unmountable" + + selected="$(echo "$all_unmountable" | dmenu -i -p "Unmount which drive?")" + selected="''${selected%% *}" + test -n "$selected" + + sudo -A umount -l "/''${selected#*/}" + notify-send "Device unmounted" "$selected has been unmounted." + + # Close the selected drive if decrypted. + cryptid="$(echo "$lsblk_output" | grep "/''${selected#*/}$")" + cryptid="''${cryptid%% *}" + test -b /dev/mapper/"''${cryptid##*/}" + sudo -A cryptsetup close "$cryptid" + + notify-send "Device dencryption closed" "Drive is now securely locked again." + ''; +} diff --git a/packages/update-all-git-repos.nix b/packages/update-all-git-repos.nix new file mode 100755 index 00000000..1ef76bf2 --- /dev/null +++ b/packages/update-all-git-repos.nix @@ -0,0 +1,33 @@ +{ pkgs }: + +pkgs.writeShellApplication { + name = "update-all-git-repos"; + + runtimeInputs = with pkgs; [ + findutils + git + ]; + + text = '' + # Update all top-level Git repository clones within my Code directories to their + # latest version. + + dirs=$(find "$XDG_REPOS_DIR" -mindepth 2 -maxdepth 3 -type d -name .git -not -path '*/*.old/*') + + for dir in $dirs; do + repo_path="''${dir%/.git}" + + cd "''${repo_path}" + + # If the repo is a bare clone, the commands need to be run within the + # worktree directory. + [[ -f .bare/worktrees/main/gitdir && -d main && -f main/.git ]] && cd main + + echo "Updating $(pwd)" + + # Update the repository. + git fetch --all --jobs=4 --progress --prune + git pull --rebase + done + ''; +} diff --git a/packages/vic.nix b/packages/vic.nix new file mode 100755 index 00000000..312f8467 --- /dev/null +++ b/packages/vic.nix @@ -0,0 +1,9 @@ +{ inputs, pkgs }: + +pkgs.writeShellApplication rec { + name = "vic"; + + runtimeInputs = with pkgs; [ neovim tmux ]; + + text = builtins.readFile "${inputs.rwxrob-dot}/scripts/${name}"; +} diff --git a/pkgs/vim-plugins/default.nix b/packages/vim-plugins/default.nix similarity index 100% rename from pkgs/vim-plugins/default.nix rename to packages/vim-plugins/default.nix diff --git a/packages/vim-plugins/vim-plugins.json b/packages/vim-plugins/vim-plugins.json new file mode 100644 index 00000000..75a148c3 --- /dev/null +++ b/packages/vim-plugins/vim-plugins.json @@ -0,0 +1,10 @@ +{ + "vim-textobj-indent": { + "owner": "kana", + "repo": "vim-textobj-indent", + "rev": "deb76867c302f933c8f21753806cbf2d8461b548", + "version": "0.0.6", + "hash": "sha256-oFzUPG+IOkbKZ2gU/kduQ3G/LsLDlEjFhRP0BHBE+1Q=" + } +} + diff --git a/pkgs/backup-websites.nix b/pkgs/backup-websites.nix deleted file mode 100644 index d70cd8b7..00000000 --- a/pkgs/backup-websites.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ lib, pkgs, ... }: - -pkgs.writeShellApplication { - name = "backup-websites"; - - text = '' - backup_path="''${HOME}/server-backup" - - mkdir -p "''${backup_path}" - - ${lib.getExe pkgs.rsync} -avzP nixedo.local:/var/www/vhosts/ "''${backup_path}" --delete-after - ''; -} diff --git a/pkgs/default.nix b/pkgs/default.nix deleted file mode 100644 index 72ce4ae8..00000000 --- a/pkgs/default.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ pkgs, prev, ... }: - -let - inherit (pkgs) callPackage; - - vimPlugins = callPackage ./vim-plugins { }; -in -{ - backup-websites = callPackage ./backup-websites.nix { }; - build-glove80 = callPackage ./build-glove80.nix { }; - dev-commit = callPackage ./dev-commit.nix { }; - displayselect = callPackage ./displayselect { }; - notes = callPackage ./notes { }; - passmenu-otp = callPackage ./passmenu-otp.nix { }; - todos-add = callPackage ./todos/todos-add.nix { }; - todos-edit = callPackage ./todos/todos-edit.nix { }; - tmux-sessionizer = callPackage ./tmux-sessionizer { }; - upload-to-files = callPackage ./upload-to-files.nix { }; - - vimPlugins = prev.vimPlugins // vimPlugins; -} diff --git a/pkgs/dev-commit.nix b/pkgs/dev-commit.nix deleted file mode 100644 index dfe4336a..00000000 --- a/pkgs/dev-commit.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ pkgs, ... }: - -pkgs.writeShellApplication { - name = "dev-commit"; - - runtimeInputs = with pkgs; [ - coreutils - git - openssh - ]; - - text = '' - IFS=':' read -ra repos <<< "$DEV_COMMIT_PATHS" - - for repo in "''${repos[@]}"; do - echo "Processing $repo" - pushd "$repo" - - git add . - git commit -m "Automated dev commit" || true - git push - - popd - done - ''; -} diff --git a/pkgs/displayselect/default.nix b/pkgs/displayselect/default.nix deleted file mode 100644 index f81f217e..00000000 --- a/pkgs/displayselect/default.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ pkgs, ... }: - -pkgs.stdenv.mkDerivation { - pname = "displayselect"; - version = "unstable-2024-05-11"; - - src = builtins.fetchurl { - url = "https://raw.githubusercontent.com/lukesmithxyz/voidrice/97687287bdfd332398b82a196b5f1feaec73f1d7/.local/bin/displayselect"; - sha256 = "sha256:11r561pfhb48a3xmi42zzvpljahnwlfad9rz8qmmp64dhz1f2vp0"; - }; - - dontUnpack = true; - - buildInputs = with pkgs; [ - bash - xorg.xrandr - ]; - - prePatch = '' - cp $src displayselect - ''; - - patches = [ ./scaling.patch ]; - - installPhase = '' - mkdir -p $out/bin - cp displayselect $out/bin - chmod +x $out/bin/displayselect - ''; - - meta.mainProgram = "displayselect"; -} diff --git a/pkgs/notes/change-filename-format.patch b/pkgs/notes/change-filename-format.patch deleted file mode 100644 index 6baea3be..00000000 --- a/pkgs/notes/change-filename-format.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/notes b/notes -index 3351903..34364bf 100755 ---- a/notes -+++ b/notes -@@ -14,7 +14,7 @@ set -e - readonly NOTES_DIRECTORY="${NOTES_DIRECTORY:-${HOME}/notes}" - readonly NOTES_EDITOR="${EDITOR}" - --readonly NOTES_FILE="$(date +%Y-%m).txt" -+readonly NOTES_FILE="$(date +%Y-%m-%d).txt" - readonly NOTES_PATH="${NOTES_DIRECTORY}/${NOTES_FILE}" - - if [ ! -d "${NOTES_DIRECTORY}" ]; then diff --git a/pkgs/notes/default.nix b/pkgs/notes/default.nix deleted file mode 100644 index bf70b196..00000000 --- a/pkgs/notes/default.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ pkgs, ... }: - -with pkgs; - -stdenv.mkDerivation rec { - pname = "notes"; - version = "unstable-2024-12-07"; - - src = fetchFromGitHub { - owner = "nickjj"; - repo = "notes"; - rev = "f4f0aab865c19132484a2c3998cd984bdb3b9514"; - sha256 = "sha256-y5SkS+22tW9wf3gH26NHSnrnJ0rkBWSgKvansP8Hlbg="; - }; - - buildInputs = [ bash ]; - - patches = [ - ./change-filename-format.patch - ]; - - installPhase = '' - mkdir -p $out/bin - cp notes $out/bin/notes - chmod +x $out/bin/notes - ''; -} diff --git a/pkgs/tmux-sessionizer/default.nix b/pkgs/tmux-sessionizer/default.nix deleted file mode 100644 index 174b018c..00000000 --- a/pkgs/tmux-sessionizer/default.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ pkgs, ... }: - -with pkgs; - -stdenv.mkDerivation { - pname = "tmux-sessionizer"; - version = "unstable-2024-10-30"; - - src = fetchFromGitHub { - owner = "theprimeagen"; - repo = "tmux-sessionizer"; - rev = "6ebd16e2e30a8c0ebd77f0c2ce18cb46db8397fa"; - sha256 = "bZXt9TyMU1Ed/WR0/ahMQ4oyIi6yXLKnXKYPPNBt/s4="; - }; - - buildInputs = [ - bash - fzf - tmux - ]; - - patches = [ - ./move-default-script.patch - - (fetchpatch { - url = "https://patch-diff.githubusercontent.com/raw/ThePrimeagen/tmux-sessionizer/pull/2.patch"; - sha256 = "sha256-4/4rzve49T3FHnl9WWUPJVcb0NQojMQjIVnEZGwVAsY="; - }) - - ./shorten-suggested-paths.patch - ./sort-suggestions.patch - ]; - - installPhase = '' - mkdir -p $out/bin - cp tmux-sessionizer $out/bin/tmux-sessionizer - chmod +x $out/bin/tmux-sessionizer - ''; -} diff --git a/pkgs/tmux-sessionizer/move-default-script.patch b/pkgs/tmux-sessionizer/move-default-script.patch deleted file mode 100644 index 6922915e..00000000 --- a/pkgs/tmux-sessionizer/move-default-script.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/tmux-sessionizer b/tmux-sessionizer -index fa1bec5..536d4b0 100755 ---- a/tmux-sessionizer -+++ b/tmux-sessionizer -@@ -14,8 +14,8 @@ has_session() { - hydrate() { - if [ -f $2/.tmux-sessionizer ]; then - tmux send-keys -t $1 "source $2/.tmux-sessionizer" c-M -- elif [ -f $HOME/.tmux-sessionizer ]; then -- tmux send-keys -t $1 "source $HOME/.tmux-sessionizer" c-M -+ elif [ -f "$XDG_CONFIG_HOME/tmux-sessionizer/default" ]; then -+ tmux send-keys -t $1 "source $XDG_CONFIG_HOME/tmux-sessionizer/default" c-M - fi - } - diff --git a/pkgs/tmux-sessionizer/shorten-suggested-paths.patch b/pkgs/tmux-sessionizer/shorten-suggested-paths.patch deleted file mode 100644 index 067cbe64..00000000 --- a/pkgs/tmux-sessionizer/shorten-suggested-paths.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/tmux-sessionizer b/tmux-sessionizer -index 8fa4153..3e607d7 100755 ---- a/tmux-sessionizer -+++ b/tmux-sessionizer -@@ -22,13 +22,16 @@ hydrate() { - if [[ $# -eq 1 ]]; then - selected=$1 - else -- selected=$(find $(eval echo $(xargs < "$XDG_CONFIG_HOME/tmux-sessionizer/directories")) -mindepth 1 -maxdepth 1 -type d | fzf) -+ selected=$(find $(eval echo $(xargs < "$XDG_CONFIG_HOME/tmux-sessionizer/directories")) -mindepth 1 -maxdepth 1 -type d | sed "s|$HOME/||" | fzf) - fi - - if [[ -z $selected ]]; then - exit 0 - fi - -+# Add Home path back. -+selected="$HOME/$selected" -+ - selected_name=$(basename "$selected" | tr . _) - tmux_running=$(pgrep tmux) - diff --git a/pkgs/tmux-sessionizer/sort-suggestions.patch b/pkgs/tmux-sessionizer/sort-suggestions.patch deleted file mode 100644 index c2d33126..00000000 --- a/pkgs/tmux-sessionizer/sort-suggestions.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/tmux-sessionizer b/tmux-sessionizer -index 3e607d7..27729b1 100755 ---- a/tmux-sessionizer -+++ b/tmux-sessionizer -@@ -22,7 +22,7 @@ hydrate() { - if [[ $# -eq 1 ]]; then - selected=$1 - else -- selected=$(find $(eval echo $(xargs < "$XDG_CONFIG_HOME/tmux-sessionizer/directories")) -mindepth 1 -maxdepth 1 -type d | sed "s|$HOME/||" | fzf) -+ selected=$(find $(eval echo $(xargs < "$XDG_CONFIG_HOME/tmux-sessionizer/directories")) -mindepth 1 -maxdepth 1 -type d | sed "s|$HOME/||" | sort | fzf) - fi - - if [[ -z $selected ]]; then diff --git a/pkgs/todos/todos-add.nix b/pkgs/todos/todos-add.nix deleted file mode 100644 index a5df60ac..00000000 --- a/pkgs/todos/todos-add.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ pkgs, ... }: - -pkgs.writeShellApplication { - name = "todos-add"; - - text = '' - TODOS_DIRECTORY="''${TODOS_DIRECTORY:-"$XDG_DOCUMENTS_DIR/todos"}" - export TODOS_DIRECTORY - - echo "$*" >> "$TODOS_DIRECTORY/$(date +%Y-%m-%d).txt" - ''; -} - diff --git a/pkgs/todos/todos-edit.nix b/pkgs/todos/todos-edit.nix deleted file mode 100644 index 43d3c829..00000000 --- a/pkgs/todos/todos-edit.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ pkgs, ... }: - -pkgs.writeShellApplication { - name = "todos-edit"; - - text = '' - TODOS_DIRECTORY="''${TODOS_DIRECTORY:-"$XDG_DOCUMENTS_DIR/todos"}" - export TODOS_DIRECTORY - - "$EDITOR" "$TODOS_DIRECTORY/$(date +%Y-%m-%d).txt"; - ''; -} diff --git a/pkgs/upload-to-files.nix b/pkgs/upload-to-files.nix deleted file mode 100644 index ea6a680e..00000000 --- a/pkgs/upload-to-files.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ pkgs }: - -with pkgs; - -writeShellApplication { - name = "upload-to-files"; - - text = '' - ${pkgs.rsync}/bin/rsync -avz --info=progress2 "$1" ssh.oliverdavies.uk:/var/www/vhosts/files.oliverdavies.uk - ''; -} diff --git a/pkgs/vim-plugins/vim-plugins.json b/pkgs/vim-plugins/vim-plugins.json deleted file mode 100644 index 4916878c..00000000 --- a/pkgs/vim-plugins/vim-plugins.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "vim-textobj-indent": { - "owner": "kana", - "repo": "vim-textobj-indent", - "rev": "deb76867c302f933c8f21753806cbf2d8461b548", - "version": "0.0.6", - "hash": "sha256-oFzUPG+IOkbKZ2gU/kduQ3G/LsLDlEjFhRP0BHBE+1Q=" - }, - - "vim-textobj-xmlattr": { - "owner": "whatyouhide", - "repo": "vim-textobj-xmlattr", - "rev": "694a297f1d75fd527e87da9769f3c6519a87ebb1", - "version": "unstable-2016-06-03", - "hash": "sha256-+91FVP95oh00flINdltqx6qJuijYo56tHIh3J098G2Q=" - } -} - diff --git a/secrets.nix b/secrets.nix index ad7e8bd6..23e41540 100644 --- a/secrets.nix +++ b/secrets.nix @@ -1,6 +1,5 @@ let hosts = { - lemp11 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEZ+ljJKd6uqdAk+fqxwtObI4Stab2N9Bjo4QFHY/v8n"; nixedo = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILvtcGJnc94k6wCPfvK9oBvGey0WWVCR8IYSqg5vqage"; t480 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILvtcGJnc94k6wCPfvK9oBvGey0WWVCR8IYSqg5vqage"; }; @@ -13,22 +12,29 @@ in "secrets/cloudflare.age".publicKeys = [ hosts.nixedo hosts.t480 - ] ++ [ users.opdavies ]; + ] + ++ [ users.opdavies ]; "secrets/cloudflared-credentials.age".publicKeys = [ hosts.nixedo - ] ++ [ users.opdavies ]; + ] + ++ [ users.opdavies ]; "secrets/forgejo-runner-token.age".publicKeys = [ hosts.nixedo - ] ++ [ users.opdavies ]; + ] + ++ [ users.opdavies ]; "secrets/peertube-env.age".publicKeys = [ hosts.nixedo - ] ++ [ users.opdavies ]; + ] + ++ [ users.opdavies ]; "secrets/tubearchivist-env.age".publicKeys = [ hosts.nixedo hosts.t480 - ] ++ [ users.opdavies ]; + ] + ++ [ users.opdavies ]; + + "secrets/vaultwarden-env.age".publicKeys = [ hosts.nixedo ] ++ [ users.opdavies ]; } diff --git a/secrets/vaultwarden-env.age b/secrets/vaultwarden-env.age new file mode 100644 index 00000000..522a87d7 Binary files /dev/null and b/secrets/vaultwarden-env.age differ diff --git a/todo.txt b/todo.txt new file mode 100644 index 00000000..9fb12d75 --- /dev/null +++ b/todo.txt @@ -0,0 +1,18 @@ +Configure external hard drives on nixedo. + +server: +jellyfin +immich +tubearchivist +websites +forgejo + +Create a Home Manager module for bluetuith. +Enable tree-fmt + +Error detected while processing BufWritePost Autocommands for "*": +Error running vale: ENOENT: no such file or directory + +Re-add spellfile + +Re-add low battery notifications. diff --git a/users/eric.nix b/users/eric.nix deleted file mode 100644 index 66e1c15e..00000000 --- a/users/eric.nix +++ /dev/null @@ -1,12 +0,0 @@ -let - username = "eric"; -in -{ - users.users.${username} = { - description = "Eric Davies"; - extraGroups = [ ]; - initialPassword = "eric"; - isNormalUser = true; - packages = [ ]; - }; -} diff --git a/users/luke.nix b/users/luke.nix deleted file mode 100644 index fb413562..00000000 --- a/users/luke.nix +++ /dev/null @@ -1,12 +0,0 @@ -let - username = "luke"; -in -{ - users.users.${username} = { - description = "Luke Davies"; - extraGroups = [ ]; - initialPassword = username; - isNormalUser = true; - packages = [ ]; - }; -} diff --git a/users/opdavies.nix b/users/opdavies.nix index 6180d2b2..613290c5 100644 --- a/users/opdavies.nix +++ b/users/opdavies.nix @@ -13,16 +13,13 @@ with lib; initialPassword = "opdavies"; isNormalUser = true; - extraGroups = - [ - "networkmanager" - "wheel" - ] - ++ optional config.cli.docker.enable "docker" - ++ optional config.cli.podman.enable "podman"; + extraGroups = [ + "networkmanager" + "wheel" + ]; packages = with pkgs; [ - qrencode + magic-wormhole ]; openssh.authorizedKeys.keys = [ diff --git a/wallpaper/wallpaper.jpg b/wallpaper/wallpaper.jpg index 75d60ad7..9c54212d 100644 Binary files a/wallpaper/wallpaper.jpg and b/wallpaper/wallpaper.jpg differ