Compare commits
16 Commits
ed063ab1fe
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 5c7663802c | |||
| c7750a3285 | |||
| 3e12379694 | |||
| 1f69906bc5 | |||
| cb39b659d5 | |||
| bcf729f39c | |||
| bc47d828a3 | |||
| 15b44304c1 | |||
| cd9b50feae | |||
| b6ae6887a3 | |||
| 10c214fc36 | |||
| 00781a3607 | |||
| 4a20edba5c | |||
| a81bbf5115 | |||
| 7f98c013a8 | |||
| f6f6bc6507 |
@@ -1,27 +0,0 @@
|
||||
[General]
|
||||
backlight_ac_disable_if_higher=false
|
||||
backlight_ac_enable=false
|
||||
backlight_battery_disable_if_lower=false
|
||||
backlight_battery_enable=false
|
||||
backlight_battery_value=120000
|
||||
backlight_mouse_wheel=true
|
||||
critical_battery_action=0
|
||||
critical_battery_timeout=20
|
||||
dialog_geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x3\xcf\0\0\0\x30\0\0\v0\0\0\t/\0\0\x3\xcf\0\0\0\x30\0\0\v0\0\0\t/\0\0\0\0\0\0\0\0\xf\0\0\0\x3\xcf\0\0\0\x30\0\0\v0\0\0\t/)
|
||||
disable_lid_action_external_monitor=false
|
||||
freedesktop_pm=true
|
||||
freedesktop_ss=true
|
||||
icon_theme=Adwaita
|
||||
lid_ac_action=1
|
||||
lid_battery_action=2
|
||||
lock_screen_on_resume=false
|
||||
lock_screen_on_suspend=true
|
||||
notify_on_ac=true
|
||||
notify_on_battery=true
|
||||
show_tray=true
|
||||
suspend_ac_action=0
|
||||
suspend_battery_action=1
|
||||
suspend_battery_timeout=15
|
||||
tray_notify=true
|
||||
warn_on_low_battery=true
|
||||
warn_on_verylow_battery=true
|
||||
@@ -1,124 +0,0 @@
|
||||
{
|
||||
"colors": {
|
||||
"black": 16,
|
||||
"white": 231,
|
||||
|
||||
"green": 2,
|
||||
"darkestgreen": 22,
|
||||
"darkgreen": 28,
|
||||
"mediumgreen": 70,
|
||||
"brightgreen": 148,
|
||||
|
||||
"darkestcyan": 23,
|
||||
"darkcyan": 74,
|
||||
"mediumcyan": 117,
|
||||
"brightcyan": 159,
|
||||
|
||||
"darkestblue": 24,
|
||||
"darkblue": 31,
|
||||
|
||||
"red": 1,
|
||||
"darkestred": 52,
|
||||
"darkred": 88,
|
||||
"mediumred": 124,
|
||||
"brightred": 160,
|
||||
"brightestred": 196,
|
||||
|
||||
"darkestpurple": 55,
|
||||
"mediumpurple": 98,
|
||||
"brightpurple": 189,
|
||||
|
||||
"darkorange": 94,
|
||||
"mediumorange": 166,
|
||||
"brightorange": 208,
|
||||
"brightestorange": 214,
|
||||
|
||||
"yellow": 11,
|
||||
"brightyellow": 220,
|
||||
|
||||
"gray0": 233,
|
||||
"gray1": 235,
|
||||
"gray2": 236,
|
||||
"gray3": 239,
|
||||
"gray4": 240,
|
||||
"gray5": 241,
|
||||
"gray6": 244,
|
||||
"gray7": 245,
|
||||
"gray8": 247,
|
||||
"gray9": 250,
|
||||
"gray10": 252,
|
||||
|
||||
"gray11": 234,
|
||||
"gray90": 254,
|
||||
|
||||
"gray70": [249, "b3b3b3"],
|
||||
|
||||
"lightyellowgreen": 106,
|
||||
"gold3": 178,
|
||||
"orangered": 202,
|
||||
|
||||
"steelblue": 67,
|
||||
"darkorange3": 166,
|
||||
"skyblue1": 117,
|
||||
"khaki1": 228,
|
||||
|
||||
"solarized:base03": [8, "002b36"],
|
||||
"solarized:base02": [0, "073642"],
|
||||
"solarized:base01": [10, "586e75"],
|
||||
"solarized:base00": [11, "657b83"],
|
||||
"solarized:base0": [12, "839496"],
|
||||
"solarized:base1": [14, "93a1a1"],
|
||||
"solarized:base2": [7, "eee8d5"],
|
||||
"solarized:base3": [15, "fdf6e3"],
|
||||
"solarized:yellow": [3, "b58900"],
|
||||
"solarized:orange": [9, "cb4b16"],
|
||||
"solarized:red": [1, "dc322f"],
|
||||
"solarized:magenta": [5, "d33682"],
|
||||
"solarized:violet": [13, "6c71c4"],
|
||||
"solarized:blue": [4, "268bd2"],
|
||||
"solarized:cyan": [6, "2aa198"],
|
||||
"solarized:green": [2, "859900"]
|
||||
},
|
||||
"gradients": {
|
||||
"dark_GREEN_Orange_red": [
|
||||
[22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 94, 94, 94, 94, 94, 94, 94, 88, 52],
|
||||
["006000", "006000", "006000", "006000", "006000", "006000", "006000", "006000", "006000", "036000", "076000", "0a6000", "0d6000", "106000", "126000", "146000", "166000", "186000", "1a6000", "1b6000", "1d6000", "1e6000", "206000", "216000", "236000", "246000", "256000", "266000", "286000", "296000", "2a6000", "2b6000", "2c6100", "2d6100", "2f6100", "306100", "316100", "326100", "336100", "346100", "356100", "366100", "376100", "386100", "386100", "396100", "3a6100", "3b6100", "3c6100", "3d6100", "3e6100", "3f6100", "406100", "406100", "416100", "426000", "436000", "446000", "456000", "456000", "466000", "476000", "486000", "496000", "496000", "4a6000", "4b6000", "4c6000", "4d6000", "4d6000", "4e6000", "4f6000", "506000", "506000", "516000", "526000", "536000", "536000", "546000", "556000", "566000", "566000", "576000", "586000", "596000", "596000", "5a6000", "5d6000", "616000", "646000", "686000", "6b6000", "6f6000", "726000", "766000", "796000", "7d6000", "806000", "7e5500", "6f3105", "5d0001"]
|
||||
],
|
||||
"GREEN_Orange_red": [
|
||||
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1],
|
||||
["005f00", "015f00", "025f00", "035f00", "045f00", "055f00", "065f00", "075f00", "085f00", "095f00", "0b5f00", "0c5f00", "0d5f00", "0e5f00", "0f5f00", "105f00", "115f00", "125f00", "135f00", "145f00", "165f00", "175f00", "185f00", "195f00", "1a5f00", "1b5f00", "1c5f00", "1d5f00", "1e5f00", "1f5f00", "215f00", "225f00", "235f00", "245f00", "255f00", "265f00", "275f00", "285f00", "295f00", "2a5f00", "2c5f00", "2d5f00", "2e5f00", "2f5f00", "305f00", "315f00", "325f00", "335f00", "345f00", "355f00", "375f00", "385f00", "395f00", "3a5f00", "3b5f00", "3c5f00", "3d5f00", "3e5f00", "3f5f00", "415f00", "425f00", "435f00", "445f00", "455f00", "465f00", "475f00", "485f00", "495f00", "4a5f00", "4c5f00", "4d5f00", "4e5f00", "4f5f00", "505f00", "515f00", "525f00", "535f00", "545f00", "555f00", "575f00", "585f00", "595f00", "5a5f00", "5b5f00", "5c5f00", "5d5f00", "5e5f00", "615f00", "655f00", "685f00", "6c5f00", "6f5f00", "735f00", "765f00", "7a5f00", "7d5f00", "815f00", "845f00", "815200", "702900"]
|
||||
],
|
||||
"green_yellow_red": [
|
||||
[190, 184, 178, 172, 166, 160],
|
||||
["8ae71c", "8ce71c", "8fe71c", "92e71c", "95e71d", "98e71d", "9ae71d", "9de71d", "a0e71e", "a3e71e", "a6e71e", "a8e71e", "abe71f", "aee71f", "b1e71f", "b4e71f", "b6e720", "b9e720", "bce720", "bfe720", "c2e821", "c3e721", "c5e621", "c7e521", "c9e522", "cbe422", "cde322", "cfe222", "d1e223", "d3e123", "d5e023", "d7df23", "d9df24", "dbde24", "dddd24", "dfdc24", "e1dc25", "e3db25", "e5da25", "e7d925", "e9d926", "e9d626", "e9d426", "e9d126", "e9cf27", "e9cc27", "e9ca27", "e9c727", "e9c528", "e9c228", "e9c028", "e9bd28", "e9bb29", "e9b829", "e9b629", "e9b329", "e9b12a", "e9ae2a", "e9ac2a", "e9a92a", "eaa72b", "eaa42b", "eaa22b", "ea9f2b", "ea9d2c", "ea9b2c", "ea982c", "ea962c", "ea942d", "ea912d", "ea8f2d", "ea8d2d", "ea8a2e", "ea882e", "ea862e", "ea832e", "ea812f", "ea7f2f", "ea7c2f", "ea7a2f", "eb7830", "eb7530", "eb7330", "eb7130", "eb6f31", "eb6c31", "eb6a31", "eb6831", "eb6632", "eb6332", "eb6132", "eb5f32", "eb5d33", "eb5a33", "eb5833", "eb5633", "eb5434", "eb5134", "eb4f34", "eb4d34", "ec4b35"]
|
||||
],
|
||||
"green_yellow_orange_red": [
|
||||
[2, 3, 9, 1],
|
||||
["719e07", "739d06", "759c06", "779c06", "799b06", "7b9a05", "7d9a05", "7f9905", "819805", "839805", "859704", "879704", "899604", "8b9504", "8d9504", "8f9403", "919303", "949303", "969203", "989102", "9a9102", "9c9002", "9e9002", "a08f02", "a28e01", "a48e01", "a68d01", "a88c01", "aa8c01", "ac8b00", "ae8a00", "b08a00", "b28900", "b58900", "b58700", "b68501", "b78302", "b78102", "b87f03", "b97d04", "b97b04", "ba7905", "bb7806", "bb7606", "bc7407", "bd7208", "bd7008", "be6e09", "bf6c0a", "bf6a0a", "c0690b", "c1670c", "c1650c", "c2630d", "c3610e", "c35f0e", "c45d0f", "c55b10", "c55a10", "c65811", "c75612", "c75412", "c85213", "c95014", "c94e14", "ca4c15", "cb4b16", "cb4a16", "cc4917", "cc4818", "cd4719", "cd4719", "ce461a", "ce451b", "cf441c", "cf441c", "d0431d", "d0421e", "d1411f", "d1411f", "d24020", "d23f21", "d33e22", "d33e22", "d43d23", "d43c24", "d53b25", "d53b25", "d63a26", "d63927", "d73828", "d73828", "d83729", "d8362a", "d9352b", "d9352b", "da342c", "da332d", "db322e", "dc322f"]
|
||||
],
|
||||
"yellow_red": [
|
||||
[220, 178, 172, 166, 160],
|
||||
["ffd700", "fdd500", "fbd300", "fad200", "f8d000", "f7cf00", "f5cd00", "f3cb00", "f2ca00", "f0c800", "efc700", "edc500", "ebc300", "eac200", "e8c000", "e7bf00", "e5bd00", "e3bb00", "e2ba00", "e0b800", "dfb700", "ddb500", "dbb300", "dab200", "d8b000", "d7af00", "d7ad00", "d7ab00", "d7aa00", "d7a800", "d7a700", "d7a500", "d7a300", "d7a200", "d7a000", "d79f00", "d79d00", "d79b00", "d79a00", "d79800", "d79700", "d79500", "d79300", "d79200", "d79000", "d78f00", "d78d00", "d78b00", "d78a00", "d78800", "d78700", "d78500", "d78300", "d78200", "d78000", "d77f00", "d77d00", "d77b00", "d77a00", "d77800", "d77700", "d77500", "d77300", "d77200", "d77000", "d76f00", "d76d00", "d76b00", "d76a00", "d76800", "d76700", "d76500", "d76300", "d76200", "d76000", "d75f00", "d75b00", "d75700", "d75300", "d74f00", "d74c00", "d74800", "d74400", "d74000", "d73c00", "d73900", "d73500", "d73100", "d72d00", "d72900", "d72600", "d72200", "d71e00", "d71a00", "d71600", "d71300", "d70f00", "d70b00", "d70700"]
|
||||
],
|
||||
"yellow_orange_red": [
|
||||
[3, 9, 1],
|
||||
["b58900", "b58700", "b58600", "b68501", "b68401", "b78202", "b78102", "b88003", "b87f03", "b87d03", "b97c04", "b97b04", "ba7a05", "ba7805", "bb7706", "bb7606", "bc7507", "bc7307", "bc7207", "bd7108", "bd7008", "be6e09", "be6d09", "bf6c0a", "bf6b0a", "c06a0b", "c0680b", "c0670b", "c1660c", "c1650c", "c2630d", "c2620d", "c3610e", "c3600e", "c35e0e", "c45d0f", "c45c0f", "c55b10", "c55910", "c65811", "c65711", "c75612", "c75412", "c75312", "c85213", "c85113", "c94f14", "c94e14", "ca4d15", "ca4c15", "cb4b16", "cb4a16", "cb4a17", "cc4917", "cc4918", "cc4818", "cd4819", "cd4719", "cd471a", "ce461a", "ce461b", "ce451b", "cf451c", "cf441c", "cf441d", "d0431d", "d0431e", "d0421e", "d1421f", "d1411f", "d14120", "d24020", "d24021", "d23f21", "d33f22", "d33e22", "d33e23", "d43d23", "d43d24", "d43c24", "d53c25", "d53b25", "d53b26", "d63a26", "d63a27", "d63927", "d73928", "d73828", "d73829", "d83729", "d8372a", "d8362a", "d9362b", "d9352b", "d9352c", "da342c", "da342d", "da332d", "db332e"]
|
||||
],
|
||||
"blue_red": [
|
||||
[39, 74, 68, 67, 103, 97, 96, 132, 131, 167, 203, 197],
|
||||
["19b4fe", "1bb2fc", "1db1fa", "1faff8", "22aef6", "24adf4", "26abf2", "29aaf0", "2ba9ee", "2da7ec", "30a6ea", "32a5e8", "34a3e6", "36a2e4", "39a0e2", "3b9fe1", "3d9edf", "409cdd", "429bdb", "449ad9", "4798d7", "4997d5", "4b96d3", "4d94d1", "5093cf", "5292cd", "5490cb", "578fc9", "598dc7", "5b8cc6", "5e8bc4", "6089c2", "6288c0", "6487be", "6785bc", "6984ba", "6b83b8", "6e81b6", "7080b4", "727eb2", "757db0", "777cae", "797aac", "7b79ab", "7e78a9", "8076a7", "8275a5", "8574a3", "8772a1", "89719f", "8c709d", "8e6e9b", "906d99", "926b97", "956a95", "976993", "996791", "9c668f", "9e658e", "a0638c", "a3628a", "a56188", "a75f86", "a95e84", "ac5c82", "ae5b80", "b05a7e", "b3587c", "b5577a", "b75678", "ba5476", "bc5374", "be5273", "c05071", "c34f6f", "c54e6d", "c74c6b", "ca4b69", "cc4967", "ce4865", "d14763", "d34561", "d5445f", "d7435d", "da415b", "dc4059", "de3f58", "e13d56", "e33c54", "e53a52", "e83950", "ea384e", "ec364c", "ee354a", "f13448", "f33246", "f53144", "f83042", "fa2e40"]
|
||||
],
|
||||
"white_red": [
|
||||
[231, 255, 223, 216, 209, 202, 196],
|
||||
["ffffff", "fefefe", "fdfdfd", "fdfdfd", "fcfcfc", "fbfbfb", "fafafa", "fafafa", "f9f9f9", "f8f8f8", "f7f7f7", "f7f7f7", "f6f6f6", "f5f5f5", "f4f4f4", "f4f3f4", "f3f3f3", "f2f2f2", "f1f1f1", "f0f0f0", "f0f0f0", "efefef", "eeeeee", "efecea", "f1eae4", "f2e8de", "f3e6d8", "f5e4d3", "f6e2cd", "f7e0c7", "f8dec2", "f9dcbc", "fadab6", "fad8b1", "fbd5ac", "fbd2a9", "fbcea5", "fbcaa1", "fbc79e", "fbc39a", "fbc097", "fbbc93", "fbb88f", "fbb58c", "fab188", "faad85", "faaa81", "fba67e", "fba37a", "fb9f76", "fb9c73", "fb986f", "fb946c", "fb9168", "fa8d65", "fa8961", "fa865c", "fa8256", "fb7f4f", "fb7b48", "fb7841", "fb743a", "fb7133", "fb6d2c", "fa6a23", "fa661a", "fa620e", "fa5f03", "fa5d03", "fa5b03", "fa5a03", "fa5803", "fa5703", "fa5503", "fa5303", "fa5103", "fa4f03", "fa4e03", "fa4c03", "fa4a04", "fa4804", "fa4604", "fa4404", "fa4204", "fa3f04", "fa3d04", "fa3b04", "fa3805", "fa3605", "fa3305", "fb3105", "fb2e05", "fb2a05", "fb2705", "fb2306", "fb1f06", "fb1b06", "fb1506", "fb0e06", "fa0506", "fa0007"]
|
||||
],
|
||||
"dark_green_gray": [
|
||||
[70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247],
|
||||
["51b000", "52b000", "54b000", "55b002", "56b007", "57b00d", "58b011", "59af15", "5aaf18", "5caf1b", "5daf1e", "5eaf21", "5faf23", "60ae25", "61ae27", "62ae2a", "63ae2c", "64ae2e", "65ae30", "66ae31", "67ad33", "68ad35", "69ad37", "69ad38", "6aad3a", "6bad3c", "6cac3d", "6dac3f", "6eac40", "6fac42", "70ac44", "70ac45", "71ab47", "72ab48", "73ab49", "74ab4b", "75ab4c", "75ab4e", "76aa4f", "77aa51", "78aa52", "79aa53", "79aa55", "7aaa56", "7ba957", "7ca959", "7ca95a", "7da95b", "7ea95d", "7fa95e", "7fa85f", "80a861", "81a862", "81a863", "82a865", "83a766", "83a767", "84a768", "85a76a", "85a76b", "86a66c", "87a66d", "87a66f", "88a670", "89a671", "89a672", "8aa574", "8ba575", "8ba576", "8ca577", "8da579", "8da47a", "8ea47b", "8ea47c", "8fa47d", "90a47f", "90a380", "91a381", "91a382", "92a384", "93a385", "93a286", "94a287", "94a288", "95a28a", "95a18b", "96a18c", "97a18d", "97a18e", "98a190", "98a091", "99a092", "99a093", "9aa094", "9aa096", "9b9f97", "9b9f98", "9c9f99", "9c9f9a", "9d9e9c", "9d9e9d"]
|
||||
],
|
||||
"light_green_gray": [
|
||||
[148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 187, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250],
|
||||
["a3d900", "a4d800", "a4d800", "a5d805", "a5d80d", "a6d714", "a6d719", "a6d71d", "a7d621", "a7d625", "a8d628", "a8d62b", "a8d52e", "a9d531", "a9d533", "aad536", "aad438", "aad43a", "abd43d", "abd33f", "abd341", "acd343", "acd345", "acd247", "add249", "add24b", "add14d", "aed14f", "aed151", "aed152", "afd054", "afd056", "afd058", "b0d059", "b0cf5b", "b0cf5d", "b1cf5e", "b1ce60", "b1ce62", "b1ce63", "b2ce65", "b2cd67", "b2cd68", "b3cd6a", "b3cc6b", "b3cc6d", "b3cc6e", "b4cc70", "b4cb71", "b4cb73", "b4cb75", "b5ca76", "b5ca78", "b5ca79", "b5ca7a", "b6c97c", "b6c97d", "b6c97f", "b6c880", "b6c882", "b7c883", "b7c885", "b7c786", "b7c788", "b7c789", "b8c68a", "b8c68c", "b8c68d", "b8c68f", "b8c590", "b9c591", "b9c593", "b9c494", "b9c496", "b9c497", "b9c498", "bac39a", "bac39b", "bac39d", "bac29e", "bac29f", "bac2a1", "bac2a2", "bac1a4", "bbc1a5", "bbc1a6", "bbc0a8", "bbc0a9", "bbc0aa", "bbc0ac", "bbbfad", "bbbfae", "bbbfb0", "bbbeb1", "bcbeb3", "bcbeb4", "bcbdb5", "bcbdb7", "bcbdb8", "bcbdb9", "bcbcbb"]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
{
|
||||
"name": "Default",
|
||||
"groups": {
|
||||
"information:additional": { "fg": "gray9", "bg": "gray4", "attrs": [] },
|
||||
"information:regular": { "fg": "gray10", "bg": "gray4", "attrs": ["bold"] },
|
||||
"information:highlighted": { "fg": "white", "bg": "gray4", "attrs": [] },
|
||||
"information:priority": { "fg": "brightyellow", "bg": "mediumorange", "attrs": [] },
|
||||
"warning:regular": { "fg": "white", "bg": "brightred", "attrs": ["bold"] },
|
||||
"critical:failure": { "fg": "white", "bg": "darkestred", "attrs": [] },
|
||||
"critical:success": { "fg": "white", "bg": "darkestgreen", "attrs": [] },
|
||||
"background": { "fg": "white", "bg": "gray0", "attrs": [] },
|
||||
"background:divider": { "fg": "gray5", "bg": "gray0", "attrs": [] },
|
||||
"session": { "fg": "black", "bg": "gray10", "attrs": ["bold"] },
|
||||
"date": { "fg": "gray8", "bg": "gray2", "attrs": [] },
|
||||
"time": { "fg": "gray10", "bg": "gray2", "attrs": ["bold"] },
|
||||
"time:divider": { "fg": "gray5", "bg": "gray2", "attrs": [] },
|
||||
"email_alert": "warning:regular",
|
||||
"email_alert_gradient": { "fg": "white", "bg": "yellow_orange_red", "attrs": ["bold"] },
|
||||
"hostname": { "fg": "black", "bg": "gray10", "attrs": ["bold"] },
|
||||
"weather": { "fg": "gray8", "bg": "gray0", "attrs": [] },
|
||||
"weather_temp_gradient": { "fg": "blue_red", "bg": "gray0", "attrs": [] },
|
||||
"weather_condition_hot": { "fg": "khaki1", "bg": "gray0", "attrs": [] },
|
||||
"weather_condition_snowy": { "fg": "skyblue1", "bg": "gray0", "attrs": [] },
|
||||
"weather_condition_rainy": { "fg": "skyblue1", "bg": "gray0", "attrs": [] },
|
||||
"uptime": { "fg": "gray8", "bg": "gray0", "attrs": [] },
|
||||
"external_ip": { "fg": "gray8", "bg": "gray0", "attrs": [] },
|
||||
"internal_ip": { "fg": "gray8", "bg": "gray0", "attrs": [] },
|
||||
"network_load": { "fg": "gray8", "bg": "gray0", "attrs": [] },
|
||||
"network_load_gradient": { "fg": "green_yellow_orange_red", "bg": "gray0", "attrs": [] },
|
||||
"network_load_sent_gradient": "network_load_gradient",
|
||||
"network_load_recv_gradient": "network_load_gradient",
|
||||
"network_load:divider": "background:divider",
|
||||
"system_load": { "fg": "gray8", "bg": "gray0", "attrs": [] },
|
||||
"system_load_gradient": { "fg": "green_yellow_orange_red", "bg": "gray0", "attrs": [] },
|
||||
"environment": { "fg": "gray8", "bg": "gray0", "attrs": [] },
|
||||
"cpu_load_percent": { "fg": "gray8", "bg": "gray0", "attrs": [] },
|
||||
"cpu_load_percent_gradient": { "fg": "green_yellow_orange_red", "bg": "gray0", "attrs": [] },
|
||||
"battery": { "fg": "gray8", "bg": "gray0", "attrs": [] },
|
||||
"battery_gradient": { "fg": "white_red", "bg": "gray0", "attrs": [] },
|
||||
"battery_full": { "fg": "red", "bg": "gray0", "attrs": [] },
|
||||
"battery_empty": { "fg": "white", "bg": "gray0", "attrs": [] },
|
||||
"player": { "fg": "gray10", "bg": "black", "attrs": [] },
|
||||
"user": { "fg": "white", "bg": "darkblue", "attrs": ["bold"] },
|
||||
"branch": { "fg": "gray9", "bg": "gray2", "attrs": [] },
|
||||
"branch_dirty": { "fg": "brightyellow", "bg": "gray2", "attrs": [] },
|
||||
"branch_clean": { "fg": "gray9", "bg": "gray2", "attrs": [] },
|
||||
"branch:divider": { "fg": "gray7", "bg": "gray2", "attrs": [] },
|
||||
"stash": "branch_dirty",
|
||||
"stash:divider": "branch:divider",
|
||||
"cwd": "information:additional",
|
||||
"cwd:current_folder": "information:regular",
|
||||
"cwd:divider": { "fg": "gray7", "bg": "gray4", "attrs": [] },
|
||||
"virtualenv": { "fg": "white", "bg": "darkcyan", "attrs": [] },
|
||||
"attached_clients": { "fg": "gray8", "bg": "gray0", "attrs": [] }
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"groups": {
|
||||
"prompt": "information:additional",
|
||||
"prompt_count": "information:highlighted"
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"groups": {
|
||||
"current_code_name": "information:additional",
|
||||
"current_context": "current_code_name",
|
||||
"current_line": "information:regular",
|
||||
"current_file": "information:regular"
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"groups": {
|
||||
"stack_depth": { "fg": "gray1", "bg": "gray10", "attrs": ["bold"] }
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"groups": {
|
||||
"stack_depth": { "fg": "solarized:base03", "bg": "solarized:base2", "attrs": ["bold"] }
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"groups": {
|
||||
"continuation": "cwd",
|
||||
"continuation:current": "cwd:current_folder",
|
||||
"exit_fail": "critical:failure",
|
||||
"exit_success": "critical:success",
|
||||
"jobnum": "information:priority",
|
||||
"superuser": "warning:regular"
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
{
|
||||
"name": "Default color scheme for shell prompts",
|
||||
"groups": {
|
||||
"hostname": { "fg": "brightyellow", "bg": "mediumorange", "attrs": [] },
|
||||
"environment": { "fg": "white", "bg": "darkestgreen", "attrs": [] },
|
||||
"mode": { "fg": "darkestgreen", "bg": "brightgreen", "attrs": ["bold"] },
|
||||
"attached_clients": { "fg": "white", "bg": "darkestgreen", "attrs": [] }
|
||||
},
|
||||
"mode_translations": {
|
||||
"vicmd": {
|
||||
"groups": {
|
||||
"mode": {"fg": "darkestcyan", "bg": "white", "attrs": ["bold"]}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"name": "Solarized dark for shell",
|
||||
"groups": {
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:green", "attrs": ["bold"] }
|
||||
},
|
||||
"mode_translations": {
|
||||
"vicmd": {
|
||||
"groups": {
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:blue", "attrs": ["bold"] }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
"name": "Solarized dark",
|
||||
"groups": {
|
||||
"information:additional": { "fg": "solarized:base2", "bg": "solarized:base01", "attrs": [] },
|
||||
"information:regular": { "fg": "solarized:base3", "bg": "solarized:base01", "attrs": ["bold"] },
|
||||
"information:highlighted": { "fg": "solarized:base3", "bg": "solarized:base01", "attrs": ["bold"]},
|
||||
"information:priority": { "fg": "solarized:base3", "bg": "solarized:yellow", "attrs": [] },
|
||||
"warning:regular": { "fg": "solarized:base3", "bg": "solarized:red", "attrs": [] },
|
||||
"critical:failure": { "fg": "solarized:base3", "bg": "solarized:red", "attrs": [] },
|
||||
"critical:success": { "fg": "solarized:base3", "bg": "solarized:green", "attrs": [] },
|
||||
"background": { "fg": "solarized:base3", "bg": "solarized:base02", "attrs": [] },
|
||||
"background:divider": { "fg": "solarized:base1", "bg": "solarized:base03", "attrs": [] },
|
||||
"user": { "fg": "solarized:base3", "bg": "solarized:blue", "attrs": ["bold"] },
|
||||
"virtualenv": { "fg": "solarized:base3", "bg": "solarized:green", "attrs": [] },
|
||||
"branch": { "fg": "solarized:base1", "bg": "solarized:base02", "attrs": [] },
|
||||
"branch_dirty": { "fg": "solarized:yellow", "bg": "solarized:base02", "attrs": [] },
|
||||
"branch_clean": { "fg": "solarized:base1", "bg": "solarized:base02", "attrs": [] },
|
||||
"stash": "branch_dirty",
|
||||
"email_alert_gradient": { "fg": "solarized:base3", "bg": "yellow_orange_red", "attrs": [] },
|
||||
"email_alert": "warning:regular",
|
||||
"cwd": "information:additional",
|
||||
"cwd:current_folder": "information:regular",
|
||||
"cwd:divider": { "fg": "solarized:base1", "bg": "solarized:base01", "attrs": [] },
|
||||
"network_load": { "fg": "solarized:base1", "bg": "solarized:base03", "attrs": [] },
|
||||
"network_load:divider": "network_load",
|
||||
"network_load_gradient": { "fg": "green_yellow_orange_red", "bg": "solarized:base03", "attrs": [] },
|
||||
"network_load_sent_gradient": "network_load_gradient",
|
||||
"network_load_recv_gradient": "network_load_gradient",
|
||||
"hostname": { "fg": "solarized:base3", "bg": "solarized:base01", "attrs": [] },
|
||||
"environment": { "fg": "solarized:base3", "bg": "solarized:green", "attrs": [] },
|
||||
"attached_clients": { "fg": "solarized:base3", "bg": "solarized:green", "attrs": [] },
|
||||
"date": { "fg": "solarized:base1", "bg": "solarized:base02", "attrs": [] },
|
||||
"time": { "fg": "solarized:base1", "bg": "solarized:base02", "attrs": ["bold"] },
|
||||
"time:divider": { "fg": "solarized:base1", "bg": "solarized:base02", "attrs": [] },
|
||||
"system_load": { "fg": "solarized:base1", "bg": "solarized:base03", "attrs": [] },
|
||||
"weather_temp_gradient": { "fg": "blue_red", "bg": "solarized:base03", "attrs": [] },
|
||||
"weather": { "fg": "solarized:base1", "bg": "solarized:base03", "attrs": [] },
|
||||
"uptime": { "fg": "solarized:base1", "bg": "solarized:base03", "attrs": [] }
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"groups": {
|
||||
"active_window_status": {"fg": "darkblue", "bg": "gray0", "attrs": []},
|
||||
"window_status": {"fg": "gray70", "bg": "gray0", "attrs": []},
|
||||
"activity_status": {"fg": "yellow", "bg": "gray0", "attrs": []},
|
||||
"bell_status": {"fg": "red", "bg": "gray0", "attrs": []},
|
||||
"window": {"fg": "gray6", "bg": "gray0", "attrs": []},
|
||||
"window:divider": {"fg": "gray4", "bg": "gray0", "attrs": []},
|
||||
"window:current": {"fg": "mediumcyan", "bg": "darkblue", "attrs": []},
|
||||
"window_name": {"fg": "white", "bg": "darkblue", "attrs": ["bold"]},
|
||||
"session": {"fg": "black", "bg": "gray90", "attrs": ["bold"]},
|
||||
"session:prefix": {"fg": "gray90", "bg": "darkblue", "attrs": ["bold"]}
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"groups": {
|
||||
"active_window_status": { "fg": "solarized:blue", "bg": "solarized:base02", "attrs": [] },
|
||||
"window_status": { "fg": "solarized:base1", "bg": "solarized:base02", "attrs": [] },
|
||||
"activity_status": { "fg": "solarized:yellow", "bg": "solarized:base02", "attrs": [] },
|
||||
"bell_status": { "fg": "solarized:red", "bg": "solarized:base02", "attrs": [] },
|
||||
"window": { "fg": "solarized:base1", "bg": "solarized:base02", "attrs": [] },
|
||||
"window:divider": { "fg": "solarized:base01", "bg": "solarized:base02", "attrs": [] },
|
||||
"window:current": { "fg": "solarized:base3", "bg": "solarized:base01", "attrs": [] },
|
||||
"window_name": { "fg": "solarized:base3", "bg": "solarized:base01", "attrs": ["bold"] },
|
||||
"session": { "fg": "solarized:base3", "bg": "solarized:base01", "attrs": [] },
|
||||
"session:prefix": { "fg": "solarized:base01", "bg": "solarized:base3", "attrs": [] }
|
||||
}
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
{
|
||||
"groups": {
|
||||
"branch_clean": "branch",
|
||||
"environment": "information:unimportant",
|
||||
"file_size": "information:unimportant",
|
||||
"file_format": "information:unimportant",
|
||||
"file_encoding": "file_format",
|
||||
"file_bom": "file_format",
|
||||
"file_type": "file_format",
|
||||
"branch": "information:additional",
|
||||
"file_scheme": "file_name",
|
||||
"file_directory": "information:additional",
|
||||
"file_name_empty": "file_directory",
|
||||
"line_percent": "information:additional",
|
||||
"line_count": "line_current",
|
||||
"position": "information:additional",
|
||||
"single_tab": "line_current",
|
||||
"many_tabs": "line_current",
|
||||
"bufnr": "file_directory",
|
||||
"winnr": "information:unimportant",
|
||||
"tabnr": "file_directory",
|
||||
"capslock_indicator": "paste_indicator",
|
||||
|
||||
"csv:column_number": "line_current",
|
||||
"csv:column_name": "line_current_symbol",
|
||||
|
||||
"tab:background": "background",
|
||||
"tab:divider": "background:divider",
|
||||
|
||||
"tab_nc:modified_indicator": "modified_indicator",
|
||||
"tab_nc:file_directory": "information:unimportant",
|
||||
"tab_nc:file_name": "tab_nc:file_directory",
|
||||
"tab_nc:tabnr": "tab_nc:file_directory",
|
||||
|
||||
"buf_nc:file_directory": "tab_nc:file_directory",
|
||||
"buf_nc:file_name": "buf_nc:file_directory",
|
||||
"buf_nc:bufnr": "buf_nc:file_directory",
|
||||
"buf_nc:modified_indicator": "tab_nc:modified_indicator",
|
||||
|
||||
"buf_nc_mod:file_directory": "tab_nc:file_directory",
|
||||
"buf_nc_mod:file_name": "buf_nc_mod:file_directory",
|
||||
"buf_nc_mod:bufnr": "buf_nc_mod:file_directory",
|
||||
"buf_nc_mod:modified_indicator": "tab_nc:modified_indicator",
|
||||
|
||||
|
||||
"commandt:label": "file_name",
|
||||
"commandt:background": "background",
|
||||
"commandt:finder": "file_name",
|
||||
"commandt:path": "file_directory"
|
||||
}
|
||||
}
|
||||
@@ -1,154 +0,0 @@
|
||||
{
|
||||
"name": "Default color scheme",
|
||||
"groups": {
|
||||
"information:unimportant": { "fg": "gray8", "bg": "gray2", "attrs": [] },
|
||||
"information:additional": { "fg": "gray9", "bg": "gray4", "attrs": [] },
|
||||
"background": { "fg": "white", "bg": "gray2", "attrs": [] },
|
||||
"background:divider": { "fg": "gray6", "bg": "gray2", "attrs": [] },
|
||||
"mode": { "fg": "darkestgreen", "bg": "brightgreen", "attrs": ["bold"] },
|
||||
"visual_range": { "fg": "brightestorange", "bg": "darkorange", "attrs": ["bold"] },
|
||||
"modified_indicator": { "fg": "brightyellow", "bg": "gray4", "attrs": ["bold"] },
|
||||
"paste_indicator": { "fg": "white", "bg": "mediumorange", "attrs": ["bold"] },
|
||||
"readonly_indicator": { "fg": "brightestred", "bg": "gray4", "attrs": [] },
|
||||
"branch_dirty": { "fg": "brightyellow", "bg": "gray4", "attrs": [] },
|
||||
"branch:divider": { "fg": "gray7", "bg": "gray4", "attrs": [] },
|
||||
"file_name": { "fg": "white", "bg": "gray4", "attrs": ["bold"] },
|
||||
"window_title": { "fg": "white", "bg": "gray4", "attrs": [] },
|
||||
"file_name_no_file": { "fg": "gray9", "bg": "gray4", "attrs": ["bold"] },
|
||||
"file_vcs_status": { "fg": "brightestred", "bg": "gray4", "attrs": [] },
|
||||
"file_vcs_status_M": { "fg": "brightyellow", "bg": "gray4", "attrs": [] },
|
||||
"file_vcs_status_A": { "fg": "brightgreen", "bg": "gray4", "attrs": [] },
|
||||
"line_percent": { "fg": "gray9", "bg": "gray4", "attrs": [] },
|
||||
"line_percent_gradient": { "fg": "dark_green_gray", "bg": "gray4", "attrs": [] },
|
||||
"position": { "fg": "gray9", "bg": "gray4", "attrs": [] },
|
||||
"position_gradient": { "fg": "green_yellow_red", "bg": "gray4", "attrs": [] },
|
||||
"line_current": { "fg": "gray1", "bg": "gray10", "attrs": ["bold"] },
|
||||
"line_current_symbol": { "fg": "gray1", "bg": "gray10", "attrs": [] },
|
||||
"virtcol_current_gradient": { "fg": "dark_GREEN_Orange_red", "bg": "gray10", "attrs": [] },
|
||||
"col_current": { "fg": "gray6", "bg": "gray10", "attrs": [] },
|
||||
"modified_buffers": { "fg": "brightyellow", "bg": "gray2", "attrs": [] },
|
||||
"attached_clients": { "fg": "gray8", "bg": "gray2", "attrs": [] },
|
||||
"error": { "fg": "brightestred", "bg": "darkred", "attrs": ["bold"] },
|
||||
"warning": { "fg": "brightyellow", "bg": "darkorange", "attrs": ["bold"] },
|
||||
"current_tag": { "fg": "gray9", "bg": "gray2", "attrs": [] },
|
||||
|
||||
"tab_nc:modified_indicator": { "fg": "brightyellow", "bg": "gray2", "attrs": ["bold"] }
|
||||
},
|
||||
"mode_translations": {
|
||||
"nc": {
|
||||
"colors": {
|
||||
"brightyellow": "darkorange",
|
||||
"brightestred": "darkred",
|
||||
"gray0": "gray0",
|
||||
"gray1": "gray0",
|
||||
"gray2": "gray0",
|
||||
"gray3": "gray1",
|
||||
"gray4": "gray1",
|
||||
"gray5": "gray1",
|
||||
"gray6": "gray1",
|
||||
"gray7": "gray4",
|
||||
"gray8": "gray4",
|
||||
"gray9": "gray4",
|
||||
"gray10": "gray5",
|
||||
"white": "gray6",
|
||||
"dark_green_gray": "gray5"
|
||||
}
|
||||
},
|
||||
"i": {
|
||||
"colors": {
|
||||
"gray0": "darkestblue",
|
||||
"gray1": "darkestblue",
|
||||
"gray2": "darkestblue",
|
||||
"gray3": "darkblue",
|
||||
"gray4": "darkblue",
|
||||
"gray5": "darkestcyan",
|
||||
"gray6": "darkestcyan",
|
||||
"gray7": "darkestcyan",
|
||||
"gray8": "mediumcyan",
|
||||
"gray9": "mediumcyan",
|
||||
"gray10": "mediumcyan",
|
||||
"green_yellow_red": "gray5",
|
||||
"dark_green_gray": "light_green_gray"
|
||||
},
|
||||
"groups": {
|
||||
"mode": { "fg": "darkestcyan", "bg": "white", "attrs": ["bold"] },
|
||||
"background:divider": { "fg": "darkcyan", "bg": "darkestblue", "attrs": [] },
|
||||
"branch:divider": { "fg": "darkcyan", "bg": "darkblue", "attrs": [] }
|
||||
}
|
||||
},
|
||||
"ic": {
|
||||
"colors": {
|
||||
"gray0": "darkestblue",
|
||||
"gray1": "darkestblue",
|
||||
"gray2": "darkestblue",
|
||||
"gray3": "darkblue",
|
||||
"gray4": "darkblue",
|
||||
"gray5": "darkestcyan",
|
||||
"gray6": "darkestcyan",
|
||||
"gray7": "darkestcyan",
|
||||
"gray8": "mediumcyan",
|
||||
"gray9": "mediumcyan",
|
||||
"gray10": "mediumcyan",
|
||||
"green_yellow_red": "gray5",
|
||||
"dark_green_gray": "light_green_gray"
|
||||
},
|
||||
"groups": {
|
||||
"mode": { "fg": "darkestcyan", "bg": "white", "attrs": ["bold"] },
|
||||
"background:divider": { "fg": "darkcyan", "bg": "darkestblue", "attrs": [] },
|
||||
"branch:divider": { "fg": "darkcyan", "bg": "darkblue", "attrs": [] }
|
||||
}
|
||||
},
|
||||
"ix": {
|
||||
"colors": {
|
||||
"gray0": "darkestblue",
|
||||
"gray1": "darkestblue",
|
||||
"gray2": "darkestblue",
|
||||
"gray3": "darkblue",
|
||||
"gray4": "darkblue",
|
||||
"gray5": "darkestcyan",
|
||||
"gray6": "darkestcyan",
|
||||
"gray7": "darkestcyan",
|
||||
"gray8": "mediumcyan",
|
||||
"gray9": "mediumcyan",
|
||||
"gray10": "mediumcyan",
|
||||
"green_yellow_red": "gray5",
|
||||
"dark_green_gray": "light_green_gray"
|
||||
},
|
||||
"groups": {
|
||||
"mode": { "fg": "darkestcyan", "bg": "white", "attrs": ["bold"] },
|
||||
"background:divider": { "fg": "darkcyan", "bg": "darkestblue", "attrs": [] },
|
||||
"branch:divider": { "fg": "darkcyan", "bg": "darkblue", "attrs": [] }
|
||||
}
|
||||
},
|
||||
"v": {
|
||||
"groups": {
|
||||
"mode": { "fg": "darkorange", "bg": "brightestorange", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"V": {
|
||||
"groups": {
|
||||
"mode": { "fg": "darkorange", "bg": "brightestorange", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"^V": {
|
||||
"groups": {
|
||||
"mode": { "fg": "darkorange", "bg": "brightestorange", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"R": {
|
||||
"groups": {
|
||||
"mode": { "fg": "white", "bg": "brightred", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"Rc": {
|
||||
"groups": {
|
||||
"mode": { "fg": "white", "bg": "brightred", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"Rx": {
|
||||
"groups": {
|
||||
"mode": { "fg": "white", "bg": "brightred", "attrs": ["bold"] }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,121 +0,0 @@
|
||||
{
|
||||
"name": "Solarized dark for vim",
|
||||
"groups": {
|
||||
"information:additional": { "fg": "solarized:base2", "bg": "solarized:base01", "attrs": [] },
|
||||
"information:unimportant": { "fg": "solarized:base3", "bg": "solarized:base01", "attrs": [] },
|
||||
"background": { "fg": "solarized:base3", "bg": "solarized:base02", "attrs": [] },
|
||||
"background:divider": { "fg": "solarized:base00", "bg": "solarized:base02", "attrs": [] },
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:green", "attrs": ["bold"] },
|
||||
"visual_range": { "fg": "solarized:green", "bg": "solarized:base3", "attrs": ["bold"] },
|
||||
"modified_indicator": { "fg": "solarized:yellow", "bg": "solarized:base01", "attrs": ["bold"] },
|
||||
"paste_indicator": { "fg": "solarized:base3", "bg": "solarized:orange", "attrs": ["bold"] },
|
||||
"readonly_indicator": { "fg": "solarized:red", "bg": "solarized:base01", "attrs": [] },
|
||||
"branch_dirty": { "fg": "solarized:yellow", "bg": "solarized:base01", "attrs": [] },
|
||||
"branch:divider": { "fg": "solarized:base1", "bg": "solarized:base01", "attrs": [] },
|
||||
"stash:divider": "branch:divider",
|
||||
"file_name": { "fg": "solarized:base3", "bg": "solarized:base01", "attrs": ["bold"] },
|
||||
"window_title": { "fg": "solarized:base3", "bg": "solarized:base01", "attrs": [] },
|
||||
"file_name_no_file": { "fg": "solarized:base3", "bg": "solarized:base01", "attrs": ["bold"] },
|
||||
"file_format": { "fg": "solarized:base1", "bg": "solarized:base02", "attrs": [] },
|
||||
"file_vcs_status": { "fg": "solarized:red", "bg": "solarized:base01", "attrs": [] },
|
||||
"file_vcs_status_M": { "fg": "solarized:yellow", "bg": "solarized:base01", "attrs": [] },
|
||||
"file_vcs_status_A": { "fg": "solarized:green", "bg": "solarized:base01", "attrs": [] },
|
||||
"line_percent": { "fg": "solarized:base3", "bg": "solarized:base00", "attrs": [] },
|
||||
"line_percent_gradient": { "fg": "green_yellow_orange_red", "bg": "solarized:base00", "attrs": [] },
|
||||
"position": { "fg": "solarized:base3", "bg": "solarized:base00", "attrs": [] },
|
||||
"position_gradient": { "fg": "green_yellow_orange_red", "bg": "solarized:base00", "attrs": [] },
|
||||
"line_current": { "fg": "solarized:base03", "bg": "solarized:base2", "attrs": ["bold"] },
|
||||
"line_current_symbol": { "fg": "solarized:base03", "bg": "solarized:base2", "attrs": [] },
|
||||
"virtcol_current_gradient": { "fg": "GREEN_Orange_red", "bg": "solarized:base2", "attrs": [] },
|
||||
"col_current": { "fg": "solarized:base0", "bg": "solarized:base2", "attrs": [] },
|
||||
"environment": { "fg": "solarized:base1", "bg": "solarized:base02", "attrs": [] },
|
||||
"attached_clients": { "fg": "solarized:base1", "bg": "solarized:base02", "attrs": [] },
|
||||
"error": { "fg": "solarized:base3", "bg": "solarized:red", "attrs": ["bold"] },
|
||||
"warning": { "fg": "solarized:base3", "bg": "solarized:orange", "attrs": ["bold"] },
|
||||
"current_tag": { "fg": "solarized:base3", "bg": "solarized:base02", "attrs": ["bold"] }
|
||||
},
|
||||
"mode_translations": {
|
||||
"nc": {
|
||||
"colors": {
|
||||
"solarized:base01": "solarized:base02",
|
||||
"solarized:base00": "solarized:base02",
|
||||
"solarized:base0": "solarized:base01",
|
||||
"solarized:base1": "solarized:base00",
|
||||
"solarized:base2": "solarized:base0",
|
||||
"solarized:base3": "solarized:base1"
|
||||
}
|
||||
},
|
||||
"i": {
|
||||
"groups": {
|
||||
"background": { "fg": "solarized:base3", "bg": "solarized:base01", "attrs": [] },
|
||||
"background:divider": { "fg": "solarized:base2", "bg": "solarized:base01", "attrs": [] },
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:blue", "attrs": ["bold"] },
|
||||
"modified_indicator": { "fg": "solarized:yellow", "bg": "solarized:base2", "attrs": ["bold"] },
|
||||
"paste_indicator": { "fg": "solarized:base3", "bg": "solarized:orange", "attrs": ["bold"] },
|
||||
"readonly_indicator": { "fg": "solarized:red", "bg": "solarized:base2", "attrs": [] },
|
||||
"branch": { "fg": "solarized:base01", "bg": "solarized:base2", "attrs": [] },
|
||||
"branch:divider": { "fg": "solarized:base00", "bg": "solarized:base2", "attrs": [] },
|
||||
"file_directory": { "fg": "solarized:base01", "bg": "solarized:base2", "attrs": [] },
|
||||
"file_name": { "fg": "solarized:base02", "bg": "solarized:base2", "attrs": ["bold"] },
|
||||
"file_size": { "fg": "solarized:base02", "bg": "solarized:base2", "attrs": [] },
|
||||
"file_name_no_file": { "fg": "solarized:base02", "bg": "solarized:base2", "attrs": ["bold"] },
|
||||
"file_name_empty": { "fg": "solarized:base02", "bg": "solarized:base2", "attrs": [] },
|
||||
"file_format": { "fg": "solarized:base2", "bg": "solarized:base01", "attrs": [] },
|
||||
"file_vcs_status": { "fg": "solarized:red", "bg": "solarized:base2", "attrs": [] },
|
||||
"file_vcs_status_M": { "fg": "solarized:yellow", "bg": "solarized:base2", "attrs": [] },
|
||||
"file_vcs_status_A": { "fg": "solarized:green", "bg": "solarized:base2", "attrs": [] },
|
||||
"line_percent": { "fg": "solarized:base3", "bg": "solarized:base1", "attrs": [] },
|
||||
"line_percent_gradient": { "fg": "solarized:base3", "bg": "solarized:base1", "attrs": [] },
|
||||
"position": { "fg": "solarized:base3", "bg": "solarized:base1", "attrs": [] },
|
||||
"position_gradient": { "fg": "solarized:base3", "bg": "solarized:base1", "attrs": [] },
|
||||
"line_current": { "fg": "solarized:base03", "bg": "solarized:base3", "attrs": ["bold"] },
|
||||
"line_current_symbol": { "fg": "solarized:base03", "bg": "solarized:base3", "attrs": [] },
|
||||
"col_current": { "fg": "solarized:base0", "bg": "solarized:base3", "attrs": [] }
|
||||
}
|
||||
},
|
||||
"ic": {
|
||||
"groups": {
|
||||
"background": { "fg": "solarized:base3", "bg": "solarized:base01", "attrs": [] },
|
||||
"background:divider": { "fg": "solarized:base2", "bg": "solarized:base01", "attrs": [] },
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:blue", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"ix": {
|
||||
"groups": {
|
||||
"background": { "fg": "solarized:base3", "bg": "solarized:base01", "attrs": [] },
|
||||
"background:divider": { "fg": "solarized:base2", "bg": "solarized:base01", "attrs": [] },
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:blue", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"v": {
|
||||
"groups": {
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:orange", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"V": {
|
||||
"groups": {
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:orange", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"^V": {
|
||||
"groups": {
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:orange", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"R": {
|
||||
"groups": {
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:red", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"Rc": {
|
||||
"groups": {
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:red", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"Rx": {
|
||||
"groups": {
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:red", "attrs": ["bold"] }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,122 +0,0 @@
|
||||
{
|
||||
"name": "Solarized light for vim",
|
||||
"groups": {
|
||||
"information:additional": { "fg": "solarized:base02", "bg": "solarized:base2", "attrs": [] },
|
||||
"information:unimportant": { "fg": "solarized:base1", "bg": "solarized:base01", "attrs": [] },
|
||||
"background": { "fg": "solarized:base03", "bg": "solarized:base01", "attrs": [] },
|
||||
"background:divider": { "fg": "solarized:base0", "bg": "solarized:base01", "attrs": [] },
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:green", "attrs": ["bold"] },
|
||||
"visual_range": { "fg": "solarized:green", "bg": "solarized:base3", "attrs": ["bold"] },
|
||||
"modified_indicator": { "fg": "solarized:yellow", "bg": "solarized:base2", "attrs": ["bold"] },
|
||||
"paste_indicator": { "fg": "solarized:red", "bg": "solarized:base2", "attrs": ["bold"] },
|
||||
"readonly_indicator": { "fg": "solarized:red", "bg": "solarized:base2", "attrs": [] },
|
||||
"branch_dirty": { "fg": "solarized:yellow", "bg": "solarized:base2", "attrs": [] },
|
||||
"branch:divider": { "fg": "solarized:base1", "bg": "solarized:base2", "attrs": [] },
|
||||
"stash": "branch_dirty",
|
||||
"stash:divider": "branch:divider",
|
||||
"file_name": { "fg": "solarized:base03", "bg": "solarized:base2", "attrs": ["bold"] },
|
||||
"window_title": { "fg": "solarized:base03", "bg": "solarized:base2", "attrs": [] },
|
||||
"file_size": { "fg": "solarized:base03", "bg": "solarized:base2", "attrs": [] },
|
||||
"file_name_no_file": { "fg": "solarized:base03", "bg": "solarized:base2", "attrs": ["bold"] },
|
||||
"file_name_empty": { "fg": "solarized:base03", "bg": "solarized:base2", "attrs": [] },
|
||||
"file_vcs_status": { "fg": "solarized:red", "bg": "solarized:base2", "attrs": [] },
|
||||
"file_vcs_status_M": { "fg": "solarized:yellow", "bg": "solarized:base2", "attrs": [] },
|
||||
"file_vcs_status_A": { "fg": "solarized:green", "bg": "solarized:base2", "attrs": [] },
|
||||
"line_percent": { "fg": "solarized:base03", "bg": "solarized:base2", "attrs": [] },
|
||||
"line_percent_gradient": { "fg": "green_yellow_orange_red", "bg": "solarized:base2", "attrs": [] },
|
||||
"position": { "fg": "solarized:base03", "bg": "solarized:base2", "attrs": [] },
|
||||
"position_gradient": { "fg": "green_yellow_orange_red", "bg": "solarized:base2", "attrs": [] },
|
||||
"line_current": { "fg": "solarized:base3", "bg": "solarized:base02", "attrs": ["bold"] },
|
||||
"line_current_symbol": { "fg": "solarized:base3", "bg": "solarized:base02", "attrs": [] },
|
||||
"virtcol_current_gradient": { "fg": "yellow_orange_red", "bg": "solarized:base02", "attrs": [] },
|
||||
"col_current": { "fg": "solarized:base00", "bg": "solarized:base02", "attrs": [] },
|
||||
"error": { "fg": "solarized:base03", "bg": "solarized:red", "attrs": ["bold"] },
|
||||
"warning": { "fg": "solarized:base03", "bg": "solarized:base2", "attrs": ["bold"] },
|
||||
"current_tag": { "fg": "solarized:base03", "bg": "solarized:base01", "attrs": ["bold"] }
|
||||
},
|
||||
"mode_translations": {
|
||||
"nc": {
|
||||
"colors": {
|
||||
"solarized:base2": "solarized:base01",
|
||||
"solarized:base0": "solarized:base01",
|
||||
"solarized:base00": "solarized:base2",
|
||||
"solarized:base1": "solarized:base0",
|
||||
"solarized:base02": "solarized:base00",
|
||||
"solarized:base03": "solarized:base1"
|
||||
}
|
||||
},
|
||||
"i": {
|
||||
"groups": {
|
||||
"background": { "fg": "solarized:base03", "bg": "solarized:base2", "attrs": [] },
|
||||
"background:divider": { "fg": "solarized:base02", "bg": "solarized:base2", "attrs": [] },
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:blue", "attrs": ["bold"] },
|
||||
"modified_indicator": { "fg": "solarized:yellow", "bg": "solarized:base02", "attrs": ["bold"] },
|
||||
"paste_indicator": { "fg": "solarized:base3", "bg": "solarized:orange", "attrs": ["bold"] },
|
||||
"readonly_indicator": { "fg": "solarized:red", "bg": "solarized:base02", "attrs": [] },
|
||||
"branch": { "fg": "solarized:base2", "bg": "solarized:base02", "attrs": [] },
|
||||
"branch:divider": { "fg": "solarized:base0", "bg": "solarized:base02", "attrs": [] },
|
||||
"file_directory": { "fg": "solarized:base2", "bg": "solarized:base02", "attrs": [] },
|
||||
"file_name": { "fg": "solarized:base01", "bg": "solarized:base02", "attrs": ["bold"] },
|
||||
"file_size": { "fg": "solarized:base01", "bg": "solarized:base02", "attrs": [] },
|
||||
"file_name_no_file": { "fg": "solarized:base01", "bg": "solarized:base02", "attrs": ["bold"] },
|
||||
"file_name_empty": { "fg": "solarized:base01", "bg": "solarized:base02", "attrs": [] },
|
||||
"file_format": { "fg": "solarized:base02", "bg": "solarized:base2", "attrs": [] },
|
||||
"file_vcs_status": { "fg": "solarized:red", "bg": "solarized:base02", "attrs": [] },
|
||||
"file_vcs_status_M": { "fg": "solarized:yellow", "bg": "solarized:base02", "attrs": [] },
|
||||
"file_vcs_status_A": { "fg": "solarized:green", "bg": "solarized:base02", "attrs": [] },
|
||||
"line_percent": { "fg": "solarized:base03", "bg": "solarized:base1", "attrs": [] },
|
||||
"line_percent_gradient": { "fg": "solarized:base03", "bg": "solarized:base1", "attrs": [] },
|
||||
"position": { "fg": "solarized:base03", "bg": "solarized:base1", "attrs": [] },
|
||||
"position_gradient": { "fg": "solarized:base03", "bg": "solarized:base1", "attrs": [] },
|
||||
"line_current": { "fg": "solarized:base3", "bg": "solarized:base03", "attrs": ["bold"] },
|
||||
"line_current_symbol": { "fg": "solarized:base3", "bg": "solarized:base03", "attrs": [] },
|
||||
"virtcol_current_gradient": { "fg": "yellow_orange_red", "bg": "solarized:base03", "attrs": [] },
|
||||
"col_current": { "fg": "solarized:base00", "bg": "solarized:base03", "attrs": [] }
|
||||
}
|
||||
},
|
||||
"ic": {
|
||||
"groups": {
|
||||
"background": { "fg": "solarized:base03", "bg": "solarized:base2", "attrs": [] },
|
||||
"background:divider": { "fg": "solarized:base02", "bg": "solarized:base2", "attrs": [] },
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:blue", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"ix": {
|
||||
"groups": {
|
||||
"background": { "fg": "solarized:base03", "bg": "solarized:base2", "attrs": [] },
|
||||
"background:divider": { "fg": "solarized:base02", "bg": "solarized:base2", "attrs": [] },
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:blue", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"v": {
|
||||
"groups": {
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:orange", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"V": {
|
||||
"groups": {
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:orange", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"^V": {
|
||||
"groups": {
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:orange", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"R": {
|
||||
"groups": {
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:red", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"Rc": {
|
||||
"groups": {
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:red", "attrs": ["bold"] }
|
||||
}
|
||||
},
|
||||
"Rx": {
|
||||
"groups": {
|
||||
"mode": { "fg": "solarized:base3", "bg": "solarized:red", "attrs": ["bold"] }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
{
|
||||
"common": {
|
||||
"term_truecolor": false
|
||||
},
|
||||
"ext": {
|
||||
"ipython": {
|
||||
"colorscheme": "default",
|
||||
"theme": "in",
|
||||
"local_themes": {
|
||||
"rewrite": "rewrite",
|
||||
"out": "out",
|
||||
"in2": "in2"
|
||||
}
|
||||
},
|
||||
"pdb": {
|
||||
"colorscheme": "default",
|
||||
"theme": "default"
|
||||
},
|
||||
"shell": {
|
||||
"colorscheme": "default",
|
||||
"theme": "default",
|
||||
"local_themes": {
|
||||
"continuation": "continuation",
|
||||
"select": "select"
|
||||
}
|
||||
},
|
||||
"tmux": {
|
||||
"colorscheme": "default",
|
||||
"theme": "default"
|
||||
},
|
||||
"vim": {
|
||||
"colorscheme": "default",
|
||||
"theme": "default",
|
||||
"local_themes": {
|
||||
"__tabline__": "tabline",
|
||||
|
||||
"cmdwin": "cmdwin",
|
||||
"help": "help",
|
||||
"quickfix": "quickfix",
|
||||
|
||||
"powerline.matchers.vim.plugin.nerdtree.nerdtree": "plugin_nerdtree",
|
||||
"powerline.matchers.vim.plugin.commandt.commandt": "plugin_commandt",
|
||||
"powerline.matchers.vim.plugin.gundo.gundo": "plugin_gundo",
|
||||
"powerline.matchers.vim.plugin.gundo.gundo_preview": "plugin_gundo-preview"
|
||||
}
|
||||
},
|
||||
"wm": {
|
||||
"colorscheme": "default",
|
||||
"theme": "default",
|
||||
"update_interval": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,153 +0,0 @@
|
||||
{
|
||||
"use_non_breaking_spaces": false,
|
||||
"dividers": {
|
||||
"left": {
|
||||
"hard": " ",
|
||||
"soft": "| "
|
||||
},
|
||||
"right": {
|
||||
"hard": " ",
|
||||
"soft": " |"
|
||||
}
|
||||
},
|
||||
"spaces": 1,
|
||||
"segment_data": {
|
||||
"branch": {
|
||||
"before": "BR "
|
||||
},
|
||||
"stash": {
|
||||
"before": "ST "
|
||||
},
|
||||
"cwd": {
|
||||
"args": {
|
||||
"ellipsis": "..."
|
||||
}
|
||||
},
|
||||
"player": {
|
||||
"args": {
|
||||
"state_symbols": {
|
||||
"fallback": "",
|
||||
"play": ">",
|
||||
"pause": "~",
|
||||
"stop": "X"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"line_current_symbol": {
|
||||
"contents": "LN "
|
||||
},
|
||||
|
||||
"time": {
|
||||
"before": ""
|
||||
},
|
||||
|
||||
"powerline.segments.common.net.network_load": {
|
||||
"args": {
|
||||
"recv_format": "DL {value:>8}",
|
||||
"sent_format": "UL {value:>8}"
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.net.hostname": {
|
||||
"before": "H "
|
||||
},
|
||||
"powerline.segments.common.bat.battery": {
|
||||
"args": {
|
||||
"full_heart": "O",
|
||||
"empty_heart": "O",
|
||||
"online": "C",
|
||||
"offline": " "
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.sys.uptime": {
|
||||
"before": "UP "
|
||||
},
|
||||
"powerline.segments.common.mail.email_imap_alert": {
|
||||
"before": "MAIL "
|
||||
},
|
||||
"powerline.segments.common.env.virtualenv": {
|
||||
"before": "(e) "
|
||||
},
|
||||
"powerline.segments.common.wthr.weather": {
|
||||
"args": {
|
||||
"icons": {
|
||||
"day": "DAY",
|
||||
"blustery": "WIND",
|
||||
"rainy": "RAIN",
|
||||
"cloudy": "CLOUDS",
|
||||
"snowy": "SNOW",
|
||||
"stormy": "STORM",
|
||||
"foggy": "FOG",
|
||||
"sunny": "SUN",
|
||||
"night": "NIGHT",
|
||||
"windy": "WINDY",
|
||||
"not_available": "NA",
|
||||
"unknown": "UKN"
|
||||
},
|
||||
"temp_format": "{temp:.0f} C"
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.time.fuzzy_time": {
|
||||
"args": {
|
||||
"unicode_text": false
|
||||
}
|
||||
},
|
||||
|
||||
"powerline.segments.vim.mode": {
|
||||
"args": {
|
||||
"override": {
|
||||
"n": "NORMAL",
|
||||
"no": "N-OPER",
|
||||
"v": "VISUAL",
|
||||
"V": "V-LINE",
|
||||
"^V": "V-BLCK",
|
||||
"s": "SELECT",
|
||||
"S": "S-LINE",
|
||||
"^S": "S-BLCK",
|
||||
"i": "INSERT",
|
||||
"ic": "I-COMP",
|
||||
"ix": "I-C_X ",
|
||||
"R": "RPLACE",
|
||||
"Rv": "V-RPLC",
|
||||
"Rc": "R-COMP",
|
||||
"Rx": "R-C_X ",
|
||||
"c": "COMMND",
|
||||
"cv": "VIM-EX",
|
||||
"ce": "NRM-EX",
|
||||
"r": "PROMPT",
|
||||
"rm": "-MORE-",
|
||||
"r?": "CNFIRM",
|
||||
"!": "!SHELL",
|
||||
"t": "TERM "
|
||||
}
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.visual_range": {
|
||||
"args": {
|
||||
"CTRL_V_text": "{rows} x {vcols}",
|
||||
"v_text_oneline": "C:{vcols}",
|
||||
"v_text_multiline": "L:{rows}",
|
||||
"V_text": "L:{rows}"
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.readonly_indicator": {
|
||||
"args": {
|
||||
"text": "RO"
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.modified_indicator": {
|
||||
"args": {
|
||||
"text": "+"
|
||||
}
|
||||
},
|
||||
|
||||
"powerline.segments.i3wm.scratchpad": {
|
||||
"args": {
|
||||
"icons": {
|
||||
"fresh": "O",
|
||||
"changed": "X"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"segments": {
|
||||
"left": [
|
||||
{
|
||||
"function": "powerline.segments.common.env.virtualenv",
|
||||
"priority": 10
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"contents": "In [",
|
||||
"draw_soft_divider": false,
|
||||
"highlight_groups": ["prompt"]
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.ipython.prompt_count",
|
||||
"draw_soft_divider": false
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"contents": "]",
|
||||
"highlight_groups": ["prompt"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"segments": {
|
||||
"left": [
|
||||
{
|
||||
"type": "string",
|
||||
"contents": "",
|
||||
"width": "auto",
|
||||
"highlight_groups": ["prompt"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"default_module": "powerline.segments.ipython",
|
||||
"segments": {
|
||||
"left": [
|
||||
{
|
||||
"type": "string",
|
||||
"contents": "Out[",
|
||||
"draw_soft_divider": false,
|
||||
"width": "auto",
|
||||
"align": "r",
|
||||
"highlight_groups": ["prompt"]
|
||||
},
|
||||
{
|
||||
"function": "prompt_count",
|
||||
"draw_soft_divider": false
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"contents": "]",
|
||||
"highlight_groups": ["prompt"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"default_module": "powerline.segments.ipython",
|
||||
"segments": {
|
||||
"left": [
|
||||
{
|
||||
"type": "string",
|
||||
"contents": "",
|
||||
"draw_soft_divider": false,
|
||||
"width": "auto",
|
||||
"highlight_groups": ["prompt"]
|
||||
},
|
||||
{
|
||||
"function": "prompt_count",
|
||||
"draw_soft_divider": false
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"contents": ">",
|
||||
"highlight_groups": ["prompt"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
{
|
||||
"default_module": "powerline.segments.pdb",
|
||||
"segments": {
|
||||
"left": [
|
||||
{
|
||||
"function": "stack_depth"
|
||||
},
|
||||
{
|
||||
"type": "segment_list",
|
||||
"function": "powerline.listers.pdb.frame_lister",
|
||||
"segments": [
|
||||
{
|
||||
"function": "current_file",
|
||||
"after": ":"
|
||||
},
|
||||
{
|
||||
"function": "current_line",
|
||||
"after": " "
|
||||
},
|
||||
{
|
||||
"function": "current_code_name"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,151 +0,0 @@
|
||||
{
|
||||
"dividers": {
|
||||
"left": {
|
||||
"hard": " ",
|
||||
"soft": " "
|
||||
},
|
||||
"right": {
|
||||
"hard": " ",
|
||||
"soft": " "
|
||||
}
|
||||
},
|
||||
"spaces": 1,
|
||||
"segment_data": {
|
||||
"branch": {
|
||||
"before": " "
|
||||
},
|
||||
"stash": {
|
||||
"before": "⌆ "
|
||||
},
|
||||
"cwd": {
|
||||
"args": {
|
||||
"ellipsis": "⋯"
|
||||
}
|
||||
},
|
||||
|
||||
"line_current_symbol": {
|
||||
"contents": " "
|
||||
},
|
||||
"player": {
|
||||
"args": {
|
||||
"state_symbols": {
|
||||
"fallback": "♫",
|
||||
"play": "▶",
|
||||
"pause": "▮▮",
|
||||
"stop": "■"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"time": {
|
||||
"before": "⌚ "
|
||||
},
|
||||
|
||||
"powerline.segments.common.net.network_load": {
|
||||
"args": {
|
||||
"recv_format": "⬇ {value:>8}",
|
||||
"sent_format": "⬆ {value:>8}"
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.net.hostname": {
|
||||
"before": " "
|
||||
},
|
||||
"powerline.segments.common.bat.battery": {
|
||||
"args": {
|
||||
"full_heart": "♥",
|
||||
"empty_heart": "♥",
|
||||
"online": "⚡︎",
|
||||
"offline": " "
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.sys.uptime": {
|
||||
"before": "⇑ "
|
||||
},
|
||||
"powerline.segments.common.mail.email_imap_alert": {
|
||||
"before": "✉ "
|
||||
},
|
||||
"powerline.segments.common.env.virtualenv": {
|
||||
"before": "ⓔ "
|
||||
},
|
||||
"powerline.segments.common.wthr.weather": {
|
||||
"args": {
|
||||
"icons": {
|
||||
"day": "〇",
|
||||
"blustery": "⚑",
|
||||
"rainy": "☔",
|
||||
"cloudy": "☁",
|
||||
"snowy": "❅",
|
||||
"stormy": "☈",
|
||||
"foggy": "≡",
|
||||
"sunny": "☼",
|
||||
"night": "☾",
|
||||
"windy": "☴",
|
||||
"not_available": "�",
|
||||
"unknown": "⚠"
|
||||
}
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.time.fuzzy_time": {
|
||||
"args": {
|
||||
"unicode_text": true
|
||||
}
|
||||
},
|
||||
|
||||
"powerline.segments.vim.mode": {
|
||||
"args": {
|
||||
"override": {
|
||||
"n": "NORMAL",
|
||||
"no": "N·OPER",
|
||||
"v": "VISUAL",
|
||||
"V": "V·LINE",
|
||||
"^V": "V·BLCK",
|
||||
"s": "SELECT",
|
||||
"S": "S·LINE",
|
||||
"^S": "S·BLCK",
|
||||
"i": "INSERT",
|
||||
"ic": "I·COMP",
|
||||
"ix": "I·C-X ",
|
||||
"R": "RPLACE",
|
||||
"Rv": "V·RPLC",
|
||||
"Rc": "R·COMP",
|
||||
"Rx": "R·C-X ",
|
||||
"c": "COMMND",
|
||||
"cv": "VIM·EX",
|
||||
"ce": "NRM·EX",
|
||||
"r": "PROMPT",
|
||||
"rm": "-MORE-",
|
||||
"r?": "CNFIRM",
|
||||
"!": "!SHELL",
|
||||
"t": "TERM "
|
||||
}
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.visual_range": {
|
||||
"args": {
|
||||
"CTRL_V_text": "↕{rows} ↔{vcols}",
|
||||
"v_text_oneline": "↔{vcols}",
|
||||
"v_text_multiline": "↕{rows}",
|
||||
"V_text": "⇕{rows}"
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.readonly_indicator": {
|
||||
"args": {
|
||||
"text": ""
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.modified_indicator": {
|
||||
"args": {
|
||||
"text": "+"
|
||||
}
|
||||
},
|
||||
|
||||
"powerline.segments.i3wm.scratchpad": {
|
||||
"args": {
|
||||
"icons": {
|
||||
"fresh": "●",
|
||||
"changed": "○"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,151 +0,0 @@
|
||||
{
|
||||
"dividers": {
|
||||
"left": {
|
||||
"hard": " ",
|
||||
"soft": " "
|
||||
},
|
||||
"right": {
|
||||
"hard": " ",
|
||||
"soft": " "
|
||||
}
|
||||
},
|
||||
"spaces": 1,
|
||||
"segment_data": {
|
||||
"branch": {
|
||||
"before": " "
|
||||
},
|
||||
"stash": {
|
||||
"before": "ST "
|
||||
},
|
||||
"cwd": {
|
||||
"args": {
|
||||
"ellipsis": "…"
|
||||
}
|
||||
},
|
||||
|
||||
"line_current_symbol": {
|
||||
"contents": " "
|
||||
},
|
||||
"player": {
|
||||
"args": {
|
||||
"state_symbols": {
|
||||
"fallback": "♫",
|
||||
"play": "▶",
|
||||
"pause": "▮▮",
|
||||
"stop": "■"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"time": {
|
||||
"before": ""
|
||||
},
|
||||
|
||||
"powerline.segments.common.net.network_load": {
|
||||
"args": {
|
||||
"recv_format": "⇓ {value:>8}",
|
||||
"sent_format": "⇑ {value:>8}"
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.net.hostname": {
|
||||
"before": " "
|
||||
},
|
||||
"powerline.segments.common.bat.battery": {
|
||||
"args": {
|
||||
"full_heart": "♥",
|
||||
"empty_heart": "♥",
|
||||
"online": "⚡︎",
|
||||
"offline": " "
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.sys.uptime": {
|
||||
"before": "↑ "
|
||||
},
|
||||
"powerline.segments.common.mail.email_imap_alert": {
|
||||
"before": "MAIL "
|
||||
},
|
||||
"powerline.segments.common.env.virtualenv": {
|
||||
"before": "(e) "
|
||||
},
|
||||
"powerline.segments.common.wthr.weather": {
|
||||
"args": {
|
||||
"icons": {
|
||||
"day": "DAY",
|
||||
"blustery": "WIND",
|
||||
"rainy": "RAIN",
|
||||
"cloudy": "CLOUDS",
|
||||
"snowy": "SNOW",
|
||||
"stormy": "STORM",
|
||||
"foggy": "FOG",
|
||||
"sunny": "SUN",
|
||||
"night": "NIGHT",
|
||||
"windy": "WINDY",
|
||||
"not_available": "NA",
|
||||
"unknown": "UKN"
|
||||
}
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.time.fuzzy_time": {
|
||||
"args": {
|
||||
"unicode_text": true
|
||||
}
|
||||
},
|
||||
|
||||
"powerline.segments.vim.mode": {
|
||||
"args": {
|
||||
"override": {
|
||||
"n": "NORMAL",
|
||||
"no": "N·OPER",
|
||||
"v": "VISUAL",
|
||||
"V": "V·LINE",
|
||||
"^V": "V·BLCK",
|
||||
"s": "SELECT",
|
||||
"S": "S·LINE",
|
||||
"^S": "S·BLCK",
|
||||
"i": "INSERT",
|
||||
"ic": "I·COMP",
|
||||
"ix": "I·C-X ",
|
||||
"R": "RPLACE",
|
||||
"Rv": "V·RPLC",
|
||||
"Rc": "R·COMP",
|
||||
"Rx": "R·C-X ",
|
||||
"c": "COMMND",
|
||||
"cv": "VIM·EX",
|
||||
"ce": "NRM·EX",
|
||||
"r": "PROMPT",
|
||||
"rm": "-MORE-",
|
||||
"r?": "CNFIRM",
|
||||
"!": "!SHELL",
|
||||
"t": "TERM "
|
||||
}
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.visual_range": {
|
||||
"args": {
|
||||
"CTRL_V_text": "↕{rows} ↔{vcols}",
|
||||
"v_text_oneline": "↔{vcols}",
|
||||
"v_text_multiline": "↕{rows}",
|
||||
"V_text": "⇕{rows}"
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.readonly_indicator": {
|
||||
"args": {
|
||||
"text": ""
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.modified_indicator": {
|
||||
"args": {
|
||||
"text": "+"
|
||||
}
|
||||
},
|
||||
|
||||
"powerline.segments.i3wm.scratchpad": {
|
||||
"args": {
|
||||
"icons": {
|
||||
"fresh": "●",
|
||||
"changed": "○"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,165 +0,0 @@
|
||||
{
|
||||
"dividers": {
|
||||
"left": {
|
||||
"hard": " ",
|
||||
"soft": " "
|
||||
},
|
||||
"right": {
|
||||
"hard": " ",
|
||||
"soft": " "
|
||||
}
|
||||
},
|
||||
"spaces": 1,
|
||||
"segment_data": {
|
||||
"branch": {
|
||||
"before": "🔀 "
|
||||
},
|
||||
"stash": {
|
||||
"before": "📝"
|
||||
},
|
||||
"cwd": {
|
||||
"args": {
|
||||
"ellipsis": "⋯"
|
||||
}
|
||||
},
|
||||
|
||||
"line_current_symbol": {
|
||||
"contents": " "
|
||||
},
|
||||
"player": {
|
||||
"args": {
|
||||
"state_symbols": {
|
||||
"fallback": "♫",
|
||||
"play": "⏵",
|
||||
"pause": "⏸",
|
||||
"stop": "⏹"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"time": {
|
||||
"before": "🕐 "
|
||||
},
|
||||
|
||||
"powerline.segments.common.net.network_load": {
|
||||
"args": {
|
||||
"recv_format": "⬇ {value:>8}",
|
||||
"sent_format": "⬆ {value:>8}"
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.net.hostname": {
|
||||
"before": "🏠 "
|
||||
},
|
||||
"powerline.segments.common.bat.battery": {
|
||||
"args": {
|
||||
"full_heart": "💙",
|
||||
"empty_heart": "💛",
|
||||
"online": "⚡️",
|
||||
"offline": " "
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.sys.uptime": {
|
||||
"before": "⇑ "
|
||||
},
|
||||
"powerline.segments.common.mail.email_imap_alert": {
|
||||
"before": "✉ "
|
||||
},
|
||||
"powerline.segments.common.env.virtualenv": {
|
||||
"before": "🐍 "
|
||||
},
|
||||
"powerline.segments.common.wthr.weather": {
|
||||
"args": {
|
||||
"icons": {
|
||||
"tornado": "🌪",
|
||||
"hurricane": "🌀",
|
||||
"showers": "☔",
|
||||
"scattered_showers": "☔",
|
||||
"thunderstorms": "🌩",
|
||||
"isolated_thunderstorms": "🌩",
|
||||
"scattered_thunderstorms": "🌩",
|
||||
"dust": "🌫",
|
||||
"fog": "🌫",
|
||||
"cold": "❄",
|
||||
"partly_cloudy_day": "🌤",
|
||||
"mostly_cloudy_day": "🌥",
|
||||
"sun": "🌣",
|
||||
"hot": "♨",
|
||||
"day": "☀",
|
||||
"blustery": "⚑",
|
||||
"rainy": "☂",
|
||||
"cloudy": "☁",
|
||||
"snowy": "☃",
|
||||
"stormy": "☈",
|
||||
"foggy": "🌁",
|
||||
"sunny": "🌣",
|
||||
"night": "☾",
|
||||
"windy": "☴",
|
||||
"not_available": "�",
|
||||
"unknown": "⚠"
|
||||
}
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.time.fuzzy_time": {
|
||||
"args": {
|
||||
"unicode_text": true
|
||||
}
|
||||
},
|
||||
|
||||
"powerline.segments.vim.mode": {
|
||||
"args": {
|
||||
"override": {
|
||||
"n": "NORMAL",
|
||||
"no": "N·OPER",
|
||||
"v": "VISUAL",
|
||||
"V": "V·LINE",
|
||||
"^V": "V·BLCK",
|
||||
"s": "SELECT",
|
||||
"S": "S·LINE",
|
||||
"^S": "S·BLCK",
|
||||
"i": "INSERT",
|
||||
"ic": "I·COMP",
|
||||
"ix": "I·C-X ",
|
||||
"R": "RPLACE",
|
||||
"Rv": "V·RPLC",
|
||||
"Rc": "R·COMP",
|
||||
"Rx": "R·C-X ",
|
||||
"c": "COMMND",
|
||||
"cv": "VIM·EX",
|
||||
"ce": "NRM·EX",
|
||||
"r": "PROMPT",
|
||||
"rm": "-MORE-",
|
||||
"r?": "CNFIRM",
|
||||
"!": "!SHELL",
|
||||
"t": "TERM "
|
||||
}
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.visual_range": {
|
||||
"args": {
|
||||
"CTRL_V_text": "↕{rows} ↔{vcols}",
|
||||
"v_text_oneline": "↔{vcols}",
|
||||
"v_text_multiline": "↕{rows}",
|
||||
"V_text": "⇕{rows}"
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.readonly_indicator": {
|
||||
"args": {
|
||||
"text": "🔏"
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.modified_indicator": {
|
||||
"args": {
|
||||
"text": "🖫⃥"
|
||||
}
|
||||
},
|
||||
|
||||
"powerline.segments.i3wm.scratchpad": {
|
||||
"args": {
|
||||
"icons": {
|
||||
"fresh": "●",
|
||||
"changed": "○"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"segment_data": {
|
||||
"hostname": {
|
||||
"args": {
|
||||
"only_if_ssh": true
|
||||
}
|
||||
},
|
||||
"cwd": {
|
||||
"args": {
|
||||
"dir_limit_depth": 3
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"default_module": "powerline.segments.shell",
|
||||
"segments": {
|
||||
"left": [
|
||||
{
|
||||
"function": "continuation"
|
||||
}
|
||||
],
|
||||
"right": [
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
{
|
||||
"segments": {
|
||||
"left": [
|
||||
{
|
||||
"function": "powerline.segments.shell.mode"
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.common.net.hostname",
|
||||
"priority": 10
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.common.env.user",
|
||||
"priority": 30
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.common.env.virtualenv",
|
||||
"priority": 50
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.shell.cwd",
|
||||
"priority": 10
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.shell.jobnum",
|
||||
"priority": 20
|
||||
}
|
||||
],
|
||||
"right": [
|
||||
{
|
||||
"function": "powerline.segments.shell.last_pipe_status",
|
||||
"priority": 10
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.common.vcs.stash",
|
||||
"priority": 50
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.common.vcs.branch",
|
||||
"priority": 40
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
{
|
||||
"segments": {
|
||||
"left": [
|
||||
{
|
||||
"function": "powerline.segments.common.net.hostname",
|
||||
"priority": 10
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.common.env.user",
|
||||
"priority": 30
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.common.env.virtualenv",
|
||||
"priority": 50
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.common.vcs.branch",
|
||||
"priority": 40
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.shell.cwd",
|
||||
"priority": 10
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.shell.jobnum",
|
||||
"priority": 20
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.shell.last_pipe_status",
|
||||
"priority": 10
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"segments": {
|
||||
"left": [
|
||||
{
|
||||
"type": "string",
|
||||
"contents": "Select variant",
|
||||
"width": "auto",
|
||||
"align": "r",
|
||||
"highlight_groups": ["continuation:current"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
{
|
||||
"segments": {
|
||||
"right": [
|
||||
{
|
||||
"function": "powerline.segments.common.sys.uptime",
|
||||
"priority": 50
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.common.sys.system_load",
|
||||
"priority": 50
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.common.time.date",
|
||||
"name": "date",
|
||||
"args": {
|
||||
"format": "%d.%m.%Y"
|
||||
}
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.common.bat.battery",
|
||||
"name": "battery"
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.common.time.date",
|
||||
"name": "time",
|
||||
"args": {
|
||||
"format": "%H:%M",
|
||||
"istime": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.common.net.hostname"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,151 +0,0 @@
|
||||
{
|
||||
"dividers": {
|
||||
"left": {
|
||||
"hard": "▌ ",
|
||||
"soft": "│ "
|
||||
},
|
||||
"right": {
|
||||
"hard": " ▐",
|
||||
"soft": " │"
|
||||
}
|
||||
},
|
||||
"spaces": 1,
|
||||
"segment_data": {
|
||||
"branch": {
|
||||
"before": "⎇ "
|
||||
},
|
||||
"stash": {
|
||||
"before": "⌆"
|
||||
},
|
||||
"cwd": {
|
||||
"args": {
|
||||
"ellipsis": "⋯"
|
||||
}
|
||||
},
|
||||
"player": {
|
||||
"args": {
|
||||
"state_symbols": {
|
||||
"fallback": "♫",
|
||||
"play": "▶",
|
||||
"pause": "▮▮",
|
||||
"stop": "■"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"line_current_symbol": {
|
||||
"contents": " "
|
||||
},
|
||||
|
||||
"time": {
|
||||
"before": "⌚ "
|
||||
},
|
||||
|
||||
"powerline.segments.common.net.network_load": {
|
||||
"args": {
|
||||
"recv_format": "⬇ {value:>8}",
|
||||
"sent_format": "⬆ {value:>8}"
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.net.hostname": {
|
||||
"before": "⌂ "
|
||||
},
|
||||
"powerline.segments.common.bat.battery": {
|
||||
"args": {
|
||||
"full_heart": "♥",
|
||||
"empty_heart": "♥",
|
||||
"online": "⚡︎",
|
||||
"offline": " "
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.sys.uptime": {
|
||||
"before": "⇑ "
|
||||
},
|
||||
"powerline.segments.common.mail.email_imap_alert": {
|
||||
"before": "✉ "
|
||||
},
|
||||
"powerline.segments.common.env.virtualenv": {
|
||||
"before": "ⓔ "
|
||||
},
|
||||
"powerline.segments.common.wthr.weather": {
|
||||
"args": {
|
||||
"icons": {
|
||||
"day": "〇",
|
||||
"blustery": "⚑",
|
||||
"rainy": "☔",
|
||||
"cloudy": "☁",
|
||||
"snowy": "❅",
|
||||
"stormy": "☈",
|
||||
"foggy": "≡",
|
||||
"sunny": "☼",
|
||||
"night": "☾",
|
||||
"windy": "☴",
|
||||
"not_available": "�",
|
||||
"unknown": "⚠"
|
||||
}
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.time.fuzzy_time": {
|
||||
"args": {
|
||||
"unicode_text": true
|
||||
}
|
||||
},
|
||||
|
||||
"powerline.segments.vim.mode": {
|
||||
"args": {
|
||||
"override": {
|
||||
"n": "NORMAL",
|
||||
"no": "N·OPER",
|
||||
"v": "VISUAL",
|
||||
"V": "V·LINE",
|
||||
"^V": "V·BLCK",
|
||||
"s": "SELECT",
|
||||
"S": "S·LINE",
|
||||
"^S": "S·BLCK",
|
||||
"i": "INSERT",
|
||||
"ic": "I·COMP",
|
||||
"ix": "I·C-X ",
|
||||
"R": "RPLACE",
|
||||
"Rv": "V·RPLC",
|
||||
"Rc": "R·COMP",
|
||||
"Rx": "R·C-X ",
|
||||
"c": "COMMND",
|
||||
"cv": "VIM·EX",
|
||||
"ce": "NRM·EX",
|
||||
"r": "PROMPT",
|
||||
"rm": "-MORE-",
|
||||
"r?": "CNFIRM",
|
||||
"!": "!SHELL",
|
||||
"t": "TERM "
|
||||
}
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.visual_range": {
|
||||
"args": {
|
||||
"CTRL_V_text": "↕{rows} ↔{vcols}",
|
||||
"v_text_oneline": "↔{vcols}",
|
||||
"v_text_multiline": "↕{rows}",
|
||||
"V_text": "⇕{rows}"
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.readonly_indicator": {
|
||||
"args": {
|
||||
"text": "⊗"
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.modified_indicator": {
|
||||
"args": {
|
||||
"text": "+"
|
||||
}
|
||||
},
|
||||
|
||||
"powerline.segments.i3wm.scratchpad": {
|
||||
"args": {
|
||||
"icons": {
|
||||
"fresh": "●",
|
||||
"changed": "○"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,151 +0,0 @@
|
||||
{
|
||||
"dividers": {
|
||||
"left": {
|
||||
"hard": "▌ ",
|
||||
"soft": "│ "
|
||||
},
|
||||
"right": {
|
||||
"hard": " ▐",
|
||||
"soft": " │"
|
||||
}
|
||||
},
|
||||
"spaces": 1,
|
||||
"segment_data": {
|
||||
"branch": {
|
||||
"before": "BR "
|
||||
},
|
||||
"stash": {
|
||||
"before": "ST "
|
||||
},
|
||||
"cwd": {
|
||||
"args": {
|
||||
"ellipsis": "…"
|
||||
}
|
||||
},
|
||||
|
||||
"line_current_symbol": {
|
||||
"contents": " "
|
||||
},
|
||||
"player": {
|
||||
"args": {
|
||||
"state_symbols": {
|
||||
"fallback": "♫",
|
||||
"play": "▶",
|
||||
"pause": "▮▮",
|
||||
"stop": "■"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"time": {
|
||||
"before": ""
|
||||
},
|
||||
|
||||
"powerline.segments.common.net.network_load": {
|
||||
"args": {
|
||||
"recv_format": "⇓ {value:>8}",
|
||||
"sent_format": "⇑ {value:>8}"
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.net.hostname": {
|
||||
"before": "⌂ "
|
||||
},
|
||||
"powerline.segments.common.bat.battery": {
|
||||
"args": {
|
||||
"full_heart": "♥",
|
||||
"empty_heart": "♥",
|
||||
"online": "⚡︎",
|
||||
"offline": " "
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.sys.uptime": {
|
||||
"before": "↑ "
|
||||
},
|
||||
"powerline.segments.common.mail.email_imap_alert": {
|
||||
"before": "MAIL "
|
||||
},
|
||||
"powerline.segments.common.env.virtualenv": {
|
||||
"before": "(e) "
|
||||
},
|
||||
"powerline.segments.common.wthr.weather": {
|
||||
"args": {
|
||||
"icons": {
|
||||
"day": "DAY",
|
||||
"blustery": "WIND",
|
||||
"rainy": "RAIN",
|
||||
"cloudy": "CLOUDS",
|
||||
"snowy": "SNOW",
|
||||
"stormy": "STORM",
|
||||
"foggy": "FOG",
|
||||
"sunny": "SUN",
|
||||
"night": "NIGHT",
|
||||
"windy": "WINDY",
|
||||
"not_available": "NA",
|
||||
"unknown": "UKN"
|
||||
}
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.time.fuzzy_time": {
|
||||
"args": {
|
||||
"unicode_text": true
|
||||
}
|
||||
},
|
||||
|
||||
"powerline.segments.vim.mode": {
|
||||
"args": {
|
||||
"override": {
|
||||
"n": "NORMAL",
|
||||
"no": "N·OPER",
|
||||
"v": "VISUAL",
|
||||
"V": "V·LINE",
|
||||
"^V": "V·BLCK",
|
||||
"s": "SELECT",
|
||||
"S": "S·LINE",
|
||||
"^S": "S·BLCK",
|
||||
"i": "INSERT",
|
||||
"ic": "I·COMP",
|
||||
"ix": "I·C-X ",
|
||||
"R": "RPLACE",
|
||||
"Rv": "V·RPLC",
|
||||
"Rc": "R·COMP",
|
||||
"Rx": "R·C-X ",
|
||||
"c": "COMMND",
|
||||
"cv": "VIM·EX",
|
||||
"ce": "NRM·EX",
|
||||
"r": "PROMPT",
|
||||
"rm": "-MORE-",
|
||||
"r?": "CNFIRM",
|
||||
"!": "!SHELL",
|
||||
"t": "TERM "
|
||||
}
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.visual_range": {
|
||||
"args": {
|
||||
"CTRL_V_text": "{rows} × {vcols}",
|
||||
"v_text_oneline": "C:{vcols}",
|
||||
"v_text_multiline": "L:{rows}",
|
||||
"V_text": "L:{rows}"
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.readonly_indicator": {
|
||||
"args": {
|
||||
"text": "RO"
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.modified_indicator": {
|
||||
"args": {
|
||||
"text": "+"
|
||||
}
|
||||
},
|
||||
|
||||
"powerline.segments.i3wm.scratchpad": {
|
||||
"args": {
|
||||
"icons": {
|
||||
"fresh": "●",
|
||||
"changed": "○"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,151 +0,0 @@
|
||||
{
|
||||
"dividers": {
|
||||
"left": {
|
||||
"hard": "▌",
|
||||
"soft": "│"
|
||||
},
|
||||
"right": {
|
||||
"hard": "▐",
|
||||
"soft": "│"
|
||||
}
|
||||
},
|
||||
"spaces": 0,
|
||||
"segment_data": {
|
||||
"branch": {
|
||||
"before": "B "
|
||||
},
|
||||
"stash": {
|
||||
"before": "S "
|
||||
},
|
||||
"cwd": {
|
||||
"args": {
|
||||
"use_path_separator": true,
|
||||
"ellipsis": "…"
|
||||
}
|
||||
},
|
||||
|
||||
"line_current_symbol": {
|
||||
"contents": ""
|
||||
},
|
||||
"player": {
|
||||
"args": {
|
||||
"state_symbols": {
|
||||
"fallback": "♫",
|
||||
"play": "▶",
|
||||
"pause": "▮▮",
|
||||
"stop": "■"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"time": {
|
||||
"before": ""
|
||||
},
|
||||
|
||||
"powerline.segments.common.net.network_load": {
|
||||
"args": {
|
||||
"recv_format": "⇓{value:>8}",
|
||||
"sent_format": "⇑{value:>8}"
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.net.hostname": {
|
||||
"before": "⌂"
|
||||
},
|
||||
"powerline.segments.common.bat.battery": {
|
||||
"args": {
|
||||
"full_heart": "♥",
|
||||
"empty_heart": "♥",
|
||||
"online": "⚡︎",
|
||||
"offline": " "
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.sys.uptime": {
|
||||
"before": "↑"
|
||||
},
|
||||
"powerline.segments.common.mail.email_imap_alert": {
|
||||
"before": "M "
|
||||
},
|
||||
"powerline.segments.common.env.virtualenv": {
|
||||
"before": "E "
|
||||
},
|
||||
"powerline.segments.common.wthr.weather": {
|
||||
"args": {
|
||||
"icons": {
|
||||
"day": "D",
|
||||
"blustery": "W",
|
||||
"rainy": "R",
|
||||
"cloudy": "c",
|
||||
"snowy": "*",
|
||||
"stormy": "S",
|
||||
"foggy": "f",
|
||||
"sunny": "s",
|
||||
"night": "N",
|
||||
"windy": "w",
|
||||
"not_available": "-",
|
||||
"unknown": "!"
|
||||
}
|
||||
}
|
||||
},
|
||||
"powerline.segments.common.time.fuzzy_time": {
|
||||
"args": {
|
||||
"unicode_text": true
|
||||
}
|
||||
},
|
||||
|
||||
"powerline.segments.vim.mode": {
|
||||
"args": {
|
||||
"override": {
|
||||
"n": "NML",
|
||||
"no": "NOP",
|
||||
"v": "VIS",
|
||||
"V": "VLN",
|
||||
"^V": "VBL",
|
||||
"s": "SEL",
|
||||
"S": "SLN",
|
||||
"^S": "SBL",
|
||||
"i": "INS",
|
||||
"ic": "I-C",
|
||||
"ix": "I^X",
|
||||
"R": "REP",
|
||||
"Rv": "VRP",
|
||||
"Rc": "R-C",
|
||||
"Rx": "R^X",
|
||||
"c": "CMD",
|
||||
"cv": "VEX",
|
||||
"ce": " EX",
|
||||
"r": "PRT",
|
||||
"rm": "MOR",
|
||||
"r?": "CON",
|
||||
"!": " SH"
|
||||
}
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.visual_range": {
|
||||
"args": {
|
||||
"CTRL_V_text": "{rows}×{vcols}",
|
||||
"v_text_oneline": "↔{vcols}",
|
||||
"v_text_multiline": "↕{rows}",
|
||||
"V_text": "⇕{rows}"
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.readonly_indicator": {
|
||||
"args": {
|
||||
"text": "RO"
|
||||
}
|
||||
},
|
||||
"powerline.segments.vim.modified_indicator": {
|
||||
"args": {
|
||||
"text": "+"
|
||||
}
|
||||
},
|
||||
|
||||
"powerline.segments.i3wm.scratchpad": {
|
||||
"args": {
|
||||
"icons": {
|
||||
"fresh": "●",
|
||||
"changed": "○"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"segment_data": {
|
||||
"line_percent": {
|
||||
"args": {
|
||||
"gradient": true
|
||||
},
|
||||
"after": "%"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"segments": {
|
||||
"left": [
|
||||
{
|
||||
"type": "string",
|
||||
"contents": "Command Line",
|
||||
"highlight_groups": ["file_name"]
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"highlight_groups": ["background"],
|
||||
"draw_soft_divider": false,
|
||||
"draw_hard_divider": false,
|
||||
"width": "auto"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,128 +0,0 @@
|
||||
{
|
||||
"segments": {
|
||||
"left": [
|
||||
{
|
||||
"function": "mode",
|
||||
"exclude_modes": ["nc"]
|
||||
},
|
||||
{
|
||||
"function": "visual_range",
|
||||
"include_modes": ["v", "V", "^V", "s", "S", "^S"],
|
||||
"priority": 10
|
||||
},
|
||||
{
|
||||
"function": "paste_indicator",
|
||||
"exclude_modes": ["nc"],
|
||||
"priority": 10
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.vim.plugin.capslock.capslock_indicator",
|
||||
"include_modes": ["i", "R", "Rv"],
|
||||
"priority": 10
|
||||
},
|
||||
{
|
||||
"function": "branch",
|
||||
"exclude_modes": ["nc"],
|
||||
"priority": 30
|
||||
},
|
||||
{
|
||||
"function": "readonly_indicator",
|
||||
"draw_soft_divider": false,
|
||||
"after": " "
|
||||
},
|
||||
{
|
||||
"function": "file_scheme",
|
||||
"priority": 20
|
||||
},
|
||||
{
|
||||
"function": "file_directory",
|
||||
"priority": 40,
|
||||
"draw_soft_divider": false
|
||||
},
|
||||
{
|
||||
"function": "file_name",
|
||||
"draw_soft_divider": false
|
||||
},
|
||||
{
|
||||
"function": "file_vcs_status",
|
||||
"before": " ",
|
||||
"draw_soft_divider": false
|
||||
},
|
||||
{
|
||||
"function": "modified_indicator",
|
||||
"before": " "
|
||||
},
|
||||
{
|
||||
"exclude_modes": ["i", "R", "Rv"],
|
||||
"function": "trailing_whitespace",
|
||||
"display": false,
|
||||
"priority": 60
|
||||
},
|
||||
{
|
||||
"exclude_modes": ["nc"],
|
||||
"function": "powerline.segments.vim.plugin.syntastic.syntastic",
|
||||
"priority": 50
|
||||
},
|
||||
{
|
||||
"exclude_modes": ["nc"],
|
||||
"function": "powerline.segments.vim.plugin.tagbar.current_tag",
|
||||
"draw_soft_divider": false,
|
||||
"priority": 50
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"highlight_groups": ["background"],
|
||||
"draw_soft_divider": false,
|
||||
"draw_hard_divider": false,
|
||||
"width": "auto"
|
||||
}
|
||||
],
|
||||
"right": [
|
||||
{
|
||||
"function": "file_format",
|
||||
"draw_soft_divider": false,
|
||||
"exclude_modes": ["nc"],
|
||||
"priority": 60
|
||||
},
|
||||
{
|
||||
"function": "file_encoding",
|
||||
"exclude_modes": ["nc"],
|
||||
"priority": 60
|
||||
},
|
||||
{
|
||||
"function": "file_type",
|
||||
"exclude_modes": ["nc"],
|
||||
"priority": 60
|
||||
},
|
||||
{
|
||||
"function": "line_percent",
|
||||
"priority": 50,
|
||||
"width": 4,
|
||||
"align": "r"
|
||||
},
|
||||
{
|
||||
"function": "csv_col_current",
|
||||
"priority": 30
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"name": "line_current_symbol",
|
||||
"highlight_groups": ["line_current_symbol", "line_current"]
|
||||
},
|
||||
{
|
||||
"function": "line_current",
|
||||
"draw_soft_divider": false,
|
||||
"width": 3,
|
||||
"align": "r"
|
||||
},
|
||||
{
|
||||
"function": "virtcol_current",
|
||||
"draw_soft_divider": false,
|
||||
"priority": 20,
|
||||
"before": ":",
|
||||
"width": 3,
|
||||
"align": "l"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
{
|
||||
"segments": {
|
||||
"left": [
|
||||
{
|
||||
"function": "file_name",
|
||||
"draw_soft_divider": false
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"highlight_groups": ["background"],
|
||||
"draw_soft_divider": false,
|
||||
"draw_hard_divider": false,
|
||||
"width": "auto"
|
||||
}
|
||||
],
|
||||
"right": [
|
||||
{
|
||||
"function": "line_percent",
|
||||
"priority": 30,
|
||||
"width": 4,
|
||||
"align": "r"
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"name": "line_current_symbol",
|
||||
"highlight_groups": ["line_current_symbol", "line_current"]
|
||||
},
|
||||
{
|
||||
"function": "line_current",
|
||||
"draw_soft_divider": false,
|
||||
"width": 3,
|
||||
"align": "r"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
{
|
||||
"segments": {
|
||||
"left": [
|
||||
{
|
||||
"type": "string",
|
||||
"contents": "Command-T",
|
||||
"highlight_groups": ["commandt:label"]
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.vim.plugin.commandt.finder"
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.vim.plugin.commandt.path"
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"highlight_groups": ["commandt:background"],
|
||||
"draw_soft_divider": false,
|
||||
"draw_hard_divider": false,
|
||||
"width": "auto"
|
||||
}
|
||||
],
|
||||
"right": [
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"segments": {
|
||||
"left": [
|
||||
{
|
||||
"type": "string",
|
||||
"highlight_groups": ["gundo:name", "file_name"],
|
||||
"contents": "Undo diff"
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"highlight_groups": ["gundo:background", "background"],
|
||||
"draw_soft_divider": false,
|
||||
"draw_hard_divider": false,
|
||||
"width": "auto"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"segments": {
|
||||
"left": [
|
||||
{
|
||||
"type": "string",
|
||||
"highlight_groups": ["gundo:name", "file_name"],
|
||||
"contents": "Undo tree"
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"highlight_groups": ["gundo:background", "background"],
|
||||
"draw_soft_divider": false,
|
||||
"draw_hard_divider": false,
|
||||
"width": "auto"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"default_module": "powerline.segments.vim.plugin.nerdtree",
|
||||
"segments": {
|
||||
"left": [
|
||||
{
|
||||
"function": "nerdtree"
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"highlight_groups": ["background"],
|
||||
"draw_soft_divider": false,
|
||||
"draw_hard_divider": false,
|
||||
"width": "auto"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
"segment_data": {
|
||||
"buffer_name": {
|
||||
"contents": "Location List"
|
||||
}
|
||||
},
|
||||
"segments": {
|
||||
"left": [
|
||||
{
|
||||
"type": "string",
|
||||
"name": "buffer_name",
|
||||
"highlight_groups": ["file_name"]
|
||||
},
|
||||
{
|
||||
"function": "window_title",
|
||||
"draw_soft_divider": false
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"highlight_groups": ["background"],
|
||||
"draw_soft_divider": false,
|
||||
"draw_hard_divider": false,
|
||||
"width": "auto"
|
||||
}
|
||||
],
|
||||
"right": [
|
||||
{
|
||||
"type": "string",
|
||||
"name": "line_current_symbol",
|
||||
"highlight_groups": ["line_current_symbol", "line_current"]
|
||||
},
|
||||
{
|
||||
"function": "line_current",
|
||||
"draw_soft_divider": false,
|
||||
"width": 3,
|
||||
"align": "r"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,93 +0,0 @@
|
||||
{
|
||||
"default_module": "powerline.segments.vim",
|
||||
"segments": {
|
||||
"left": [
|
||||
{
|
||||
"type": "segment_list",
|
||||
"function": "powerline.listers.vim.tablister",
|
||||
"exclude_function": "single_tab",
|
||||
"segments": [
|
||||
{
|
||||
"function": "tab"
|
||||
},
|
||||
{
|
||||
"function": "tabnr",
|
||||
"after": " ",
|
||||
"priority": 5
|
||||
},
|
||||
{
|
||||
"function": "file_directory",
|
||||
"priority": 40
|
||||
},
|
||||
{
|
||||
"function": "file_name",
|
||||
"args": {
|
||||
"display_no_file": true
|
||||
},
|
||||
"priority": 10
|
||||
},
|
||||
{
|
||||
"function": "tab_modified_indicator",
|
||||
"priority": 5
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"function": "tab",
|
||||
"args": {
|
||||
"end": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "segment_list",
|
||||
"function": "powerline.listers.vim.bufferlister",
|
||||
"include_function": "single_tab",
|
||||
"segments": [
|
||||
{
|
||||
"function": "bufnr",
|
||||
"after": " ",
|
||||
"priority": 5
|
||||
},
|
||||
{
|
||||
"function": "file_directory",
|
||||
"priority": 40
|
||||
},
|
||||
{
|
||||
"function": "file_name",
|
||||
"args": {
|
||||
"display_no_file": true
|
||||
},
|
||||
"priority": 10
|
||||
},
|
||||
{
|
||||
"function": "modified_indicator",
|
||||
"priority": 5
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"highlight_groups": ["tab:background"],
|
||||
"draw_soft_divider": false,
|
||||
"draw_hard_divider": false,
|
||||
"width": "auto"
|
||||
}
|
||||
],
|
||||
"right": [
|
||||
{
|
||||
"type": "string",
|
||||
"contents": "Bufs",
|
||||
"name": "single_tab",
|
||||
"highlight_groups": ["single_tab"],
|
||||
"include_function": "single_tab"
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"contents": "Tabs",
|
||||
"name": "many_tabs",
|
||||
"highlight_groups": ["many_tabs"],
|
||||
"exclude_function": "single_tab"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
{
|
||||
"segments": {
|
||||
"right": [
|
||||
{
|
||||
"function": "powerline.segments.common.wthr.weather",
|
||||
"priority": 50
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.common.time.date"
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.common.time.date",
|
||||
"name": "time",
|
||||
"args": {
|
||||
"format": "%H:%M",
|
||||
"istime": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"function": "powerline.segments.common.mail.email_imap_alert",
|
||||
"priority": 10,
|
||||
"args": {
|
||||
"username": "",
|
||||
"password": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -252,14 +252,6 @@ mime ^ranger/x-terminal-emulator, has konsole = konsole -e "$@"
|
||||
mime ^ranger/x-terminal-emulator, has gnome-terminal = gnome-terminal -- "$@"
|
||||
mime ^ranger/x-terminal-emulator, has xterm = xterm -e "$@"
|
||||
|
||||
#-------------------------------------------
|
||||
# Misc
|
||||
#-------------------------------------------
|
||||
label wallpaper, number 11, mime ^image, has feh, X = feh --bg-scale "$1"
|
||||
label wallpaper, number 12, mime ^image, has feh, X = feh --bg-tile "$1"
|
||||
label wallpaper, number 13, mime ^image, has feh, X = feh --bg-center "$1"
|
||||
label wallpaper, number 14, mime ^image, has feh, X = feh --bg-fill "$1"
|
||||
|
||||
#-------------------------------------------
|
||||
# Generic file openers
|
||||
#-------------------------------------------
|
||||
|
||||
@@ -1,187 +0,0 @@
|
||||
{
|
||||
"command": "waybar",
|
||||
"layer": "top",
|
||||
"position": "bottom",
|
||||
"ipc": true,
|
||||
"modules-left": [
|
||||
"tray",
|
||||
// "custom/cpu_linux",
|
||||
"cpu",
|
||||
"temperature",
|
||||
"memory",
|
||||
"disk",
|
||||
"custom/nvidia"
|
||||
],
|
||||
"modules-center": [
|
||||
"sway/window"
|
||||
],
|
||||
"modules-right": [
|
||||
"group/blight",
|
||||
"custom/colorpicker",
|
||||
"idle_inhibitor",
|
||||
"bluetooth",
|
||||
"group/audio",
|
||||
"group/networking",
|
||||
"battery",
|
||||
"clock"
|
||||
],
|
||||
"spacing": 15,
|
||||
"reload_style_on_change": true,
|
||||
|
||||
"clock": {
|
||||
"format": "{:%a %d.%m.%y | Week: %U | %T}",
|
||||
"interval": 1,
|
||||
"tooltip-format": "\n<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
|
||||
"calendar-weeks-pos": "right",
|
||||
"today-format": "<span color='#ff8800'><b><u>{}</u></b></span>",
|
||||
"format-calendar": "<span color='#f4c7a1'><b>{}</b></span>",
|
||||
"format-calendar-weeks": "<span color='#f4c7a1'><b>W{:%V}</b></span>",
|
||||
"format-calendar-weekdays": "<span color='#f4c7a1'><b>{}</b></span>"
|
||||
},
|
||||
|
||||
"disk": {
|
||||
"interval": 30,
|
||||
"format": " {percentage_used}% {free:2} free",
|
||||
"path": "/"
|
||||
},
|
||||
|
||||
"memory": {
|
||||
"format": " {percentage}% {used:.1f}/{total:.1f} S: {swapUsed:.1f}/{swapTotal:.1f}"
|
||||
},
|
||||
|
||||
"cpu": {
|
||||
"interval": 1,
|
||||
"format": "{usage}% "
|
||||
},
|
||||
|
||||
"custom/cpu_linux": {
|
||||
"exec": "~/bin/cpu_linux.sh",
|
||||
"return-type": "json",
|
||||
"interval": 2,
|
||||
"format": ": {text}%"
|
||||
},
|
||||
|
||||
"custom/nvidia": {
|
||||
"exec": "nvidia-smi --query-gpu=utilization.gpu,temperature.gpu --format=csv,nounits,noheader | sed 's/\\([0-9]\\+\\), \\([0-9]\\+\\)/\\1% @ \\2°C/g'",
|
||||
"format": " {}",
|
||||
"interval": 4
|
||||
},
|
||||
|
||||
"temperature": {
|
||||
"format": " {temperatureC}°C",
|
||||
"hwmon-path": "/sys/devices/platform/coretemp.0/hwmon/hwmon7/temp1_input",
|
||||
"format-critical": " {temperatureC}°C",
|
||||
"interval": 1,
|
||||
"critical-threshold": 80,
|
||||
"on-click": "psensor"
|
||||
},
|
||||
|
||||
"tray": {
|
||||
"icon-size": 14,
|
||||
"spacing": 5
|
||||
},
|
||||
|
||||
"idle_inhibitor": {
|
||||
"format": "<span font='12'>{icon}</span>",
|
||||
"format-icons": {
|
||||
"activated": " Presentation mode on",
|
||||
"deactivated": ""
|
||||
}
|
||||
},
|
||||
|
||||
"bluetooth": {
|
||||
"format-on": "",
|
||||
"format-off": "",
|
||||
"format-disabled": "",
|
||||
"format-connected": "",
|
||||
"format-connected-battery": "{device_battery_percentage}% ",
|
||||
"tooltip-format": "{controller_alias}\t{controller_address}\n\n{num_connections} connected",
|
||||
"tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}",
|
||||
"tooltip-format-enumerate-connected": "{device_alias}\t{device_address}",
|
||||
"tooltip-format-enumerate-connected-battery": "{device_alias}\t{device_address}\t{device_battery_percentage}%",
|
||||
"on-click": "rofi-bluetooth"
|
||||
},
|
||||
|
||||
"pulseaudio": {
|
||||
"format": "{volume}% {icon}",
|
||||
"format-bluetooth": "",
|
||||
"format-muted": "",
|
||||
"tooltip-format": "{volume}% {icon}",
|
||||
"format-icons": {
|
||||
"headphones": "",
|
||||
"bluetooth": "",
|
||||
"handsfree": "",
|
||||
"headset": "",
|
||||
"phone": "",
|
||||
"portable": "",
|
||||
"car": "",
|
||||
"default": [""]
|
||||
},
|
||||
"scroll-step": 5,
|
||||
"justify": "center",
|
||||
"on-click": "pamixer -t",
|
||||
"on-click-right": "pavucontrol",
|
||||
"on-scroll-up": "pactl set-sink-volume @DEFAULT_SINK@ +5%",
|
||||
"on-scroll-down": "pactl set-sink-volume @DEFAULT_SINK@ -5%"
|
||||
},
|
||||
|
||||
"pulseaudio#mic": {
|
||||
"format": "{format_source}",
|
||||
"format-source": "",
|
||||
"format-source-muted": "",
|
||||
"tooltip-format": "{volume}% {format_source} ",
|
||||
"on-click": "pactl set-source-mute 1 toggle",
|
||||
"on-scroll-down": "pactl set-source-volume 1 -1%",
|
||||
"on-scroll-up": "pactl set-source-volume 1 +1%"
|
||||
},
|
||||
|
||||
"group/audio": {
|
||||
"orientation": "horizontal",
|
||||
"modules": ["pulseaudio", "pulseaudio#mic"]
|
||||
},
|
||||
|
||||
"group/networking": {
|
||||
"orientation": "horizontal",
|
||||
"modules": ["network", "network#speed"]
|
||||
},
|
||||
|
||||
"network": {
|
||||
"format-wifi": " {essid}",
|
||||
"format-ethernet": "",
|
||||
"format-disconnected": "",
|
||||
"tooltip-format": "{ipaddr}",
|
||||
"tooltip-format-wifi": "{essid} ({signalStrength}%) \n{ipaddr} | {frequency} MHz{icon}",
|
||||
"tooltip-format-ethernet": "{ifname} \n{ipaddr} | {frequency} MHz{icon} ",
|
||||
"tooltip-format-disconnected": "Not Connected",
|
||||
"on-click": "networkmanager_dmenu"
|
||||
},
|
||||
|
||||
"network#speed": {
|
||||
"format": " {bandwidthDownBits:20} {bandwidthUpBits:20}",
|
||||
"interval": 1,
|
||||
"tooltip": true,
|
||||
"tooltip-format": "{ipaddr}",
|
||||
"tooltip-format-wifi": "{essid} ({signalStrength}%) \n{ipaddr} | {frequency} MHz{icon} ",
|
||||
"tooltip-format-ethernet": "{ifname} \n{ipaddr} | {frequency} MHz{icon} ",
|
||||
"tooltip-format-disconnected": "Not Connected",
|
||||
"on-click": "networkmanager_dmenu"
|
||||
},
|
||||
|
||||
"battery": {
|
||||
"interval": 4,
|
||||
"states": {
|
||||
"good": 95,
|
||||
"warning": 30,
|
||||
"critical": 20
|
||||
},
|
||||
"format": "{capacity}% <span font='16px'>{icon}</span> {power:.2f}W {time}",
|
||||
"format-time": "{H}h {M}min",
|
||||
"tooltip": "{time}",
|
||||
"format-charging": "{capacity}% Full at {timeTo}%",
|
||||
"format-plugged": "{capacity}% ",
|
||||
"format-icons": [
|
||||
"", "", "", "",
|
||||
"", "", "", ""
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Toggle the default PulseAudio sink's mute state.
|
||||
amixer -D pulse sset Master toggle >/dev/null
|
||||
@@ -1,3 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
check() {
|
||||
command -v "$1" 1>/dev/null
|
||||
}
|
||||
|
||||
notify() {
|
||||
check notify-send && {
|
||||
notify-send -a "Color Picker" "$@"
|
||||
return
|
||||
}
|
||||
echo "$@"
|
||||
}
|
||||
|
||||
loc="$HOME/.cache/colorpicker"
|
||||
[ -d "$loc" ] || mkdir -p "$loc"
|
||||
[ -f "$loc/colors" ] || touch "$loc/colors"
|
||||
|
||||
limit=10
|
||||
|
||||
[[ $# -eq 1 && $1 = "-l" ]] && {
|
||||
cat "$loc/colors"
|
||||
exit
|
||||
}
|
||||
|
||||
[[ $# -eq 1 && $1 = "-j" ]] && {
|
||||
text="$(head -n 1 "$loc/colors")"
|
||||
|
||||
mapfile -t allcolors < <(tail -n +2 "$loc/colors")
|
||||
# allcolors=($(tail -n +2 "$loc/colors"))
|
||||
tooltip="<b> COLORS</b>\n\n"
|
||||
|
||||
tooltip+="-> <b>$text</b> <span color='$text'></span> \n"
|
||||
for i in "${allcolors[@]}"; do
|
||||
tooltip+=" <b>$i</b> <span color='$i'></span> \n"
|
||||
done
|
||||
|
||||
cat <<EOF
|
||||
{ "text":"<span color='$text'></span>", "tooltip":"$tooltip"}
|
||||
EOF
|
||||
|
||||
exit
|
||||
}
|
||||
|
||||
check hyprpicker || {
|
||||
notify "hyprpicker is not installed"
|
||||
exit
|
||||
}
|
||||
killall -q hyprpicker
|
||||
color=$(hyprpicker)
|
||||
|
||||
check wl-copy && {
|
||||
echo "$color" | sed -z 's/\n//g' | wl-copy
|
||||
}
|
||||
|
||||
prevColors=$(head -n $((limit - 1)) "$loc/colors")
|
||||
echo "$color" >"$loc/colors"
|
||||
echo "$prevColors" >>"$loc/colors"
|
||||
sed -i '/^$/d' "$loc/colors"
|
||||
pkill -RTMIN+1 waybar
|
||||
@@ -1,54 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Temp file to store previous readings
|
||||
tmpfile="/tmp/cpu_prev_all"
|
||||
|
||||
# Get all per-core lines
|
||||
mapfile -t cpu_lines < <(grep '^cpu[0-9]' /proc/stat)
|
||||
|
||||
# On first run, save and exit
|
||||
if [[ ! -f $tmpfile ]]; then
|
||||
printf "%s\n" "${cpu_lines[@]}" > "$tmpfile"
|
||||
echo "..." # No previous data
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Load previous readings
|
||||
mapfile -t prev_lines < "$tmpfile"
|
||||
|
||||
# Sanity check
|
||||
if (( ${#cpu_lines[@]} != ${#prev_lines[@]} )); then
|
||||
echo "..." # Core count mismatch (e.g., suspend/resume)
|
||||
printf "%s\n" "${cpu_lines[@]}" > "$tmpfile"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
total_usage=0
|
||||
|
||||
for i in "${!cpu_lines[@]}"; do
|
||||
# Current
|
||||
read -r cpu user nice system idle iowait irq softirq steal _ _ <<< "${cpu_lines[$i]}"
|
||||
total_now=$((user + nice + system + idle + iowait + irq + softirq + steal))
|
||||
idle_now=$((idle + iowait))
|
||||
|
||||
# Previous
|
||||
read -r _ pu pn ps pi piw pir psf pst _ _ <<< "${prev_lines[$i]}"
|
||||
total_prev=$((pu + pn + ps + pi + piw + pir + psf + pst))
|
||||
idle_prev=$((pi + piw))
|
||||
|
||||
# Deltas
|
||||
diff_total=$((total_now - total_prev))
|
||||
diff_idle=$((idle_now - idle_prev))
|
||||
|
||||
if ((diff_total > 0)); then
|
||||
usage=$((100 * (diff_total - diff_idle) / diff_total))
|
||||
total_usage=$((total_usage + usage))
|
||||
fi
|
||||
done
|
||||
|
||||
# Output total usage (per-core sum)
|
||||
#echo '{"usage": ${total_usage}%}'}
|
||||
printf "{ \"text\": %6.0f, \"tooltip\": \"%s\" }" "$total_usage" "test"
|
||||
|
||||
|
||||
# Save current readings
|
||||
printf "%s\n" "${cpu_lines[@]}" > "$tmpfile"
|
||||
@@ -1,24 +0,0 @@
|
||||
#!/bin/bash
|
||||
format() {
|
||||
if [ "$1" -eq 0 ]; then
|
||||
echo '-'
|
||||
else
|
||||
echo "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
if ! updates_arch="$(checkupdates | wc -l)"; then
|
||||
updates_arch=0
|
||||
fi
|
||||
|
||||
if ! updates_aur="$(yay -Qum 2>/dev/null | wc -l)"; then
|
||||
updates_aur=0
|
||||
fi
|
||||
|
||||
updates="$((updates_arch + updates_aur))"
|
||||
|
||||
if [ "$updates" -gt 0 ]; then
|
||||
echo " ($(format $updates_arch)/$(format $updates_aur))"
|
||||
else
|
||||
echo
|
||||
fi
|
||||
@@ -1,22 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
pkgmgr="pacman"
|
||||
hash paru 2>/dev/null && pkgmgr="paru"
|
||||
hash yay 2>/dev/null && pkgmgr="yay"
|
||||
|
||||
IFS=$'\n'$'\r'
|
||||
|
||||
updatesli=($($pkgmgr -Qu))
|
||||
text=${#updatesli[@]}
|
||||
icon=""
|
||||
[ $text -eq 0 ] && icon="" || icon="📦"
|
||||
|
||||
for i in ${updatesli[@]}
|
||||
do
|
||||
tooltip+="$i\n"
|
||||
done
|
||||
|
||||
cat << EOF
|
||||
{ "text":"$icon", "tooltip":"UPDATES: $text"}
|
||||
EOF
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -f /sys/class/power_supply/BAT*/current_now ]; then
|
||||
powerDraw=" $(($(cat /sys/class/power_supply/BAT*/current_now)/1000000))w"
|
||||
fi
|
||||
|
||||
|
||||
cat << EOF
|
||||
{ "text":"$powerDraw", "tooltip":"power Draw $powerDraw"}
|
||||
EOF
|
||||
@@ -1,24 +0,0 @@
|
||||
#!/bin/sh
|
||||
BSSIDS="$(nmcli device wifi list |
|
||||
awk 'NR>1 {if ($1 != "*") {print $1}}' |
|
||||
tr -d ":" |
|
||||
tr "\n" ",")"
|
||||
|
||||
LOC=""
|
||||
REQUEST_GEO="$(wget -qO - http://openwifi.su/api/v1/bssids/"$BSSIDS")"
|
||||
if [[ "$(jq ".count_results" <<< "$REQUEST_GEO")" -gt 0 ]] ; then
|
||||
LAT="$(jq ".lat" <<< "$REQUEST_GEO")"
|
||||
LON="$(jq ".lon" <<< "$REQUEST_GEO")"
|
||||
LOC="$LAT,$LON"
|
||||
fi
|
||||
|
||||
text="$(curl -s "https://wttr.in/$LOC?format=1" | sed 's/ //g')"
|
||||
tooltip="$(curl -s "https://wttr.in/$LOC?0QT" |
|
||||
sed 's/\\/\\\\/g' |
|
||||
sed ':a;N;$!ba;s/\n/\\n/g' |
|
||||
sed 's/"/\\"/g')"
|
||||
|
||||
if ! grep -q "Unknown location" <<< "$text"; then
|
||||
echo "{\"text\": \"$text\", \"tooltip\": \"<tt>$tooltip</tt>\", \"class\": \"weather\"}"
|
||||
fi
|
||||
|
||||
@@ -1,88 +0,0 @@
|
||||
/* Noctalia Ember OLED: near-black surfaces, warm amber focus. */
|
||||
* {
|
||||
font-family: "JetBrainsMono Nerd Font,JetBrainsMono NF";
|
||||
color: #fff1e6;
|
||||
}
|
||||
|
||||
window#waybar,
|
||||
.modules-right,
|
||||
.modules-center,
|
||||
.modules-left {
|
||||
background: #050403;
|
||||
}
|
||||
|
||||
#battery,
|
||||
#custom-clipboard,
|
||||
#custom-colorpicker,
|
||||
#custom-powerDraw,
|
||||
#bluetooth,
|
||||
#pulseaudio,
|
||||
#network,
|
||||
#disk,
|
||||
#memory,
|
||||
#backlight,
|
||||
#cpu,
|
||||
#temperature,
|
||||
#custom-weather,
|
||||
#idle_inhibitor,
|
||||
#jack,
|
||||
#tray,
|
||||
#window,
|
||||
#workspaces,
|
||||
#clock {
|
||||
min-width: 1ex;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
#tray menu * {
|
||||
color: #050403;
|
||||
}
|
||||
|
||||
#cpu {
|
||||
/* "100% " fits in this box; fixed width prevents sibling modules shifting. */
|
||||
min-width: 7ch;
|
||||
max-width: 7ch;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#temperature.critical,
|
||||
#pulseaudio {
|
||||
min-width: 5ex;
|
||||
}
|
||||
|
||||
#pulseaudio.muted,
|
||||
#pulseaudio.mic:not(.source-muted) {
|
||||
color: #ff6b4a;
|
||||
}
|
||||
|
||||
#pulseaudio.mic.muted {
|
||||
color: #6e4a31;
|
||||
}
|
||||
|
||||
#clock {
|
||||
color: #ff8800;
|
||||
}
|
||||
|
||||
#battery.charging {
|
||||
color: #1a0d00;
|
||||
background-color: #c98a45;
|
||||
}
|
||||
|
||||
#battery.warning:not(.charging) {
|
||||
background-color: #ffb05c;
|
||||
color: #2b1600;
|
||||
}
|
||||
|
||||
#battery.critical:not(.charging) {
|
||||
background-color: #ff6b4a;
|
||||
color: #2b0700;
|
||||
animation-name: blink;
|
||||
animation-duration: 0.5s;
|
||||
animation-timing-function: linear;
|
||||
animation-iteration-count: infinite;
|
||||
animation-direction: alternate;
|
||||
}
|
||||
|
||||
#network.speed {
|
||||
min-width: 30ex;
|
||||
}
|
||||
@@ -17,3 +17,6 @@
|
||||
.local/share/noctalia/plugins/knowledge-lookup/
|
||||
.local/share/noctalia/plugins/pi-status-bridge/
|
||||
.local/share/noctalia/plugins/system-status/
|
||||
|
||||
# Local Pi runtime state
|
||||
.atl/
|
||||
|
||||
@@ -0,0 +1,367 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { spawn } from "node:child_process";
|
||||
import { mkdtemp, mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
||||
import { createServer } from "node:http";
|
||||
import { tmpdir } from "node:os";
|
||||
import { dirname, join } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import test from "node:test";
|
||||
import {
|
||||
createLocalAiModelsExtension,
|
||||
discoverLocalAiModels,
|
||||
mapLocalAiModels,
|
||||
resolveConfigValue,
|
||||
} from "./index.ts";
|
||||
|
||||
function response(data: unknown, status = 200) {
|
||||
return new Response(JSON.stringify(data), {
|
||||
status,
|
||||
headers: { "content-type": "application/json" },
|
||||
});
|
||||
}
|
||||
|
||||
async function configFile() {
|
||||
const root = await mkdtemp(join(tmpdir(), "localai-models-"));
|
||||
const path = join(root, "models.json");
|
||||
await writeFile(path, JSON.stringify({
|
||||
providers: {
|
||||
localai: {
|
||||
baseUrl: "http://local.invalid/v1",
|
||||
apiKey: "local-test",
|
||||
compat: {
|
||||
supportsDeveloperRole: false,
|
||||
supportsReasoningEffort: false,
|
||||
maxTokensField: "max_tokens",
|
||||
},
|
||||
},
|
||||
},
|
||||
}));
|
||||
return { root, path };
|
||||
}
|
||||
|
||||
function abortAwareFetch(): typeof fetch {
|
||||
return async (_url, init) => new Promise<Response>((_resolve, reject) => {
|
||||
const signal = init?.signal;
|
||||
const abort = () => reject(signal?.reason ?? new DOMException("Aborted", "AbortError"));
|
||||
if (signal?.aborted) abort();
|
||||
else signal?.addEventListener("abort", abort, { once: true });
|
||||
});
|
||||
}
|
||||
|
||||
async function runPiCatalog(agentDir: string) {
|
||||
const sessionDir = join(agentDir, "sessions");
|
||||
await mkdir(sessionDir, { recursive: true });
|
||||
const child = spawn("pi", ["--mode", "rpc", "--session-dir", sessionDir], {
|
||||
cwd: agentDir,
|
||||
detached: true,
|
||||
env: { ...process.env, PI_CODING_AGENT_DIR: agentDir },
|
||||
stdio: ["pipe", "pipe", "pipe"],
|
||||
});
|
||||
try {
|
||||
return await new Promise<any[]>((resolve, reject) => {
|
||||
let buffer = "";
|
||||
const timeout = setTimeout(() => reject(new Error("Pi RPC catalog probe timed out")), 15_000);
|
||||
child.stdout.setEncoding("utf8");
|
||||
child.stdout.on("data", (chunk: string) => {
|
||||
buffer += chunk;
|
||||
while (buffer.includes("\n")) {
|
||||
const newline = buffer.indexOf("\n");
|
||||
const line = buffer.slice(0, newline);
|
||||
buffer = buffer.slice(newline + 1);
|
||||
if (!line.trim()) continue;
|
||||
const frame = JSON.parse(line);
|
||||
if (frame.type === "response" && frame.id === "catalog-test") {
|
||||
clearTimeout(timeout);
|
||||
if (!frame.success) reject(new Error(frame.error ?? "Pi RPC catalog probe failed"));
|
||||
else resolve(frame.data?.models ?? []);
|
||||
}
|
||||
}
|
||||
});
|
||||
child.once("error", reject);
|
||||
child.once("exit", (code) => reject(new Error(`Pi exited before catalog response (${code})`)));
|
||||
child.stdin.write(`${JSON.stringify({ type: "get_available_models", id: "catalog-test" })}\n`);
|
||||
});
|
||||
} finally {
|
||||
if (child.pid) {
|
||||
try { process.kill(-child.pid, "SIGTERM"); } catch {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
test("maps unique chat models, stamps compatibility, and filters obvious non-chat families", () => {
|
||||
const compat = { supportsDeveloperRole: false, maxTokensField: "max_tokens" };
|
||||
const models = mapLocalAiModels([
|
||||
{ id: "qwen3.8-27b-q4" },
|
||||
{ id: "qwen3.8-27b-heretic-abliterated-uncensored" },
|
||||
{ id: "qwen3.8-27b-q4" },
|
||||
{ id: "qwen3-asr-1.7b" },
|
||||
{ id: "whisper-large-v3" },
|
||||
{ id: "bge-m3" },
|
||||
{ id: "nomic-embed-text" },
|
||||
{ id: "flux.2-klein-9b" },
|
||||
{ id: "sd-3.5-large-ggml" },
|
||||
], compat);
|
||||
assert.deepEqual(models.map((model) => model.id), [
|
||||
"qwen3.8-27b-heretic-abliterated-uncensored",
|
||||
"qwen3.8-27b-q4",
|
||||
]);
|
||||
assert.deepEqual(models[0].compat, compat);
|
||||
});
|
||||
|
||||
test("resolves literal, interpolated, escaped, and command-backed config values", async () => {
|
||||
const previous = process.env.LOCALAI_TEST_KEY;
|
||||
const previousEmpty = process.env.LOCALAI_EMPTY_KEY;
|
||||
process.env.LOCALAI_TEST_KEY = "environment-key";
|
||||
process.env.LOCALAI_EMPTY_KEY = "";
|
||||
try {
|
||||
assert.equal(await resolveConfigValue("literal-key"), "literal-key");
|
||||
assert.equal(await resolveConfigValue("$LOCALAI_TEST_KEY"), "environment-key");
|
||||
assert.equal(await resolveConfigValue("prefix-${LOCALAI_TEST_KEY}"), "prefix-environment-key");
|
||||
assert.equal(await resolveConfigValue("$$money-$!bang"), "$money-!bang");
|
||||
assert.equal(await resolveConfigValue("!printf command-key"), "command-key");
|
||||
assert.equal(await resolveConfigValue("$MISSING_LOCALAI_KEY"), undefined);
|
||||
assert.equal(await resolveConfigValue("$LOCALAI_EMPTY_KEY"), undefined);
|
||||
assert.equal(await resolveConfigValue("prefix-${LOCALAI_EMPTY_KEY}"), undefined);
|
||||
} finally {
|
||||
if (previous === undefined) delete process.env.LOCALAI_TEST_KEY;
|
||||
else process.env.LOCALAI_TEST_KEY = previous;
|
||||
if (previousEmpty === undefined) delete process.env.LOCALAI_EMPTY_KEY;
|
||||
else process.env.LOCALAI_EMPTY_KEY = previousEmpty;
|
||||
}
|
||||
});
|
||||
|
||||
test("aborts command-backed auth resolution with the caller signal", async () => {
|
||||
const root = await mkdtemp(join(tmpdir(), "localai-command-abort-"));
|
||||
const pidFile = join(root, "child.pid");
|
||||
const controller = new AbortController();
|
||||
const startedAt = Date.now();
|
||||
try {
|
||||
const resolving = resolveConfigValue(
|
||||
`!sleep 30 & child=$!; printf '%s' "$child" > '${pidFile}'; wait`,
|
||||
20_000,
|
||||
controller.signal,
|
||||
);
|
||||
let childPid = 0;
|
||||
for (let attempt = 0; attempt < 100 && !childPid; attempt += 1) {
|
||||
try {
|
||||
childPid = Number((await readFile(pidFile, "utf8")).trim());
|
||||
} catch {}
|
||||
if (!childPid) await new Promise((resolve) => setTimeout(resolve, 5));
|
||||
}
|
||||
assert.ok(childPid > 0, "descendant pid was recorded");
|
||||
controller.abort(new DOMException("Cancelled", "AbortError"));
|
||||
await assert.rejects(resolving, /abort|cancel/i);
|
||||
for (let attempt = 0; attempt < 100; attempt += 1) {
|
||||
try {
|
||||
process.kill(childPid, 0);
|
||||
} catch {
|
||||
childPid = 0;
|
||||
break;
|
||||
}
|
||||
await new Promise((resolve) => setTimeout(resolve, 5));
|
||||
}
|
||||
assert.equal(childPid, 0, "descendant process was terminated");
|
||||
assert.ok(Date.now() - startedAt < 1_500, "abort settled promptly");
|
||||
} finally {
|
||||
await rm(root, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
|
||||
test("discovers changing payload variants without caching and sends auth only when resolved", async () => {
|
||||
let call = 0;
|
||||
const seenHeaders: Array<HeadersInit | undefined> = [];
|
||||
const fetchImpl: typeof fetch = async (_url, init) => {
|
||||
call += 1;
|
||||
seenHeaders.push(init?.headers);
|
||||
return call === 1
|
||||
? response({ data: [{ id: "qwen3.8-27b-q4" }] })
|
||||
: response({ models: [{ id: "new-chat-model" }] });
|
||||
};
|
||||
const first = await discoverLocalAiModels(
|
||||
{ baseUrl: "http://local.invalid/v1", apiKey: "local" },
|
||||
{ fetch: fetchImpl },
|
||||
);
|
||||
const second = await discoverLocalAiModels(
|
||||
{ baseUrl: "http://local.invalid/v1" },
|
||||
{ fetch: fetchImpl },
|
||||
);
|
||||
assert.deepEqual(first.map((model) => model.id), ["qwen3.8-27b-q4"]);
|
||||
assert.deepEqual(second.map((model) => model.id), ["new-chat-model"]);
|
||||
assert.deepEqual(seenHeaders[0], { Authorization: "Bearer local" });
|
||||
assert.equal(seenHeaders[1], undefined);
|
||||
});
|
||||
|
||||
test("rejects malformed, failed, timed-out, and externally aborted discovery", async () => {
|
||||
const settings = { baseUrl: "http://local.invalid/v1" };
|
||||
await assert.rejects(
|
||||
discoverLocalAiModels(settings, { fetch: async () => response({ object: "list" }) }),
|
||||
/malformed payload/,
|
||||
);
|
||||
await assert.rejects(
|
||||
discoverLocalAiModels(settings, { fetch: async () => response({}, 503) }),
|
||||
/HTTP 503/,
|
||||
);
|
||||
await assert.rejects(
|
||||
discoverLocalAiModels(settings, { fetch: abortAwareFetch(), timeoutMs: 5 }),
|
||||
/timeout|abort/i,
|
||||
);
|
||||
const controller = new AbortController();
|
||||
controller.abort(new DOMException("Cancelled", "AbortError"));
|
||||
await assert.rejects(
|
||||
discoverLocalAiModels(settings, { fetch: abortAwareFetch(), signal: controller.signal }),
|
||||
/cancel|abort/i,
|
||||
);
|
||||
});
|
||||
|
||||
test("registers startup models with compatibility and refresh replaces them", async () => {
|
||||
const { root, path } = await configFile();
|
||||
try {
|
||||
let call = 0;
|
||||
const fetchImpl: typeof fetch = async () => {
|
||||
call += 1;
|
||||
return response({ data: [{ id: call === 1 ? "qwen3.8-27b-q4" : "next-chat-model" }] });
|
||||
};
|
||||
let registered: any;
|
||||
const pi = {
|
||||
registerProvider(_id: string, config: unknown) {
|
||||
registered = config;
|
||||
},
|
||||
on() {},
|
||||
};
|
||||
await createLocalAiModelsExtension({ configPath: path, fetch: fetchImpl })(pi as any);
|
||||
assert.deepEqual(registered.models.map((model: any) => model.id), ["qwen3.8-27b-q4"]);
|
||||
assert.deepEqual(registered.models[0].compat, {
|
||||
supportsDeveloperRole: false,
|
||||
supportsReasoningEffort: false,
|
||||
maxTokensField: "max_tokens",
|
||||
});
|
||||
const refreshed = await registered.refreshModels({ signal: new AbortController().signal });
|
||||
assert.deepEqual(refreshed.map((model: any) => model.id), ["next-chat-model"]);
|
||||
assert.deepEqual(refreshed[0].compat, registered.models[0].compat);
|
||||
} finally {
|
||||
await rm(root, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
|
||||
test("Pi startup composes discovered models with configured overrides", async () => {
|
||||
const root = await mkdtemp(join(tmpdir(), "localai-pi-integration-"));
|
||||
const server = createServer((request, responseStream) => {
|
||||
if (request.url === "/v1/models") {
|
||||
responseStream.writeHead(200, { "content-type": "application/json" });
|
||||
responseStream.end(JSON.stringify({
|
||||
data: [
|
||||
{ id: "qwen3.8-27b-heretic-abliterated-uncensored" },
|
||||
{ id: "qwen3.8-27b-q4" },
|
||||
],
|
||||
}));
|
||||
return;
|
||||
}
|
||||
responseStream.writeHead(404).end();
|
||||
});
|
||||
await new Promise<void>((resolve) => server.listen(0, "127.0.0.1", resolve));
|
||||
try {
|
||||
const address = server.address() as { port: number };
|
||||
const extensionPath = join(dirname(fileURLToPath(import.meta.url)), "index.ts");
|
||||
await writeFile(join(root, "settings.json"), JSON.stringify({ extensions: [extensionPath] }));
|
||||
await writeFile(join(root, "models.json"), JSON.stringify({
|
||||
providers: {
|
||||
localai: {
|
||||
baseUrl: `http://127.0.0.1:${address.port}/v1`,
|
||||
api: "openai-completions",
|
||||
apiKey: "local-test",
|
||||
compat: {
|
||||
supportsDeveloperRole: false,
|
||||
supportsReasoningEffort: false,
|
||||
maxTokensField: "max_tokens",
|
||||
},
|
||||
modelOverrides: {
|
||||
"qwen3.8-27b-heretic-abliterated-uncensored": {
|
||||
name: "Overridden Heretic Name",
|
||||
input: ["text", "image"],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}));
|
||||
const models = (await runPiCatalog(root)).filter((model) => model.provider === "localai");
|
||||
assert.deepEqual(models.map((model) => model.id).sort(), [
|
||||
"qwen3.8-27b-heretic-abliterated-uncensored",
|
||||
"qwen3.8-27b-q4",
|
||||
]);
|
||||
const overridden = models.find((model) => model.id.includes("heretic"));
|
||||
assert.equal(overridden.name, "Overridden Heretic Name");
|
||||
assert.deepEqual(overridden.input, ["text", "image"]);
|
||||
assert.deepEqual(overridden.compat, {
|
||||
supportsDeveloperRole: false,
|
||||
supportsReasoningEffort: false,
|
||||
maxTokensField: "max_tokens",
|
||||
});
|
||||
} finally {
|
||||
await new Promise<void>((resolve) => server.close(() => resolve()));
|
||||
await rm(root, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
|
||||
test("successful startup followed by outage returns an empty refreshed catalog", async () => {
|
||||
const { root, path } = await configFile();
|
||||
const originalWarn = console.warn;
|
||||
console.warn = () => {};
|
||||
try {
|
||||
let call = 0;
|
||||
let registered: any;
|
||||
const pi = {
|
||||
registerProvider(_id: string, config: unknown) {
|
||||
registered = config;
|
||||
},
|
||||
on() {},
|
||||
};
|
||||
await createLocalAiModelsExtension({
|
||||
configPath: path,
|
||||
fetch: async () => {
|
||||
call += 1;
|
||||
if (call === 1) return response({ data: [{ id: "qwen3.8-27b-q4" }] });
|
||||
throw new Error("offline");
|
||||
},
|
||||
})(pi as any);
|
||||
assert.deepEqual(registered.models.map((model: any) => model.id), ["qwen3.8-27b-q4"]);
|
||||
assert.deepEqual(await registered.refreshModels({ signal: new AbortController().signal }), []);
|
||||
} finally {
|
||||
console.warn = originalWarn;
|
||||
await rm(root, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
|
||||
test("continues with an empty catalog and warning when LocalAI is unavailable", async () => {
|
||||
const { root, path } = await configFile();
|
||||
const originalWarn = console.warn;
|
||||
const warnings: string[] = [];
|
||||
console.warn = (message?: unknown) => warnings.push(String(message));
|
||||
try {
|
||||
let registered: any;
|
||||
let sessionStart: ((event: unknown, ctx: any) => void) | undefined;
|
||||
const pi = {
|
||||
registerProvider(_id: string, config: unknown) {
|
||||
registered = config;
|
||||
},
|
||||
on(event: string, handler: (event: unknown, ctx: any) => void) {
|
||||
if (event === "session_start") sessionStart = handler;
|
||||
},
|
||||
};
|
||||
await createLocalAiModelsExtension({
|
||||
configPath: path,
|
||||
fetch: async () => { throw new Error("offline"); },
|
||||
})(pi as any);
|
||||
assert.deepEqual(registered.models, []);
|
||||
assert.deepEqual(await registered.refreshModels({ signal: new AbortController().signal }), []);
|
||||
const notices: unknown[] = [];
|
||||
sessionStart?.({}, {
|
||||
hasUI: true,
|
||||
ui: { notify: (...args: unknown[]) => notices.push(args) },
|
||||
});
|
||||
assert.equal(notices.length, 1);
|
||||
assert.ok(warnings.length >= 1);
|
||||
} finally {
|
||||
console.warn = originalWarn;
|
||||
await rm(root, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,252 @@
|
||||
import { spawn } from "node:child_process";
|
||||
import { readFile } from "node:fs/promises";
|
||||
import { homedir } from "node:os";
|
||||
import { join } from "node:path";
|
||||
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
||||
|
||||
const PROVIDER_ID = "localai";
|
||||
const DEFAULT_TIMEOUT_MS = 5_000;
|
||||
const NON_CHAT_MODEL = /(?:^|[-_.])(?:asr|stt|tts|whisper|speech|embed|embedding|embeddings|rerank|bge|e5|flux|sd)(?:$|[-_.])|nomic[-_.]?embed|stable[-_.]?diffusion/i;
|
||||
|
||||
type FetchLike = typeof fetch;
|
||||
type ProviderSettings = {
|
||||
baseUrl: string;
|
||||
apiKey?: string;
|
||||
compat?: Record<string, unknown>;
|
||||
};
|
||||
type ModelsFile = {
|
||||
providers?: Record<string, {
|
||||
baseUrl?: unknown;
|
||||
apiKey?: unknown;
|
||||
compat?: unknown;
|
||||
}>;
|
||||
};
|
||||
type RemoteModel = { id?: unknown; name?: unknown } | string;
|
||||
|
||||
export type LocalAiModel = {
|
||||
id: string;
|
||||
name: string;
|
||||
reasoning: false;
|
||||
input: ["text"];
|
||||
cost: { input: 0; output: 0; cacheRead: 0; cacheWrite: 0 };
|
||||
contextWindow: 128_000;
|
||||
maxTokens: 16_384;
|
||||
compat?: Record<string, unknown>;
|
||||
};
|
||||
|
||||
function agentDirectory() {
|
||||
return process.env.PI_CODING_AGENT_DIR ?? join(homedir(), ".pi", "agent");
|
||||
}
|
||||
|
||||
function runShellCommand(command: string, timeoutMs: number, signal?: AbortSignal) {
|
||||
return new Promise<string>((resolve, reject) => {
|
||||
const child = spawn("/bin/sh", ["-lc", command], {
|
||||
detached: true,
|
||||
stdio: ["ignore", "pipe", "pipe"],
|
||||
});
|
||||
let stdout = "";
|
||||
let settled = false;
|
||||
let forceKill: ReturnType<typeof setTimeout> | undefined;
|
||||
|
||||
const killGroup = (signalName: NodeJS.Signals) => {
|
||||
if (!child.pid) return;
|
||||
try {
|
||||
process.kill(-child.pid, signalName);
|
||||
} catch {}
|
||||
};
|
||||
const cleanup = () => {
|
||||
clearTimeout(timeout);
|
||||
signal?.removeEventListener("abort", onAbort);
|
||||
};
|
||||
const finish = (error?: Error, value?: string) => {
|
||||
if (settled) return;
|
||||
settled = true;
|
||||
cleanup();
|
||||
child.stdout.destroy();
|
||||
child.stderr.destroy();
|
||||
child.unref();
|
||||
if (error) reject(error);
|
||||
else resolve(value ?? "");
|
||||
};
|
||||
const terminate = (error: Error) => {
|
||||
killGroup("SIGTERM");
|
||||
forceKill = setTimeout(() => killGroup("SIGKILL"), 250);
|
||||
forceKill.unref();
|
||||
finish(error);
|
||||
};
|
||||
const onAbort = () => terminate(
|
||||
signal?.reason instanceof Error
|
||||
? signal.reason
|
||||
: new DOMException("Cancelled", "AbortError"),
|
||||
);
|
||||
const timeout = setTimeout(
|
||||
() => terminate(new DOMException("Command timed out", "TimeoutError")),
|
||||
timeoutMs,
|
||||
);
|
||||
timeout.unref();
|
||||
|
||||
if (signal?.aborted) {
|
||||
onAbort();
|
||||
return;
|
||||
}
|
||||
signal?.addEventListener("abort", onAbort, { once: true });
|
||||
child.stdout.setEncoding("utf8");
|
||||
child.stdout.on("data", (chunk: string) => {
|
||||
stdout += chunk;
|
||||
if (stdout.length > 64 * 1024) {
|
||||
terminate(new Error("Command output exceeded 64KB"));
|
||||
}
|
||||
});
|
||||
child.on("error", (error) => finish(error));
|
||||
child.on("close", (code) => {
|
||||
if (code === 0) finish(undefined, stdout.trim());
|
||||
else finish(new Error(`Command exited with status ${code ?? "unknown"}`));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export async function resolveConfigValue(
|
||||
value: string | undefined,
|
||||
timeoutMs = DEFAULT_TIMEOUT_MS,
|
||||
signal?: AbortSignal,
|
||||
) {
|
||||
if (!value) return undefined;
|
||||
if (value.startsWith("!")) {
|
||||
const command = value.slice(1).trim();
|
||||
if (!command) return undefined;
|
||||
return (await runShellCommand(command, timeoutMs, signal)) || undefined;
|
||||
}
|
||||
|
||||
const dollar = "\u0000LOCALAI_DOLLAR\u0000";
|
||||
const bang = "\u0000LOCALAI_BANG\u0000";
|
||||
let resolved = value.replace(/\$\$/g, dollar).replace(/\$!/g, bang);
|
||||
let missing = false;
|
||||
resolved = resolved.replace(
|
||||
/\$\{([A-Za-z_][A-Za-z0-9_]*)\}|\$([A-Za-z_][A-Za-z0-9_]*)/g,
|
||||
(_match, braced: string | undefined, plain: string | undefined) => {
|
||||
const environmentValue = process.env[braced ?? plain ?? ""];
|
||||
if (!environmentValue) missing = true;
|
||||
return environmentValue ?? "";
|
||||
},
|
||||
);
|
||||
if (missing) return undefined;
|
||||
return resolved.replaceAll(dollar, "$").replaceAll(bang, "!");
|
||||
}
|
||||
|
||||
export function modelsEndpoint(baseUrl: string) {
|
||||
return `${baseUrl.replace(/\/+$/, "")}/models`;
|
||||
}
|
||||
|
||||
export function mapLocalAiModels(
|
||||
entries: RemoteModel[],
|
||||
compat?: Record<string, unknown>,
|
||||
): LocalAiModel[] {
|
||||
const seen = new Set<string>();
|
||||
const models: LocalAiModel[] = [];
|
||||
for (const entry of entries) {
|
||||
const id = (typeof entry === "string" ? entry : entry?.id)?.toString().trim();
|
||||
if (!id || seen.has(id) || NON_CHAT_MODEL.test(id)) continue;
|
||||
seen.add(id);
|
||||
const remoteName = typeof entry === "object" && typeof entry.name === "string" ? entry.name.trim() : "";
|
||||
models.push({
|
||||
id,
|
||||
name: remoteName || `${id} (LocalAI)`,
|
||||
reasoning: false,
|
||||
input: ["text"],
|
||||
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
||||
contextWindow: 128_000,
|
||||
maxTokens: 16_384,
|
||||
...(compat ? { compat: { ...compat } } : {}),
|
||||
});
|
||||
}
|
||||
return models.sort((left, right) => left.name.localeCompare(right.name));
|
||||
}
|
||||
|
||||
export async function discoverLocalAiModels(
|
||||
settings: ProviderSettings,
|
||||
options: { fetch?: FetchLike; signal?: AbortSignal; timeoutMs?: number } = {},
|
||||
) {
|
||||
const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
||||
const fetchImpl = options.fetch ?? fetch;
|
||||
const timeout = AbortSignal.timeout(timeoutMs);
|
||||
const signal = options.signal ? AbortSignal.any([options.signal, timeout]) : timeout;
|
||||
const apiKey = await resolveConfigValue(settings.apiKey, timeoutMs, signal);
|
||||
const response = await fetchImpl(modelsEndpoint(settings.baseUrl), {
|
||||
headers: apiKey ? { Authorization: `Bearer ${apiKey}` } : undefined,
|
||||
signal,
|
||||
});
|
||||
if (!response.ok) throw new Error(`LocalAI model discovery failed with HTTP ${response.status}`);
|
||||
const payload = await response.json() as { data?: unknown; models?: unknown };
|
||||
const entries = Array.isArray(payload.data) ? payload.data : Array.isArray(payload.models) ? payload.models : undefined;
|
||||
if (!entries) throw new Error("LocalAI model discovery returned a malformed payload");
|
||||
return mapLocalAiModels(entries as RemoteModel[], settings.compat);
|
||||
}
|
||||
|
||||
export function createLocalAiModelsExtension(options: {
|
||||
configPath?: string;
|
||||
fetch?: FetchLike;
|
||||
timeoutMs?: number;
|
||||
} = {}) {
|
||||
return async function localAiModelsExtension(pi: ExtensionAPI) {
|
||||
const configPath = options.configPath ?? join(agentDirectory(), "models.json");
|
||||
let settings: ProviderSettings;
|
||||
try {
|
||||
const config = JSON.parse(await readFile(configPath, "utf8")) as ModelsFile;
|
||||
const provider = config.providers?.[PROVIDER_ID];
|
||||
if (!provider || typeof provider.baseUrl !== "string" || !provider.baseUrl.trim()) {
|
||||
console.warn("LocalAI provider configuration is missing; continuing without LocalAI models.");
|
||||
return;
|
||||
}
|
||||
settings = {
|
||||
baseUrl: provider.baseUrl,
|
||||
apiKey: typeof provider.apiKey === "string" ? provider.apiKey : undefined,
|
||||
compat: provider.compat && typeof provider.compat === "object"
|
||||
? { ...(provider.compat as Record<string, unknown>) }
|
||||
: undefined,
|
||||
};
|
||||
} catch {
|
||||
console.warn("LocalAI provider configuration could not be read; continuing without LocalAI models.");
|
||||
return;
|
||||
}
|
||||
|
||||
let startupFailed = false;
|
||||
let initialModels: LocalAiModel[] = [];
|
||||
try {
|
||||
initialModels = await discoverLocalAiModels(settings, {
|
||||
fetch: options.fetch,
|
||||
timeoutMs: options.timeoutMs,
|
||||
});
|
||||
} catch {
|
||||
startupFailed = true;
|
||||
console.warn("LocalAI model discovery unavailable; continuing without LocalAI models.");
|
||||
}
|
||||
|
||||
pi.registerProvider(PROVIDER_ID, {
|
||||
name: "LocalAI",
|
||||
baseUrl: settings.baseUrl,
|
||||
apiKey: settings.apiKey,
|
||||
api: "openai-completions",
|
||||
models: initialModels,
|
||||
async refreshModels({ signal }: { signal: AbortSignal }) {
|
||||
try {
|
||||
return await discoverLocalAiModels(settings, {
|
||||
fetch: options.fetch,
|
||||
signal,
|
||||
timeoutMs: options.timeoutMs,
|
||||
});
|
||||
} catch {
|
||||
console.warn("LocalAI model refresh unavailable; continuing without LocalAI models.");
|
||||
return [];
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
if (startupFailed) {
|
||||
pi.on("session_start", (_event, ctx) => {
|
||||
if (ctx.hasUI) ctx.ui.notify("LocalAI unavailable; continuing without LocalAI models.", "warning");
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export default createLocalAiModelsExtension();
|
||||
@@ -86,6 +86,7 @@
|
||||
"command -v *": "allow",
|
||||
"find *": "allow",
|
||||
"hypa *": "allow",
|
||||
"hypa_find *": "allow",
|
||||
|
||||
"git status": "allow",
|
||||
"git status *": "allow",
|
||||
|
||||
+23
-1
@@ -10,7 +10,10 @@
|
||||
},
|
||||
"gpt-5.6-luna": {
|
||||
"contextWindow": 1050000
|
||||
}
|
||||
},
|
||||
"gpt-6-astra": {
|
||||
"contextWindow": 1050000
|
||||
}
|
||||
}
|
||||
},
|
||||
"openai-codex": {
|
||||
@@ -25,6 +28,25 @@
|
||||
"contextWindow": 1050000
|
||||
}
|
||||
}
|
||||
},
|
||||
"localai": {
|
||||
"baseUrl": "http://127.0.0.1:8080/v1",
|
||||
"api": "openai-completions",
|
||||
"apiKey": "localai",
|
||||
"compat": {
|
||||
"supportsDeveloperRole": false,
|
||||
"supportsReasoningEffort": false,
|
||||
"maxTokensField": "max_tokens"
|
||||
},
|
||||
"modelOverrides": {
|
||||
"qwen3.8-27b-heretic-abliterated-uncensored": {
|
||||
"name": "Qwen 3.8 27B Heretic (LocalAI)",
|
||||
"input": [
|
||||
"text",
|
||||
"image"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+15
-6
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"quietStartup": true,
|
||||
"lastChangelogVersion": "0.80.10",
|
||||
"lastChangelogVersion": "0.85.1",
|
||||
"defaultProvider": "openai-codex",
|
||||
"defaultModel": "gpt-5.6-terra",
|
||||
"defaultModel": "gpt-5.6-sol",
|
||||
"defaultThinkingLevel": "high",
|
||||
"packages": [
|
||||
"npm:pi-subagents",
|
||||
@@ -14,15 +14,22 @@
|
||||
"npm:@juicesharp/rpiv-btw",
|
||||
"npm:pi-powerline-footer",
|
||||
"npm:pi-studio",
|
||||
"npm:pi-ui-design",
|
||||
"npm:pi-frontend-check",
|
||||
"npm:@senad-d/drawme",
|
||||
"npm:pi-powerpoint",
|
||||
"npm:@joemccann/pi-pdf",
|
||||
"npm:pi-universal-view",
|
||||
"npm:@hypabolic/pi-hypa",
|
||||
"npm:bigpowers",
|
||||
"npm:@gotgenes/pi-permission-system",
|
||||
"npm:pi-intercom",
|
||||
"npm:gentle-engram@0.1.8",
|
||||
"npm:pi-lens",
|
||||
"npm:@juicesharp/rpiv-todo",
|
||||
"npm:@majorgilles/pi-grill-me",
|
||||
"npm:pi-mcp-adapter"
|
||||
"npm:pi-mcp-adapter",
|
||||
"npm:pi-caveman",
|
||||
"npm:@dietrichgebert/ponytail"
|
||||
],
|
||||
"powerline": "full",
|
||||
"hideThinkingBlock": false,
|
||||
@@ -30,5 +37,7 @@
|
||||
"prompts/english-default.md",
|
||||
"prompts/todo-hygiene.md"
|
||||
],
|
||||
"theme": "dark"
|
||||
}
|
||||
"theme": "dark",
|
||||
"transport": "auto",
|
||||
"tuiMode": "fullscreen"
|
||||
}
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
# script for updating all packages but excluding a list of packages
|
||||
|
||||
# set path to list of packages to exclude
|
||||
exclude_list_file=~/.setup/packages/exclude_from_updating.list
|
||||
|
||||
# load list of packages to exclude
|
||||
exclude_list=$(cat $exclude_list_file)
|
||||
|
||||
# define function that calls yay update and excludes packages from exclude_list
|
||||
|
||||
function update_system {
|
||||
yay -Syu --noconfirm --needed --noprovides --ignore $exclude_list
|
||||
}
|
||||
|
||||
# also define function that only updates packages from pacman
|
||||
function update_pacman_packages {
|
||||
sudo pacman -Syu --noconfirm --needed --noprovides --ignore $exclude_list
|
||||
}
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
service_directory="/etc/dinit.d"
|
||||
logfile_directory="/var/log/dinit"
|
||||
logfile_extenstion="log"
|
||||
|
||||
overwrite=false
|
||||
|
||||
while getopts ":o" opt; do
|
||||
case $opt in
|
||||
o)
|
||||
overwrite=true
|
||||
echo "Overwriting existing logfile specifications..."
|
||||
;;
|
||||
\?)
|
||||
echo "Invalid option: -$OPTARG" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
for file in "$service_directory"/* ; do
|
||||
if [[ -f "$file" ]]; then
|
||||
service_name=$(basename "$file")
|
||||
if $overwrite; then
|
||||
echo "Removing logfile specification for $service_name"
|
||||
sudo sed -i '/^logfile/d' "$file"
|
||||
fi
|
||||
if ! grep -q "^logfile = \w+$" "$file"; then
|
||||
logfile_path="$logfile_directory/$service_name.$logfile_extenstion"
|
||||
echo "logfile = $logfile_path" | sudo tee -a "$file"
|
||||
echo "Added logfile $logfile_Path to service $service_name"
|
||||
else
|
||||
echo "Service $service_name already has logfile specified"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
@@ -1,40 +0,0 @@
|
||||
# read list of packages to exclude from update
|
||||
exclude_list_file=~/.setup/packages/exclude_from_updating.list
|
||||
exclude_list=$(cat $exclude_list_file)
|
||||
|
||||
pacman_config_file=/etc/pacman.conf
|
||||
|
||||
# get current IngorePkg line from pacman.conf
|
||||
# line may have # at the beginning
|
||||
old_ignore_line=$(grep -P "^#?IgnorePkg" $pacman_config_file)
|
||||
echo old_ignore_line: $old_ignore_line
|
||||
|
||||
# split line at = and take second part
|
||||
old_packages_line=$(echo $old_ignore_line | cut -d= -f2)
|
||||
echo old_packages_line: $old_packages_line
|
||||
|
||||
# extract list of packages from line, separated by spaces
|
||||
old_ignore_packages=$(echo $old_packages_line| tr -s ' ' '\n')
|
||||
echo old_packages: $old_packages
|
||||
|
||||
# add packages to ignore line, if not already there
|
||||
new_ignore_packages=$old_ignore_packages
|
||||
for package in $exclude_list; do
|
||||
if [[ ! $old_ignore_packages =~ $package ]]; then
|
||||
new_ignore_packages="$new_ignore_packages $package"
|
||||
fi
|
||||
done
|
||||
|
||||
# join packages with spaces
|
||||
new_ignore_packages_line=$(echo $new_ignore_packages | tr '\n' ' ')
|
||||
echo new_ignore_packages_line: $new_ignore_packages_line
|
||||
|
||||
# add IgnorePkg= to beginning of line
|
||||
new_ignore_line="IgnorePkg = $new_ignore_packages_line"
|
||||
echo new_ignore_line: $new_ignore_line
|
||||
|
||||
# replace old IgnorePkg line with new one
|
||||
echo "updating pacman.conf"
|
||||
sudo sed -i "s/$old_ignore_line/$new_ignore_line/" $pacman_config_file
|
||||
|
||||
echo "done"
|
||||
@@ -1,9 +0,0 @@
|
||||
Section "InputClass"
|
||||
Identifier "touchpad"
|
||||
Driver "libinput"
|
||||
MatchIsTouchpad "on"
|
||||
Option "Tapping" "on"
|
||||
Option "TappingButtonMap" "lrm"
|
||||
Option "NaturalScrolling" "true"
|
||||
Option "ClickMethod" "clickfinger"
|
||||
EndSection
|
||||
@@ -1 +0,0 @@
|
||||
xdg-mime default firefox.desktop x-scheme-handler/https x-scheme-handler/http &
|
||||
@@ -1,22 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
config_file_name="30-touchpad.conf"
|
||||
config_folder="/etc/X11/xorg.conf.d/"
|
||||
resources_folder="$(dirname "$0")/resources"
|
||||
|
||||
|
||||
if [ ! -f "$config_folder/$config_file_name" ]; then
|
||||
if [ -f "$resources_folder/$config_file_name" ]; then
|
||||
cp "$resources_folder/$config_file_name" "$config_folder/$config_file_name"
|
||||
if [ -f "$config_folder/$config_file_name" ]; then
|
||||
echo "File copied successfully."
|
||||
else
|
||||
echo "Error copying file"
|
||||
fi
|
||||
else
|
||||
echo "Error: Resource file not found."
|
||||
fi
|
||||
else
|
||||
echo "File already exists."
|
||||
fi
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
os-prober
|
||||
openssh
|
||||
ntfs-3g
|
||||
jdk-openjdk
|
||||
bluez
|
||||
bluez-utils
|
||||
autorandr
|
||||
wireless_tools
|
||||
playerctl
|
||||
pulseaudio
|
||||
picom
|
||||
psensor
|
||||
powertop
|
||||
htop
|
||||
unzip
|
||||
hunspell-de
|
||||
gnome-keyring
|
||||
xclip
|
||||
xorg-xwininfo
|
||||
gvfs-smb
|
||||
avahi
|
||||
python-pip
|
||||
man-db
|
||||
fcron
|
||||
linux-headers
|
||||
@@ -1,41 +0,0 @@
|
||||
zsh
|
||||
tmux
|
||||
sddm
|
||||
zsh-theme-powerlevel10k
|
||||
tff-meslo-nerd-font-powerlevel10k
|
||||
powerline
|
||||
i3-wm
|
||||
termite
|
||||
alacritty
|
||||
rofi
|
||||
ranger
|
||||
polybar
|
||||
blueman
|
||||
simplescreenrecorder
|
||||
redshift
|
||||
flameshot
|
||||
network-manager-applet
|
||||
mullvad-vpn-beta-bin
|
||||
ueberzug
|
||||
pcmanfm
|
||||
pavucontrol
|
||||
lxrandr
|
||||
ttf-icomoon-feather
|
||||
nextcloud-client
|
||||
brave-bin
|
||||
firefox
|
||||
thunderbird
|
||||
signal-desktop
|
||||
smplayer
|
||||
qbittorrent
|
||||
qalculate-gtk
|
||||
evince
|
||||
okular
|
||||
pamixer
|
||||
xbindkeys
|
||||
xorg-xmodmap
|
||||
dunst
|
||||
ksysguard
|
||||
xorg-xsetroot
|
||||
xorg-xrdb
|
||||
vlc
|
||||
@@ -1,17 +0,0 @@
|
||||
docker
|
||||
docker-compose
|
||||
podman
|
||||
vagrant
|
||||
|
||||
postman-bin
|
||||
beekeeper-studio-bin
|
||||
code-insiders
|
||||
pycharm-professional
|
||||
mongodb-compass
|
||||
|
||||
yarn
|
||||
npm
|
||||
|
||||
texlive-most
|
||||
texlive-latexindent-meta
|
||||
biber
|
||||
@@ -1,12 +0,0 @@
|
||||
backlight-dinit
|
||||
bluez-dinit
|
||||
dbus-dinit
|
||||
dhcpcd-dinit
|
||||
dinit
|
||||
dinit-base
|
||||
dinit-rc
|
||||
elogind-dinit
|
||||
mullvad-vpn-dinit
|
||||
networkmanager-dinit
|
||||
sddm-dinit
|
||||
tlp-dinit
|
||||
@@ -1,2 +0,0 @@
|
||||
cuda
|
||||
cudnn
|
||||
@@ -1,5 +0,0 @@
|
||||
wine
|
||||
lutris
|
||||
lib32-libpulse
|
||||
winetricks
|
||||
steam
|
||||
@@ -1,6 +0,0 @@
|
||||
backlight
|
||||
bluez
|
||||
dhcpcd
|
||||
mullvad-vpn
|
||||
networkmanager
|
||||
sddm
|
||||
@@ -147,8 +147,6 @@ bindkey '5D' backward-word
|
||||
bindkey '5C' forward-word
|
||||
bindkey '^[[3~' delete-char
|
||||
|
||||
powerline-config tmux setup
|
||||
|
||||
alias vim=nvim
|
||||
alias sudo='sudo '
|
||||
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
# Agent Guide: Alex's Dotfiles
|
||||
|
||||
## Repository and safety model
|
||||
|
||||
This directory (`/home/alex`) is the **yadm worktree** for personal, Arch-oriented dotfiles. Use `yadm` (rather than assuming a conventional clone) for status, diff, and tracked-file operations.
|
||||
|
||||
- This is machine-specific configuration, **not** a bootstrap installer. There is no authoritative root install, link, overwrite, backup, or rollback command.
|
||||
- Preserve `##class.*` filename variants; they are yadm alternatives for machine classes.
|
||||
- Do not expose, copy, or add private hostnames, IP addresses, account names, tokens, or credentials. Keep machine-specific secrets in local/private configuration.
|
||||
- Scope changes narrowly. Do not reformat unrelated dotfiles or overwrite existing user changes.
|
||||
- Treat scripts that use `sudo`, modify `/etc`, install packages, rebuild boot artifacts, or alter services as potentially disruptive. Inspect them first; do not run them merely to validate an edit.
|
||||
|
||||
Start with the root `README.md` for the dotfile-specific constraints and manual-validation guidance.
|
||||
|
||||
## Shell
|
||||
|
||||
- Treat Fish (`fish`) as the default interactive shell. Write user-facing shell commands using Fish-compatible syntax unless another shell is explicitly requested or required.
|
||||
|
||||
## Knowledge base
|
||||
|
||||
- The knowledge base is an Obsidian vault at `~/cloud/knowledge`.
|
||||
- Search the vault when a task depends on specific existing knowledge.
|
||||
- Add new knowledge to the vault when it is durable and noteworthy; skip routine or transient details.
|
||||
|
||||
## Ownership map
|
||||
|
||||
| Path | Owns |
|
||||
| --- | --- |
|
||||
| Root dotfiles (`.zshrc`, `.config/`, `.scripts/`, etc.) | Ordinary yadm-managed user configuration and helpers |
|
||||
| `system-config/` | Declarative Decman configuration for this Arch desktop |
|
||||
| `system-config/config/system/` | Files deployed into system locations; do **not** edit deployed `/etc` targets |
|
||||
| `system-config/config/user/` | Selected user dotfiles deployed by Decman; do **not** edit deployed copies |
|
||||
| `system-config/packages/` | Native and AUR package lists organized by concern |
|
||||
| `system-config/manifests/` | Enabled system and user unit manifests |
|
||||
| `system-config/modules/` | Thin Decman deployment/loading adapters only |
|
||||
|
||||
`system-config/` belongs to this yadm worktree; it is not a nested Git repository.
|
||||
|
||||
## Decman architecture
|
||||
|
||||
`system-config/source.py` is the Decman entrypoint. It currently selects the `desktop()` profile from `hosts.py` and applies modules in this order:
|
||||
|
||||
1. `files`
|
||||
2. `pacman`
|
||||
3. `aur`
|
||||
4. `systemd`
|
||||
|
||||
`hosts.py` composes host profiles from package concerns:
|
||||
|
||||
- Shared concerns: `common/core`, `common/hardware`, `common/wayland`, `common/fonts`, `common/development`, `common/productivity`, `common/media`, `common/research`, `common/network`, and `common/services`.
|
||||
- Host-specific concerns: `laptop/hardware` and `desktop/local`.
|
||||
- The active desktop profile combines the shared concerns, `desktop/local`, and desktop system/user configuration.
|
||||
|
||||
Keep policy in the declared data directories, not in Python glue:
|
||||
|
||||
- Add a package to the narrowest explanatory `packages/<scope>/<concern>-repo.txt` or `-aur.txt` file. A package must be owned exactly once.
|
||||
- Put shared versus host-specific system policy in `config/system/common/` or the applicable host directory.
|
||||
- Put selected user configuration in `config/user/{common,laptop,desktop}/`.
|
||||
- Put service enablement in matching `manifests/{common,laptop,desktop}/` concern files.
|
||||
- Keep `modules/` reusable and thin; it adapts package lists, file trees, and manifests to Decman.
|
||||
|
||||
The ignored dependency lists are adoption guards that prevent Decman orphan cleanup from removing dependencies. Do not delete or regenerate them casually.
|
||||
|
||||
## Change and validation workflow
|
||||
|
||||
For any change, first identify the owning layer above. For Decman changes:
|
||||
|
||||
1. Edit the source in `system-config/`, never the generated/deployed target.
|
||||
2. Run the read-only consistency check from that directory:
|
||||
|
||||
```bash
|
||||
./scripts/verify.py
|
||||
```
|
||||
|
||||
3. After an intentional package-list change, regenerate and review the derived lists before applying:
|
||||
|
||||
```bash
|
||||
./scripts/split_packages.py
|
||||
./scripts/refresh_orphan_guards.py
|
||||
./scripts/verify.py
|
||||
yadm diff -- system-config
|
||||
```
|
||||
|
||||
4. Require explicit human approval before applying system state. The review-first commands are:
|
||||
|
||||
```bash
|
||||
sudo decman --source source.py --dry-run --no-hooks
|
||||
sudo decman --source source.py --no-hooks
|
||||
```
|
||||
|
||||
The second command mutates system files, packages, and services; do not run it as routine validation.
|
||||
|
||||
For ordinary dotfiles, use the smallest relevant validation: shell syntax/source checks for shell files, application/session testing for desktop configuration, or an explicit manual review. Preserve a rollback path when changing active configuration.
|
||||
|
||||
## Before finishing
|
||||
|
||||
- Review with `yadm diff --check` and `yadm diff`.
|
||||
- Confirm that unrelated working-tree changes were not modified.
|
||||
- State which validation was run and which system-changing operations were intentionally not run.
|
||||
@@ -6,7 +6,7 @@ Personal, Arch-oriented user dotfiles and support scripts for shells, window man
|
||||
|
||||
There is no authoritative root installation, linking, backup, overwrite, or rollback script. Do not infer one: review and apply only the individual files appropriate to a machine. Some filenames use `##class.arch_*` suffixes to distinguish machine classes. The repository also includes a nested README for the custom/vendored `st` terminal under `.config/st/`; it documents that component, not installation of this repository.
|
||||
|
||||
Several scripts assume paths below `~/.setup`, Arch tooling, and root access. Some repository scripts contain machine-specific connection details; do not publish, copy, or document such values. Use local, private configuration for hosts, addresses, accounts, and credentials.
|
||||
Several scripts assume Arch tooling and root access. Some repository scripts contain machine-specific connection details; do not publish, copy, or document such values. Use local, private configuration for hosts, addresses, accounts, and credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
@@ -15,43 +15,29 @@ Several scripts assume paths below `~/.setup`, Arch tooling, and root access. So
|
||||
- Desktop/session tools matching the chosen configuration (for example X11/XMonad-related files where applicable).
|
||||
- Root access only for the system-changing scripts described below.
|
||||
|
||||
Package lists in `.setup/packages/` are inputs for a user-managed installation; no repository command defines how to install an entire list. Inspect package names and select lists for the intended machine before installing anything.
|
||||
Package and service policy lives under `system-config/` and is applied through Decman. Review `system-config/README.md`, the active host profile, and a dry run before changing system state.
|
||||
|
||||
## Safe review and user-level configuration
|
||||
|
||||
Start by reviewing the intended files and any machine-class variants. Typical areas are:
|
||||
|
||||
- `.zshrc`, `.bashrc`, `.terminal_aliases`, `.tmux.conf`, and `.p10k.zsh` — shell and terminal setup.
|
||||
- `.xmonad/`, `.Xresources##class.*`, `.xprofile##class.*`, and `.config/` — desktop/window-manager and application configuration.
|
||||
- `.config/` — desktop and application configuration.
|
||||
- `.scripts/` — optional shell, network, virtual-environment, and update helpers.
|
||||
- `.setup/packages/` — package lists grouped by purpose.
|
||||
- `system-config/` — Decman-managed packages, system files, selected user configuration, and service manifests.
|
||||
|
||||
Back up existing configuration before manually placing or linking a file. No test suite is provided; validate a change in the relevant shell/session or application and keep a rollback copy of the previous configuration.
|
||||
|
||||
## Package updates
|
||||
## System-changing configuration
|
||||
|
||||
`.scripts/updating.sh` defines, but does not invoke, two functions. It expects `~/.setup/packages/exclude_from_updating.list`:
|
||||
`system-config/` is the source of truth for managed packages, system files, selected user configuration, and enabled services. Use its review-first wrapper:
|
||||
|
||||
```sh
|
||||
source .scripts/updating.sh
|
||||
update_system
|
||||
# or
|
||||
update_pacman_packages
|
||||
```fish
|
||||
./system-config/decman verify
|
||||
./system-config/decman dry-run
|
||||
```
|
||||
|
||||
> **Warning: system-wide, potentially disruptive operation.** `update_system` runs `yay -Syu` and `update_pacman_packages` runs `sudo pacman -Syu`, both non-interactively and with the exclusion list. Review the exclusion list and pending package changes first. These functions update the running system; they are not tests.
|
||||
|
||||
## System-changing scripts
|
||||
|
||||
The following scripts mutate files outside this repository and must be inspected before use:
|
||||
|
||||
- `.setup/config/setup_touchpad.sh` copies an X11 configuration into `/etc/X11/xorg.conf.d/` when absent.
|
||||
- `.setup/config/exclude_from_update.sh` edits `/etc/pacman.conf` with `sudo` based on `~/.setup/packages/exclude_from_updating.list`.
|
||||
- `.setup/config/dinit_add_logs_to_all_services.sh` edits files in `/etc/dinit.d` and writes log specifications under `/var/log/dinit`; its `-o` option removes existing logfile lines before adding them.
|
||||
|
||||
> **Warning: destructive/system-wide operations.** These scripts can alter system package policy, service definitions, or input configuration. They have no repository-provided dry run or rollback. Run only on a machine you control after backups and after checking paths, permissions, and the script contents.
|
||||
|
||||
`.setup/config/set_default_programs.sh` sets the default HTTP/HTTPS handler through `xdg-mime`; review the desktop entry before using it.
|
||||
> **Warning: system-wide, potentially disruptive operation.** `./system-config/decman apply` changes packages, system files, boot artifacts, and services. Run it only after reviewing a dry run. No root-level bootstrap or rollback command exists.
|
||||
|
||||
## Custom `st` terminal
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Desktop Package Audit
|
||||
|
||||
Generated from `pacman -Qen` (official repository, explicitly installed) and `pacman -Qem` (AUR/foreign, explicitly installed). Package versions are included so this is an exact inventory.
|
||||
Originally generated from `pacman -Qen` and `pacman -Qem` during desktop adoption. Versions record that snapshot; the package lists under `packages/` are authoritative for current policy.
|
||||
|
||||
## Decision key
|
||||
|
||||
@@ -119,7 +119,7 @@ Generated from `pacman -Qen` (official repository, explicitly installed) and `pa
|
||||
| `vulkan-mesa-layers` | `1:26.1.5-1` | REVIEW — provisional desktop/local retention candidate |
|
||||
| `vulkan-radeon` | `1:26.1.5-1` | REVIEW — provisional desktop/local retention candidate |
|
||||
| `vulkan-tools` | `1.4.350.1-1` | KEEP — declared common desktop concern |
|
||||
| `waybar` | `0.15.0-2` | KEEP — declared common desktop concern |
|
||||
| `waybar` | `0.15.0-2` | RETIRE — replaced by Noctalia and no longer declared |
|
||||
| `wdisplays` | `1.1.3-2` | REVIEW — provisional desktop/local retention candidate |
|
||||
| `wget` | `1.25.0-6` | REVIEW — provisional desktop/local retention candidate |
|
||||
| `wine` | `11.14-2` | REVIEW — provisional desktop/local retention candidate |
|
||||
@@ -150,7 +150,7 @@ Generated from `pacman -Qen` (official repository, explicitly installed) and `pa
|
||||
| `lutris-git` | `0.5.22.r394.g1b0f116-1` | REVIEW — provisional desktop/local retention candidate |
|
||||
| `mongodb-compass-bin` | `1.49.11-2` | KEEP — declared common desktop concern |
|
||||
| `mullvad-vpn-beta-bin` | `2026.3.stable-1` | KEEP — declared common desktop concern |
|
||||
| `noctalia` | `5.0.0_beta.3-2` | REVIEW — provisional desktop/local retention candidate |
|
||||
| `noctalia-git` | `5.0.0.r5317.ga4324409f-1` | KEEP — declared common Wayland concern |
|
||||
| `nomacs-git` | `3.23.2.r0.gccb6ff42-1` | REVIEW — provisional desktop/local retention candidate |
|
||||
| `pycharm-professional` | `2025.2.2-1` | REVIEW — provisional desktop/local retention candidate |
|
||||
| `rustrover` | `2026.1.3-1` | REVIEW — provisional desktop/local retention candidate |
|
||||
@@ -197,6 +197,7 @@ rustrover
|
||||
ueberzug
|
||||
vkd3d
|
||||
vulkan-mesa-layers
|
||||
waybar
|
||||
wine
|
||||
winetricks
|
||||
xclicker
|
||||
|
||||
+34
-10
@@ -5,7 +5,8 @@ A small, declarative Arch configuration managed by Decman.
|
||||
## Design
|
||||
|
||||
- **Concerns live in `packages/`**: each concern has a native (`*-repo.txt`)
|
||||
and AUR (`*-aur.txt`) list.
|
||||
and AUR (`*-aur.txt`) list, plus an optional global npm (`*-npm.txt`) list
|
||||
for command packages unavailable through Arch packaging.
|
||||
- **Hosts live in `hosts.py`**: a host composes package concerns and explicit
|
||||
system state. `desktop()` owns this desktop's boot, storage, NVIDIA, input,
|
||||
SDDM, network-policy, and user-session configuration.
|
||||
@@ -55,28 +56,51 @@ remove those explicitly in a separate reviewed package change.
|
||||
| Desktop | shared concerns, `common/hardware`, and a reviewable `desktop/local` set; host state is in `config/system/desktop/` |
|
||||
|
||||
Every package must have a named purpose. Add a new concern when an existing one
|
||||
does not explain a package. System and user units use the same naming:
|
||||
does not explain a package. Missing packages from `*-npm.txt` are installed
|
||||
globally after the pacman and AUR steps; unrelated global npm packages are not
|
||||
removed. System and user units use the same naming:
|
||||
`manifests/common/<concern>-{system,user}.txt` or
|
||||
`manifests/laptop/<concern>-system.txt`.
|
||||
|
||||
## Commands
|
||||
|
||||
From the repository root, run common workflows through the
|
||||
`./system-config/decman` wrapper, which uses fixed Decman arguments:
|
||||
|
||||
```bash
|
||||
./system-config/decman verify
|
||||
./system-config/decman dry-run
|
||||
./system-config/decman apply
|
||||
```
|
||||
|
||||
`dry-run` and `apply` first run `verify`. They invoke Decman with `--no-hooks`,
|
||||
matching the deliberately review-first direct commands below. `apply` changes
|
||||
system state; use it only after reviewing the dry run.
|
||||
|
||||
The wrapper locates its configuration relative to itself, so its commands run
|
||||
from the `system-config` directory. Command output and errors stream directly
|
||||
to the terminal. If a child command fails, the wrapper prints the failed command
|
||||
and returns its exit status. A missing executable returns `127`, another
|
||||
execution error (including a permission error) returns `126`, and an
|
||||
interrupted workflow returns `130`.
|
||||
|
||||
```bash
|
||||
cd ~/system-config
|
||||
./scripts/verify.py
|
||||
sudo decman --source source.py --dry-run --no-hooks
|
||||
sudo decman --source source.py --no-hooks
|
||||
```
|
||||
|
||||
`verify.py` proves that every currently explicit package appears exactly once
|
||||
in the active laptop profile. The ignored dependency lists prevent Decman's
|
||||
orphan cleanup from removing dependencies during adoption.
|
||||
in the active desktop profile, including global npm command packages. The
|
||||
ignored dependency lists prevent Decman's orphan cleanup from removing
|
||||
dependencies during adoption.
|
||||
|
||||
After intentional package changes, regenerate and review concern lists:
|
||||
|
||||
```bash
|
||||
./scripts/split_packages.py
|
||||
./scripts/refresh_orphan_guards.py
|
||||
./scripts/verify.py
|
||||
git diff
|
||||
./system-config/decman refresh-package-state
|
||||
yadm diff -- system-config
|
||||
```
|
||||
|
||||
`refresh-package-state` runs `split-packages`, `refresh-orphan-guards`, and
|
||||
`verify` in that order. Those individual file-changing commands are also
|
||||
available through the dispatcher when only one is needed.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[Theme]
|
||||
ThemeDir=/usr/share/sddm/themes
|
||||
Current=maya
|
||||
Current=noctalia
|
||||
EnableAvatars=false
|
||||
|
||||
[Users]
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# Used by the Noctalia Pi Status Bridge adapter and the Hyprland launcher.
|
||||
PI_STATUS_BRIDGE_CLIENT=/home/alex/.local/bin/pi-status-bridge-client
|
||||
PI_STATUS_UI_BINARY=/home/alex/.local/bin/pi-status-ui
|
||||
# Ctrl+Super+Space starts a fresh Pi session in this worktree. Change as needed.
|
||||
PI_STATUS_DEFAULT_WORKTREE=/home/alex/projects/pi-gui
|
||||
|
||||
@@ -5,6 +5,12 @@
|
||||
-- stacking/tabbed, and resize-mode behavior is intentionally deferred.
|
||||
local machine = dofile(os.getenv("HOME") .. "/.config/hypr/machine.lua")
|
||||
|
||||
-- Machine-specific session environment must be set before Hyprland initializes
|
||||
-- its graphics backend. The laptop profile selects only the Intel iGPU here.
|
||||
for name, value in pairs(machine.environment or {}) do
|
||||
hl.env(name, value)
|
||||
end
|
||||
|
||||
for _, monitor in ipairs(machine.monitors or {}) do
|
||||
hl.monitor(monitor)
|
||||
end
|
||||
@@ -63,14 +69,17 @@ hl.workspace_rule({
|
||||
-- Application and session bindings.
|
||||
local noctalia_ipc = "noctalia msg "
|
||||
local pi_status_ui_toggle = 'ui="${PI_STATUS_UI_BINARY:-$HOME/.local/bin/pi-status-ui}"; if test -x "$ui"; then setsid -f env TMPDIR=/tmp "$ui" --toggle >/tmp/pi-status-ui.log 2>&1; fi'
|
||||
local pi_status_ui_new_session = 'ui="${PI_STATUS_UI_BINARY:-$HOME/.local/bin/pi-status-ui}"; if test -x "$ui"; then setsid -f env TMPDIR=/tmp "$ui" --new >/tmp/pi-status-ui.log 2>&1; fi'
|
||||
local pi_status_ui_quick = 'ui="${PI_STATUS_UI_BINARY:-$HOME/.local/bin/pi-status-ui}"; if test -x "$ui"; then setsid -f env TMPDIR=/tmp "$ui" --quick >/tmp/pi-status-ui.log 2>&1; fi'
|
||||
-- Tap and release Super on its own to open Noctalia's control-center home.
|
||||
hl.bind(main_mod .. " + SUPER_L", hl.dsp.exec_cmd(noctalia_ipc .. "panel-toggle control-center"), { release = true })
|
||||
hl.bind(main_mod .. " + RETURN", hl.dsp.exec_cmd(terminal))
|
||||
hl.bind(main_mod .. " + CTRL + RETURN", hl.dsp.exec_cmd(terminal .. " -e zellij"))
|
||||
hl.bind(main_mod .. " + SHIFT + RETURN", hl.dsp.exec_cmd("rofi -show combi"))
|
||||
hl.bind(main_mod .. " + SPACE", hl.dsp.exec_cmd(pi_status_ui_toggle))
|
||||
hl.bind(main_mod .. " + CTRL + SPACE", hl.dsp.exec_cmd(pi_status_ui_new_session))
|
||||
hl.bind(main_mod .. " + S", hl.dsp.exec_cmd(pi_status_ui_quick))
|
||||
hl.bind(main_mod .. " + N", hl.dsp.exec_cmd(noctalia_ipc .. "panel-toggle alex/knowledge-lookup:panel"))
|
||||
hl.bind(main_mod .. " + S", hl.dsp.exec_cmd(noctalia_ipc .. "panel-toggle control-center"))
|
||||
hl.bind(main_mod .. " + 0", hl.dsp.exec_cmd(noctalia_ipc .. "panel-toggle session"))
|
||||
hl.bind(main_mod .. " + SHIFT + F", hl.dsp.exec_cmd(noctalia_ipc .. "bar-toggle main"))
|
||||
hl.bind(main_mod .. " + SHIFT + R", hl.dsp.exec_cmd("hyprctl reload"))
|
||||
@@ -104,7 +113,8 @@ for _, direction in ipairs({ "left", "down", "up", "right" }) do
|
||||
hl.bind(main_mod .. " + " .. direction, hl.dsp.focus({ direction = direction }))
|
||||
end
|
||||
|
||||
for key, direction in pairs({ H = "l", J = "d", K = "u", L = "r", LEFT = "l", DOWN = "d", UP = "u", RIGHT = "r" }) do
|
||||
-- Super+Shift+K is reserved for Obsidian; Super+Shift+Up still moves windows up.
|
||||
for key, direction in pairs({ H = "l", J = "d", L = "r", LEFT = "l", DOWN = "d", UP = "u", RIGHT = "r" }) do
|
||||
hl.bind(main_mod .. " + SHIFT + " .. key, hl.dsp.window.move({ direction = direction }))
|
||||
end
|
||||
|
||||
@@ -124,6 +134,9 @@ hl.bind(main_mod .. " + CTRL + LEFT", hl.dsp.focus({ workspace = "-1" }))
|
||||
-- Hyprland special workspaces are the Wayland analogue of the i3 scratchpad.
|
||||
hl.bind(main_mod .. " + MINUS", hl.dsp.workspace.toggle_special("scratchpad"))
|
||||
hl.bind(main_mod .. " + SHIFT + MINUS", hl.dsp.window.move({ workspace = "special:scratchpad" }))
|
||||
hl.bind(main_mod .. " + SHIFT + S", hl.dsp.workspace.toggle_special("spotify"))
|
||||
hl.bind(main_mod .. " + SHIFT + M", hl.dsp.workspace.toggle_special("mail"))
|
||||
hl.bind(main_mod .. " + SHIFT + K", hl.dsp.workspace.toggle_special("obsidian"))
|
||||
|
||||
-- Keep the i3 floating and fullscreen shortcuts. Layout-specific binds are deferred.
|
||||
hl.bind(main_mod .. " + F", hl.dsp.window.fullscreen({ action = "toggle" }))
|
||||
@@ -141,8 +154,8 @@ local function float_rule(name, match, border_size)
|
||||
})
|
||||
end
|
||||
|
||||
hl.window_rule({ name = "obsidian-workspace", match = { class = "^obsidian$" }, workspace = "8" })
|
||||
hl.window_rule({ name = "thunderbird-workspace", match = { class = "^Thunderbird$" }, workspace = "9" })
|
||||
hl.window_rule({ name = "obsidian-workspace", match = { class = "^(obsidian|md[.]obsidian[.]Obsidian)$" }, workspace = "special:obsidian silent", no_initial_focus = true })
|
||||
hl.window_rule({ name = "thunderbird-mail", match = { class = "^(Thunderbird|thunderbird|org[.]mozilla[.]Thunderbird)$" }, workspace = "special:mail silent", no_initial_focus = true })
|
||||
float_rule("pi-status-ui", { class = "^(pi-status-ui|Pi-status-ui)$" }, 1)
|
||||
float_rule("alsamixer", { title = "^alsamixer$" }, 1)
|
||||
float_rule("qalculate", { title = "^Qalculate!$" })
|
||||
@@ -153,8 +166,8 @@ float_rule("volume-control", { title = "^Volume Control$" })
|
||||
float_rule("virtualbox", { class = ".*VirtualBox.*" })
|
||||
hl.window_rule({ name = "virtualbox-manager-tiles", match = { class = ".*VirtualBox Manager.*" }, tile = true })
|
||||
hl.window_rule({ name = "virtualbox-machine-tiles", match = { class = ".*VirtualBox Machine.*" }, tile = true })
|
||||
-- Send music clients to the existing scratchpad without stealing startup focus.
|
||||
hl.window_rule({ name = "spotify-music", match = { class = "^Spotify$" }, workspace = "special:scratchpad silent", no_initial_focus = true })
|
||||
-- Send music clients to hidden workspaces without stealing startup focus.
|
||||
hl.window_rule({ name = "spotify-music", match = { class = "^Spotify$" }, workspace = "special:spotify silent", no_initial_focus = true })
|
||||
hl.window_rule({ name = "deezer-music", match = { class = "^Deezer$" }, workspace = "special:scratchpad silent", no_initial_focus = true })
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
|
||||
@@ -6,7 +6,24 @@ x-scheme-handler/webcal=userapp-Thunderbird-0DWKA3.desktop
|
||||
text/calendar=userapp-Thunderbird-0DWKA3.desktop
|
||||
application/x-extension-ics=userapp-Thunderbird-0DWKA3.desktop
|
||||
x-scheme-handler/webcals=userapp-Thunderbird-0DWKA3.desktop
|
||||
image/png=nomacs.desktop
|
||||
application/pdf=org.gnome.Evince.desktop
|
||||
image/avif=org.nomacs.ImageLounge.desktop
|
||||
image/bmp=org.nomacs.ImageLounge.desktop
|
||||
image/gif=org.nomacs.ImageLounge.desktop
|
||||
image/heic=org.nomacs.ImageLounge.desktop
|
||||
image/heif=org.nomacs.ImageLounge.desktop
|
||||
image/jpeg=org.nomacs.ImageLounge.desktop
|
||||
image/jxl=org.nomacs.ImageLounge.desktop
|
||||
image/png=org.nomacs.ImageLounge.desktop
|
||||
image/tiff=org.nomacs.ImageLounge.desktop
|
||||
image/webp=org.nomacs.ImageLounge.desktop
|
||||
image/x-eps=org.nomacs.ImageLounge.desktop
|
||||
image/x-ico=org.nomacs.ImageLounge.desktop
|
||||
image/x-portable-bitmap=org.nomacs.ImageLounge.desktop
|
||||
image/x-portable-graymap=org.nomacs.ImageLounge.desktop
|
||||
image/x-portable-pixmap=org.nomacs.ImageLounge.desktop
|
||||
image/x-xbitmap=org.nomacs.ImageLounge.desktop
|
||||
image/x-xpixmap=org.nomacs.ImageLounge.desktop
|
||||
|
||||
[Added Associations]
|
||||
x-scheme-handler/mailto=userapp-Thunderbird-JBPLA3.desktop;
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
/*
|
||||
* breeze-dark.rasi
|
||||
* rofi theme inspired by plasma breeze
|
||||
* MonsieurBedard
|
||||
*/
|
||||
|
||||
* {
|
||||
/* Base */
|
||||
default-background: rgba(49, 52, 56, 100%); // <- change this for transparency
|
||||
default-foreground: rgba(239, 240, 241, 100%);
|
||||
default-border: rgba(97, 101, 105, 100%);
|
||||
alternative-background: rgba(35, 38, 41, 100%);
|
||||
invisible: rgba(0, 0, 0, 0%);
|
||||
|
||||
/* Colors */
|
||||
hard-blue: rgba(42, 139, 218, 100%);
|
||||
light-blue: rgba(24, 53, 69, 100%);
|
||||
|
||||
hard-red: rgba(141, 58, 80, 100%);
|
||||
light-red: rgba(77, 31, 37, 100%);
|
||||
|
||||
hard-green: rgba(39, 161, 69, 100%);
|
||||
light-green: rgba(19, 55, 35, 100%);
|
||||
|
||||
/* Universal */
|
||||
background-color: @invisible;
|
||||
border-color: @default-border;
|
||||
font: "Noto Sans 30";
|
||||
text-color: @default-foreground;
|
||||
}
|
||||
|
||||
#window {
|
||||
background-color: @default-background;
|
||||
border: 1;
|
||||
border-radius: 3;
|
||||
border-color: @default-border;
|
||||
padding: 7;
|
||||
}
|
||||
|
||||
#mainbox {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#message {
|
||||
border: 1;
|
||||
border-radius: 3;
|
||||
padding: 5;
|
||||
background-color: @alternative-background;
|
||||
}
|
||||
|
||||
#textbox {
|
||||
background-color: @entry-background;
|
||||
}
|
||||
|
||||
#listview {
|
||||
fixed-height: 0;
|
||||
spacing: 2;
|
||||
scrollbar: false;
|
||||
padding: 2 0 0;
|
||||
}
|
||||
|
||||
#element {
|
||||
padding: 5;
|
||||
border: 1;
|
||||
border-radius: 3;
|
||||
border-color: @invisible;
|
||||
}
|
||||
|
||||
#element.normal.normal {
|
||||
background-color: @invisible;
|
||||
}
|
||||
|
||||
#element.normal.urgent {
|
||||
background-color: @light-red;
|
||||
}
|
||||
|
||||
#element.normal.active {
|
||||
background-color: @light-green;
|
||||
}
|
||||
|
||||
#element.selected.normal {
|
||||
background-color: @light-blue;
|
||||
border-color: @hard-blue;
|
||||
}
|
||||
|
||||
#element.selected.urgent {
|
||||
background-color: @light-red;
|
||||
border-color: @hard-red;
|
||||
}
|
||||
|
||||
#element.selected.active {
|
||||
background-color: @light-green;
|
||||
border-color: @hard-green;
|
||||
}
|
||||
|
||||
#mode-switcher {
|
||||
spacing: 0;
|
||||
}
|
||||
|
||||
#button {
|
||||
border: 0 0 3 0;
|
||||
border-color: @invisible;
|
||||
padding: 3;
|
||||
}
|
||||
|
||||
#button.selected {
|
||||
border-color: @hard-blue;
|
||||
}
|
||||
|
||||
#inputbar {
|
||||
spacing: 0;
|
||||
padding: 1;
|
||||
}
|
||||
|
||||
#case-indicator {
|
||||
spacing: 0;
|
||||
padding: 3px;
|
||||
background-color: @alternative-background;
|
||||
border: 1 1 1 0;
|
||||
border-radius: 0 2 2 0;
|
||||
}
|
||||
|
||||
#entry {
|
||||
background-color: @alternative-background;
|
||||
padding: 3px;
|
||||
border: 1 0 1 1;
|
||||
border-radius: 2 0 0 2;
|
||||
}
|
||||
|
||||
#prompt {
|
||||
padding: 3 7 3 0;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
configuration {
|
||||
modi: "combi,window,drun,ssh";
|
||||
font: "hack 30";
|
||||
combi-modi: "window,drun,ssh";
|
||||
}
|
||||
|
||||
@theme "glue_pro_blue"
|
||||
@@ -4,6 +4,8 @@ return {
|
||||
{
|
||||
output = "HDMI-A-1",
|
||||
mode = "3840x2160@120",
|
||||
bitdepth = 10,
|
||||
cm = "hdr",
|
||||
position = "0x0",
|
||||
scale = 1,
|
||||
},
|
||||
@@ -18,6 +20,7 @@ return {
|
||||
"nextcloud",
|
||||
"spotify",
|
||||
"brave",
|
||||
"alacritty -e tmux",
|
||||
-- Kitty keeps Yazi previews terminal-native; Alacritty needs Überzug++ windows.
|
||||
"kitty -e tmux",
|
||||
},
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ padding = 6.0
|
||||
enabled = true
|
||||
fill = "surface_variant"
|
||||
id = "g2"
|
||||
members = ["network", "bluetooth"]
|
||||
members = ["network", "network-download", "network-upload", "bluetooth"]
|
||||
opacity = 1.0
|
||||
padding = 6.0
|
||||
|
||||
@@ -73,6 +73,18 @@ opacity = 1.0
|
||||
padding = 6.0
|
||||
radius = 5.0
|
||||
|
||||
[widget.network-download]
|
||||
type = "sysmon"
|
||||
stat = "net_rx"
|
||||
visualization = "none"
|
||||
show_value = true
|
||||
|
||||
[widget.network-upload]
|
||||
type = "sysmon"
|
||||
stat = "net_tx"
|
||||
visualization = "none"
|
||||
show_value = true
|
||||
|
||||
[widget.gpu]
|
||||
type = "sysmon"
|
||||
stat = "gpu_usage"
|
||||
@@ -94,7 +106,26 @@ width = 880
|
||||
# GPU polling is disabled by Noctalia by default; enable it for the RTX 3090 widgets.
|
||||
gpu_poll_seconds = 2.0
|
||||
|
||||
# The desktop's Hypridle listener provides a five-minute input-dismissable black
|
||||
# OLED overlay. Keep Noctalia from issuing a competing DPMS screen-off action.
|
||||
# Hypridle provides the five-minute input-dismissable black OLED overlay.
|
||||
# On this desktop, Noctalia's only enabled idle action is plain suspend after
|
||||
# thirty minutes; do not lock or transition into hibernation automatically.
|
||||
[idle]
|
||||
behavior_order = ["suspend"]
|
||||
|
||||
[idle.behavior.lock]
|
||||
enabled = false
|
||||
|
||||
[idle.behavior.screen-off]
|
||||
enabled = false
|
||||
|
||||
[idle.behavior.suspend-then-hibernate]
|
||||
enabled = false
|
||||
|
||||
[idle.behavior.suspend]
|
||||
action = "suspend"
|
||||
enabled = true
|
||||
timeout = 1800
|
||||
lock_before_suspend = false
|
||||
|
||||
[lockscreen]
|
||||
lock_before_suspend = false
|
||||
|
||||
@@ -2,6 +2,13 @@
|
||||
-- Noctalia replaces the i3-era Redshift, Polybar, Blueman Applet, and Picom stack.
|
||||
return {
|
||||
is_laptop = true,
|
||||
-- Use the colon-free user-config alias for the stable PCI path rather than
|
||||
-- cardN, whose numbering can change between boots. AQ_DRM_DEVICES itself
|
||||
-- uses colons as device separators. This keeps Hyprland off the NVIDIA dGPU
|
||||
-- so it can enter Runtime D3 when no application is explicitly offloaded.
|
||||
environment = {
|
||||
AQ_DRM_DEVICES = os.getenv("HOME") .. "/.config/hypr/intel-drm",
|
||||
},
|
||||
input = {
|
||||
touchpad = {
|
||||
-- Standard laptop behavior: one/two/three-finger taps map to
|
||||
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env sh
|
||||
# Repository-local Decman interface; avoids changing the system `decman` command.
|
||||
exec "$(dirname "$0")/scripts/decman_cli.py" "$@"
|
||||
@@ -30,11 +30,13 @@ class UserConfigConcern(decman.Module):
|
||||
name: str,
|
||||
files: dict[str, str | tuple[str, int]] | None = None,
|
||||
directories: dict[str, str] | None = None,
|
||||
symlinks: dict[str, str] | None = None,
|
||||
user: str = "alex",
|
||||
) -> None:
|
||||
super().__init__(f"user:{name}")
|
||||
self._files = files or {}
|
||||
self._directories = directories or {}
|
||||
self._symlinks = symlinks or {}
|
||||
self.user = user
|
||||
|
||||
def files(self) -> dict[str, decman.File]:
|
||||
@@ -60,6 +62,12 @@ class UserConfigConcern(decman.Module):
|
||||
for target, source in self._directories.items()
|
||||
}
|
||||
|
||||
def symlinks(self) -> dict[str, str | decman.Symlink]:
|
||||
return {
|
||||
link_name: decman.Symlink(target=target, owner=self.user)
|
||||
for link_name, target in self._symlinks.items()
|
||||
}
|
||||
|
||||
|
||||
class SystemConcern(decman.Module):
|
||||
"""One host/system concern with explicit files and unit manifests."""
|
||||
@@ -119,6 +127,8 @@ def common_user_config() -> list[UserConfigConcern]:
|
||||
"/home/alex/.config/kitty/kitty.conf": "config/user/common/kitty/kitty.conf",
|
||||
"/home/alex/.config/mimeapps.list": "config/user/common/mime/mimeapps.list",
|
||||
"/home/alex/.config/noctalia/10-base.toml": "config/user/common/noctalia/10-base.toml",
|
||||
"/home/alex/.config/rofi/breeze-dark.rasi": "config/user/common/rofi/breeze-dark.rasi",
|
||||
"/home/alex/.config/rofi/config.rasi": "config/user/common/rofi/config.rasi",
|
||||
"/home/alex/.config/noctalia/palettes/Ember OLED.json": (
|
||||
"config/user/common/noctalia/palettes/Ember OLED.json"
|
||||
),
|
||||
@@ -175,6 +185,11 @@ def laptop_user_config() -> list[UserConfigConcern]:
|
||||
"config/user/laptop/noctalia/99-extend.toml"
|
||||
),
|
||||
},
|
||||
symlinks={
|
||||
"/home/alex/.config/hypr/intel-drm": (
|
||||
"/dev/dri/by-path/pci-0000:00:02.0-card"
|
||||
),
|
||||
},
|
||||
)
|
||||
]
|
||||
|
||||
@@ -240,6 +255,8 @@ def laptop_system() -> list[SystemConcern | UserConfigConcern]:
|
||||
"/etc/keyd/default.conf": "config/system/common/keyd.conf",
|
||||
"/etc/NetworkManager/conf.d/wifi-powersave.conf": "config/system/laptop/wifi-powersave.conf",
|
||||
"/etc/modprobe.d/iwlwifi.conf": "config/system/laptop/iwlwifi.conf",
|
||||
"/etc/modprobe.d/nvidia-runtime-pm.conf": "config/system/laptop/modprobe.d/nvidia-runtime-pm.conf",
|
||||
"/etc/udev/rules.d/80-nvidia-runtime-pm.rules": "config/system/laptop/udev/80-nvidia-runtime-pm.rules",
|
||||
"/etc/X11/xorg.conf.d/30-touchpad.conf": "config/system/laptop/touchpad.conf",
|
||||
"/etc/tlp.conf": "config/system/laptop/power/tlp.conf",
|
||||
"/etc/systemd/sleep.conf.d/90-laptop.conf": "config/system/laptop/sleep.conf.d/90-laptop.conf",
|
||||
@@ -278,6 +295,12 @@ def desktop_system() -> list[SystemConcern | UserConfigConcern]:
|
||||
"config/system/desktop/network/NetworkManager.conf"
|
||||
),
|
||||
"/etc/sddm.conf.d/10-theme.conf": "config/system/desktop/sddm/10-theme.conf",
|
||||
"/usr/share/sddm/themes/noctalia/Assets/ember-oled-background.svg": (
|
||||
"config/system/desktop/sddm/ember-oled-background.svg"
|
||||
),
|
||||
"/usr/share/sddm/themes/noctalia/theme.conf.user": (
|
||||
"config/system/desktop/sddm/theme.conf.user"
|
||||
),
|
||||
"/etc/udev/rules.d/50-zsa.rules": "config/system/desktop/input/50-zsa.rules",
|
||||
},
|
||||
system_manifests=("desktop/hardware-system.txt",),
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
"""Declarative global npm command packages for Decman profiles."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import shutil
|
||||
|
||||
import decman
|
||||
import decman.core.error as errors
|
||||
import decman.core.module as module
|
||||
import decman.core.output as output
|
||||
import decman.core.store as store_module
|
||||
from decman import Plugin
|
||||
from decman.plugins import run_methods_with_attribute
|
||||
|
||||
|
||||
def packages(fn):
|
||||
"""Annotate a method that returns globally installed npm package names."""
|
||||
fn.__npm_packages__ = True
|
||||
return fn
|
||||
|
||||
|
||||
class Npm(Plugin):
|
||||
"""Install declared global npm packages without pruning unrelated packages."""
|
||||
|
||||
NAME = "npm"
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.packages: set[str] = set()
|
||||
|
||||
def process_modules(
|
||||
self, store: store_module.Store, modules: list[module.Module]
|
||||
) -> None:
|
||||
store.ensure("npm_packages_for_module", {})
|
||||
|
||||
for mod in modules:
|
||||
store["npm_packages_for_module"].setdefault(mod.name, set())
|
||||
declared = set().union(
|
||||
*run_methods_with_attribute(mod, "__npm_packages__")
|
||||
)
|
||||
|
||||
if store["npm_packages_for_module"][mod.name] != declared:
|
||||
mod._changed = True
|
||||
output.print_debug(
|
||||
f"Module '{mod.name}' changed due to modified global npm packages."
|
||||
)
|
||||
|
||||
self.packages |= declared
|
||||
store["npm_packages_for_module"][mod.name] = declared
|
||||
|
||||
def apply(
|
||||
self,
|
||||
store: store_module.Store,
|
||||
dry_run: bool = False,
|
||||
params: list[str] | None = None,
|
||||
) -> bool:
|
||||
if not self.packages:
|
||||
return True
|
||||
|
||||
if shutil.which("npm") is None:
|
||||
if dry_run:
|
||||
output.print_list(
|
||||
"Installing global npm packages after npm becomes available:",
|
||||
sorted(self.packages),
|
||||
)
|
||||
return True
|
||||
output.print_error("npm is unavailable after the pacman step.")
|
||||
return False
|
||||
|
||||
try:
|
||||
installed = self._installed_packages()
|
||||
to_install = self.packages - installed
|
||||
output.print_list("Installing global npm packages:", sorted(to_install))
|
||||
if to_install and not dry_run:
|
||||
decman.prg(
|
||||
[
|
||||
"npm",
|
||||
"install",
|
||||
"--global",
|
||||
"--no-audit",
|
||||
"--no-fund",
|
||||
*sorted(to_install),
|
||||
]
|
||||
)
|
||||
except (errors.CommandFailedError, ValueError) as error:
|
||||
output.print_error(f"Managing global npm packages failed: {error}")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
@staticmethod
|
||||
def _installed_packages() -> set[str]:
|
||||
raw = decman.prg(
|
||||
["npm", "list", "--global", "--depth=0", "--json"], pty=False
|
||||
)
|
||||
try:
|
||||
result = json.loads(raw)
|
||||
except json.JSONDecodeError as error:
|
||||
raise ValueError("npm returned invalid JSON") from error
|
||||
dependencies = result.get("dependencies", {})
|
||||
if not isinstance(dependencies, dict):
|
||||
raise ValueError("npm dependencies must be an object")
|
||||
return set(dependencies)
|
||||
@@ -7,6 +7,8 @@ from pathlib import Path
|
||||
import decman
|
||||
from decman.plugins import aur, pacman
|
||||
|
||||
from modules import npm_packages
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
PACKAGES = ROOT / "packages"
|
||||
|
||||
@@ -34,6 +36,11 @@ class PackageConcern(decman.Module):
|
||||
def aur_packages(self) -> set[str]:
|
||||
return _names(PACKAGES / f"{self.concern}-aur.txt")
|
||||
|
||||
@npm_packages.packages
|
||||
def global_npm_packages(self) -> set[str]:
|
||||
path = PACKAGES / f"{self.concern}-npm.txt"
|
||||
return _names(path) if path.exists() else set()
|
||||
|
||||
|
||||
def configure_no_removal_guard() -> None:
|
||||
"""Keep Decman from pruning current dependency-orphans during adoption."""
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# Package lists
|
||||
|
||||
Each concern owns package names exactly once:
|
||||
Each concern owns package names exactly once. Native, AUR, and global npm
|
||||
packages use `*-repo.txt`, `*-aur.txt`, and optional `*-npm.txt` files:
|
||||
|
||||
- `common/` is portable workstation functionality.
|
||||
- `laptop/` is hardware and power support for this laptop.
|
||||
@@ -8,4 +9,6 @@ Each concern owns package names exactly once:
|
||||
- `ignored/` contains dependency packages Decman must not prune during adoption.
|
||||
|
||||
A host composes concerns in `../hosts.py`. Add a package to the narrowest
|
||||
concern that explains why it exists, then run `../scripts/verify.py`.
|
||||
concern that explains why it exists, then run `../scripts/verify.py`. The npm
|
||||
plugin installs missing declared command packages globally after the pacman and
|
||||
AUR steps; it does not remove unrelated global npm packages.
|
||||
|
||||
@@ -30,6 +30,7 @@ refind
|
||||
ripgrep
|
||||
rsync
|
||||
starship
|
||||
trash-cli
|
||||
unzip
|
||||
yadm
|
||||
zellij
|
||||
|
||||
@@ -2,6 +2,7 @@ decman
|
||||
engram-bin
|
||||
gti
|
||||
mongodb-compass-bin
|
||||
onorca-bin
|
||||
pi
|
||||
postman-bin
|
||||
vagrant
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
@hypabolic/hypa
|
||||
@@ -1 +1 @@
|
||||
|
||||
sddm-theme-noctalia-git
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user